当前位置: 首页 > news >正文

Windows环境下 Go项目迁移至Ubuntu(WSL) 以部署filebeat为例

1、先在Ubuntu操作系统下,配置go语言环境【需要go build ,当然如果你是打算在外界编译成可执行文件,然后丢到wsl,可以不要配置go环境】

配置go流程如下:【注意,如果有旧版本,记得先删除,否则后面项目运行不起来】

报错

 Load redeclared in this block

①先拉包 :wget  https://golang.google.cn/dl/go1.24.2.linux-amd64.tar.gz 
中间的版本,可以随意更改,go.mod用的是1.24.2

②然后再解压:tar -xvzf go1.24.2.linux-amd64.tar.gz -C /usr/local/

③配置环境变量:

        编辑用户的bashrc文件
        nano ~/.bashrc

        文件末尾加这三行
        export GOROOT=/usr/local/go
        export GOPATH=$HOME/go
        export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

        刷新
        source ~/.bashrc

配置go env 【一般开启Module模式和更改proxy 】
默认官方直链,没梯子很慢。可以更换cn站点

go env -w GO111MODULE=on

go env -w GOPROXY=https://goproxy.cn,direct

2、完成以上操作go 可以正常使用了,我们切到项目下,直接go build 命令,自动帮我们下载依赖
当然,如果想更改版本,可以:go get package@version 指定版本

比如我在项目中需要更改filebeat的版本: go get github.com/elastic/beats/v7@v7.17.29 

更改后,记得go mod tidy ,否则项目编译会报错
还有当你把go.mod文件删除后,重新go mod init + ModuleName ,也是需要go mod tidy的,否在会报错【当然,如果你go mod tidy 了还报错,就需要检查你当前路径是否在GOPATH下,如果在的话可以切换GOPATH路径,或者退出GOPATH路径,这也是Module模式和GOPATH模式的区别】

报错:
cannot determine module path for source directory

3、项目编译 :go build -o filebeat . 【-o 指定编译后的文件名称】

生成可执行文件后,还不能立即使用【这个时候只是普通文件】,我们还需要更改操作权限:
chmod 777 文件名

4、项目运行:当文件变成可执行文件后,通过命令 ./filebeat -e -c filebeat.yml执行程序

如果你的整个源码是通过从windows拖过来的,你的文件的拥有者可能只是普通用户,这个时候如果你是root用户,想执行这个可执行文件,可能会报错:

报错:error loading config file: config file ("filebeat.yml") must be owned by the user identifier (uid=0) or root

通过ll 可以查看当前路径下的文件的拥有者,如果不是现在本人,通过命令:
chown -R root:root 文件路径 【-R 表示递归 冒号前后表示用户以及用户组】

最后我还碰到一个报错:

runtime/cgo: pthread_create failed: Operation not permitted

SIGABRT: abort

通过查阅大量文档,最后解决方案是,提升filebeat的版本,通过我上面将的 go get 提升到了7.17.29解决问题。

http://www.dtcms.com/a/296991.html

相关文章:

  • 【数组的定义与使用】
  • 保障工业核心命脉:深度解读工业交换机QoS的“智能流量治理”之道
  • CMake ARGV变量使用指南
  • Python桌面版数独(五版)-优化选择模式触发新棋盘生成
  • OSPF 实验
  • RuoYi-Vue 项目 Docker 全流程部署实战教程
  • 中国、美国、欧盟、日本、英国临床试验API数据接口
  • Ⅹ—6.计算机二级综合题7---10套
  • Mac系统机能连接操控别的平台设备吗?能被远程操作吗?
  • Nginx快速入门及案例
  • 【安卓笔记】解决livedata粘性事件
  • 《Java语言程序设计》第2章复习题(2)
  • RePlugin 坑位使用原理与指南
  • 多源信息融合智能投资【“图神经网络+强化学习“的融合架构】【低配显卡正常运行】
  • 模拟退火算法 (Simulated Annealing, SA)简介
  • JavaWeb学习打卡14(JSP内置对象及作用域)
  • ARM汇编常见伪指令及其用法示例
  • IntelliJ IDEA中管理多版本Git子模块的完整指南
  • 智慧工厂网络升级:新型 SD-WAN 技术架构与应用解析
  • 商场导航软件:3D+AI 基于Deepseek 模型的意图识别技术解析
  • BacNet 是什么?跟 LoRaWAN 的关系是什么?
  • 将JS字节流转化为对象
  • 西安交通大学XJTU 通信/信息工程大三和部分大四 实验和课程答案
  • C++哪些运算符不能被重载?
  • kubernetes集群中部署CoreDNS服务
  • day46day47 通道注意力
  • 一种基于单片机控制的太阳能电池板系统设计
  • 集训Demo6
  • 挖掘录屏宝藏:Screenity 深度解析与使用指南
  • 《计算机网络》实验报告八 加密、数字签名与证书