Ubuntu定制live cd

最近在捣鼓系统的制作和安装(从写的文章也可以隐约看出)。之前研究了一下debootstrap,后面又发现live cd其实也是可以自己定制的。本文就简单记录一下自己的学习笔记。

在制作过程中,要用到和squash文件系统有关的压缩和解压工具,因而需要安装:

1
sudo apt-get install squashfs-tools

本文使用的镜像是ubuntu目前最新版本:ubuntu-14.04.1-desktop-i386.iso 定制过程十分简单:解压iso->解压iso光盘的squash根文件系统->用chroot切换系统->自定义软件(删除或添加)->压缩成squash文件->重新制作iso光盘文件。

1、解压iso文件。

1
2
3
4
5
6
pwd
/home/latelee/iso
mkdir foo newiso
sudo mount ubuntu-14.04.1-desktop-i386.iso foo/ -o loop
cp -v  -a  foo/* newiso/
sudo umount foo/

这一步要注意看foo下的.disk目录有没有拷贝成功,我就是因此没有拷贝这个隐藏的目录而失败了很多次后才发现的。

2、解压filesystem.squashfs文件

1
2
3
4
5
cd newiso
sudo unsquashfs casper/filesystem.squashfs
(复制到上一层,不再占用newiso空间了)
mv squashfs-root ../
cd ..

3、切换新系统

1
2
3
4
5
(拷贝主机的DNS配置到新的目录,因为要连外网)  
cp /etc/resolv.conf   squashfs-root/etc
(使用chroot进入新的系统)
chroot  squashfs-root
mount none  /proc -t  proc

进入新的系统后输入命令遇到错误:

1
Fatal Python error: Failed to open /dev/urandom

解决十分简单,创建该文件即可:

1
mknod /dev/urandom c 1 9

4、自制定

在新的系统中,可以自行添加软件,比如像gcc等,ubuntu默认是没有安装的,可以自己时行安装。而像office这类比较大的软件,不需要的,可以删除。我曾经乱删一些自认为不必要的文件,结果发现做出来的live cd启动不了,后来不敢随便删除了。

1
2
3
4
(退出新系统,回到原来的主机系统)
exit
pwd
/home/latelee/iso

5、重新配置,压缩新的根文件系统

这一点主要是做什么,我也没研究很深,ubuntu官网有教程的,直接抄。

1
2
3
4
5
6
7
8
9
10
11
12
chmod +w newiso/casper/filesystem.manifest
sudo chroot squashfs-root dpkg-query -W --showformat='${Package} ${Version}\n' newiso/casper/filesystem.manifest
sudo cp newiso/casper/filesystem.manifest newiso/casper/filesystem.manifest-desktop
sudo sed -i '/ubiquity/d' newiso/casper/filesystem.manifest-desktop
sudo sed -i '/casper/d' newiso/casper/filesystem.manifest-desktop
sudo rm newiso/casper/filesystem.squashfs
sudo mksquashfs squashfs-root newiso/casper/filesystem.squashfs
printf $(sudo du -sx --block-size=1 squashfs-root | cut -f1) newiso/casper/filesystem.size
(注:最好用cat newiso/casper/filesystem.size查看一下大小)
cd newiso
sudo rm md5sum.txt
find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt

6、重新制作iso光盘

1
2
sudo mkisofs -D -r -V "My ubuntu-14.04.1" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-14.04.1-desktop-i386-custom.iso .
cd ..

参考:
https://help.ubuntu.com/community/LiveCDCustomization
https://hev.cc/5.html
http://forum.ubuntu.org.cn/viewtopic.php?f=161&t=134333
注: 本文所述命令、目录,懂其意思即可,不一定要局限于所有路径的做法(如最后几步,我实际上是用脚本来完成的)。

李迟,于2014年10月21日中午,发表前好几天已写好文章