TL; DR 我 编 译 我 自 己

Screenshot_20210710_232152.png

准备资源

LFS stable book (本文用的是 10.1)以及文件列表
https://www.linuxfromscratch.org/lfs/downloads/stable/

建议操作的时候参照那个 HTML 文档,为什么?如果你看的是 PDF 看到一半你就知道为什么了 :)

  • 最为显然的一点,方便复制粘贴
  • PDF 版过长的命令会被截断,嗯,很智能的文档压缩方式!

建立环境

sudo su
cd /root
# 创建10G的硬盘,我放在这里是因为这在我的加密目录外面
dd if=/dev/zero of=/root/lfsdev bs=1G count=10
# 建立ext4文件系统
mkfs.ext4 ./lfsdev
# 设置 loop 设备
losetup -Pf ./lfsdev
# 挂载,如果你有别的 loop 设备,这个数字可能会增大
mount /dev/loop0 /mnt/lfs
# 设置变量
export LFS=/mnt/lfs

下载资源

mkdir $LFS/sources
cd $LFS/sources
wget https://www.linuxfromscratch.org/lfs/downloads/stable/wget-list
wget -i ./wget-list -c --directory=$LFS/sources/
wget https://www.linuxfromscratch.org/lfs/downloads/stable/md5sums
# 该文件 404,因此需要单独下载
wget -c https://github.com/libexpat/libexpat/releases/download/R_2_2_10/expat-2.2.10.tar.xz
md5sum -c ./md5sums

由于大部分文件都在国外服务器,这里就请各显神通了。

建立目录结构

mkdir -pv $LFS/{bin,etc,lib,sbin,usr,var,lib64}

lib64 仅限目标系统为 x86_64,以下均保持该假设。

设置环境变量

手动构建 linux from scratch 是一件很消耗时间的事情。因此如果中途退出了 shell,再次进入时需恢复这些环境变量:

set +h
umask 022
export LFS=/mnt/lfs
export LC_ALL=POSIX
export PATH=$LFS/tools/bin:$PATH
export LFS_TGT=$(uname -m)-lfs-linux-gnu
export CONFIG_SITE=$LFS/usr/share/config.site
export MAKEFLAGS="-j$(nproc)"

开始构建

这一部分照抄书就可以了。如果你只是想让 Linux 能起来的话不用把那 70 多个包全部编译安装,一直装到 bash,然后需要 kmod, e2fsprogs, elfutils, openssl, coreutils, grub, make, eudev, procps, util-linux, sysvinit

因为这个 setup 与书上不同,GRUB 配置写成这样:

cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod ext2
set root=(hd0)

menuentry "GNU/Linux, Linux 5.10.17-lfs-10.1" {
    linux /boot/vmlinuz-5.10.17-lfs-10.1 root=/dev/sda ro
}
EOF

之后 grub-install --force /dev/loop0

启动系统

qemu-system-x86_64 -enable-kvm -m 512 -hda /root/lfsdev