如何制作自定义的Ubuntu ISO以进行完全离线安装?

我在印度工作,我们并不是到处都有可靠的互联网。我想要构建一个具备以下功能的Ubuntu安装程序ISO文件:
- 所有专有驱动程序应该可以离线使用 - 至少有一个完整的语言包(比如英语/美国)应该可以离线使用 - 特定的额外软件包 - 最后,像flashinstaller或Chrome这样在安装过程中从网络下载数据的功能也应该正常工作。
我该如何开始构建这样的东西?

7从这里开始:http://askubuntu.com/questions/409607/how-to-create-a-customized-ubuntu-server-iso/409651#409651,并将您想要的所有软件包添加到您创建的DVD中。它是基于实时服务器DVD制作的(比基于实时桌面DVD制作的那个稍微容易使用一些:http://askubuntu.com/questions/48535/how-to-customize-the-ubuntu-live-cd/49679#49679)。 - Rinzwind
我调查了Remastersys和Ubuntu-Builder,但是这两个项目似乎都已经停止维护了。 - curiousboy
我更喜欢手动的方法。虽然需要额外花费一些时间来理解,但之后基础都是相同的,只有实时DVD的内容会发生变化。而且这样做本身就是手动工作。你可以将基础设置打包并重复使用(或者为每个工作实时DVD创建一个时间戳,以便可以回退到旧版本)。 - Rinzwind
1个回答

测试一下: 自定义Ubuntu桌面CD 安装所需工具
sudo su

apt-get install squashfs-tools genisoimage

http://releases.ubuntu.com/下载官方的桌面版光盘镜像文件, 将其复制到一个空目录中。
mkdir ~/livecdtmp

mv ubuntu-14.04.1-desktop-i386.iso ~/livecdtmp

cd ~/livecdtmp

挂载桌面.iso文件
sudo su

mkdir mnt

mount -o loop ubuntu-14.04.1-desktop-i386.iso mnt

将.iso文件的内容提取到名为'extract-cd'的目录中。
sudo su

mkdir extract-cd

rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd

提取桌面系统和SquashFS文件系统
sudo su

unsquashfs mnt/casper/filesystem.squashfs

mv squashfs-root edit

准备和chroot
sudo su

cp /etc/resolv.conf edit/etc/

cp /etc/hosts edit/etc/

mount --bind /dev/ edit/dev

chroot edit

mount -t proc none /proc

mount -t sysfs none /sys

mount -t devpts none /dev/pts

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

移除、安装和升级软件包。

如果您修改了内核、init 脚本或添加了新的内核模块,则需要重新构建 initrd.lz 文件并将其替换到 casper 目录中。

sudo su

chroot edit mkinitramfs -o /initrd.gz 3.13.0-25-generic

将内核版本替换为CD启动时使用的版本 - 可在edit/lib/modules中找到。
退出chroot监狱并将此文件移动到extract-cd/casper。
exit

mv edit/initrd.lz extract-cd/casper/

删除不再需要的临时文件。
apt-get clean
Or
rm -rf /tmp/* ~/.bash_history

如果您安装了软件,请确保运行。
rm /var/lib/dbus/machine-id
&
rm /sbin/initctl

dpkg-divert --rename --remove /sbin/initctl

卸载特殊文件系统并退出chroot
umount /proc || umount -lf /proc

umount /sys

umount /dev/pts

exit

sudo su 

umount edit/dev

生成CD映像和压缩文件系统
sudo su

chmod +w extract-cd/casper/filesystem.manifest

chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' > extract-cd/casper/filesystem.manifest

cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop

sed -i '/ubiquity/d' extract-cd/casper/filesystem.manifest-desktop

sed -i '/casper/d' extract-cd/casper/filesystem.manifest-desktop

rm extract-cd/casper/filesystem.squashfs

mksquashfs edit extract-cd/casper/filesystem.squashfs -comp xz -e edit/boot

printf $(sudo du -sx --block-size=1 edit | cut -f1) > extract-cd/casper/filesystem.size

nano extract-cd/README.diskdefines

cd extract-cd

rm md5sum.txt

find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt

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-14.04.1-desktop-i386-custom.iso .

烧录图像到光盘
cdrecord dev=/dev/cdrom ubuntu-14.04.1-desktop-i386-custom.iso

谢谢你的回答,非常有帮助。还有几件事情,initrd.gz 是否已被 initrd.lz 替代了?在“退出 chroot 环境”之后,所有步骤(例如从“删除不再需要的临时文件。”到创建镜像的部分)都应该在主机系统上运行以创建镜像吗? - Dr.Avalanche