Packer 安装

来自 Alpine Linux

基本理解

Alpine Linux 安装程序只是一堆 shell 脚本,请参阅 setup-alpine.inalpine-conf 仓库中。理解这一点是成功的关键。

packer 示例 boot_command

这是来自 QEMU 构建器的 'boot_command' 的一部分。

"boot_command": [
  "root<enter><wait>",
  "ifconfig eth0 up && udhcpc -i eth0<enter><wait5>",
  "wget http://{{ .HTTPIP }}:{{ .HTTPPort }}/answers<enter><wait>",
  "setup-alpine -f answers<enter><wait5>",
  "{{user `ssh_password`}}<enter><wait>",
  "{{user `ssh_password`}}<enter><wait5>",
  "<wait>y<enter><wait10>",
  "rc-service sshd stop<enter>",
  "mount /dev/sda3 /mnt<enter>",
  "echo 'PermitRootLogin yes' >> /mnt/etc/ssh/sshd_config<enter>",
  "umount /mnt<enter>",
  "reboot<enter>"
],

它的作用是模拟人类在“控制台”(VNC)中输入。在运行 Alpine Linux 安装程序(即 'setup-alpine')之前,它会:

  • 以 'root' 身份登录(安装介质不需要密码)
  • 通过 DHCP 配置第一个网络接口
  • 从 'packer' 内置 HTTP 服务器获取 'answers' 文件,以便能够开始自动化安装
  • 运行带有 'answers' 文件的 Alpine Linux 'setup-alpine' 安装程序脚本
  • 由于 'setup-alpine' 脚本要求配置 root 密码,它就执行此操作
  • 之后,您可以运行任何您想要的命令,但请记住,它仍然是安装介质;您可以“重启”到已安装的系统并运行 'provisioners'。

'answer' 文件可能如下所示

KEYMAPOPTS="us us"
HOSTNAMEOPTS="-n alpine"
INTERFACESOPTS="auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
"
DNSOPTS="-n 8.8.8.8"
TIMEZONEOPTS="-z UTC"
PROXYOPTS="none"
APKREPOSOPTS="-1"
SSHDOPTS="-c openssh"
NTPOPTS="-c openntpd"
DISKOPTS="-L -m sys /dev/vda"

packer 示例 provisioners

"provisioners": [
  {
    "type": "shell",
    "scripts": [
      "{{ template_dir }}/../scripts/00_alpinelinux_base.sh",
      "{{ template_dir }}/../scripts/99_alpinelinux_base.sh"
    ]
  }
],