#!/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 "宿主准备 + 下载源码完成"