【问题标题】:How to install a golang package during vagrant provision?如何在 vagrant 提供期间安装 golang 包?
【发布时间】:2017-03-19 20:42:57
【问题描述】:

关于如何使用 vagrant provision 安装 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 变量。无论哪种方式,当我启动时,terraform-s3-dir 不是一个可识别的命令。

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

直接在my_provision.sh 中设置它们(有和没有export),将导出命令回显到.bashrc。将导出命令回显到 /etc/profile.d/gopath.sh。这些都会导致“$GOPATH not set”。

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 命令在前者中获得所需的结果,但在后者中没有?

【问题讨论】:

  • 如何在my_provision.sh 中设置它们?你export他们吗? .bashrc 不会工作,除非你明确地 source 它(因为它只在新的 bash shell 启动时运行)
  • @zerkms 更新问题来回答这个问题
  • 如果你 export 脚本中的一个变量运行其他 go 命令 - 那些完全必须能够看到它们。 (它在这里没有问题)

标签: ubuntu go vagrant provisioning vagrant-provision


【解决方案1】:

我遇到的问题是,在配置脚本的上下文中,$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 getgo install 正确拾取

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多