李晨光
(中铁工程设计咨询集团有限公司信息中心,北京100055)
LiveCD是一种无需安装、完全从CDROM启动的瘦Linux版 。当它运行时所有的工具都存放在CDROM上或者内存里,而不是硬盘上,这是和传统的操作系统最大区别。各Live CD在功能上的区分并不是绝对的,因为大部分Live CD本身就是一个非常完整的Linux系统,可以用它来实现各种功能 。
计算机加电以后, 由位于主板上的BIOS负责引导操作系统。Linux平台上主要的引导程序(bootloader)是LILO(Linux Loader)和GRUB。这两个引导程序分为2部分, 第1部分(Firststage)尺寸很小, 以便装入MBR,它负责引导第2部分(Second stage)来完成主要的引导工作。当第2部分加载后,它根据预先的配置显示选单界面,供用户选择引导的操作系统及启动参数。接下来,引导程序将内核映像文件和初始Ramdisk(initrd)映像加载入内存,initrd映像用于存放一些用于系统引导的关键驱动模块,而这些文件又无法从磁盘上的文件系统加载。映像加载完毕后,控制权就由引导程序交给Linux内核。Linux内核启动后,首先会初始化,并配置系统的可用内存以及各种相关设备,解压并挂载内存中的initrd映像、加载其中的驱动程序,初始化和文件系统相关的各种虚拟设备。最后, 内核加载根(/)文件系统、释放不再使用的内存,执行第1个程序/sbin/init。/sbin/init程序是系统启动后运行的第1个进程,它根据配置文件/etc/inittab依次执行/etc/rcx.d目录中的启动脚本,由这些脚本完成各种初始化,启动各种服务程序。至此,Linux系统已经引导完成了。
从http://easynews.dl.sourceforge.net/sourceforge/souptonuts/cdrom_linux_boot_proj1.iso下载文件cdrom_linux_boot_proj1.iso,并将其刻录至光盘之上。使用该光盘重新启动系统。目的是为了检测内核中是否编译了所需的网络、视频和键盘(包含USB)驱动器。如果有重要的设备没有被识别,那么可以将其加到内核之中。
从http://prdownloads.sourceforge.net/souptonuts/proj1.tar.gz下载完整的项目环境 proj1.tar.gz。该软件包中包含了所有用于创建和 定制cdrom_linux_boot_ proj1.iso所需的东西,这其中包括BusyBox源码、各种库和SSH。目录 “_install”包含了用于SSH、init和tcpdump所需的库。2.6.11内 核 的 “.config”可以在文档目录中找到。此外,staginig_iso_image目录包含了一份内核bzImage以及isolinux启动加载器。proj1.tar.gz文件的大小是l1 MB,由于其包含了除源代码以外用户所需的所有东西,所以只需再下载内核代码即可。下 载地址为http://www.kernel.org/pub/linux/kernel/v2.6/。
在后面的步骤中,介绍配置和安装最新内核的方法。在解压proj1.tar.gz文件时,解压该文件会创建所有必需的字符和块设备,所以需要以root的身份使用“tar -xzf”命令进行解压缩。
用如下命令检查下载完整性:$md5sum proj1.tar.gz
用如下命令解压解包文件:#tar -xzf proj1.tar.gz
转换成root身份,以确保可以创建所有/dev设备。完成上述步骤后,这时可以使用如下命令查看全部的设备:[root@third-fl-71_install] #lS -l dev。
如果使用普通账号进行上述步骤 ,会发现很多文件都没有被创建 。执行createiso脚本:#./createiso该脚本会执行很多操作,它会以 ./cdrom为挂载点创建一个loop back设备,会拷贝_install的内容。之后,它会卸载./cdrom。接下来,它会拷贝staging目录中的内容 。并且会创建一个可启动的CD映像 ,还会创建一个虚拟的文件系统。
从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
如果用户不想自己写配置文件 ,可以从以下网址:http://prdownloads.sourceforge.net/souptonuts/chiricobusybox.config下载一个样例文件。注意下载完成后,将其文件名更改为 “.config”。具体命令如下 :
$cd busybox-1.00
$wget http://osdn.dl.soureceforge.net/sourceforget/souptonuts/chiricobusybox.onfig
$cp chiricobusybox.config .config
可以运行“make”和 “make install”来编译安装。在上述命令执行完成的最后阶段,会显示如下信息“work properly.”,将BusyBox的权限改为root:$chmod 4755 ./_install/bin/busybox
需要在_install下创建一些目录。首先查看当前目录的内容,创建 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目录中是必须的设备文件,这些文件可从现有的系统中拷贝,也可以使用mknod -m命令来创建 。要注意下述操作需要以root的身份进行 。由于有太多的文件,并且可能需要编译 _install,所以建议将这些文件做成一个文件 。使用如下命令在_install中转换成 root用户。
# chmod 700 createdev
当然,这些文件也可以使用mknod命令创建。
在/etc目录中创建所需的文件。使用“Exit out of root” 模式,就不会出现覆盖/etc的情况。如果目录“/”出现问题,则/etc也不会幸免,所以不要拷贝东西至“/”,因为它是当前正在运行的系统。由于要运行SSH后台程序,所以要为其在/etc/passwd中创建账号。在/etc/group文件中 ,root和sshd被加入到了组中。
注意,这里的root账号已经有一个密码 是root。如 果 想 要创建自己的密码 ,可以从/etc/shadow和/etc/shadow文件中拷贝一个现有账号的密码,相关文件请参考Live CD_ Output。
这个配置使用的是G N U Libc(glibc)。与之相反,“uClibc”更小,易于使用,也更加易于配置SSH。如果没有拷贝合适的NSS(Name Service Switch),那么SSH 或任何其它需要C语言调用getpwname的程序都将无法在glibc下正常执行 。
在大部分情况下,可以通过“ldd”命令来发现哪一个库和某一个应用程序具有动态链接关系。
使用如下命令下载 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目录下,那么需要清除所有现有的SSH文件:
$cd proj1
$find _install/usr/ -iname `ssh*` -exec rm –f {} ;
在proj1/_install目录中以root身份执行以下命令 :
$tar --xzf openssh-3.9131.tar.gz
$cd openssh-3.9p1
$./configure –prefix= #
如果一切正常 ,那么退出chroot
下载内 核 ,命令如下:
$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
获取正确的钥匙 ,然后验证签名 :
$pgp -keyserverwwwkeys.pgp.net -recv-keys 0x517D0F0E
$pgp -verify linux-2.6.11.tar.gz.sign linux-2.6.11.tar.gz
确认所获取的源码没问题,解开该源码包:$tar -xzf linux-2.6.11.tar.gz
启动加载器是第1个从光盘上运行的程序。下面的目录位于:
“proj1/staging_iso_image/” 目录中:
$ cd proj1/staging_iso_image
对各个文件的描述如下 :
Boot.cat启动目录 。
Isolinux.bin ISOLINUX启动加载器程序 。
Isolinux.cfg —个配置文件,用于配置加载内核所需的指令。
Linux2.6是内核文件,在内核加载后,压缩的映像文件“initrd.bin”被挂载至/Dev/ram0。而后,/sbin/init程序开始运行 。 Linux 2.6是内核映像,或是通过命令“make bzImage”生成的文件。
配置好软件后,将重新将系统目录树打包压缩,并制作成最终的ISo映像。在打包以前,需要对定制过程中生成的临时文件进行清理,避免浪费空间、使最终生成文件大于刻录盘容量大小而无法刻录。下面命令是从proj1目录中执行的。如果需要,用户可查看createiso文件了解整个过程:
$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创建完成 。现在用户就可以将上述文件刻录至光盘了。另外,还可以将它裁减至一个U盘所在的容量内, 就方便随身携带了。
一个实用、方便的个人化LiveCD就制作好了,本文只介绍了制作一个基本的LiveCD,其实还可以根据自己的需要自行添加各种程序和功能,希望本文能起到抛砖引玉的作用。
[1] (美)拉芙(Love,R.). Linux内核设计与实现[M] . 北京:机械工业出版社,2006.
[2] 邱世华. Linux操作系统之奥秘[M] . 北京:电子工业出版社,2008.
[3] (美)博韦,西斯特. 深入理解LINUX内核[M] . 北京:中国电力出版社,2007.