Packer - 建筑商的sudo / su条件

时间:2016-10-19 13:15:09

标签: packer

我刚开始使用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有能力以更好的方式做到这一点。

1 个答案:

答案 0 :(得分:1)

为什么不在docker框中安装sudo? 您可以通过以下两种方式之一完成此任务:

运行脚本以在您的泊坞窗图片上安装sudoonly

您可以使用配置程序中的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