客製化 FreeBSD 安裝 ISO


最近有個需求需要自訂 FreeBSD 的映像檔,主要是可以讓 ISO 在開機後可以自動執行一些動作,不需要每次手工重下指令。

在網路上找到了幾種解決方法,一般都是直接把 ISO 掛載到 Ramdisk 後,再使用 rsync 將東西複製出來: Setup, and create a custom FreeBSD ISO CD/DVD :: BSD watch

我一開始也是想使用這種方法,但因我們環境是用 GitLab CI/CD 來呼叫一個 Jail 來作業,掛載 ISO 時需要用到 Ramdisk,但在 Jail 中要使用 Ramdisk 需要做一些設定: Memory Disk In A Jail

為了不想因為一個 Project 而動到整個 Jail Runner 的設定,就改用解壓縮的方式,很剛好的 bsdtar 支援了 ISO9660 的解壓縮,在 FreeBSD 環境中可以用這個指令來解壓,參數和一般的 tar 好像不太一樣:

tar xfp FreeBSD-12.2-RELEASE-amd64-disc1.iso -C /custom-iso/

Fstab

在客製化 ISO 的時候,首先需要修改的是 /etc/fstab 的內容,否則重包後會開機失敗、在開機時 ISO 會掛載失敗:

原本的 fstab:

/dev/iso9660/12_2_RELEASE_AMD64_CD / cd9660 ro 0 0

需修改成:

/dev/iso9660/FreeBSD_myISO / cd9660 ro 0 0

再來其他就是自己想要客製的一些內容了。

包回 ISO

做完客製化後,再來的工作就是包回 ISO 檔,需要先安裝 cdrtools 這個套件才有辦法完成:

pkg install -y cdrtools

然後使用 cdrtools 內的 mkisofs 來做打包:

cd / && mkisofs -D -R -b boot/cdboot  -V "FreeBSD_myISO" -allow-leading-dots -no-emul-boot -o ~/12.2-custom.iso /custom-iso

等跑完後就可以開機測試了。


See also