注:本文为转载,最近有空把之前的项目复盘,顺便保存资料到网络,免得忘记。这是两年前的项目,资料是在外网找到的,已经忘记原文链接了,选择转载要贴原文链接,不得已发原创,请原作者原谅,如有冒犯请联系本人删除。
1、 下载ubuntn16.04.4安装光盘,文件为:ubuntu-16.04.4-desktop-amd64.iso
2、 使用安装光盘安装一个初始ubuntu系统,保证系统能够连通internet。
3、 打开终端,并运行:
sudo apt-get install squashfs-tools genisoimage -y
4、 创建一个工作目录,保证空间大于10G
mkdir ~/custom-img
5、 拷贝ubuntu光盘文件到工作目录(更改ubuntu-16.04.4-desktop-amd64.iso为ubuntu.iso)
cp /path/to/saved/ubuntu.iso ~/custom-img
cd ~/custom-img
备注:/path/to/saved/ubuntu.iso为基本光盘目录
6、 解压缩源光盘文件
mkdir mnt
sudo mount -o loop ubuntu.iso mnt
mkdir extract
sudo rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract
7、 执行以下命令
sudo unsquashfs mnt/casper/filesystem.squashfs
sudo mv squashfs-root edit
8、 拷贝域名解析文件
sudo cp /etc/resolv.conf edit/etc/
9、 挂载重要工作目录
sudo mount --bind /dev/ edit/dev
sudo chroot edit
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
10、 切换工作目录
export HOME=/root
export LC_ALL=C
dbus-uuidgen > /var/lib/dbus/machine-id
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl
11、 卸载不需要的软件包(可以不卸载,package1 package2 package3为包名,条件允许可考虑卸载游戏等不需要的软件)
apt-get purge package1 package2 package3
注意:不要使用apt-get remove卸载不需要软件,此命令会保留配置文件。Apt-get purge会删除软件及对应的配置文件。
12、 支持I386架构软件
dpkg --add-architecture i386
13、 更新软件应答包及现有系统软件包
apt-get update && apt-get upgrade
14、 安装需要预置到初始系统中的软件包(重要)
apt-get install package1 package2 package3
备注:我安装的软件
python3.6、docker18.09.1、nvidia-docker2.0.3、nvidia驱动384.13。软件具体安装方式见相关文档。
15、 清除临时文件
apt-get autoremove && apt-get autoclean
rm -rf /tmp/* ~/.bash_history
rm /var/lib/dbus/machine-id
rm /sbin/initctl
dpkg-divert --rename --remove /sbin/initctl
16、 卸载挂载目录
umount /proc || umount -lf /proc
umount /sys
umount /dev/pts
exit
sudo umount edit/dev
17、 创建新的manifest文件
sudo chmod +w extract/casper/filesystem.manifest
sudo chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' | sudo tee extract/casper/filesystem.manifest
sudo cp extract/casper/filesystem.manifest extract/casper/filesystem.manifest-desktop
sudo sed -i '/ubiquity/d' extract/casper/filesystem.manifest-desktop
sudo sed -i '/casper/d' extract/casper/filesystem.manifest-desktop
18、 压缩文件系统
sudo mksquashfs edit extract/casper/filesystem.squashfs -b 1048576
19、 更新文件系统大小
printf $(sudo du -sx --block-size=1 edit | cut -f1) | sudo tee extract/casper/filesystem.size
20、 删除旧的MD5校验
cd extract
sudo rm md5sum.txt
21、 生成新的校验信息
find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt
22、 生成ISO文件
sudo genisoimage -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 ../name-of-your-custom-image.iso .
备注:name-of-your-custom-image.iso为新生成光盘的文件名,此时包含新软件包的ISO文件制作完成,可独立安装,安装完成后预装软件都已存在并可正常使用。
此步骤中最重要的是安装自己的软件包。