如何在流浪汉提供过程中安装golang包?

时间:2017-03-19 20:42:57

标签: ubuntu go vagrant provisioning vagrant-provision

关于如何使用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不是可识别的命令。

我尝试过几种不同的方式设置GOPATHGOROOTPATH变量:

直接在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命令在前者中获得所需的结果,而不是后者?

1 个答案:

答案 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"

在此之后,GOPATHgo get正确选取了go install