2008/08/14

remastering 訂製屬於自己的 ubuntu

本文來自LiveCD Customization From Scratch, 步驟解釋的很清楚,本來是自己看就好啦,不過我的習慣是做筆記而不是純翻譯,有興趣的人也不妨看看我的心得。

最近我的工作環境都在 Windows 下,其實是懶得再用以前的方式,不管是 Linux + Windows 多重開機還是To Run Windows By Using VirtualBox Based on Linux,就是一個懶字。

不知道為什麼,每日 build 的 Ubuntu 版本在最近才能正常安裝在 VirtualBox 上,後來看到 In Lived System Design, 加上先前的Remix,就想說自己來試試重新製作 Ubuntu,因此特把這篇文章找出來,順便與大家分享。

很久以前在重製 Knoppix 時就講過配合 debootstrap,也講過 Squashfs, 總之,工具都沒什麼變化,倒是感謝 Ubuntu/canonical無私的推廣,所以也想好好的來加入ubuntu taiwan,看能不能幫上點小忙。

在講下去之前,要先確定使用的是 Ubuntu 系統,我相信就算是其他 debian 系統也不是不能做,只是我自己沒測試過。

準備工作區,並利用 debootstrap 建立基本的環境,可以看到是以一般身份而非 root:
$ mkdir work
$ cd work
$ mkdir chroot
$ sudo debootstrap --arch i386 intrepid chroot

這一步會做很久,影響因素主要是網路,若您的網路夠快就太棒了,我光這一步就要大半個小時。不過您可能先前沒裝 debootstrap, 想必也難不倒才是,透過 apt-get install debootstrap 即可安裝。順便說一下,上面的 intrepid(8.10) 也可以用目前正式釋出的 hardy(8.04) 來取代。

接下來設定好系統,以便在 chroot 後能跟您現在(Host)的環境一致:

sudo cp /etc/resolv.conf chroot/etc/resolv.conf
sudo sudo cp /etc/apt/sources.list chroot/etc/apt/sources.list
sudo mount --bind /proc chroot/proc
sudo mount --bind /sys chroot/sys
sudo mount --bind /dev/pts chroot/dev/pts

我以前也講解過 mount --bind 的好處,就不多說了。特別需要講的是 sources.list, 若您想建立 remix, 那就把安裝 remix一文提到的下面兩個放進去:

deb http://ppa.launchpad.net/netbook-remix-team/ubuntu intrepid main
deb-src http://ppa.launchpad.net/netbook-remix-team/ubuntu intrepid main


準備好上面的工作之後,就算完全 chroot 環境的建置(而已 :-) ,接下來當然是透過sudo chroot chroot正式切換工作環境了。好了,利用下面的方式來準備好套件資料及語系,讓之後安裝套件能順利:

# apt-get update
# locale-gen en_US.UTF-8 zh_TW.UTF-8


再來就是安裝自己想要的套件了,以我的系統為例,竟然要裝一千多個套件,沒幾個小時是跑不完的,希望別等到睡著才好,當然睡得著倒也是好事:

apt-get install ubuntu-standard casper discover1 laptop-detect os-prober linux-generic mobile-* ubuntu-mobile modbrowser batmand



在離開前做做環保工作,把不必要的資訊清一清:

# apt-get clean
# rm -rf /tmp/*
# rm /etc/resolv.conf
# exit
$ sudo umount chroot/proc
$ sudo umount chroot/sys
$ sudo umount chroot/dev/pts


系統都在這兒了,剩下的工作就是包裝成開機光碟(LiveCD), 不過要先確定您的 host 系統中有安裝 syslinux squashfs-tools mkisofs sbm 這些套件,比照最上面安裝 debootstrap 的方式即可。先來產生開機光碟所需要的目錄:
mkdir -p image/{casper,isolinux,install}

