如何使用無人值守的 Ubuntu 安裝 (14.04) 調試“選擇並安裝軟體”問題
我正在使用 Packer 為 Ubuntu 14.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 儲存庫。
我能夠建構該模板並獲得有效的 linux 安裝。
您應該查看的是預置
pkgsel
行,因為當您要求安裝程序安裝不存在的軟體包(在配置的儲存庫中)時,您並未處於互動式安裝模式,因此您所看到的方式會出錯。preseed 功能超級強大,你基本上可以對安裝做任何事情。
provisioner
調試起來可能非常不透明,但使用 Packer,一旦安裝完成,我們也會進入。在這種情況下,它是 shell 腳本,https://github.com/yunojuno/trifecta/blob/master/packer/template.json#L61-L66
我建議保持 preseed 超級基本並在您的配置程序中進行自定義,製作一個新的 shell 腳本來添加新包,進行您想要烘焙到圖像中的其他自定義 - 甚至刪除由 preseed 安裝的東西。
進入配置階段後,您可以使用
-debug
Packer 中的開關以更切實的方式真正進行調試 - 因為如果您遇到問題,配置程序是在工作已安裝的 VM 上通過 ssh 連接執行的 shell 腳本還可以連接到該 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 並未實際安裝,它們基本上是一個香草 Vagrant 盒子。
基本上 - 目前你在 preseed 中的一個包名是假的。
我希望這有幫助!
編輯:
我認為定義一些術語可能會有所幫助:
Packer HashiCorp 軟體,可自動建構圖像。基本工作流程是
Builder
->Provisioner
->Post Process
- Builder:針對不同的虛擬化平台,例如 Virtualbox、Vmware、AWS EC2、Digital Ocean 等。每個平台都有不同的圖像格式,所以我們需要為每個平台製作一個圖像。
**建構者通常利用正在安裝的無人值守自動化工具的作業系統來提供要配置的一致基礎,**例如 Debian/Ubuntu preseed、RHEL/Centos Kickstart 等。
- Provisioner:Shell、Ansible、Chef、Salt、Puppet 等。它們在所有已安裝的基本映像上執行,專為配置、安裝軟體等而設計。
- 後處理器:Vagrant、Atlas、Amazon 等。為您的部署目標準備好您的圖像。
(Packer 中還有幾個可選的工作流程步驟,但這些是基礎。)