製作開機磁片/開機光碟


本文假設讀者已熟悉 Linux 下的特殊檔案系統

開機磁片

[2017/5/5 改推薦 extlinux]

要製作開機磁片, 可以用 syslinux。 請參考 /usr/share/doc/syslinux* 底下的文件。 最簡單的方法是找一個現成的開機磁片來學。 可以從修改 syslinux.cfg 著手。

因為磁片容量有限, 而新版的 kernel 太大, 所以開機磁片版上面, 大概只找得到 2.2 或更早的 kernel。

開機光碟片

要製作開機光碟片, 還是用 syslinux :-) Syslinux 其實包含三套開機程式: 磁片版的 syslinux, 光碟版的 isolinux, 及網路開機版的 pxelinux。

同樣地, 可以找一個現成的開機光碟片來學, 例如免安裝的 knoppixmorphix, 或是一般版本如 mandriva, slackware, debian, fedora 等等的安裝光碟都可以。 筆者建議一開始拿小型的版本來試, 作實驗時可以節省很多時間。 例如 slackware, TA Linux, Vector Linux 等等。 熟悉以後, 甚至可以將好幾個版本的 linux 燒在同一片光碟上, 開機時可以選擇要開那一版。 我自己的資料光碟上面就放有上述三版的安裝程式部分, 彷彿將三張救援光碟放在一起。 不過為了配合我的專題同學們, 這裡要以龐大的 knoppix 3.8 光碟為例來做一點點最簡單的修改。 其實這些步驟可能也適用於其他小型光碟。

為了環保, 也為了省時, 建議大家少燒 cdrom。 大力推薦安裝神奇的 CPU 模擬器 qemu, 用它來執行你製作出來的光碟映象檔, 可以省去燒錄光碟的時間, 而且不用浪費重新開機的漫長的等待時間 -- 反正虛擬機器在開機時, 還有正常的系統可以用! 我們先拿網路下載回來未經修改的映象檔試玩一下 qemu。 假設下載回來的映象檔放在 /mnt/hda7/KNOPPIX_V3.8.1-2005-04-08-EN.iso 請執行: qemu -cdrom /mnt/hda7/KNOPPIX_V3.8.1-2005-04-08-EN.iso 如果你用的是已燒好的光碟片, 請用 dmesg | grep -i rom 看一下你的光碟機裝置名稱叫做 hdb 還是 hdc 等等, 然後執行 qemu /dev/hdc。 你會看到電腦開機的畫面 -- 框在一個視窗裡面。 按了 Enter, 等很久很久, 開機完成以後, 就可以將滑鼠點進去, 開始玩 knoppix 了。 要將滑鼠退出來, 可以按 ctrl-alt 鍵。

現在開始修改。 首先將光碟上的所有檔案拷貝到工作目錄, 並改成可寫: mkdir /my/working/dir ; mount -o loop /mnt/hda7/KNOPPIX_V3.8.1-2005-04-08-EN.iso /mnt/cdrom ; cd /my/working/dir ; cp -a /mnt/cdrom/* . ; chmod -R u+w . 這裡的 -o loop 表示我們要掛載的是映象檔。 詳見 Linux 下的特殊檔案系統 一篇解釋。 不用擔心, 我們並不想對 knoppix 大動干戈, 只是要做一點簡單的修改而已。 如果急著往下做, 最簡單的修改就是在 /my/working/dir 底下隨便建一個小小的文字檔, 然後就可以略過本段剩下部分, 直接跳到下一段; 如果有閒, 接下來我們將用 isolinux 提供的機制修改開機畫面。 請到 /my/working/dir 底下的 boot/isolinux/ 找到 boot.msg 與 logo.16 兩個檔案。 用 vim 或 其他編輯器打開 boot.msg。 它提到開機時要載入 logo.16 當做背景畫面。 (詳見 isolinux 文件) 至於 logo.16 則是一個 "lss" 類型的檔案, 由 isolinux 套件內的 ppmtolss16 指令所產生。 所以呢, 請隨便找一張 640x480 或 800x600 或 1024x768 的背景圖片, 例如叫做 stars.png, 然後: pngtopnm < stars.png | ppmtolss16 > /my/working/dir/boot/isolinux/stars.16 這裡的 pngtopnm 指令來自 netpbm 套件, 如果你的圖檔是 jpeg, ps, ... 等等, 也可以在同一套件內找到轉換工具。 然後把 boot.msg 裡面提到的檔名改成 stars.16, 就完成了! 如果不嫌麻煩, 不要改 boot.msg, 而是將它 copy 成另外一個檔案, 例如叫做 f4, 然後把 f4 裡面的背景圖檔名改成我們的 stars.16, 最後在 isolinux.cfg 裡面加一句 F4 f4 表示按下 F4 時, 就顯示 f4 檔案的內容。 這樣等一下開機時就會看到原背景圖; 一按下 F4 則切換成另外一個背景圖。

好了, 現在可以下指令產生 iso 檔: mkisofs -pad -l -r -J -v -V "KNOPPIX" -no-emul-boot -boot-load-size 4 -boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -hide-rr-moved -o 目的地路徑 來源路徑 例如我們的 "來源路徑" 是上述的 /my/working/dir 而 "目的地路徑" 可能是 /mnt/hdd17/myknoppix.iso 。 至於 boot/isolinux/isolinux.bin 和 boot/isolinux/boot.cat 是什麼呢? 這些都是 "來源路徑" 底下的檔案, 固定照抄就對了。 如果你的 isolinux 相關檔案不是放在光碟的 boot/isolinux 目錄下, 當然就要據實況修改。 還有, 那麼多 option 各是什麼意思, 請自行參考手冊。

燒錄光碟: 用 qemu 多試幾次之後, 如果滿意了, 再燒成光碟。 請不要燒 cdrom! 垃圾大家都在製造, 卻沒有人希望焚化爐蓋在自己家附近, 我們每個人都有責任垃圾減量。 請燒 cdrw。 用 cdrecord -scanbus 查出你的燒錄裝置名稱, 然後用 cdrecord -v speed=4 blank=fast dev=0,0,0 -data 新產生的映象檔.iso 燒錄。 其中 dev=0,0,0 請自行修改。 如果你的 kernel 是 2.6 之後的版本, 可能要改成如下: dev=ATAPI:0,0,0