跳至主要內容

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"