最近有個需求需要自訂 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
等跑完後就可以開機測試了。