李晨光
(中鐵工程設(shè)計(jì)咨詢集團(tuán)有限公司信息中心,北京100055)
LiveCD是一種無需安裝、完全從CDROM啟動(dòng)的瘦Linux版 。當(dāng)它運(yùn)行時(shí)所有的工具都存放在CDROM上或者內(nèi)存里,而不是硬盤上,這是和傳統(tǒng)的操作系統(tǒng)最大區(qū)別。各Live CD在功能上的區(qū)分并不是絕對(duì)的,因?yàn)榇蟛糠諰ive CD本身就是一個(gè)非常完整的Linux系統(tǒng),可以用它來實(shí)現(xiàn)各種功能 。
計(jì)算機(jī)加電以后, 由位于主板上的BIOS負(fù)責(zé)引導(dǎo)操作系統(tǒng)。Linux平臺(tái)上主要的引導(dǎo)程序(bootloader)是LILO(Linux Loader)和GRUB。這兩個(gè)引導(dǎo)程序分為2部分, 第1部分(Firststage)尺寸很小, 以便裝入MBR,它負(fù)責(zé)引導(dǎo)第2部分(Second stage)來完成主要的引導(dǎo)工作。當(dāng)?shù)?部分加載后,它根據(jù)預(yù)先的配置顯示選單界面,供用戶選擇引導(dǎo)的操作系統(tǒng)及啟動(dòng)參數(shù)。接下來,引導(dǎo)程序?qū)?nèi)核映像文件和初始Ramdisk(initrd)映像加載入內(nèi)存,initrd映像用于存放一些用于系統(tǒng)引導(dǎo)的關(guān)鍵驅(qū)動(dòng)模塊,而這些文件又無法從磁盤上的文件系統(tǒng)加載。映像加載完畢后,控制權(quán)就由引導(dǎo)程序交給Linux內(nèi)核。Linux內(nèi)核啟動(dòng)后,首先會(huì)初始化,并配置系統(tǒng)的可用內(nèi)存以及各種相關(guān)設(shè)備,解壓并掛載內(nèi)存中的initrd映像、加載其中的驅(qū)動(dòng)程序,初始化和文件系統(tǒng)相關(guān)的各種虛擬設(shè)備。最后, 內(nèi)核加載根(/)文件系統(tǒng)、釋放不再使用的內(nèi)存,執(zhí)行第1個(gè)程序/sbin/init。/sbin/init程序是系統(tǒng)啟動(dòng)后運(yùn)行的第1個(gè)進(jìn)程,它根據(jù)配置文件/etc/inittab依次執(zhí)行/etc/rcx.d目錄中的啟動(dòng)腳本,由這些腳本完成各種初始化,啟動(dòng)各種服務(wù)程序。至此,Linux系統(tǒng)已經(jīng)引導(dǎo)完成了。
從http://easynews.dl.sourceforge.net/sourceforge/souptonuts/cdrom_linux_boot_proj1.iso下載文件cdrom_linux_boot_proj1.iso,并將其刻錄至光盤之上。使用該光盤重新啟動(dòng)系統(tǒng)。目的是為了檢測內(nèi)核中是否編譯了所需的網(wǎng)絡(luò)、視頻和鍵盤(包含USB)驅(qū)動(dòng)器。如果有重要的設(shè)備沒有被識(shí)別,那么可以將其加到內(nèi)核之中。
從http://prdownloads.sourceforge.net/souptonuts/proj1.tar.gz下載完整的項(xiàng)目環(huán)境 proj1.tar.gz。該軟件包中包含了所有用于創(chuàng)建和 定制cdrom_linux_boot_ proj1.iso所需的東西,這其中包括BusyBox源碼、各種庫和SSH。目錄 “_install”包含了用于SSH、init和tcpdump所需的庫。2.6.11內(nèi) 核 的 “.config”可以在文檔目錄中找到。此外,staginig_iso_image目錄包含了一份內(nèi)核bzImage以及isolinux啟動(dòng)加載器。proj1.tar.gz文件的大小是l1 MB,由于其包含了除源代碼以外用戶所需的所有東西,所以只需再下載內(nèi)核代碼即可。下 載地址為http://www.kernel.org/pub/linux/kernel/v2.6/。
在后面的步驟中,介紹配置和安裝最新內(nèi)核的方法。在解壓proj1.tar.gz文件時(shí),解壓該文件會(huì)創(chuàng)建所有必需的字符和塊設(shè)備,所以需要以root的身份使用“tar -xzf”命令進(jìn)行解壓縮。
用如下命令檢查下載完整性:$md5sum proj1.tar.gz
用如下命令解壓解包文件:#tar -xzf proj1.tar.gz
轉(zhuǎn)換成root身份,以確??梢詣?chuàng)建所有/dev設(shè)備。完成上述步驟后,這時(shí)可以使用如下命令查看全部的設(shè)備:[root@third-fl-71_install] #lS -l dev。
如果使用普通賬號(hào)進(jìn)行上述步驟 ,會(huì)發(fā)現(xiàn)很多文件都沒有被創(chuàng)建 。執(zhí)行createiso腳本:#./createiso該腳本會(huì)執(zhí)行很多操作,它會(huì)以 ./cdrom為掛載點(diǎn)創(chuàng)建一個(gè)loop back設(shè)備,會(huì)拷貝_install的內(nèi)容。之后,它會(huì)卸載./cdrom。接下來,它會(huì)拷貝staging目錄中的內(nèi)容 。并且會(huì)創(chuàng)建一個(gè)可啟動(dòng)的CD映像 ,還會(huì)創(chuàng)建一個(gè)虛擬的文件系統(tǒng)。
從http://www.busybox.net/downloads/busybox-1.00.tar.gz下載BusyBox
$wget http://www.busybox.net/downloads/busybox-1.00.tar.gz
$wget https://www.busybox.net/downloads/busybox-1.00.tar.gz.sign
$md5sum busybox-1.00.tar.gz
fa62459e098fc00b22772aaf2e75bc98 busybox-1.00.tar.gz
接下來解壓文件 :
$tar --xzf busybox-1.00.tar.gz
如果用戶不想自己寫配置文件 ,可以從以下網(wǎng)址:http://prdownloads.sourceforge.net/souptonuts/chiricobusybox.config下載一個(gè)樣例文件。注意下載完成后,將其文件名更改為 “.config”。具體命令如下 :
$cd busybox-1.00
$wget http://osdn.dl.soureceforge.net/sourceforget/souptonuts/chiricobusybox.onfig
$cp chiricobusybox.config .config
可以運(yùn)行“make”和 “make install”來編譯安裝。在上述命令執(zhí)行完成的最后階段,會(huì)顯示如下信息“work properly.”,將BusyBox的權(quán)限改為root:$chmod 4755 ./_install/bin/busybox
需要在_install下創(chuàng)建一些目錄。首先查看當(dāng)前目錄的內(nèi)容,創(chuàng)建 dev、etc、lib、proc、tmp、var和 sys:
$mkdirp dev sys etc/init.d lib proc tmp var/lib/misc var/lock var/log var/run var/tmp
/dev目錄中是必須的設(shè)備文件,這些文件可從現(xiàn)有的系統(tǒng)中拷貝,也可以使用mknod -m命令來創(chuàng)建 。要注意下述操作需要以root的身份進(jìn)行 。由于有太多的文件,并且可能需要編譯 _install,所以建議將這些文件做成一個(gè)文件 。使用如下命令在_install中轉(zhuǎn)換成 root用戶。
# chmod 700 createdev
當(dāng)然,這些文件也可以使用mknod命令創(chuàng)建。
在/etc目錄中創(chuàng)建所需的文件。使用“Exit out of root” 模式,就不會(huì)出現(xiàn)覆蓋/etc的情況。如果目錄“/”出現(xiàn)問題,則/etc也不會(huì)幸免,所以不要拷貝東西至“/”,因?yàn)樗钱?dāng)前正在運(yùn)行的系統(tǒng)。由于要運(yùn)行SSH后臺(tái)程序,所以要為其在/etc/passwd中創(chuàng)建賬號(hào)。在/etc/group文件中 ,root和sshd被加入到了組中。
注意,這里的root賬號(hào)已經(jīng)有一個(gè)密碼 是root。如 果 想 要?jiǎng)?chuàng)建自己的密碼 ,可以從/etc/shadow和/etc/shadow文件中拷貝一個(gè)現(xiàn)有賬號(hào)的密碼,相關(guān)文件請(qǐng)參考Live CD_ Output。
這個(gè)配置使用的是G N U Libc(glibc)。與之相反,“uClibc”更小,易于使用,也更加易于配置SSH。如果沒有拷貝合適的NSS(Name Service Switch),那么SSH 或任何其它需要C語言調(diào)用getpwname的程序都將無法在glibc下正常執(zhí)行 。
在大部分情況下,可以通過“l(fā)dd”命令來發(fā)現(xiàn)哪一個(gè)庫和某一個(gè)應(yīng)用程序具有動(dòng)態(tài)鏈接關(guān)系。
使用如下命令下載 openssh:$wget http://mirror.mcs.anl.gov/openssh/portable/openssh-3.9p1.tar.gz
接下來檢查簽名密鑰:
$ wget http://mirror.mcs.anl.gov/openssh/portable/openssh-3.9p.tar.gz.sin
$ gpg -import DJM-GPG-KEY.asc
$gpg -verify openssh-3.9p1.tar.gzsig openssh-3.9p1.tar.gz
如果是在proj1目錄下,那么需要清除所有現(xiàn)有的SSH文件:
$cd proj1
$find _install/usr/ -iname `ssh*` -exec rm –f {} ;
在proj1/_install目錄中以root身份執(zhí)行以下命令 :
$tar --xzf openssh-3.9131.tar.gz
$cd openssh-3.9p1
$./configure –prefix= #
如果一切正常 ,那么退出chroot
下載內(nèi) 核 ,命令如下:
$wget http://www.kernet.org/pub/linuxkernet/v2.6/linux-2.6.11.tar.gz
$wget http://ww.kernet.org/pub/linux/kernet/v2.6/liinux-2.6.11.tar.gz.sign
獲取正確的鑰匙 ,然后驗(yàn)證簽名 :
$pgp -keyserverwwwkeys.pgp.net -recv-keys 0x517D0F0E
$pgp -verify linux-2.6.11.tar.gz.sign linux-2.6.11.tar.gz
確認(rèn)所獲取的源碼沒問題,解開該源碼包:$tar -xzf linux-2.6.11.tar.gz
啟動(dòng)加載器是第1個(gè)從光盤上運(yùn)行的程序。下面的目錄位于:
“proj1/staging_iso_image/” 目錄中:
$ cd proj1/staging_iso_image
對(duì)各個(gè)文件的描述如下 :
Boot.cat啟動(dòng)目錄 。
Isolinux.bin ISOLINUX啟動(dòng)加載器程序 。
Isolinux.cfg —個(gè)配置文件,用于配置加載內(nèi)核所需的指令。
Linux2.6是內(nèi)核文件,在內(nèi)核加載后,壓縮的映像文件“initrd.bin”被掛載至/Dev/ram0。而后,/sbin/init程序開始運(yùn)行 。 Linux 2.6是內(nèi)核映像,或是通過命令“make bzImage”生成的文件。
配置好軟件后,將重新將系統(tǒng)目錄樹打包壓縮,并制作成最終的ISo映像。在打包以前,需要對(duì)定制過程中生成的臨時(shí)文件進(jìn)行清理,避免浪費(fèi)空間、使最終生成文件大于刻錄盤容量大小而無法刻錄。下面命令是從proj1目錄中執(zhí)行的。如果需要,用戶可查看createiso文件了解整個(gè)過程:
$mkisofs -R -b isolinux/isolinux.bin -c iso linux/boot.cat -no-emul-boot -boot-load-size 4 -bootinfo-table -o iso /cdrom_linux_boot_proj1.iso staging_iso_image/bot
LiveCD創(chuàng)建完成 ?,F(xiàn)在用戶就可以將上述文件刻錄至光盤了。另外,還可以將它裁減至一個(gè)U盤所在的容量內(nèi), 就方便隨身攜帶了。
一個(gè)實(shí)用、方便的個(gè)人化LiveCD就制作好了,本文只介紹了制作一個(gè)基本的LiveCD,其實(shí)還可以根據(jù)自己的需要自行添加各種程序和功能,希望本文能起到拋磚引玉的作用。
[1] (美)拉芙(Love,R.). Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)[M] . 北京:機(jī)械工業(yè)出版社,2006.
[2] 邱世華. Linux操作系統(tǒng)之奧秘[M] . 北京:電子工業(yè)出版社,2008.
[3] (美)博韋,西斯特. 深入理解LINUX內(nèi)核[M] . 北京:中國電力出版社,2007.