mylfs/iso_build.sj
2025-10-20 10:02:23 +01:00

51 lines
1.3 KiB
Plaintext

#!/usr/bin/env bash
# iso_build.sh
# 内核编译 + initramfs/live.squashfs + GRUB ISO + 无人值守安装器
set -euo pipefail
IFS=$'\n\t'
LFS_WORKDIR="$PWD/lfs_build"
ISO_NAME="lfs12_custom_x86_64.iso"
CPU_CORES="$(nproc)"
ROOTFS="$LFS_WORKDIR/rootfs"
info(){ echo -e "\e[34m[INFO]\e[0m $*"; }
# 生成 live.squashfs
info "生成 live.squashfs ..."
mkdir -p "$LFS_WORKDIR/iso/live"
mksquashfs "$ROOTFS" "$LFS_WORKDIR/iso/live/rootfs.squashfs" -e boot
# 生成 initramfs
info "生成 initramfs ..."
cd "$LFS_WORKDIR/iso"
mkdir -p initramfs
cd initramfs
mkdir -p {bin,sbin,etc,proc,sys,usr}
cp -a "$ROOTFS"/bin/* bin/
cp -a "$ROOTFS"/sbin/* sbin/
cp -a "$ROOTFS"/etc/* etc/
find . | cpio -H newc -o | gzip > "$LFS_WORKDIR/iso/boot/initrd.img"
# GRUB 配置
info "生成 GRUB 配置 ..."
mkdir -p "$LFS_WORKDIR/iso/boot/grub"
cat > "$LFS_WORKDIR/iso/boot/grub/grub.cfg" <<EOF
set timeout=3
set default=0
menuentry "LFS 12.2 Live" {
linux /boot/vmlinuz
initrd /boot/initrd.img
}
EOF
# 生成 ISO
info "生成 ISO 文件 $ISO_NAME ..."
grub-mkrescue -o "$LFS_WORKDIR/$ISO_NAME" "$LFS_WORKDIR/iso"
# 提示
info "ISO 生成完成: $LFS_WORKDIR/$ISO_NAME"
info "测试: qemu-system-x86_64 -m 4096 -boot d -cdrom $ISO_NAME"
info "无人值守安装: 内核参数 install=/dev/sdX 或 /usr/sbin/lfs_installer --target=/dev/sdX"