2016-01-10 2 views
2

Как я могу просто установить пакет apache2 в шаблон упаковщика для виртуального ботинка Ubuntu и встроенного обеспечения оболочки?простая оболочка встроенного резервного копирования

Я проверяю этот шаблон:

{ 
"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" 
     ] 
    } 
] 

}

Этот результат тест provisionning является:

==> 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, кажется, хорошо с автоматизируемой. cfg-файл. Но эта проблема возникла, когда начался запасной бродяга.

Что такое трюк для использования встроенного обеспечения с хорошим правом для администрирования в пакеров и бродячих системах Ubuntu?

технический контекст

  • ОС хоста: Windows 7 Pro
  • OS Гость: Ubuntu 14.04 LTS
  • технология VM: VirtualBox 5.0.10 + Vagrant 1.7.4
  • В.М. инструмент строительный: Упаковщик 0.8.6

PS: Мой шаблон валирован по packer validate

+0

Если вы используете оболочку bash, вы можете попытаться заменить 'sh' на' bash' в вашем заявлении команды выполнения –

+0

хорошей идеей, но результат тот же. – darkomen

ответ

2

Проблема в этом случае заключается в том, что пользовательская переменная ssh_pass никогда не устанавливается в вашем шаблоне упаковщика. Для этого есть два решения. Самый простой вариант будет изменить ваши настройки execute_command в Provisioner оболочки и жесткой коде пароля от вашего строителя ...

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

более элегантное решения было бы добавить variables блок перед builders блоком в верхняя часть шаблона Пакер и использовать, чтобы задать имя пользователя и пароль SSH ...

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

Это было бы исправить существующую execute_command в Provisioner оболочки, и вы также можете использовать эти переменные в построителе как так ...

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

Таким образом, вы определяете свои учетные данные ssh в одном месте в своем шаблоне Packer.

+0

На данный момент я просто пытаюсь запустить первое решение, которое работает правильно. Спасибо, Патрик Ли. Я проголосую за ваш ответ, когда я попробую ваше второе решение сегодня вечером. – darkomen

+0

Для второго решения сборка выполняется правильно, но невозможно подключиться к виртуальной машине, но я задаю еще один вопрос. @Patrick Lee: спасибо, что увидели позже ... – darkomen

+0

Вы также должны убедиться, что скрипт 'vagrant.sh' запущен, потому что он разрешает sudo без пароля внутри виртуальной машины, запрос подсказки для sudo-шоу не произошел (вероятно, из-за ошибки, упомянутой в этом ответе). – dragon788

Смежные вопросы