Ubuntu 如何在流浪期间安装golang软件包?
关于如何使用vagrant provision安装golang,或者如何设置Ubuntu 如何在流浪期间安装golang软件包?,ubuntu,go,vagrant,provisioning,vagrant-provision,Ubuntu,Go,Vagrant,Provisioning,Vagrant Provision,关于如何使用vagrant provision安装golang,或者如何设置$GOPATH环境变量,使其在引导时可用,也存在类似的问题 但是,这个问题是关于如何设置$GOPATH等,以使变量在设置脚本的后续步骤中可用(关于golang的所有其他重要内容都已准备就绪)。我使用的是ubuntu图像 具体来说,我想在my_provision.sh中运行以下步骤: 获取github.com/saymedia/terraform-s3-dir 去安装github.com/saymedia/terrafor
$GOPATH
环境变量,使其在引导时可用,也存在类似的问题
但是,这个问题是关于如何设置$GOPATH
等,以使变量在设置脚本的后续步骤中可用(关于golang的所有其他重要内容都已准备就绪)。我使用的是ubuntu图像
具体来说,我想在my_provision.sh
中运行以下步骤:
获取github.com/saymedia/terraform-s3-dir
去安装github.com/saymedia/terraform-s3-dir
这样,当我在vagrant ssh
之后运行以下命令时,它将正常工作:
terraform-s3-dir
当go get/install命令在my_provision.sh
中运行时,它会输出以下两种情况之一:静默,或抱怨未设置GOPATH
var。无论哪种方式,当我启动时,terraform-s3-dir
都不是可识别的命令
我尝试过以几种不同的方式设置GOPATH
、GOROOT
和PATH
变量:
直接在my_provision.sh
中设置它们(带和不带export
),将导出命令回显到.bashrc中。将导出命令回显到/etc/profile.d/gopath.sh。所有这些都会导致“$GOPATH not set”
在my\u provision.sh
之前,在内联资源调配脚本中运行导出。这导致了静默失败,除非我尝试使用sudo运行go-get/install命令,在这种情况下,它也有$GOPATH
错误
如果我在go get/install命令之前立即回显my_provision.sh
中的GOPATH变量,则变量显示它们已按预期设置
如果我在vagrant ssh
之后从shell手动运行go-get/install命令,那么它将成功安装
vagrant ssh
上下文与设置脚本上下文有什么不同,go-get/install命令在前者中获得所需的结果,但在后者中没有?我遇到的问题是,在设置脚本的上下文中,$HOME
指的是/root/
文件夹,而不是/home/ubuntu/
如果您希望稍后在配置脚本中使用这些变量,那么在配置期间设置环境变量时,不依赖$HOME
变量是值得的
这是我的解决方案(来自VagrantFile
)
config.vm.provision“shell”,内联:>/etc/profile.d/gopath.sh
echo'export GOPATH=/home/ubuntu/go'>>/etc/profile.d/GOPATH.sh
echo'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin'>>/etc/profile.d/GOPATH.sh
壳
devbox.vm.provision“shell”,路径:“scripts/my_provision.sh”
在此之后,
go-get
和go-install
如何在my_provision.sh
中设置这些路径?您是否导出它们.bashrc
除非您显式地source
它才会工作(因为它只在新的bash shell启动时运行)@zerkms更新了一个问题来回答这个问题,如果您导出脚本中运行其他go
命令的变量,那么这些变量必须能够看到它们。(在这里它可以正常工作)
config.vm.provision "shell", inline: <<-SHELL
echo -n > /etc/profile.d/gopath.sh
echo 'export GOROOT=/usr/lib/go' >> /etc/profile.d/gopath.sh
echo 'export GOPATH=/home/ubuntu/go' >> /etc/profile.d/gopath.sh
echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> /etc/profile.d/gopath.sh
SHELL
devbox.vm.provision "shell", path: "scripts/my_provision.sh"