2013/08/12

使用 live-build 客製化無人值守 Ubuntu 安裝光碟




要客製化 Ubuntu 安裝光碟,在 Ubutnu wiki 有兩篇教學。1) LiveCDCustomization。2) InstallCDCustomization 。這兩篇文章雖然都很有參考價值,但需要先下載 Ubuntu 的光碟,並以此加工。

小弟早有所聞用 live-build 也可自製開機光碟,google 一下便又找到 Ubuntu 12.04 Cloud LiveLive-build使用指南由於不需先下載光碟,個人偏好使用這種方式,本文也將以此繼續發揮。

Build ISO


不囉嗦,請照下面步驟做:

$ sudo apt-get install live-build livecd-rootfs syslinux-themes-ubuntu-oneiric gfxboot-theme-ubuntu
$ mkdir live-build && cd live-build
$ git clone https://github.com/fcwu/custom-ubuntu-config.git config
$ sudo PROJECT=ubuntu SUITE=precise ARCH=amd64 lb build


約過半小時或好幾個小時,便會生成 binary.iso,此檔便是 Ubuntu 12.04 的安裝光碟。若要改成 13.04 的話,只需將 SUITE=precise 改成 SUITE=raring 即可。

大方向來說,指令可分 3 種, config, clean and build,這些指令若在 auto 資料匣內有相對應的檔案,舉例來說,以我們的平台 lb build 會去執行 auto/build。以下是各指令簡單的介紹:

  • lb config:在當前目錄下建立 config 目錄和相關配置文件
  • lb clean:清空所有做 ISO 時的遺物,其後還可接像 --stage --chroot --bootstrap 這類的參數來指令要清除那部分
  • lb build:按照 config 目錄下的各種配置腳本建構 ISO

無人值守安裝


好加在,Ubiquity (Ubuntu 的安裝程式) 本來就有為了無人值守留後門,Ubiquity 會用 debconf 從 /var/cache/debconf/config.dat 內讀取安裝的設定。要修改這部分可以參考 config/binary_local-includes/preseed/ubuntu.seed 或官方 preseed 文件說明

此外,要讓 Ubiquity 直接跳過那些選項,需在 boot command 加上 automatic-ubiquity。如同 config/binary_local-includes/isolinux/txt.cfg 內的這段

label live-install-auto
menu label ^Install Ubuntu Automatically
kernel /casper/vmlinuz
append file=/cdrom/preseed/ubuntu.seed boot=casper automatic-ubiquity initrd=/casper/initrd.lz quiet splash --


安裝更多軟體


安裝程式可以選擇安裝到 live 系統,或是用 Ubiquity 安裝到硬碟的 install 系統。以下提供 2 種方法。

用 .deb 安裝


這種方法會同時安裝到 live and install 系統。只需將要安裝的 .deb 丟到 config/chroot_packages 即可。但要注意 .deb 相依性的問題。

用 apt-get install 安裝


用 apt-get 的安裝方式,可任選要安裝到 live or install 系統。我們要做的事只需將要安裝的程式列表放到 package-lists 裡即可,如同 config/package-lists/example.chroot.list 所示。

terminator
vim
vim-gtk


若想選擇擇只裝到 live 或 install 系統的話,在命名 *.list 有這些規則

  • *_install.list: 只安裝到 install 系統
  • *_live.list: 只安裝到 live 系統

live-build 內部


live-build 在製作 iso 時,共分 4 大步驟:

  1. bootstrap
  2. chroot
  3. binary
  4. source

更進一步在查看 lb 源碼後,可以發現在執行 lb build 時,會分別做這 4 大步的指令 lb bootstrap, lb chroot, lb binary, lb source。相關源碼在 /usr/share/live/build/scripts/build 裡,如 lb_bootstrap, lb_chroot 這些 scripts。

bootsrap 最主要工作是用 lb bootstrap_debootstrap 建立起最基本的 root filesystem。

chroot 的工作是 chroot 到剛才建立起的 root filesystem,接著按照 config/chroot_*, package-lists and task-lists 的內容將所需修改的部分裝進去。舉例來說 chroot_local-hooks 可以放一些 hook script,chroot_local-includes 拿來放要覆蓋的檔案。

最後,binary 的工作是將 ISO 的 rootfs 和 ISO 產生出來。

source 沒在用,不用提了。

最後的最後,值得一提的是在做完任何一項工作時,.stage/ 資料匣內會產生表示做過的 flag 檔案,若有時只需重做部分工作,可手動將之刪除即可。要不然每次都等個半小時重做 ISO 就太...笨...了



No comments: