私はPackerを使用してUbuntu14.04用のVirtualBoxイメージを構築しています。私はPackerスクリプトを持っています ここ 、これは以前は機能していましたが、何らかの理由で(そして後でいくつかのVirtualBoxの更新が)失敗し始めました。インストールは、「ソフトウェアの選択とインストール」の手順でスタックし続けます。
-debug
オプションを使用してスクリプトを実行すると、Packer自体から有用な情報が得られません。
~/Projects/src/github.com/yunojuno/trifecta/packer(master)$ SSH_USERNAME=vagrant SSH_PASSWORD=vagrant packer build -debug template.json
Debug mode enabled. Builds will not be parallelized.
virtualbox-iso output will be in this color.
==> virtualbox-iso: Downloading or copying Guest additions
virtualbox-iso: Downloading or copying: file:///Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso
==> virtualbox-iso: Pausing after run of step 'StepDownloadGuestAdditions'. Press enter to continue.
==> virtualbox-iso: Downloading or copying ISO
virtualbox-iso: Downloading or copying: http://releases.ubuntu.com/14.04/ubuntu-14.04.3-server-AMD64.iso
==> virtualbox-iso: Pausing after run of step 'StepDownload'. Press enter to continue.
==> virtualbox-iso: Pausing after run of step 'StepOutputDir'. Press enter to continue.
==> virtualbox-iso: Pausing after run of step 'StepCreateFloppy'. Press enter to continue.
==> virtualbox-iso: Starting HTTP server on port 8532
==> virtualbox-iso: Pausing after run of step 'StepHTTPServer'. Press enter to continue.
==> virtualbox-iso: Pausing after run of step 'StepSuppressMessages'. Press enter to continue.
==> virtualbox-iso: Creating virtual machine...
==> virtualbox-iso: Pausing after run of step 'stepCreateVM'. Press enter to continue.
==> virtualbox-iso: Creating hard drive...
==> virtualbox-iso: Pausing after run of step 'stepCreateDisk'. Press enter to continue.
==> virtualbox-iso: Pausing after run of step 'stepAttachISO'. Press enter to continue.
==> virtualbox-iso: Pausing after run of step 'StepAttachGuestAdditions'. Press enter to continue.
==> virtualbox-iso: Pausing after run of step 'StepAttachFloppy'. Press enter to continue.
==> virtualbox-iso: Creating forwarded port mapping for SSH (Host port 4141)
==> virtualbox-iso: Pausing after run of step 'StepForwardSSH'. Press enter to continue.
==> virtualbox-iso: Executing custom VBoxManage commands...
virtualbox-iso: Executing: modifyvm ubuntu1404 --memory 4096
virtualbox-iso: Executing: modifyvm ubuntu1404 --cpus 1
==> virtualbox-iso: Pausing after run of step 'StepVBoxManage'. Press enter to continue.
==> virtualbox-iso: Starting the virtual machine...
==> virtualbox-iso: Waiting 10s for boot...
==> virtualbox-iso: Pausing after run of step 'StepRun'. Press enter to continue.
==> virtualbox-iso: Typing the boot command...
==> virtualbox-iso: Pausing after run of step 'StepTypeBootCommand'. Press enter to continue.
==> virtualbox-iso: Waiting for SSH to become available...
無人インストールが失敗したため、スクリプトはその時点でハングします(上のスクリーンショットを参照)。
ブートコマンドは次のとおりです。
"boot_command": [
"<esc><esc><enter><wait>",
"/install/vmlinuz ",
"noapic ",
"preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg auto ",
"locale=en_US ",
"kbd-chooser/method=us ",
"keyboard-configuration/modelcode=pc105 ",
"keyboard-configuration/layout=US ",
"keyboard-configuration/variant=US ",
"hostname={{ .Name }} ",
"fb=false ",
"debconf/frontend=noninteractive ",
"console-setup/ask_detect=false ",
"initrd=/install/initrd.gz -- ",
"<enter>"
],
Linuxのインストールについて、これをデバッグするのに十分な知識がありません。実際に何が失敗しているのかを知り、修正するにはどうすればよいですか?
パッカーテンプレートと現在そのGithubリポジトリにあるpreseedで、この問題の原因はわかりません。
そのテンプレートをビルドして、Linuxをインストールすることができます。
インストーラーに(構成されたリポジトリに)存在しないパッケージをインストールするように要求すると、対話型インストールモードになっていないため、preseed pkgsel
行が表示されます。あなたが見ている方法。
プレシード機能は非常に強力で、基本的にインストールに対して何でもできます。デバッグは非常に不透明な場合がありますが、Packerを使用すると、インストールが完了するとprovisioner
にもドロップします。
この場合はシェルスクリプトです https://github.com/yunojuno/trifecta/blob/master/packer/template.json#L61-L66
Preseedを非常に基本的なものに保ち、プロビジョナーでカスタマイズを行い、新しいシェルスクリプトを作成して新しいパッケージを追加し、イメージに焼き付けたいその他のカスタマイズを行うことをお勧めします。preseedによってインストールされたものを削除することもできます。
プロビジョニングの段階になったら、Packerの-debug
スイッチを使用して、より具体的な方法でデバッグに取り掛かることができます。プロビジョニング担当者は、インストール済みの作業でssh接続を介して実行されるシェルスクリプトであるためですVM問題が発生した場合は、そのsshに接続するか、Virtualbox GUIを介して、クリーンアップする前に実行中のマシンをデバッグすることもできます。
Bentoプロジェクトには、参照として使用できる優れたPackerテンプレートがあります https://github.com/chef/bento/blob/master/ubuntu-14.04-AMD64.json および https://github.com/chef/bento/blob/master/http/ubuntu-14.04/preseed.cfg -Chefによって作成および保守されていますが、Chefは実際にはインストールされておらず、基本的にはVanillaVagrantボックスです。
基本的に-現在、preseed内のパッケージ名の1つは偽物です。
これがお役に立てば幸いです。
編集:
私はいくつかの用語を定義することが役立つかもしれないと思いました:
Packer画像の作成を自動化するHashiCorpソフトウェア。基本的なワークフローはBuilder
-> Provisioner
-> Post Process
です。
Builder:さまざまな仮想化プラットフォーム用(例: Virtualbox、Vmware、AWS EC2、Digital Oceanなど。それぞれに異なる画像形式があるため、それぞれの画像を作成する必要があります。
ビルダーは通常、無人の自動化ツールがインストールされているオペレーティングシステムを利用して、プロビジョニングされる一貫したベースを提供します。 Debian/Ubuntu preseed、RHEL/CentosKickstartなど。
Provisioner:Shell、Ansible、Chef、Salt、Puppetなど。これらはインストールされているすべての基本イメージで実行され、構成、ソフトウェアのインストールなどのために設計されています。
ポストプロセッサー:Vagrant、Atlas、Amazonなど。イメージをデプロイターゲットに向けて準備します。
(Packerにはさらにいくつかのオプションのワークフローステップがありますが、それらは基本です。)
@rjocolemanによるすばらしい回答に加えて、実行中のインストーラーから/ var/log/syslogにアクセスする方法があります。メインメニューの「デバッグログの保存」を使用して抽出できます。これは、絶対に必要な場合にワークフローのBuilder
部分をデバッグするのに役立ちます。