关于如何使用vagrant配置安装golang或如何设置$GOPATH
环境变量有类似的问题,以便它可以在启动时使用。
但是,这个问题是关于如何设置$GOPATH
等,以便在配置脚本的后续步骤中变量可用(关于golang的所有其他重要信息都在 - 就此而言)。我正在使用ubuntu图像。
具体来说,我想在my_provision.sh
:
go get github.com/saymedia/terraform-s3-dir
go install 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未设置”。
在my_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命令在前者中获得所需的结果,而不是后者?
答案 0 :(得分:0)
我遇到的问题是,在配置脚本的上下文中,$HOME
引用了/root/
文件夹,而不是/home/ubuntu/
如果您希望稍后在配置脚本中使用这些变量,那么在配置期间设置环境变量时,不要依赖$HOME
变量。
这是我的解决方案(来自VagrantFile
)
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"
在此之后,GOPATH
和go get
正确选取了go install