configuration simplifiée en ligne

Comment puis-je simplement installer le paquet apache2 dans un modèle de packer pour virtualbox-iso Ubuntu et le provisionnement en ligne du shell?

Je teste ce modèle:

{ "builders": [{ "boot_command": [ "", "", "", "/install/vmlinuz", " auto", " console-setup/ask_detect=false", " console-setup/layoutcode=fr", " console-setup/modelcode=pc105", " debconf/frontend=noninteractive", " debian-installer=fr_FR", " fb=false", " initrd=/install/initrd.gz", " kbd-chooser/method=fr", " keyboard-configuration/layout=fr", " keyboard-configuration/variant=fr", " locale=fr_FR", " netcfg/get_domain=vm", " netcfg/get_hostname=vagrant", " noapic", " preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg", " -- ", "" ], "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" ] } ] 

}

Ce résultat de test provisionnement est:

 ==> 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 

La première étape de la construction de Vagrant semble être bonne avec le fichier preseed.cfg. Mais ce problème est arrivé quand commencer le vagrant provisoire.

Quelle est l’astuce pour utiliser un approvisionnement en ligne avec un bon droit pour l’administration dans le système emballeur et vagrant Ubuntu?

contexte technique

  • Hôte OS: Windows 7 Pro
  • Guest OS: Ubuntu 14.04 LTS
  • Technologie VM: VirtualBox 5.0.10 + Vagrant 1.7.4
  • Générateur d’outils VM: Packer 0.8.6

PS: mon template est validé par le packer validate

Le problème dans ce cas est que la variable utilisateur ssh_pass n’est jamais définie dans votre modèle Packer. Il y a deux solutions à cela. L’option la plus simple serait de modifier le paramètre execute_command dans le shell provisioner et le code dur du mot de passe ssh de votre constructeur …

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

La solution la plus élégante serait d’append un bloc de variables avant le blocage des builders en haut de votre modèle Packer et de l’utiliser pour définir le nom d’utilisateur et le mot de passe ssh …

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

Cela corrigerait votre commande execute_command existante dans le shell provisioner et vous pourriez aussi utiliser ces variables dans le générateur comme ceci …

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

De cette façon, vous définiriez vos informations d’identification SSH en un seul endroit dans votre modèle Packer.