只需 shell 在线配置

simple shell inline provisionning

我怎样才能简单地在 virtualbox-iso Ubuntu 和 shell 内联配置的打包程序模板中安装 apache2 包?

我正在测试这个模板:

{
"builders": [{
    "boot_command": [
        "<esc><wait>",
        "<esc><wait>",
        "<enter><wait>",
        "/install/vmlinuz<wait>",
        " auto<wait>",
        " console-setup/ask_detect=false<wait>",
        " console-setup/layoutcode=fr<wait>",
        " console-setup/modelcode=pc105<wait>",
        " debconf/frontend=noninteractive<wait>",
        " debian-installer=fr_FR<wait>",
        " fb=false<wait>",
        " initrd=/install/initrd.gz<wait>",
        " kbd-chooser/method=fr<wait>",
        " keyboard-configuration/layout=fr<wait>",
        " keyboard-configuration/variant=fr<wait>",
        " locale=fr_FR<wait>",
        " netcfg/get_domain=vm<wait>",
        " netcfg/get_hostname=vagrant<wait>",
        " noapic<wait>",
        " preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg<wait>",
        " -- <wait>",
        "<enter><wait>"
    ],
    "boot_wait": "20s",
    "disk_size": 20480,
    "guest_additions_path": "VBoxGuestAdditions_{{.Version}}.iso",
    "guest_os_type": "Ubuntu_64",
    "http_directory": "http",
    "headless": false,
    "iso_checksum": "0501c446929f713eb162ae2088d8dc8b6426224a",
    "iso_checksum_type": "sha1",
    "iso_url": "http://mirrors.mit.edu/ubuntu-releases/trusty/ubuntu-14.04.3-server-amd64.iso",
    "output_directory": "packer-ubuntu-14.04-amd64-virtualbox",
    "shutdown_command": "echo 'vagrant'|sudo -S shutdown -P now",
    "ssh_username": "vagrant",
    "ssh_password": "vagrant",
    "ssh_port": 22,
    "ssh_wait_timeout": "10000s",
    "type": "virtualbox-iso",
    "vboxmanage": [
        [
            "modifyvm",
            "{{.Name}}",
            "--memory",
            "1024"
        ],
        [
            "modifyvm",
            "{{.Name}}",
            "--cpus",
            "1"
        ]
    ],
    "virtualbox_version_file": ".vbox_version",
    "vm_name": "packer-ubuntu-14.04-amd64"
}],
"post-processors": [{
    "output": "builds/ubuntu-14.04.box",
    "type": "vagrant"
}],
"provisioners": [
    {
        "type": "shell",
        "execute_command": "echo '{{user `ssh_pass`}}' | {{ .Vars }} sudo -E -S sh '{{ .Path }}'",
        "inline": [
            "echo '%sudo    ALL=(ALL)  NOPASSWD:ALL' >> /etc/sudoers",
            "sudo apt-get install -y apache2"
        ]
    }
]

}

测试配置的结果是:

==> virtualbox-iso: Provisioning with shell script: C:\Users\toto\AppData\Local\Temp\packer-shell178737243
virtualbox-iso: [sudo] password for vagrant: Sorry, try again.
virtualbox-iso: [sudo] password for vagrant:
virtualbox-iso: sudo: 1 incorrect password attempt

构建 Vagrant 的第一步似乎与 preseed.cfg 文件有关。但是这个问题在开始供应流浪者时就​​出现了。

在 packer 和 vagrant 系统中使用具有良好管理权限的内联配置的技巧是什么 Ubuntu ?

技术背景

PS :我的模板已通过 packer validate

验证

这种情况下的问题是 ssh_pass 用户变量从未在您的 Packer 模板中设置。有两种解决方案。最简单的选择是修改 shell 配置器中的 execute_command 设置,并从构建器硬编码 ssh 密码...

"execute_command": "echo 'vagrant' | {{ .Vars }} sudo -E -S sh '{{ .Path }}'",

更优雅的解决方案是在 Packer 模板顶部的 builders 块之前添加一个 variables 块,并使用它来设置 ssh 用户名和密码...

"variables": {
    "ssh_user": "vagrant",
    "ssh_pass": "vagrant"
},

这将修复 shell 配置器中现有的 execute_command,您也可以像这样在构建器中使用这些变量...

"shutdown_command": "echo '{{user `ssh_pass`}}' | sudo -S shutdown -P now",
"ssh_username": "{{user `ssh_user`}}",
"ssh_password": "{{user `ssh_pass`}}",

这样您就可以在 Packer 模板的一个地方定义您的 ssh 凭据。