切换到 root 用户

下载软件包以及其他工作需要以 root 身份执行, Linux Mint 默认没有启动 root 用户, 所以先要启用该用户。

启用 root 用户

root 用户设置密码即可启用该用户, 使用命令 sudo passwd root 设置 root 用户的密码, 执行过程如下:

1
2
3
4
5
6
laohoo@laohoo-virtual-machine:~$ sudo passwd root
[sudo] password for laohoo:
New password:
Retype new password:
passwd: password updated successfully
laohoo@laohoo-virtual-machine:~$

切换到 root 用户

使用命令 su - root 进行切换, 执行过程如下:

1
2
3
laohoo@laohoo-virtual-machine:~$ su - root
Password:
root@laohoo-virtual-machine:~#

设置当前用的 $LFS 环境变量

重新进入系统 或 切换用户之后, 要先使用命令 echo $LFS 检查是否已经设置 LFS 变量, 如果没有设置该变量则执行命令 export LFS=/mnt/lfs 进行设置, 操作过程如下:

1
2
3
4
5
root@laohoo-virtual-machine:~# echo $LFS

root@laohoo-virtual-machine:~# export LFS=/mnt/lfs
root@laohoo-virtual-machine:~# echo $LFS
/mnt/lfs

创建下载文件的目录

我们要以从 https://www.linuxfromscratch.org/lfs/mirrors.html#files 给出的 Files Mirrors 地址下载编译系统所需要的源码文件。

下载好的软件包和补丁需要保存在一个适当位置, 以方便在构建过程中使用它们, 同时还需要一个工作目录, 用于解压和编译软件包。此处使用 $LFS/sources, 用于保存编译系统所需要的源码文件。

创建源代码目录

root 身份执行命令mkdir -v $LFS/sources 创建 $LFS/sources目录用于保存软件包源码, 执行过程如下:

1
2
3
root@laohoo-virtual-machine:~# mkdir -v $LFS/sources
mkdir: created directory '/mnt/lfs/sources'
root@laohoo-virtual-machine:~#

修改文件夹的读写权限

修改 $LFS/sources 目录的读写权限, 命令为:chmod -v a+wt $LFS/sources, 执行过程如下:

1
2
3
root@laohoo-virtual-machine:~# chmod -v a+wt $LFS/sources
mode of '/mnt/lfs/sources' changed from 0755 (rwxr-xr-x) to 1777 (rwxrwxrwt)
root@laohoo-virtual-machine:~#

软件包文件下载

下载用的目录创建及成功设置权限之后, 就可以开始下载所需要的软件包了。

