制作iso启动镜像

·

使用lb-build基于Debian上游制作你的Linux发行版

apt install live-build
mkdir TestOS
cd TestOS

# Ubuntu 系统的 live-build 会自动注入 Ubuntu 默认包: 使用debian环境构建
podman pull debian:bookworm
podman run --privileged -it --rm -v./:/build/ debian:bookworm bash

sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources
apt update
apt install -y live-build debootstrap debian-archive-keyring
cd /build/

sudo lb clean --purge
sudo rm config chroot cache -rf
lb config \
  --distribution bookworm \
  --archive-areas "main contrib non-free non-free-firmware" \
  --mirror-bootstrap https://mirrors.ustc.edu.cn/debian/ \
  --mirror-chroot https://mirrors.ustc.edu.cn/debian/ \
  --mirror-chroot-security https://mirrors.ustc.edu.cn/debian-security/ \
  --mirror-binary-security https://mirrors.ustc.edu.cn/debian-security \
  --mirror-debian-installer https://mirrors.ustc.edu.cn/debian \
  --security true

sudo lb build

xorriso -as cdrecord -v dev=/dev/sr0 Blank=as_needed ./live-image-amd64.hybrid.iso
dd if=./live-image-amd64.hybrid.iso of=/dev/sdb bs=64M conv=fsync status=progress

aptitude search '~prequired|~pimportant'

参考教程

使用本地系统或debootstrap构建最小根文件系统

安装工具与准备环境

# 安装核心工具
sudo apt update
sudo apt install debootstrap squashfs-tools xorriso grub-pc-bin grub-efi-amd64-bin isolinux
# sudo apt install syslinux-utils mtools genisoimage rsync

# 创建工作目录
mkdir ~/debian-custom-iso && cd ~/debian-custom-iso
mkdir rootfs iso

构建最小根文件系统

# 假设构建Debian 12 (Bookworm) 系统
sudo debootstrap --verbose --arch=amd64 bookworm ./rootfs http://deb.debian.org/debian
# 进入新系统进行基本配置
sudo mount -t proc proc rootfs/proc
sudo mount --rbind /sys rootfs/sys
sudo mount --rbind /dev rootfs/dev
sudo chroot ./rootfs /bin/bash
# 在chroot环境中执行以下命令
# 1. 安装一些最基础的软件和内核
apt update
apt install --no-install-recommends linux-image-amd64 systemd-sysv passwd
apt install live-boot live-config
# grub-pc-bin grub-efi-amd64 grub-efi-amd64-bin parted dosfstools openssh-server
# 2. 设置root密码(重要,否则可能无法登录)
echo custom-debian > /etc/hostname
echo "127.0.1.1 custom-debian" >> /etc/hosts
echo "root:root" | chpasswd
# 3. 配置网络(基础DHCP)
echo "auto eth0" >> /etc/network/interfaces.d/eth0
echo "iface eth0 inet dhcp" >> /etc/network/interfaces.d/eth0
# 4. 退出chroot环境
exit
sudo umount -l rootfs/{proc,sys,dev}

制作 squashfs(作为 live 系统 root)

# sudo apt install live-boot live-config
chroot rootfs apt install live-boot live-config
chroot rootfs update-initramfs -u

mkdir -p iso/live
sudo mksquashfs rootfs iso/live/filesystem.squashfs -comp xz -wildcards
cp rootfs/boot/vmlinuz-* iso/live/vmlinuz
cp rootfs/boot/initrd.img-* iso/live/initrd.img

配置清单

mkdir iso/isolinux/
cp /usr/lib/ISOLINUX/isolinux.bin iso/isolinux/
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 iso/isolinux/

cat > iso/isolinux/isolinux.cfg <<EOF
DEFAULT install
TIMEOUT 3
PROMPT 1
LABEL install
  SAY Booting custom Debian live system...
  MENU LABEL ^Install Debian (text mode)
  KERNEL /live/vmlinuz
  APPEND vga=788 initrd=/live/initrd.img boot=live quiet rd.debug 
EOF

UEFI引导(grub-efi)

mkdir -p iso/EFI/BOOT iso/boot/grub
cp /usr/lib/grub/x86_64-efi/monolithic/grubx64.efi iso/EFI/BOOT/BOOTX64.EFI


