製作個人風格的Knoppix開機檔

by Kuo-Ping Chiao
(revision dates: 2003-01-22, 2004-07-06, 2004-12-08, 2005-01-05, 2005-09-29)
(本文件僅適用v3.6以上的原始 Knoppix CD)

由於 knoppix 是一個具有高度自製的 linux live-CD 系統,當然連開機也應該有屬於自己風格的畫面。底下簡介製作個人風格的Knoppix開機畫面步驟:
  1. 設計開機畫面:
    • 確定你的 linux box 中有安裝下列套件:
      syslinux(需要其中的 ppmtolss16), netpbm(需要其中的 xxxtopnm or xxxtoppm)
    • 製作一幅(建議用 gimp)或找現成的 640x400 (留80是為了使 boot: 行不致於重疊上),且顏色數不得超過16色的圖檔。
    • 存檔格式為 bmp 例如:logo.bmp.
    • bmptoppm < logo.bmp > logo.ppm
    • ppmtolss16 < logo.ppm > logo.16
    • 或者用一串指令: bmptoppm < logo.bmp | ppmtolss16 > logo.16
  2. 把 knoppix CD 中的 boot/isolinux/boot.msg copy 出來,更改 boot.msg :
    • 確定你的 linux box 中有安裝下列套件: hexedit (其他可 edit binary file 的軟體亦可)
    • hexedit boot.msg
      • 更改 messages(按 Tab)。例如:可以把自己的 email ,或 remaster (重製)的日期寫上。
      • 最好不要增減字元。完畢後存檔(ctrl-x)。
  3. 如此即有了自己專屬的 knoppix 開機畫面及訊息檔。如果要 preview 開機畫面,不用每次都燒上 remaster 的 CD 後再開機看,可以先找一個 USB 隨身碟製作開機系統來欣賞:
    • 首先 USB 上要有一個 bootable 的 partition, 且其 filesystem 必需為 msdos (FAT16), size 要大於 3MB
    • 假設此 partition 是位於 /dev/sda1 上。執行下列指令,建立 linux 開機系統:
      • syslinux /dev/sda1
      • mount /dev/sda1 /mnt/usb
      • 把 knoppix CD 中的 boot/isolinux/ 中所有檔案 copy 至 /mnt/usb 
      • 把上一步驟製作的 logo.16 及 boot.msg  copy (覆蓋)至 /mnt/usb 
      • mv /mnt/usb/isolinux.bin /mnt/usb/syslinux.bin 
      • umount /mnt/usb
    • 用此 USB 隨身碟來開機欣賞一下自己專屬的 Knoppix LiveCD
  4. 如果要經常更改 boot.msg 中的 RELEASE: date, 不需要用 hexedit 編輯。底下提供一個 shell script 可以方便地更改 boot.msg 中的 date,但首先要將 boot.msg 中的 RELEASE: 日期,例如:2004-12-08 改為 yyyy-mm-dd, 然後存成 boot.msg_template. 將下列 shell script 存成 change_date.sh,執行:
    /bin/sh change_date.sh `date +"%Y %m %d"`
    如此即把 boot.msg 中的 RELEASE 日期改為今天的日期了。
    #!/bin/bash
    # Replace the remastered date inside boot.msg
    # by Kuo-Ping Chiao, 2005-01-05

    if [ ! -f ./boot.msg ];then
    echo "Error: No boot.msg in this subdirectory.";
    exit;
    fi

    if [ "$#" -lt "3" ];then
    echo "Usage: `basename $0` <year> <month> <day>";
    exit;
    fi
    if [ -z $(echo $1 | grep '^2[0-9][0-9][0-9]$') ];then
    echo "Usage: `basename $0` <year> <month> <day>";
    echo "Error: <year> must be 4-digit, for example 2005";
    exit;
    fi
    if [ -z $(echo $2 | grep '^[0-9][0-9]$') ];then
    echo "Usage: `basename $0` <year> <month> <day>";
    echo "Error: <month> must be 2-digit, for example 03 or 11";
    exit;
    fi
    if [ -z $(echo $3 | grep '^[0-9][0-9]$') ];then
    echo "Usage: `basename $0` <year> <month> <day>";
    echo "Error: <day> must be 2-digit, for example 04 or 15";
    exit;
    fi
    /bin/cp -f ./boot.msg ./boot.msg_old
    sed "s/yyyy/${1}/g" boot.msg_template > b00001
    sed "s/mm/${2}/g" b00001 > b00002
    sed "s/dd/${3}/g" b00002 > boot.msg
    /bin/rm -f b00001 b00002
    echo "RELEASE date has been successfully changed."
    echo "The old boot.msg is copied to boot.msg_old."