目前,在 Linux 社区, Ubuntu 的系统是最受桌面用户欢迎的,基本上使用 Linux 的初学者都会选择 Ubuntu 系统,这主要是因为 Ubuntu 系统有着强大的 Linux 社区作为后续支持,另外, Ubuntu 系统的易用性比较强,再加上 Ubuntu 系统在设计时,比较注意稳定性和安全性。同时 Ubuntu 系统还有一点就是可玩性比较强,可以让用户根据自己的需要去定制和修改,而且修改方法比较简单。现在我就简单的介绍一下如何根据 Ubuntu 系统,定制一个自己的 Live CD 产品。
前期准备工作
在制作 Live CD 前,先装入一个 Ubuntu 的系统是必须的。另外要根据自己的需要下载一个要改动的 Ubuntu Live CD 原型,你可以登录网站 http://releases.ubuntu.com/ 去下载 。然后,还需要做如下几步:
sudo aptitude install squashfs-tools genisoimage
这一步的目的是要装入 squashfs 文件系统处理工具以及 ISO 制作工具。
接下来执行 sudo modprobe squashfs 。其目的是加载 squashfs 模块,以供后面对 Ubuntu Live CD 光盘中的 squashfs 格式的文件进行处理。
为了介绍方便,接下来我将以 ubuntu 9.04 的 Live CD 产品为例进行介绍。
展开光盘中的内容
一、 创建一个环境。具体的执行步骤入下:
mkdir ~/live
mv ubuntu-9.04-desktop-i386.iso ~/live
cd ~/live
二、 挂载光盘镜像
mkdir mnt
sudo mount -o loop ubuntu-9.04-desktop-i386.iso mnt
三、 展开镜像文件中的内容到 extract-cd 目录下
mkdir extract-cd
rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd
展开桌面系统
一、 挂载 squashfs 文件系统
mkdir squashfs
sudo mount -t squashfs -o loop mnt/casper/filesystem.squashfs squashfs
二、 展开 squashfs 文件系统中的内容到 edit 目录下
mkdir edit
sudo cp -a squashfs/* edit/
改变设置,以 root 用户身份来编辑桌面系统
如果你需要网络,则将 resolv.conf 文件复制到展开的 squashfs 文件系统目录 edit 目录下。具体做法是:
sudo cp /etc/resolv.conf edit/etc/
若需要你的计算机配置的话,请复制 hosts 文件到 edit/etc/ 目录下:
sudo cp /etc/hosts edit/etc/
sudo mount --bind /dev/ edit/dev
sudo chroot edit
mount -t proc none /proc
mount -t sysfs none /sys
【注意:这个挂载对后续工作是很有用的。如果你后来决定删除或编辑目录 , 请确保卸载之后再进行 , 否则你的主机系统暂时将成为无用,直到重新启动】
执行下面的操作来解决本地花钱的问题:
export HOME=/root
export LC_ALL=C
进行自定义
Apt-get:
先查看安装的包的情况,具体的执行命令是:
dpkg-query -W --showformat='${Installed-Size} ${Package}/n' | sort -nr | less
这条命令的执行结果是,根据包的尺寸大小来排列安装的具体包。
当要删除不用的包时,执行命令:
aptitude purge package-name
自定义启动后的背景:
一般背景图片都放在了 /usr/share/backgrounds 目录下。所以先将要设置的背景图片放置在 /usr/share/backgrounds 目录下。然后修改默认的“注册表”的值。具体的 gconf 值是 /usr/share/gnome-background-properties/ubuntu-wallpapers.xml 和 /usr/share/gconf/defaults/16_ubuntu-wallpapers 文件中的 /usr/share/backgrounds/warty-final-ubuntu.png 。将值 /usr/share/backgrounds/warty-final-ubuntu.png 改成你要设置的图片的绝对路径即可。详细设置,你可以参照 Desktop background bug 。
修改默认 gconf 设置【字体, panel 等】:
要想修改默认的 gconf 值,你必须先添加你想改的值到 /etc/gconf/gconf.xml.defaults/%gconf-tree.xml 文件中。在该文件中添加 gconf 值将改变 gnome 或者应用程序的默认值。因此你可以根据自己的需求,去修改字体,背景图等等。
与以前修改不同的是,在这里你需要执行 gconftool-2 来修改。具体的做法是,你先进入 chroot 的环境,然后运行下面的命令即可:
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type string --set yourkey "yourvalue"
这里的字符串 yourkey 和 yourvalue 指的是你要改动的类型,键名称和键值。所以一定要注意。
几个默认值一次性修改的方法:
一个个值去设置 gconf 的值比较麻烦,下面介绍一个比较好的方法来一次性设置多个键值。要想设置,最好的办法是先使用一个测试用户,根据自己的需要将相应的值都设置好,然后执行下面的命令将值导入到一个 xml 文件中:
gconftool-2 --dump /the/settings/branch/you/need > ~/live/your-new-settings.xml
sudo chown root:root ~/live/your-new-settings.xml # 修改生成的文件为 root 用户权限文件
sudo mv ~/live/your-new-settings.xml ~/live/edit/your-new-settings.xml # 复制该文件到你要执行的目录下。
此时再以 chroot 进入到该环境,再执行
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --load /your-new-settings.xml
rm /your-new-settings.xml # 删除该文件,以节省空间。
这种做法在目前的修改中是最常用的。一般你可以根据自己的个人习惯,或者是兴趣爱好,先将自己的系统设置好,然后再将自己的 gconf 值导出去,到了 live CD 系统中,再执行这样的操作安装进去即可。
为安装的开始设置默认的语言
这个操作跟刚才的 chroot 操作不一样,这个操作是要对一个 gfxboot 的工具包进行实质性的修改和编译操作。具体的操作如下:
sudo –s # 切换用户到 root 用户下
aptitude install dpkg-dev # 网络安装 dpkg-dev 包。这个包是编译时必须的。
apt-get source gfxboot-theme-ubuntu gfxboot # 获取 gfxboot 的源码。
cd gfxboot-theme-ubuntu*/ # 进入到 gfxboot 的目录
make DEFAULT_LANG=fi # 根据指定的语言进行编译
sudo cp -af boot/* ../extract-cd/isolinux/ # 复制编译好的文件到指定的目录下去。
Exit # 退出操作。
在这里 DEFAULT_LANG=fi 指的是设置一个默认的语言。如果是要设置简体中文,则将 fi 改成 zh_CN 即可!但是这个设置不改变 F2 中的语言列表清单。
另外一种做法,就是不去重编译 gfxboot ,直接在 isolinux 目录下创建一个名为 lang 的文件,在里面写上你要指定的默认语言名称即可。例如要制定简体中文,则在里面写上 zh_CN 即可。
自定义限制:
为了保障安装能够顺利的启动,你必须在自定义修改完成后,确认没有任何用户使用 UID >=999 。否则将无法完成安装初始化和启动。具体的做法是:
grep '^[^:]*:[^:]*:[1-9][0-9][0-9][0-9]:' /etc/passwd
grep '^[^:]*:[^:]*:[12][0-9][0-9][0-9][0-9]:' /etc/passwd
查询是否有任何值在这个范围内。如果有任何输出,请执行usermod -u 500 $hit
命令来修改。
其他定制:
你可能希望编辑文件 /etc/default 来改变系统启动时的动作。你可能也想编辑 /etc/profile 文件, /etc/bash.bashrc, 和 /etc/bash_completion 来改变系统中的所有用户的登录设置。有不可能直接编辑默认的 Live CD 用户(例如 casper , ubuntu , 或 user )。但你可以直接编辑 root 用户的默认文件( /root 是在 chroot 环境下。)
如果你想改变 Live CD 的默认时钟设置,你可以运行下面的命令:
dpkg-reconfigure tzdata
如果你添加了一个本地化的设置,并且你想将其设置成默认设置,你可以修改 /etc/default/locale 文件。命令是:
locale-gen new_locale
update-locale LANG=new_locale LANGUAGE=new_locale LC_ALL=new_locale
这个设置必须要以 root 用户的身份在 chroot 的环境下进行。
高级自定义设置
定制 Live CD 的内核
你可以根据自己的需要来升级 Live CD 默认的启动内核,也可以利用一个自己定制过的内核来改变 Live CD 的启动。具体的做法是复制你想去替换的 vmlinuz 和 initrd 到 extract-cd/casper 目录下,覆盖同名文件即可。当然 vmlinuz 和 initrd 文件的命名规则一定要遵守这个规则。当然,如果你的 vmlinuz 和 initrd 的名称不是这个,可以改变名称,但是要保证 extract-cd/casper 目录下的名称一定是这两个。例如:
sudo cp edit/boot/vmlinuz-2.6.15-26-k7 extract-cd/casper/vmlinuz
sudo cp edit/boot/initrd.img-2.6.15-26-k7 extract-cd/casper/initrd.gz
改变初始化脚本
你可以编辑文件 edit/usr/share/initramfs-tools/scripts/casper-bottom/* 来修改初始化启动脚本。例如修改主机名称等。例如:
sudo nano edit/usr/share/initramfs-tools/scripts/casper
来编辑用户名和主机名。
sudo nano edit/usr/share/initramfs-tools/scripts/casper-bottom/10adduser
来修改 LiveCD 用户的密码。
重编译 initrd
当你修改完内核,编辑过初始化脚本,并且添加了新的内核模块后,你需要重新编译一下 initrd.gz 文件来代替 casper 目录下的同名文件。以保证能够顺利的正常的启动。具体做法是:
sudo chroot edit
mkinitramfs -o /initrd.gz 2.6.15-26-k7
(记得使用你当前要修改的内核版本来代替这里跟的内核版本。)
当你重编译完成后,记得退出 chroot 环境,并将编译出来的文件放置到 extract-cd/casper/ 目录下。
exit
mv edit/initrd.gz extract-cd/casper/
清楚 Live CD 环境中的垃圾文件
因为 CD 空间有限,一定要在最后,记得删除那些不再用的临时文件以便节省空间。一个典型的例子就是在最后,清楚那些下载下来的包文件。具体的做法是 aptitude clean 。或者删除临时文件 rm -rf /tmp/* ~/.bash_history 。再或者是删除 nameserver 文件。做法是 rm /etc/resolv.conf
在完成清理工作后,记得卸载刚才加入的挂载,并推出 chroot 环境。做法是:
umount /proc
umount /sys
exit
sudo umount edit/dev
注意: 在卸载 /proc 目录时,如果无法卸载,可以使用 umount -lf /proc 命令来强行卸载。
生成最终的 ISO 镜像文件
1. 重新生成要安装的文件列表。具体的做法是:
chmod +w extract-cd/casper/filesystem.manifest
sudo chroot edit dpkg-query -W --showformat='${Package} ${Version}/n' > extract-cd/casper/filesystem.manifest
sudo cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop
sudo sed -i '/ubiquity/d' extract-cd/casper/filesystem.manifest-desktop
sudo sed -i '/casper/d' extract-cd/casper/filesystem.manifest-desktop
2. 接下来重新制作 squashfs 文件:
sudo rm extract-cd/casper/filesystem.squashfs
sudo mksquashfs edit extract-cd/casper/filesystem.squashfs -nolzma
注意: -nolzma 操作仅限于 9.04 版本。
3. 在 extract-cd/README.diskdefines 文件中 设置一个镜像文件名。具体做法是:
sudo vim extract-cd/README.diskdefines
4. 生成新的 MD5 校验码到 md5sum.txt 文件中:
sudo -s
rm extract-cd/md5sum.txt
(cd extract-cd && find . -type f -print0 | xargs -0 md5sum > md5sum.draft)
cat extract-cd/md5sum.draft | grep -v md5sum.draft | grep -v isolinux/boot.cat > extract-cd/md5sum.txt
rm extract-cd/md5sum.draft
exit
5. 创建最终的 ISO 文件,做法是:
cd extract-cd
sudo mkisofs -D -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-9.04.1-desktop-i386-custom.iso .
测试光盘镜像
如果你的机器不支持 VT 虚拟化技术,你可以使用 qemu 虚拟机来测试
qemu -cdrom ubuntu-9.04.1-desktop-i386-custom.iso -boot d -m 512
如果你的机器支持 VT 虚拟化技术,你可以使用
kvm -cdrom ubuntu-9.04-desktop-i386-custom.iso -boot d -m 512
来测试。当然你也可以使用 virtualbox-ose 来测试一下。这个工具是免费的,而且 Ubuntu 系统中就自带了。
制作光盘
制作光盘很简单,具体的命令是:
cdrecord dev=/dev/cdrom ubuntu-9.04-desktop-i386-custom.iso
总结:
总体来说,自定义 Ubuntu 的 Live CD 光盘,实际很简单,具体的制作有如下几个步骤:
1. 寻找好自己要定制的母版;
2. 展开 ISO 光盘;
3. 根据自己的需求修改 squashfs 文件;
4. 清理垃圾文件;
5. 整合生成光盘镜像;
6. 测试新的光盘镜像;
7. 刻录新光盘。
参考文献:
https://help.ubuntu.com/community/LiveCDCustomization