# 创建GRUB配置文件 (iso/boot/grub/grub.cfg)
cat > iso/boot/grub/grub.cfg << 'EOF'
set timeout=5
menuentry "Custom Debian Live" {
    linux /live/vmlinuz boot=live quiet
    initrd /live/initrd.img
}
EOF

生成可启动ISO

# 注意!!! 相对ISO 内路径是 /isolinux/isolinux.bin
# 注意!!! 相对ISO 内路径是 /EFI/BOOT/BOOTX64.EFI
xorriso -as mkisofs \
  -o debian-custom.iso \
  -iso-level 3 \
  -full-iso9660-filenames \
  -volid "CUSTOM_DEBIAN" \
  -eltorito-boot isolinux/isolinux.bin \
  -eltorito-catalog isolinux/boot.cat \
  -no-emul-boot -boot-load-size 4 -boot-info-table \
  -eltorito-alt-boot \
  -e EFI/BOOT/BOOTX64.EFI \
  -no-emul-boot \
  iso/

(可选):加入你的“安装脚本”(自定义 installer)

# 你自己的安装脚本可以把 rootfs 安装进真实硬盘:
# 你就拥有了一个 完全自己定制的 Debian 安装 ISO。
cat > iso/install.sh <<EOF
mkfs.ext4 /dev/sda1
mount /dev/sda1 /mnt
unsquashfs -f -d /mnt /live/filesystem.squashfs
grub-install /dev/sda
update-grub
EOF

cat >> grub.cfg <<EOF
menuentry "Run installer" {
    linux /live/vmlinuz boot=live autoexec=/install.sh
    initrd /live/initrd.img
}
EOF

测试验证

# bios
qemu-system-x86_64 -m 1024 -cdrom debian-custom.iso -boot d -enable-kvm

# uefi 启动
sudo apt install ovmf
qemu-system-x86_64 -m 1024 \
-bios /usr/share/OVMF/OVMF.fd \
-cdrom debian-custom.iso \
-boot d -enable-kvm

# 可 dd 到 U 盘
sudo dd if=debian-custom.iso of=/dev/sdX bs=4M status=progress

调试排查

xorriso -indev debian-custom.iso -ls | grep -i 'initrd\|vmlinuz'
mkdir /tmp/iso
sudo mount -o loop debian-custom.iso /tmp/iso
find /tmp/iso -name "*initrd*" -o -name "*vmlinuz*" 2>/dev/null
sudo umount /tmp/iso
xorriso -indev debian-custom.iso -extract '/isolinux/isolinux.cfg' /tmp/isolinux.cfg 2>/dev/null || true
xorriso -indev debian-custom.iso -extract '/boot/grub/grub.cfg' /tmp/grub.cfg 2>/dev/null || true

cat /tmp/isolinux.cfg /tmp/grub.cfg 2>/dev/null | grep -A1 -B1 'initrd\|vmlinuz'

mkdir /tmp/initrd
cd /tmp/initrd
zcat /tmp/iso/live/initrd.img | cpio -idmv

Debian 官方的 mini live 制作流程

# chroot 内安装 live-boot + rebuild initrd
chroot rootfs apt update
chroot rootfs apt install --no-install-recommends live-boot live-config systemd-sysv linux-image-amd64
chroot rootfs update-initramfs -u

# ISOLINUX 目录结构
mkdir -p iso/isolinux
cp /usr/lib/ISOLINUX/isolinux.bin iso/isolinux/
cp /usr/lib/syslinux/modules/bios/*.c32 iso/isolinux/

# 创建 UEFI FAT ESP
mkdir -p iso/efi-img
mkdir -p esp/EFI/BOOT
cp /usr/lib/grub/x86_64-efi/monolithic/grubx64.efi esp/EFI/BOOT/BOOTX64.EFI

# 制作 FAT 镜像
dd if=/dev/zero of=iso/efi.img bs=1M count=10
mkfs.vfat iso/efi.img
mcopy -i iso/efi.img -s esp/* ::/

# xorriso 构建正确的混合引导 ISO
xorriso -as mkisofs \
  -o debian-custom.iso \
  -iso-level 3 \
  -full-iso9660-filenames \
  -eltorito-boot isolinux/isolinux.bin \
    -eltorito-catalog isolinux/boot.cat \
    -no-emul-boot -boot-load-size 4 -boot-info-table \
  -eltorito-alt-boot \
    -e efi.img \
    -no-emul-boot \
  -append_partition 2 0xef iso/efi.img \
  iso/