init
This commit is contained in:
commit
67fef643f5
7
README.md
Normal file
7
README.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
chmod +x *.sh
|
||||||
|
|
||||||
|
sudo ./prepare_and_download.sh
|
||||||
|
sudo ./phase5_tools.sh
|
||||||
|
sudo ./phase6_8_chroot.sh
|
||||||
|
sudo ./iso_build.sh
|
||||||
|
|
||||||
50
iso_build.sj
Normal file
50
iso_build.sj
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#!/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"
|
||||||
|
|
||||||
62
phase5_tools.sh
Normal file
62
phase5_tools.sh
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# phase5_tools.sh
|
||||||
|
# LFS 12.2 阶段5 临时工具链全自动化
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
LFS_WORKDIR="$PWD/lfs_build"
|
||||||
|
CPU_CORES="$(nproc)"
|
||||||
|
LFS_SRC="$LFS_WORKDIR/sources"
|
||||||
|
LFS_BUILD="$LFS_WORKDIR/build"
|
||||||
|
|
||||||
|
info(){ echo -e "\e[34m[INFO]\e[0m $*"; }
|
||||||
|
|
||||||
|
cd "$LFS_BUILD"
|
||||||
|
|
||||||
|
# 阶段5官方包顺序
|
||||||
|
PACKAGES=(
|
||||||
|
"binutils"
|
||||||
|
"gcc"
|
||||||
|
"glibc"
|
||||||
|
"libstdc++"
|
||||||
|
"bash"
|
||||||
|
"coreutils"
|
||||||
|
"diffutils"
|
||||||
|
"file"
|
||||||
|
"findutils"
|
||||||
|
"gawk"
|
||||||
|
"grep"
|
||||||
|
"gzip"
|
||||||
|
"make"
|
||||||
|
"patch"
|
||||||
|
"sed"
|
||||||
|
"tar"
|
||||||
|
"xz"
|
||||||
|
)
|
||||||
|
|
||||||
|
# 自动解压、编译、安装
|
||||||
|
for pkg in "${PACKAGES[@]}"; do
|
||||||
|
info "处理阶段5包: $pkg"
|
||||||
|
src=$(ls "$LFS_SRC" | grep "$pkg")
|
||||||
|
[ -f "$src" ] || { echo "源码 $pkg 未找到"; exit 1; }
|
||||||
|
rm -rf "$pkg-build"
|
||||||
|
mkdir "$pkg-build"
|
||||||
|
tar xf "$LFS_SRC/$src" -C "$pkg-build" --strip-components=1
|
||||||
|
cd "$pkg-build"
|
||||||
|
|
||||||
|
# 自动 patch
|
||||||
|
for patchf in "$LFS_SRC"/*.patch; do
|
||||||
|
patch -Np1 < "$patchf" 2>/dev/null || true
|
||||||
|
done
|
||||||
|
|
||||||
|
# 编译安装
|
||||||
|
./configure --prefix=/tools --disable-multilib || true
|
||||||
|
make -j"$CPU_CORES"
|
||||||
|
make install
|
||||||
|
|
||||||
|
cd "$LFS_BUILD"
|
||||||
|
rm -rf "$pkg-build"
|
||||||
|
done
|
||||||
|
|
||||||
|
info "阶段5 临时工具链构建完成"
|
||||||
|
|
||||||
80
phase6_8_chroot.sh
Normal file
80
phase6_8_chroot.sh
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# phase6_8_chroot.sh
|
||||||
|
# LFS 12.2 阶段6~8完整系统自动构建
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
LFS_WORKDIR="$PWD/lfs_build"
|
||||||
|
CPU_CORES="$(nproc)"
|
||||||
|
LFS_SRC="$LFS_WORKDIR/sources"
|
||||||
|
ROOTFS="$LFS_WORKDIR/rootfs"
|
||||||
|
info(){ echo -e "\e[34m[INFO]\e[0m $*"; }
|
||||||
|
|
||||||
|
# 挂载虚拟文件系统
|
||||||
|
info "挂载 /proc /sys /dev ..."
|
||||||
|
mkdir -p "$ROOTFS"/{proc,sys,dev}
|
||||||
|
mount --bind /dev "$ROOTFS"/dev
|
||||||
|
mount --bind /dev/pts "$ROOTFS"/dev/pts
|
||||||
|
mount -t proc proc "$ROOTFS"/proc
|
||||||
|
mount -t sysfs sys "$ROOTFS"/sys
|
||||||
|
|
||||||
|
# 阶段6~8官方包顺序(部分示例)
|
||||||
|
PACKAGES=(
|
||||||
|
"bash"
|
||||||
|
"coreutils"
|
||||||
|
"diffutils"
|
||||||
|
"file"
|
||||||
|
"findutils"
|
||||||
|
"gawk"
|
||||||
|
"grep"
|
||||||
|
"gzip"
|
||||||
|
"make"
|
||||||
|
"patch"
|
||||||
|
"sed"
|
||||||
|
"tar"
|
||||||
|
"xz"
|
||||||
|
"perl"
|
||||||
|
"tcl"
|
||||||
|
"vim"
|
||||||
|
)
|
||||||
|
|
||||||
|
for pkg in "${PACKAGES[@]}"; do
|
||||||
|
info "构建阶段6~8包: $pkg"
|
||||||
|
src=$(ls "$LFS_SRC" | grep "$pkg")
|
||||||
|
[ -f "$src" ] || { echo "源码 $pkg 未找到"; exit 1; }
|
||||||
|
rm -rf "$pkg-build"
|
||||||
|
mkdir "$pkg-build"
|
||||||
|
tar xf "$LFS_SRC/$src" -C "$pkg-build" --strip-components=1
|
||||||
|
cd "$pkg-build"
|
||||||
|
|
||||||
|
# Patch
|
||||||
|
for patchf in "$LFS_SRC"/*.patch; do
|
||||||
|
patch -Np1 < "$patchf" 2>/dev/null || true
|
||||||
|
done
|
||||||
|
|
||||||
|
# chroot 编译
|
||||||
|
chroot "$ROOTFS" /bin/bash -c "
|
||||||
|
cd /tmp/$pkg-build
|
||||||
|
./configure --prefix=/usr
|
||||||
|
make -j$CPU_CORES
|
||||||
|
make install
|
||||||
|
"
|
||||||
|
cd "$LFS_BUILD"
|
||||||
|
rm -rf "$pkg-build"
|
||||||
|
done
|
||||||
|
|
||||||
|
# 安装内核 & grub
|
||||||
|
info "安装内核和 grub ..."
|
||||||
|
chroot "$ROOTFS" /bin/bash -c "
|
||||||
|
cd /tmp
|
||||||
|
tar xf /build/linux-6.6.10.tar.xz
|
||||||
|
cd linux-6.6.10
|
||||||
|
make defconfig
|
||||||
|
make -j$CPU_CORES
|
||||||
|
make modules_install
|
||||||
|
cp arch/x86/boot/bzImage /boot/vmlinuz
|
||||||
|
"
|
||||||
|
chroot "$ROOTFS" grub-install /dev/sda
|
||||||
|
|
||||||
|
info "阶段6~8完整系统构建完成"
|
||||||
|
|
||||||
57
prepare_and_download.sh
Normal file
57
prepare_and_download.sh
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# prepare_and_download.sh
|
||||||
|
# 宿主环境准备 + LFS 12.2 源码/补丁下载
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
LFS_WORKDIR="$PWD/lfs_build"
|
||||||
|
LFS_VERSION="12.2"
|
||||||
|
CPU_CORES="$(nproc)"
|
||||||
|
|
||||||
|
HOST_PKGS=(build-essential bison flex libssl-dev libncurses-dev \
|
||||||
|
xorriso grub-pc-bin grub-efi-amd64-bin mtools dosfstools \
|
||||||
|
gcc g++ make wget xz-utils squashfs-tools rsync cpio bc \
|
||||||
|
perl git parted util-linux kmod syslinux-utils)
|
||||||
|
|
||||||
|
info(){ echo -e "\e[34m[INFO]\e[0m $*"; }
|
||||||
|
|
||||||
|
# 安装宿主依赖
|
||||||
|
info "安装宿主依赖..."
|
||||||
|
apt-get update -y
|
||||||
|
apt-get install -y "${HOST_PKGS[@]}"
|
||||||
|
|
||||||
|
# 创建工作目录
|
||||||
|
info "创建工作目录 $LFS_WORKDIR ..."
|
||||||
|
rm -rf "$LFS_WORKDIR"
|
||||||
|
mkdir -p "$LFS_WORKDIR"/{sources,build,iso,rootfs,tmp}
|
||||||
|
|
||||||
|
# 下载 LFS 源码
|
||||||
|
cd "$LFS_WORKDIR/sources"
|
||||||
|
info "下载 LFS wget-list 和 patch-list ..."
|
||||||
|
wget -c "http://www.linuxfromscratch.org/lfs/view/stable/wget-list" -O wget-list
|
||||||
|
wget -c "http://www.linuxfromscratch.org/lfs/view/stable/patch-list" -O patch-list
|
||||||
|
|
||||||
|
info "下载 LFS 源码包..."
|
||||||
|
while read -r line; do
|
||||||
|
[[ "$line" =~ ^# ]] && continue
|
||||||
|
pkg=$(echo "$line"|awk '{print $1}')
|
||||||
|
[ -f "$pkg" ] || wget -c "http://www.linuxfromscratch.org/lfs/view/stable/$pkg"
|
||||||
|
done < wget-list
|
||||||
|
|
||||||
|
info "下载补丁..."
|
||||||
|
while read -r line; do
|
||||||
|
[[ "$line" =~ ^# ]] && continue
|
||||||
|
patch=$(echo "$line"|awk '{print $1}')
|
||||||
|
[ -f "$patch" ] || wget -c "http://www.linuxfromscratch.org/lfs/view/stable/$patch"
|
||||||
|
done < patch-list
|
||||||
|
|
||||||
|
# 下载内核与 BusyBox
|
||||||
|
cd "$LFS_WORKDIR/build"
|
||||||
|
KERNEL_VER="6.6.10"
|
||||||
|
BUSYBOX_VER="1.36.1"
|
||||||
|
info "下载 Linux 内核 $KERNEL_VER 和 BusyBox $BUSYBOX_VER ..."
|
||||||
|
wget -c "https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-$KERNEL_VER.tar.xz"
|
||||||
|
wget -c "https://busybox.net/downloads/busybox-$BUSYBOX_VER.tar.bz2"
|
||||||
|
|
||||||
|
info "宿主准备 + 下载源码完成"
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user