Ubuntu定制
大约 3 分钟
相关地址
镜像制作
1、安装必备工具
sudo apt-get install --no-install-recommends -y \
debootstrap \
squashfs-tools \
grub-efi \
xorriso \
dosfstools \
mtools \
grub-pc-bin
2、配置根文件系统
## 1、初始化 rootfs
# 创建必要目录
export CHROOT=$PWD/target
sudo mkdir -p $CHROOT livecd/{casper,boot/grub,EFI/boot}
# 加载基础文件系统
sudo debootstrap --no-check-gpg \
--variant=minbase \
--arch=amd64 \
--components=main,restricted,universe,multiverse \
--include=bash-completion,systemd-sysv,locales,nano,casper,console-setup,netplan.io,whiptail \
--exclude=gcc-9-base,gcc-10-base jammy $CHROOT https://mirrors.aliyun.com/ubuntu
# 配置源
sudo chroot $CHROOT tee /etc/apt/sources.list << EOF
deb https://mirrors.aliyun.com/ubuntu jammy main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu jammy-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu jammy-updates main restricted universe multiverse
EOF
## 2、挂载
sudo mount -B /dev $CHROOT/dev
sudo chroot $CHROOT mount none -t proc /proc
sudo chroot $CHROOT mount none -t sysfs /sys
sudo chroot $CHROOT mount none -t devpts /dev/pts
sudo chroot $CHROOT apt-get update
# 可选
# sudo chroot $CHROOT env DEBIAN_FRONTEND=noninteractive apt-get -y upgrade
## 3、生成 Linux 内核文件
sudo sed -i 's|COMPRESS=lz4|COMPRESS=lzma|' $CHROOT/etc/initramfs-tools/initramfs.conf
sudo chroot $CHROOT apt-get install -y linux-image-generic-hwe-22.04 grub-pc-
sudo mv $CHROOT/boot/vmlinuz-**-**-generic livecd/casper/vmlinuz
sudo mv $CHROOT/boot/initrd.img-**-**-generic livecd/casper/initrd.img
创建默认用户
sudo sed -i 's|\\w|\\W|g' $CHROOT/etc/skel/.bashrc
sudo chroot $CHROOT adduser --gecos '' --disabled-password ubuntu
# 配置网络 https://ubuntu.com/server/docs/network-configuration
sudo tee $CHROOT/etc/netplan/00-networkd.yaml << EOF
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
EOF
## 4、最小化桌面
# 精简版本
sudo chroot $CHROOT env DEBIAN_FRONTEND=noninteractive \
apt-get install -y \
ubuntu-desktop-minimal \
networkd-dispatcher \
netplan.io \
language-pack-gnome-zh-hans
# 安装Chrome浏览器
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
cp ./google-chrome-stable_current_amd64.deb $CHROOT/
sudo chroot $CHROOT env DEBIAN_FRONTEND=noninteractive dpkg -i google-chrome-stable_current_amd64.deb
rm $CHROOT/google-chrome-stable_current_amd64.deb
# 删除Dock工具栏
sudo chroot $CHROOT env DEBIAN_FRONTEND=noninteractive apt remove gnome-shell-extension-ubuntu-dock -y
# 关闭,关机时检查光盘是否挂载
sudo chroot $CHROOT env DEBIAN_FRONTEND=noninteractive systemctl disable unattended-upgrades
# 配置谷歌浏览器自动启动
sudo chroot $CHROOT
su ubuntu
mkdir ~/.config/autostart -p
tee /home/ubuntu/.config/autostart/chrome.desktop<< EOF
[Desktop Entry]
Type=Application
Name=Google Chrome
Exec=/usr/bin/google-chrome-stable --no-first-run --kiosk --noerrdialogs --start-fullscreen https://pan.bjtxra.com
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
EOF
# 屏蔽关机时提示
nano /sbin/casper-stop
[ "$prompt" ] || return 0 修改为: return 0
exit
exit
# 原始版本
sudo chroot $CHROOT env DEBIAN_FRONTEND=noninteractive \
apt-get install -y \
ubuntu-desktop-minimal \
networkd-dispatcher \
netplan.io \
firefox- gedit- eog- \
evince- gnome-characters- \
gnome-user-docs- \
gnome-font-viewer- \
gnome-online-accounts- \
gnome-disk-utility- \
gnome-screenshot- \
gnome-logs- \
ubuntu-docs- \
fonts-deva- \
fonts-noto-cjk-extra\
language-pack-gnome-zh-hans \
snapd- \
cups- \
cups-*- \
ibus- \
ibus-*-
sudo tee $CHROOT/etc/netplan/01-network-manager-all.yaml << EOF
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
EOF
安装字体
sudo unzip $HOME/fonts.zip -d $CHROOT/usr/share/fonts/truetype/microsoft
sudo chroot $CHROOT env DEBIAN_FRONTEND=noninteractive apt-get install -y gnome-tweaks
# 额外字体
echo msttcorefonts msttcorefonts/accepted-mscorefonts-eula select true | sudo chroot $CHROOT debconf-set-selections
sudo chroot $CHROOT apt-get install -y ttf-mscorefonts-installer
sudo chroot $CHROOT debconf-show ttf-mscorefonts-installer
设置默认值
sudo mkdir -p $CHROOT/etc/dconf/profile $CHROOT/etc/dconf/db/local.d
sudo tee $CHROOT/etc/dconf/profile/user << EOF
user-db:user
system-db:local
EOF
sudo tee $CHROOT/etc/dconf/db/local.d/01-desktop << EOF
[org/gnome/desktop/media-handling]
automount='false'
[org/gnome/desktop/interface]
font-name='微软雅黑 11'
document-font-name='微软雅黑 11'
[org/gnome/desktop/wm/preferences]
titlebar-font='微软雅黑 Bold 11'
EOF
sudo chroot $CHROOT dconf update
清理挂载
sudo chroot $CHROOT apt-get autoremove --purge -y
for i in /dev/pts /dev /proc /sys; do sudo umount $CHROOT$i; done
sudo chroot $CHROOT bash -s << EOF
truncate -s 0 /etc/machine-id
ln -fs /etc/machine-id /var/lib/dbus/machine-id
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl
EOF
生成squashfs根文件系统
sudo mksquashfs $CHROOT livecd/casper/filesystem.squashfs -noappend -wildcards -e "var/cache/*" -e "var/log/*" -e "var/lib/apt/lists/*" -e "usr/share/man/*"
sudo chroot $CHROOT dpkg-query -W --showformat='${Package} ${Version}\n' | sudo tee livecd/casper/filesystem.manifest
3、制作 ISO
# 生成引导菜单
sudo tee livecd/boot/grub/grub.cfg << EOF
search --set=root --file /casper/vmlinuz
insmod all_video
set timeout=1
menuentry "Ubuntu Live" {
linux /casper/vmlinuz boot=casper net.ifnames=0 locale=zh_CN.UTF-8 toram quiet splash --
initrd /casper/initrd.img
}
menuentry "Ubuntu persistent" {
linux /casper/vmlinuz boot=casper net.ifnames=0 locale=zh_CN.UTF-8 persistent quiet splash --
initrd /casper/initrd.img
}
EOF
# Create a grub UEFI image
sudo grub-mkstandalone \
--format=x86_64-efi \
--output=livecd/EFI/boot/bootx64.efi \
--locales="" \
--fonts="" \
"boot/grub/grub.cfg=livecd/boot/grub/grub.cfg"
sudo LC_CTYPE=C bash -s << EOF
dd if=/dev/zero of=efiboot.img bs=1M count=3 && \
mkfs.vfat efiboot.img && \
mmd -i efiboot.img efi efi/boot && \
mcopy -i efiboot.img livecd/EFI/boot/bootx64.efi ::efi/boot/
EOF
# Create a grub BIOS image
sudo grub-mkstandalone \
--format=i386-pc \
--output=core.img \
--install-modules="linux16 linux normal iso9660 biosdisk memdisk search tar ls" \
--modules="linux16 linux normal iso9660 biosdisk search" \
--locales="" \
--fonts="" \
"boot/grub/grub.cfg=livecd/boot/grub/grub.cfg"
cat /usr/lib/grub/i386-pc/cdboot.img core.img > bios.img
# 制作 UEFI 启动的 ISO
sudo xorriso -as mkisofs \
-iso-level 3 \
-full-iso9660-filenames \
-volid "UBUNTU" \
-output "/opt/Ubuntu-22.04-LiveCD-x86_64.iso" \
-eltorito-boot boot/grub/bios.img \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
--eltorito-catalog boot/grub/boot.cat \
--grub2-boot-info \
--grub2-mbr /usr/lib/grub/i386-pc/boot_hybrid.img \
-eltorito-alt-boot \
-e EFI/efiboot.img \
-no-emul-boot \
-append_partition 2 0xef efiboot.img \
-graft-points "livecd" "/EFI/efiboot.img=efiboot.img" "/boot/grub/bios.img=bios.img"