概述
在本章中,我们会检查那些构建 LFS 系统必须的宿主工具,如果必要的话就安装它们。之后我们会准备一个容纳 LFS 系统的分区。我们将亲自建立这个分区,在分区上建立文件系统,并挂载该文件系统。
宿主系统需求
您的宿主系统必须拥有下列软件,且版本不能低于我们给出的最低版本。要注意的是,很多发行版会把软件的头文件放在单独的软件包中,这些软件包的名称往往是 “<软件包名>-devel” 或者 “<软件包名>-dev”。如果您的发行版为下列软件提供了这类软件包,一定要安装它们。
比下列最低版本更古老的版本可能正常工作,但作者没有进行测试。
-
Bash-3.2 (/bin/sh 必须是到 bash 的符号链接或硬连接)
-
Binutils-2.13.1 (比 2.40 更新的版本未经测试,不推荐使用)
-
Bison-2.7 (/usr/bin/yacc 必须是到 bison 的链接,或者是一个执行 bison 的小脚本)
-
Coreutils-6.9
-
Diffutils-2.8.1
-
Findutils-4.2.31
-
Gawk-4.0.1 (/usr/bin/awk 必须是到 gawk 的链接)
-
GCC-5.1,包括 C++ 编译器 g++ (比 12.2.0 更新的版本未经测试,不推荐使用)。C 和 C++ 标准库 (包括头文件) 也必须可用,这样 C++ 编译器才能构建宿主环境的程序
-
Grep-2.5.1a
-
Gzip-1.3.12
-
Linux Kernel-3.2
内核版本的要求是为了符合第 5 章和第 8 章中编译 glibc 时开发者推荐的配置选项。
如果宿主内核比 3.2 更早,您需要将内核升级到较新的版本。升级内核有两种方法,如果您的发行版供应商提供了 3.2 或更新的内核软件包,您可以直接安装它。如果供应商没有提供一个足够新的内核包,或者您不想安装它,您可以自己编译内核。编译内核和配置启动引导器 (假设宿主使用 GRUB) 的步骤在第 10 章中。
-
M4-1.4.10
-
Make-4.0
-
Patch-2.5.4
-
Perl-5.8.8
-
Python-3.4
-
Sed-4.1.5
-
Tar-1.22
-
Texinfo-4.7
-
Xz-5.0.0
为了确定您的宿主系统拥有每个软件的合适版本,且能够编译程序,请运行下列命令:
#!/bin/bash # Simple script to list version numbers of critical development tools export LC_ALL=C bash --version | head -n1 | cut -d" " -f2-4 MYSH=$(readlink -f /bin/sh) echo "/bin/sh -> $MYSH" echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash" unset MYSH echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3- bison --version | head -n1 if [ -h /usr/bin/yacc ]; then echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`"; elif [ -x /usr/bin/yacc ]; then echo yacc is `/usr/bin/yacc --version | head -n1` else echo "yacc not found" fi echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2 diff --version | head -n1 find --version | head -n1 gawk --version | head -n1 if [ -h /usr/bin/awk ]; then echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`"; elif [ -x /usr/bin/awk ]; then echo awk is `/usr/bin/awk --version | head -n1` else echo "awk not found" fi gcc --version | head -n1 g++ --version | head -n1 grep --version | head -n1 gzip --version | head -n1 cat /proc/version m4 --version | head -n1 make --version | head -n1 patch --version | head -n1 echo Perl `perl -V:version` python3 --version sed --version | head -n1 tar --version | head -n1 makeinfo --version | head -n1 # texinfo version xz --version | head -n1 echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c if [ -x dummy ] then echo "g++ compilation OK"; else echo "g++ compilation failed"; fi rm -f dummy.c dummy
2.3. 分阶段构建 LFS
LFS 被设计为在一次会话中构建完成。换句话说,本书的指令假设,在整个编译过程中,系统不会关闭或重启。当然,构建过程不需要严格地一气呵成,但是要注意如果在重新启动后继续编译 LFS,根据构建进度的不同,可能需要再次进行某些操作。
2.3.1. 第 1–4 章
这些章节在宿主系统运行命令。在重启后,注意下列事项:
-
在第 2.4 节之后,以
root
用户身份执行的步骤要求 LFS 环境变量已经为 root 用户设置好。
2.3.2. 第 5–6 章
-
/mnt/lfs 分区需要重新挂载。
-
这两章的步骤必须由用户
lfs
完成。在进行这些步骤时,必须先执行 su - lfs 命令。否则,您可能会将软件包安装到宿主系统上,这可能导致宿主系统无法使用。 -
编译过程的一般说明中的过程是关键的。如果无法确定一个软件包是否正确安装,首先确认之前解压的源码包已经被删除,然后重新解压源码包的文件,重新执行该软件包对应章节的所有命令。
2.3.3. 第 7–10 章
-
/mnt/lfs 分区需要重新挂载。
-
从 “改变所有权” 到 “进入 Chroot 环境” 的一些操作必须以
root
身份完成,且 LFS 环境变量必须为root
用户设定。 -
在进入 chroot 环境时,LFS 环境变量必须为
root
设置好。在进入 chroot 环境后就不需要 LFS 变量。 -
虚拟文件系统必须挂载好。在进入 chroot 环境之前,请切换到一个宿主系统的虚拟终端,以
root
身份执行第 7.3.1 节 “挂载和填充 /dev”和第 7.3.2 节 “挂载虚拟内核文件系统”中的命令。
标签:bin,head,--,echo,version,构建,LFS,n1,分阶段 From: https://www.cnblogs.com/linuxws/p/17617997.html