下载 Linux From Scratch 软件包有以下几种办法:

  1. LFS文档 的第3章(https://www.linuxfromscratch.org/lfs/view/stable/chapter03/packages.html), 按照给出来链接一个个去下载。

  2. 使用 linuxwget 命令批量下载, 批量下载的时候需要先准备一个 wget-list 文件, 在文件中保存所有需要下载的文件的地址, wget-list 文件可以从以下地下获取(需要下载最新版的 wget-list): https://www.linuxfromscratch.org/lfs/downloads/stable/wget-list

wget-list 文件所在目录执行下载命令:

1
wget --input-file=wget-list --continue --directory-prefix=$LFS/sources

这种方式比第一种更方便, 但是部分软件包所在的服务器在国内访问很困难, 所以可以考虑使用第3种办法

  1. 部分LFS镜像网站(例如: https://mirrors.ustc.edu.cn/lfs/) 提供了包缩版的软件包, 直接下载、解压缩即可, 下载地址: https://mirrors.ustc.edu.cn/lfs/lfs-packages/lfs-packages-11.2.tar

下载软件包, 命令: wget https://mirrors.ustc.edu.cn/lfs/lfs-packages/lfs-packages-11.2.tar

执行过程如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@laohoo-virtual-machine:~# wget https://mirrors.ustc.edu.cn/lfs/lfs-packages/lfs-packages-11.2.tar
--2023-02-22 15:45:37-- https://mirrors.ustc.edu.cn/lfs/lfs-packages/lfs-packages-11.2.tar
Resolving mirrors.ustc.edu.cn (mirrors.ustc.edu.cn)... 202.141.160.110, 2001:da8:d800:95::110
Connecting to mirrors.ustc.edu.cn (mirrors.ustc.edu.cn)|202.141.160.110|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 497090560 (474M) [application/octet-stream]
Saving to: ‘lfs-packages-11.2.tar’

lfs-packages-11.2.tar 100%[=================================================>] 474.06M 4.52MB/s in 2m 12s

2023-02-22 15:47:49 (3.58 MB/s) - ‘lfs-packages-11.2.tar’ saved [497090560/497090560]

root@laohoo-virtual-machine:~#

解压 lfs-packages-11.2.tar, 命令: tar xf lfs-packages-11.2.tar, 执行过程如下:

1
2
3
4
root@laohoo-virtual-machine:~# ls
lfs-packages-11.2.tar
root@laohoo-virtual-machine:~# tar xf lfs-packages-11.2.tar
root@laohoo-virtual-machine:~# ls

查看解压后的结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
root@laohoo-virtual-machine:~# ls -l
total 485448
drwxrwxr-x 2 laohoo laohoo 4096 Aug 22 2022 11.2-rc1
-rw-r--r-- 1 root root 497090560 Aug 22 2022 lfs-packages-11.2.tar
root@laohoo-virtual-machine:~# ls 11.2-rc1
acl-2.3.1.tar.xz gmp-6.2.1.tar.xz openssl-3.0.5.tar.gz
attr-2.5.1.tar.gz gperf-3.1.tar.gz patch-2.7.6.tar.xz
autoconf-2.71.tar.xz grep-3.7.tar.xz perl-5.36.0.tar.xz
automake-1.16.5.tar.xz groff-1.22.4.tar.gz pkg-config-0.29.2.tar.gz
bash-5.1.16.tar.gz grub-2.06.tar.xz procps-ng-4.0.0.tar.xz
bc-6.0.1.tar.xz gzip-1.12.tar.xz psmisc-23.5.tar.xz
binutils-2.39.tar.xz iana-etc-20220812.tar.gz python-3.10.6-docs-html.tar.bz2
bison-3.8.2.tar.xz inetutils-2.3.tar.xz Python-3.10.6.tar.xz
bzip2-1.0.8-install_docs-1.patch intltool-0.51.0.tar.gz readline-8.1.2.tar.gz
bzip2-1.0.8.tar.gz iproute2-5.19.0.tar.xz sed-4.8.tar.xz
check-0.15.2.tar.gz Jinja2-3.1.2.tar.gz shadow-4.12.2.tar.xz
check.sh kbd-2.5.1-backspace-1.patch sysklogd-1.5.1.tar.gz
coreutils-9.1-i18n-1.patch kbd-2.5.1.tar.xz systemd-251-glibc_2.36_fix-1.patch
coreutils-9.1.tar.xz kmod-30.tar.xz systemd-251.tar.gz
dbus-1.14.0.tar.xz less-590.tar.gz systemd-man-pages-251.tar.xz
dejagnu-1.6.3.tar.gz lfs-bootscripts-20220723.tar.xz sysvinit-3.04-consolidated-1.patch
diffutils-3.8.tar.xz libcap-2.65.tar.xz sysvinit-3.04.tar.xz
e2fsprogs-1.46.5.tar.gz libffi-3.4.2.tar.gz tar-1.34.tar.xz
elfutils-0.187.tar.bz2 libpipeline-1.5.6.tar.gz tcl8.6.12-html.tar.gz
eudev-3.2.11.tar.gz libtool-2.4.7.tar.xz tcl8.6.12-src.tar.gz
expat-2.4.8.tar.xz linux-5.19.2.tar.xz texinfo-6.8.tar.xz
expect5.45.4.tar.gz m4-1.4.19.tar.xz tzdata2022c.tar.gz
extra.sh make-4.3.tar.gz udev-lfs-20171102.tar.xz
file-5.42.tar.gz man-db-2.10.2.tar.xz util-linux-2.38.1.tar.xz
findutils-4.9.0.tar.xz man-pages-5.13.tar.xz vim-9.0.0228.tar.gz
flex-2.6.4.tar.gz MarkupSafe-2.1.1.tar.gz wget-list
gawk-5.1.1.tar.xz md5sums wheel-0.37.1.tar.gz
gcc-12.2.0.tar.xz meson-0.63.1.tar.gz XML-Parser-2.46.tar.gz
gdbm-1.23.tar.gz mpc-1.2.1.tar.gz xz-5.2.6.tar.xz
gettext-0.21.tar.xz mpfr-4.1.0.tar.xz zlib-1.2.12.tar.xz
glibc-2.36-fhs-1.patch ncurses-6.3.tar.gz zstd-1.5.2.tar.gz
glibc-2.36.tar.xz ninja-1.11.0.tar.gz zstd-1.5.2-upstream_fixes-1.patch
root@laohoo-virtual-machine:~#

从以上显示结果来看, 解压后的软件包在子目录 11.2-rc1 中。

将解压后 11.2-rc1 目录内的软件包移动到 $LFS/sources 目录, 执行命令:

1
mv 11.2-rc1/* $LFS/sources

执行命令 cd $LFS/sources 设置当前目录为 $LFS/sources, 操作如下:

1
2
root@laohoo-virtual-machine:~# cd $LFS/sources
root@laohoo-virtual-machine:/mnt/lfs/sources#

查看$LFS/sources 目录的内容, 命令执行如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
root@laohoo-virtual-machine:/mnt/lfs/sources# ls
acl-2.3.1.tar.xz findutils-4.9.0.tar.xz libcap-2.65.tar.xz readline-8.1.2.tar.gz
attr-2.5.1.tar.gz flex-2.6.4.tar.gz libffi-3.4.2.tar.gz sed-4.8.tar.xz
autoconf-2.71.tar.xz gawk-5.1.1.tar.xz libpipeline-1.5.6.tar.gz shadow-4.12.2.tar.xz
automake-1.16.5.tar.xz gcc-12.2.0.tar.xz libtool-2.4.7.tar.xz sysklogd-1.5.1.tar.gz
bash-5.1.16.tar.gz gdbm-1.23.tar.gz linux-5.19.2.tar.xz systemd-251-glibc_2.36_fix-1.patch
bc-6.0.1.tar.xz gettext-0.21.tar.xz m4-1.4.19.tar.xz systemd-251.tar.gz
binutils-2.39.tar.xz glibc-2.36-fhs-1.patch make-4.3.tar.gz systemd-man-pages-251.tar.xz
bison-3.8.2.tar.xz glibc-2.36.tar.xz man-db-2.10.2.tar.xz sysvinit-3.04-consolidated-1.patch
bzip2-1.0.8-install_docs-1.patch gmp-6.2.1.tar.xz man-pages-5.13.tar.xz sysvinit-3.04.tar.xz
bzip2-1.0.8.tar.gz gperf-3.1.tar.gz MarkupSafe-2.1.1.tar.gz tar-1.34.tar.xz
check-0.15.2.tar.gz grep-3.7.tar.xz md5sums tcl8.6.12-html.tar.gz
check.sh groff-1.22.4.tar.gz meson-0.63.1.tar.gz tcl8.6.12-src.tar.gz
coreutils-9.1-i18n-1.patch grub-2.06.tar.xz mpc-1.2.1.tar.gz texinfo-6.8.tar.xz
coreutils-9.1.tar.xz gzip-1.12.tar.xz mpfr-4.1.0.tar.xz tzdata2022c.tar.gz
dbus-1.14.0.tar.xz iana-etc-20220812.tar.gz ncurses-6.3.tar.gz udev-lfs-20171102.tar.xz
dejagnu-1.6.3.tar.gz inetutils-2.3.tar.xz ninja-1.11.0.tar.gz util-linux-2.38.1.tar.xz
diffutils-3.8.tar.xz intltool-0.51.0.tar.gz openssl-3.0.5.tar.gz vim-9.0.0228.tar.gz
e2fsprogs-1.46.5.tar.gz iproute2-5.19.0.tar.xz patch-2.7.6.tar.xz wget-list
elfutils-0.187.tar.bz2 Jinja2-3.1.2.tar.gz perl-5.36.0.tar.xz wheel-0.37.1.tar.gz
eudev-3.2.11.tar.gz kbd-2.5.1-backspace-1.patch pkg-config-0.29.2.tar.gz XML-Parser-2.46.tar.gz
expat-2.4.8.tar.xz kbd-2.5.1.tar.xz procps-ng-4.0.0.tar.xz xz-5.2.6.tar.xz
expect5.45.4.tar.gz kmod-30.tar.xz psmisc-23.5.tar.xz zlib-1.2.12.tar.xz
extra.sh less-590.tar.gz python-3.10.6-docs-html.tar.bz2 zstd-1.5.2.tar.gz
file-5.42.tar.gz lfs-bootscripts-20220723.tar.xz Python-3.10.6.tar.xz zstd-1.5.2-upstream_fixes-1.patch

检查所有软件包的正确性

下载的软件包中提供了一个用来检查所有软件包的正确性的 md5sums 文件, 使用命令 md5sum -c md5sums 进行检测,执行过程如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
root@laohoo-virtual-machine:/mnt/lfs/sources# md5sum -c md5sums
acl-2.3.1.tar.xz: OK
attr-2.5.1.tar.gz: OK
autoconf-2.71.tar.xz: OK
automake-1.16.5.tar.xz: OK
bash-5.1.16.tar.gz: OK
bc-6.0.1.tar.xz: OK
binutils-2.39.tar.xz: OK
bison-3.8.2.tar.xz: OK
bzip2-1.0.8.tar.gz: OK
check-0.15.2.tar.gz: OK
coreutils-9.1.tar.xz: OK
dejagnu-1.6.3.tar.gz: OK
diffutils-3.8.tar.xz: OK
e2fsprogs-1.46.5.tar.gz: OK
elfutils-0.187.tar.bz2: OK
eudev-3.2.11.tar.gz: OK
expat-2.4.8.tar.xz: OK
expect5.45.4.tar.gz: OK
file-5.42.tar.gz: OK
findutils-4.9.0.tar.xz: OK
flex-2.6.4.tar.gz: OK
gawk-5.1.1.tar.xz: OK
gcc-12.2.0.tar.xz: OK
gdbm-1.23.tar.gz: OK
gettext-0.21.tar.xz: OK
glibc-2.36.tar.xz: OK
gmp-6.2.1.tar.xz: OK
gperf-3.1.tar.gz: OK
grep-3.7.tar.xz: OK
groff-1.22.4.tar.gz: OK
grub-2.06.tar.xz: OK
gzip-1.12.tar.xz: OK
iana-etc-20220812.tar.gz: OK
inetutils-2.3.tar.xz: OK
intltool-0.51.0.tar.gz: OK
iproute2-5.19.0.tar.xz: OK
kbd-2.5.1.tar.xz: OK
kmod-30.tar.xz: OK
less-590.tar.gz: OK
lfs-bootscripts-20220723.tar.xz: OK
libcap-2.65.tar.xz: OK
libffi-3.4.2.tar.gz: OK
libpipeline-1.5.6.tar.gz: OK
libtool-2.4.7.tar.xz: OK
linux-5.19.2.tar.xz: OK
m4-1.4.19.tar.xz: OK
make-4.3.tar.gz: OK
man-db-2.10.2.tar.xz: OK
man-pages-5.13.tar.xz: OK
meson-0.63.1.tar.gz: OK
mpc-1.2.1.tar.gz: OK
mpfr-4.1.0.tar.xz: OK
ncurses-6.3.tar.gz: OK
ninja-1.11.0.tar.gz: OK
openssl-3.0.5.tar.gz: OK
patch-2.7.6.tar.xz: OK
perl-5.36.0.tar.xz: OK
pkg-config-0.29.2.tar.gz: OK
procps-ng-4.0.0.tar.xz: OK
psmisc-23.5.tar.xz: OK
Python-3.10.6.tar.xz: OK
python-3.10.6-docs-html.tar.bz2: OK
readline-8.1.2.tar.gz: OK
sed-4.8.tar.xz: OK
shadow-4.12.2.tar.xz: OK
sysklogd-1.5.1.tar.gz: OK
sysvinit-3.04.tar.xz: OK
tar-1.34.tar.xz: OK
tcl8.6.12-src.tar.gz: OK
tcl8.6.12-html.tar.gz: OK
texinfo-6.8.tar.xz: OK
tzdata2022c.tar.gz: OK
udev-lfs-20171102.tar.xz: OK
util-linux-2.38.1.tar.xz: OK
vim-9.0.0228.tar.gz: OK
wheel-0.37.1.tar.gz: OK
XML-Parser-2.46.tar.gz: OK
xz-5.2.6.tar.xz: OK
zlib-1.2.12.tar.xz: OK
zstd-1.5.2.tar.gz: OK
bzip2-1.0.8-install_docs-1.patch: OK
coreutils-9.1-i18n-1.patch: OK
glibc-2.36-fhs-1.patch: OK
kbd-2.5.1-backspace-1.patch: OK
sysvinit-3.04-consolidated-1.patch: OK
zstd-1.5.2-upstream_fixes-1.patch: OK
root@laohoo-virtual-machine:/mnt/lfs/sources#

当前所有软件包检测通过, 如果有哪个包出错, 可单独重新下载该软件包、并重新检测即可。

操作完毕, 建议使用 快照 对当前虚拟机进行备份。

参考资料:

  1. Linux From Scratch Version 11.2

  2. Linux From Scratch 版本 11.2-systemd-中文翻译版