如何为完全离线安装制作自定义 Ubuntu ISO?

cur*_*boy 5 iso system-installation

我在印度,我们没有到处都有可靠的互联网。我想构建一个具有以下功能的 Ubuntu 安装程序 ISO:

  • 所有专有驱动程序都应可离线使用
  • 至少一个完整的语言包(比如英语/美国)应该可以离线使用
  • 某些额外的包裹
  • 最后,像 flashinstaller 或 Chrome 这样在安装时从网络下载数据的东西也应该可以工作。

我该如何去建造这样的东西?——

kyo*_*ake 9

测试:自定义 Ubuntu 桌面 CD 安装所需的工具

sudo su

apt-get install squashfs-tools genisoimage
Run Code Online (Sandbox Code Playgroud)

http://releases.ubuntu.com/下载官方桌面 CD 将其复制到一个空目录中

mkdir ~/livecdtmp

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

cd ~/livecdtmp
Run Code Online (Sandbox Code Playgroud)

挂载桌面 .iso

sudo su

mkdir mnt

mount -o loop ubuntu-14.04.1-desktop-i386.iso mnt
Run Code Online (Sandbox Code Playgroud)

将 .iso 内容提取到目录 'extract-cd'

sudo su

mkdir extract-cd

rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd
Run Code Online (Sandbox Code Playgroud)

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

sudo su

unsquashfs mnt/casper/filesystem.squashfs

mv squashfs-root edit
Run Code Online (Sandbox Code Playgroud)

准备和 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
Run Code Online (Sandbox Code Playgroud)

自定义在安装或升级软件包之前,您需要运行

dbus-uuidgen > /var/lib/dbus/machine-id

dpkg-divert --local --rename --add /sbin/initctl

ln -s /bin/true /sbin/initctl
Run Code Online (Sandbox Code Playgroud)

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

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

sudo su

chroot edit mkinitramfs -o /initrd.gz 3.13.0-25-generic
Run Code Online (Sandbox Code Playgroud)

(将内核版本替换为 CD 将使用的内核版本 - 这可以在 edit/lib/modules 中找到)

退出 chroot jail 并将此文件移动到 extract-cd/casper:

exit

mv edit/initrd.lz extract-cd/casper/
Run Code Online (Sandbox Code Playgroud)

删除不再需要的任何临时文件。

apt-get clean
Or
rm -rf /tmp/* ~/.bash_history
Run Code Online (Sandbox Code Playgroud)

如果您安装了软件,请务必运行

rm /var/lib/dbus/machine-id
&
rm /sbin/initctl

dpkg-divert --rename --remove /sbin/initctl
Run Code Online (Sandbox Code Playgroud)

卸载特殊文件系统并退出 chroot

umount /proc || umount -lf /proc

umount /sys

umount /dev/pts

exit

sudo su 

umount edit/dev
Run Code Online (Sandbox Code Playgroud)

制作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 .
Run Code Online (Sandbox Code Playgroud)

将映像刻录到 CD

cdrecord dev=/dev/cdrom ubuntu-14.04.1-desktop-i386-custom.iso
Run Code Online (Sandbox Code Playgroud)