2007/03/15

GeeXboX LiveCD iso 的建立

首先,你得看看 scripts 下的東西。其中最主要的兩個是 gentree 與 iso.

gentree 除了會建立目錄樹外,還會安裝核心、initrd, boot loader 等,以便 iso 建立開機光碟, 因此有興趣的人得先研究它。

根據 gentree, 或者也可以自行拆開 bin.tar.lzma, 可以發現其實 bin.tar.lzma 名不符實。這個檔有點像 KNOPPIX 的 KNOPPIX 這個壓縮檔,可以說是一個小型系統。只是它們倆還是不一樣。KNOPPIX 的 initrd 沒什麼鳥用,而 GeeXboX 的 initrd 則具備一個原始系統,之後解開的 bin.tar.lzma 則相當於再架於其上並沒有取代它。其設計理念相當於:
把最基本備配放在 initrd, 讓 initrd 儘可能小,事實上我手上的 initrd.gz 大小為 385458, 非常的小而美。加上 vmlinuz 2972912,整個可以動的系統為 3358370。當然,加上應用程式,我的 bin.tar.lzma 4180250, 這是沒有中文字型與額外的 codec, firmware的大小。也就是說整個應用程式才 4M 而已。真的是非常精美。

不知道有沒有注意到一件事,bin.tar.lzma 將系統以 lzma 壓縮,這可以大大降低它的大小,而且它採用複製到記憶體加速執行效率的方式進行,而不像 cramfs 或 KNOPPIX. 基本上以作業方式來說較占記憶體,但是整體發行大小則較小。

另外有一點,GeeXboX 的 initrd 可以單獨成立。這在 KNOPPIX 則不太一樣。而 bin.tar.lzma 的地位既然跟 KNOPPIX 這個壓縮檔地位一樣,但是其產生方式則完全不同。產生的語法為:
tar cf - -C $INSTALL lib usr/bin usr/lib | lzma e $INSTALL/bin.tar.lzma -si -a2


接下來產生開機光碟的方式在 iso 檔裡可看到如下一段命令:
mkzftree $BUILD/iso/GEEXBOX $BUILD/ziso/GEEXBOX

這段會把 iso/GEEXBOX 下的東西壓縮過,接下來壓製開機光碟的方式跟 KNOPPIX 就大同小異,完整語法如下:
mkisofs -quiet -no-pad -V GEEXBOX -volset GEEXBOX \
-publisher "The GeeXboX team (www.geexbox.org)" \
-p "The GeeXboX team (www.geexbox.org)" \
-A "MKISOFS ISO 9660/HFS FILESYSTEM BUILDER" \
-z -D -r -J -sort isolinux.bin 10000 \
-no-emul-boot \
-boot-info-table \
-boot-load-size 4 \
-b GEEXBOX/boot/isolinux.bin \
-c GEEXBOX/boot/boot.catalog \
$BUILD/ziso > $ISO


綜合以上所述,就精神上來看,KNOPPIX 的 iso 需較麻煩才能解開研究,它用了兩次 mkisofs 製作,其壓縮用 create_compressed_fs,相對的解開這個壓縮後的檔 KNOPPIX 可以用 extract_compressed_fs。而 GeeXboX 則先將檔案系統的檔案個別壓縮過再製成開機光碟,GeeXboX 的 iso 檔只需掛載後即與開機後所見無異。兩者的 initrd.gz,它原本就是由 kernel 所解開的,當然我們也可以相同的方式解開研究。

後續我會再發表一下若交換一下製作過程,其產生的 iso 檔大小的比較。

若系統夠小,而記憶體又夠,那麼 GeeXboX 的這種設計理念顯然非常優秀值得借鏡。當然若系統大到不可能放進記憶體中執行又或者連先解開再執行都不可能,那麼 KNOPPIX 的製作方式則值得借鏡。

這兩個方式其實不見得要拿來當 LiveCD 才能用,就算是要放到系統中也行,只是差在還得解開系統(意指一般Linux 是沒經過壓縮的)。總之,參考人家的做法會帶給自己不少的好處的。

0 意見: