制作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/