gpt4 book ai didi

Packer - build 者的 sudo/su 条件

转载 作者:行者123 更新时间:2023-12-04 03:17:04 25 4
gpt4 key购买 nike

我刚开始使用 Packer,想要构建 AMI 和 Docker 镜像。

问题是 - Docker 的 Ubuntu 镜像没有 sudo ,因此 - 构建失败并出现错误:

docker: /tmp/script_2085.sh: 3: /tmp/script_2085.sh: sudo: not found



有什么办法可以为 shell 添加一些“条件”?使用或不使用 sudo 运行 cmds 的配置器, 取决于 builder ?

目前 - 我的模板有:
  ...
"provisioners": [{
"type": "shell",
"inline": [
"sleep 30",
"sudo apt-get update",
"sudo apt-get install -y nginx"
]
}]
...

添加如下内容:
if which sudo; then sudo apt-get update && sudo apt-get install -y nginx; else apt-get update && apt-get install -y nginx; fi

看起来太奇怪的解决方案......我敢肯定 - Packer 有能力以更好的方式做到这一点。

最佳答案

为什么不直接安装 sudo在码头箱。
您可以通过以下两种方式之一执行此操作:

运行脚本安装 sudo , only在你的 docker 镜像上
您可以使用 only要安装的配置器中的参数 sudo在图像上:

...
"provisioners": [{
"type": "shell",
"inline": [
"apt-get install sudo"
],
"only": ["docker"]
},
... other provisioners here ...
]
...
打包机文档中的更多信息, here ,在“在特定版本上运行”下。

在配置脚本的开头安装 sudo
在第一个配置脚本的开头,添加安装命令 sudo如果尚未安装。使用以下内容(取自 here ):
dpkg -l | grep -qw sudo || apt-get install sudo
检查已安装软件包的列表,如果 sudo 不存在则安装。

就我个人而言,我倾向于采用第一个选项,因为它明确指出只能在某些盒子上进行某些操作。没有混淆的余地。
离别笔记
  • 请记住,您的配置程序将按照您在打包程序文件中定义的顺序运行。所以一定要安装 sudo在第一个。
  • 您可能还需要运行 apt-get update在您进行安装之前。
  • 关于Packer - build 者的 sudo/su 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40132475/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com