51 lines
1.3 KiB
Plaintext
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"
|
|
|