mylfs/prepare_and_download.sh
2025-10-20 10:02:23 +01:00

58 lines
1.8 KiB
Bash

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