【发布时间】:2017-03-19 20:42:57
【问题描述】:
关于如何使用 vagrant provision 安装 golang 或如何设置 $GOPATH 环境变量以使其在启动时可用。
然而,这个问题是关于如何设置 $GOPATH 等,以便变量在配置脚本的后续步骤中可用(关于 golang 的所有其他重要内容都已就位对于这个问题)。我正在使用 ubuntu 映像。
具体来说,我想在my_provision.sh中运行这些步骤:
go get github.com/saymedia/terraform-s3-dirgo install github.com/saymedia/terraform-s3-dir
这样当我在vagrant ssh 之后运行以下命令时,它将正常工作:
terraform-s3-dir
当 go get/install 命令在 my_provision.sh 中运行时,它会输出以下两种情况之一:静默,或抱怨未设置 GOPATH 变量。无论哪种方式,当我启动时,terraform-s3-dir 不是一个可识别的命令。
我尝试过以几种不同的方式设置GOPATH、GOROOT 和PATH 变量:
直接在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