Ubuntu 如何在流浪期间安装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

关于如何使用vagrant provision安装golang,或者如何设置
$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"