開機光碟也需要 kernel 及 initrd, 及 isolinux, 用現成的即可:
cp chroot/boot/vmlinuz-2.6.**-**-generic image/casper/vmlinuz
cp chroot/boot/initrd.img-2.6.**-**-generic image/casper/initrd.gz
cp /usr/lib/syslinux/isolinux.bin image/isolinux/


下面的命令是準備特殊的工具,例如ubuntu 光碟都有的記憶體測試,及 sbm
cp /boot/memtest86+.bin image/install/memtest
cp /boot/sbm.img image/install/


也可以產生開機時的訊息(畫面),準備一個 isolinux.txt, 其實也可以不必,請自行參考 ubuntu 光碟的內容即可,這個檔也放在 isolinux.bin 的目錄下:
This is an Ubuntu Remix Live CD.

For the default live system, enter "live". To verify the CD for errors, enter "check". To run memtest86+, enter "memtest"


若您要產生自己的開機畫面,有機會再另文說明,比較重要的是 isolinux.cfg, 這個檔請參考 zless /usr/share/doc/syslinux/syslinux.txt.gz,範例如下:
DEFAULT live
LABEL live
menu label ^Start or install Ubuntu
kernel /casper/vmlinuz
append file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.gz quiet splash --
LABEL check
menu label ^Check CD for defects
kernel /casper/vmlinuz
append boot=casper integrity-check initrd=/casper/initrd.gz quiet splash --
LABEL memtest
menu label ^Memory test
kernel /install/memtest
append -
LABEL hd
menu label ^Boot from first hard disk
localboot 0x80
append -
DISPLAY isolinux.txt
TIMEOUT 300
PROMPT 1


接下來產生套件清單:

sudo chroot chroot dpkg-query -W --showformat='${Package} ${Version}\n' | sudo tee image/casper/filesystem.manifest
sudo cp -v image/casper/filesystem.manifest{,-desktop}
REMOVE='ubiquity casper live-initramfs user-setup discover1 xresprobe os-prober libdebian-installer4'
for i in $REMOVE
do
sudo sed -i "/${i}/d" image/casper/filesystem.manifest-desktop
done


差不多快做完了,接下來就是把系統壓縮成 squashfs:
sudo mksquashfs chroot image/casper/filesystem.squashfs,這步以我在 VirtualBox 只給 678 MB 記憶體的狀況來說,還真的非常非常非常吃力,就慢慢等吧,壓到後面就需要 SWAP....寫完這篇時,這步還在做,有機會做到半夜或明天。

再準備一份光碟說明檔 image/README.diskdefines:
#define DISKNAME  Wade-test CD 2008-08-14 - Release i386
#define TYPE binary
#define TYPEbinary 1
#define ARCH i386
#define ARCHi386 1
#define DISKNUM 1
#define DISKNUM1 1
#define TOTALNUM 0
#define TOTALNUM0 1


順便產生一下光碟的 MD5 checksum:

sudo -s
(cd image && find . -type f -print0 | xargs -0 md5sum > md5sum.txt)
exit


最後最後,真的要來做成 iso 檔了:

cd image
sudo mkisofs -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-remix.iso .


其實這些步驟跟 KNOPPIX 的重製步驟都大同小異,有興趣的也可以去這兒找找。

我相信會有人問,是不是可以放進 usb disk 中?是的,我以前放了十來個呢!有機會再與大家分享,不過原文件上也有講,只是我懶得寫下去,就先寫到這兒。
(未完待續)

開機畫面怎麼產生?有空再來寫仔細點,
一般我是用 Gimp, 選影像,把格式從 RGB 變成 indexed with 16 colours
存成 bmp 後,直接改名 .rle 即可。
底下也提供用 pbm:
pngtopnm splash.png > splash.pnm 或
jpgtopnm splash.jpg > splash.pnm 或
bmptoppm splash.bmp > splash.ppm

ppmtolss16 '#ffffff=7' < splash.ppm > splash.rle 或
ppmtolss16 "#000000=0" "#ffffff=7" < splash.pnm > splash.rle

0 意見: