前言

  根据LFS文档,构建Linux系统。LFS版本:Linux From Scratch Version 7.9-systemd
  首先了解一下该版本下LFS构建中的软件包和作用(摘自Linux From Scratch Version 7.9-systemd内容):

Acl: 这个软件包包括了管理访问控制列表(ACL)的工具,用于定义文件和目录更细粒度的自主访问权。
Attr: 这个软件包包
括了管理文件系统的对象扩展属性的程序
Autoconf: 这个软件包包括了能根据开发者的模板自动生成配置源代码的 shell 脚本的程序。更新了构建过程之后重新构建软件包通常需要这个。
Automake: 这个软件包包括了从模板生成 Make 文件的程序。更新了构建过程之后重新构建软件包通常需要这个。
Bash: 这个软件包能满足提供到系统的 Bourne Shell 接口的 LSB 核心需求。由于其通用性和在基本 shell 功能上的扩展能力,所以选择它而不是其它的 shell 软件包。
Bc: 这个软件包提供了一种任意精度的数值处理语言。在构建 Linux 内核时需要它。
Binutils: 这个软件包包括了一个链接器、汇编器和其它处理对象文件的工具。编译 LFS 系统以及之上的大部分软件包需要这个软件包中的程序。
Bison: 这个软件包中有 yacc(Yet Another Compiler Compiler) 的 GNU 版本,需要用来构建一些其它的 LFS 程序。
Bzip2: 这个软件包包括了用来压缩和解压缩文件的程序。在解压缩很多 LFS 软件包的时候需要它。
Check: 这个软件包包括了一个用于其它程序的测试工具。它只安装在临时工具链中。
Coreutils: 这个软件包包括了一些查看和管理文件和目录的重要程序。在命令行里管理文件和每个 LFS 软件包的安装过程中需要它。
D-Bus: 这个软件包包括了一个用于提供消息总线的程序,消息总线是一种应用程序之间通信的简单方式。systemd 也需要它。
DejaGNU: 这个软件包包括了一个测试其它程序的框架。只安装在临时工具链中。
Diffutils: 这个软件包包括了一些显示文件和目录差异的程序。这些程序可以用来创建补丁,也用于很多软件包的构建过程。
E2fsprogs: 这个软件包包括了一些处理 ext2、ext3 和 ext4 文件系统的工具。这些是 Linux 上支持的最常用而且完全经过考验的文件系统。
Expat: 这个软件包包括了一个相对小的 XML 解析库。Perl 模块 XML::Parser 需要用到这个。
Expect: 这个软件包包括了一个生成与其它程序交互的脚本对话框的程序。通常用来测试其它软件包。只安装在临时工具链中。
File: 这个软件包包括了一个能判断给定文件的类型的工具。一些软件包需要用它来构建。
Findutils: 这个软件包包括了一些在文件系统中查找文件的程序。在很多软件包构建脚本中会用到它。
Flex: 这个软件包包括了一个能生成识别文本模式程序的工具。是 lex(lexical analyzer) 程序的 GNU 版本。构建很多 LFS 软件包需要用到它。
Gawk: 这个软件包包括了一些操作文本文件的程序。是 awk(Aho-Weinberg-Kernighan) 的 GNU 版本。在很多软件包的构建脚本中会用到它。
Gcc: 这个软件包是 GNU 编译器工具集。它包括 C 和 C++ 的编译器以及其它一些不是由 LFS 构建的软件包。
GDBM: 这个软件包包括了 GNU 数据库管理库。LFS 的另一个软件包 Man-DB 会用到它。
Gettext: 这个软件包包括了很多软件包国际化和本地化需要用到的工具和库。
Glibc: 这个软件包包括了主要的 C 语言库。缺少它 Linux 程序就运行不了。
GMP: 这个软件包包括了能提供任意精度数值运算的数学库。编译 Gcc 会用到它。
Gperf: 这个软件包包括了一个能从一个键集生成完美哈希函数的程序。sysetmd 会用到它。
Grep: 这个软件包包括了一些在文件中搜索的程序。大部分软件包的构建脚本会用到它。
Groff: 这个软件包包括了处理和格式化文本的程序。其中一个重要的功能是格式化 man 页面。
GRUB: 这个包是 Grand Unified Boot Loader。是可用的引导加载器之一,但最灵活。
Gzip: 这个包包括了一些压缩和解压缩文件的程序。解压很多 LFS 以及之上的软件包时会需要它。
Iana-etc: 这个软件包提供了网络服务和协议的数据。启用合适的网络功能会用到它。
Inetutils: 这个包包括了基本网络管理的程序。
Intltool: 这个包包括了能从源文件中抽取可翻译字符串的工具。
IProute2: 这个包包括了一些基本和高级的 IPv4 和 IPv6 网络的程序。由于其 IPv6 功能,所以选择它而不选择其它的常见网络工具包(net-tools)。
Kbd: 这个包包括了一些键盘映射文件,用于非 US 键盘的键盘工具以及一些控制台字体。
Kmod: 这个软件包包括了一些用于管理 Linux 内核模块的程序。
Less: 这个软件包包括了一个很好的文本文件查看器,允许查看文件的时候向上或向下滚动。Man-DB 用它来查看 man 页面。
Libcap: 这个包实现了可以用于 Linux 内核的,从用户空间到 POSIX 1003.1e 的接口。
Libpipeline: 这个包包括了一个以灵活和便捷的方式操作子进程流水线的库。Man-DB 软件包会用到它。
Libtool: 这个软件包包括一些 GNU 通用库支持脚本。它降低了在一致、可移植的接口上使用共享库的复杂度。在其他 LFS 软件包的测试套件里需要它。
Linux Kernel: 这个包就是操作系统。即我们常说的 “GNU/Linux” 中的 “Linux”。
M4: 这个包包括了一个普通的文本宏处理器,作为其它程序的构建工具使用。
Make: 这个包包括了一个指导软件包构建的程序。LFS 中的几乎每个包都需要它。
Man-DB: 这个包包括了一些查找和查看 man 页面的程序。由于其更好的国际化功能,用来代替 man软件包。它提供了 man 程序。
Man-pages: 这个包包括了基本的 Linux man 页面的真正内容。
MPC: 这个包包括了复数运算的函数。Gcc 需要它。
MPFR: 这个包包括了多精度运算的函数。Gcc 需要它。
Ncurses: 这个包包括了一些处理字符界面的不依赖特定终端的库。通常用来为菜单系统提供光标控制。一些 LFS 的软件包会用到它。
Patch: 这个包包括了一个通过补丁文件来修改或新建文件的程序,补丁文件通常是由 diff 程序创建的。一些 LFS 软件包的构建过程会需要它。
Perl: 这个包包括了一个运行时语言 PERL 的解析器。一些 LFS 软件包的安装和测试套件会需要它。
Pkg-config: 这个包提供了一个返回已安装库或软件包的元数据的程序。
Procps-NG: 这个包包括了一些监视进程的程序。这些程序对系统管理非常有用,也用于 LFS 的启动脚本。
Psmisc: 这个包包括了一些显示运行中进程信息的程序。这些程序对系统管理非常有用。
Readline: 这个包提供了一些命令行编辑和历史功能的库。Bash 会使用它。
Sed: 这个包提供了不通过文本编辑器而直接编辑文本的功能。大部分 LFS 软件包的配置脚本需要它。
Shadow: 这个包包括了一些以安全方式处理密码的程序。
Systemd: 作为 Sysvinit 的替代品,这个包提供了一个 init 程序以及一些其它的引导和系统控制功能。很多 Linux 发行版都用它。
Tar: 这个软件包提供了归档和提取 LFS 中的几乎所有软件包的能力。
Tcl: 这个包包括了在很多 LFS 软件包测试套件中使用的工具命令语言。只安装在临时工具链中。
Texinfo: 这个包包括了一些读、写以及转换信息页面的程序。在很多 LFS 软件包的安装过程中会使用它。
Util-linux: 该软件包包括了许多工具。其中有处理文件系统、控制台、分区和消息的工具。
Vim: 这个包包括了一个编辑器。由于 vi 编辑器的经典以及大量的强大功能而选择它。对很多用户来说一个编辑器是一个非常个人的选择,如果需要的话也可以选择其它编辑器。
XML::Parser: 这个包是和 Expat 交互的 Perl 模块。
XZ Utils: 这个包包括了一些压缩和解压缩文件的程序。通常它的压缩率最高,在解压 XZ 或者 LZMA 格式的软件包时非常有用。
Zlib: 这个包包括了一些程序所使用的压缩和解压缩功能。

准备工作

检查宿主机

  检查宿主机的软件和内核版本是否符合LFS7.9的需求。
  软件版本清单:

Bash-3.2 (/bin/sh should be a symbolic or hard link to bash)
Binutils-2.17
Bison-2.3 (/usr/bin/yacc should be a link to bison or small script that executes bison)
Bzip2-1.0.4
Coreutils-6.9
Diffutils-2.8.1
Findutils-4.2.31
Gawk-4.0.1
GCC-4.7 including the C++ compiler, g++
Glibc-2.11
Grep-2.5.1a
Gzip-1.3.12
Linux Kernel-2.6.32
M4-1.4.10
Make-3.81
Patch-2.5.4
Perl-5.8.8
Sed-4.1.5
Tar-1.18
Texinfo-4.7
Xz-5.0.0

1.检查宿主机的软件版本:

  使用lfs7.9的version-check.sh脚本进行检查:

#!/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 MYSHecho -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1if [ -h /usr/bin/yacc ]; thenecho "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
elif [ -x /usr/bin/yacc ]; thenecho yacc is `/usr/bin/yacc --version | head -n1`
elseecho "yacc not found"
fibzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1if [ -h /usr/bin/awk ]; thenecho "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
elif [ -x /usr/bin/awk ]; thenecho awk is `/usr/bin/awk --version | head -n1`
else echo "awk not found"
figcc --version | head -n1
g++ --version | head -n1
ldd --version | head -n1 | cut -d" " -f2-  # glibc version
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`
sed --version | head -n1
tar --version | head -n1
makeinfo --version | head -n1
xz --version | head -n1echo '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

  我的宿主机是ubuntu 16.04桌面个人版,所以得到的结果如下:

bash, version 4.3.48(1)-release
/bin/sh -> /bin/dash
ERROR: /bin/sh does not point to bash
Binutils: (GNU Binutils for Ubuntu) 2.26.1
version-check.sh: 11: version-check.sh: bison: not found
yacc not found
bzip2, Version 1.0.6, 6-Sept-2010.
Coreutils: 8.25
diff (GNU diffutils) 3.3
find (GNU findutils) 4.7.0-git
version-check.sh: 25: version-check.sh: gawk: not found
/usr/bin/awk -> /usr/bin/mawk
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
(Ubuntu GLIBC 2.23-0ubuntu10) 2.23
grep (GNU grep) 2.25
gzip 1.6
Linux version 4.13.16+ (root@insight-All-Series) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9)) #1 SMP Wed Oct 10 14:56:29 CST 2018
version-check.sh: 41: version-check.sh: m4: not found
GNU Make 4.1
GNU patch 2.7.5
Perl version=‘5.22.1’;
sed (GNU sed) 4.2.2
tar (GNU tar) 1.28
version-check.sh: 47: version-check.sh: makeinfo: not found
xz (XZ Utils) 5.1.0alpha
g++ compilation OK

  可以发现上面有一些错误,这里给出如下解决方案:

  1. shell脚本未指向bash而是dash:

修改默认的脚本链接到bash:ln -sf bash /bin/sh

  1. bison: not found(bison是属于 GNU 项目的一个语法分析器生成器)

安装bison:sudo apt-get install bison

  1. yacc not found(安装bison后yacc也会被安装上,它是一个经典的生成语法分析器的工具)
  2. gawk not found(linux下查找替换文本工具)

同样的安装gawk:sudo apt-get install gawk

  1. makeinfo: command not found

安装makeinfo:sudo apt-get install texinfo

  以上修正完毕后,输出如下:

bash, version 4.3.48(1)-release
/bin/sh -> /bin/bash
Binutils: (GNU Binutils for Ubuntu) 2.26.1
bison (GNU Bison) 3.0.4
/usr/bin/yacc -> /usr/bin/bison.yacc
bzip2, Version 1.0.6, 6-Sept-2010.
Coreutils: 8.25
diff (GNU diffutils) 3.3
find (GNU findutils) 4.7.0-git
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
/usr/bin/awk -> /usr/bin/gawk
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
(Ubuntu GLIBC 2.23-0ubuntu10) 2.23
grep (GNU grep) 2.25
gzip 1.6
Linux version 4.13.16+ (root@insight-All-Series) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9)) #1 SMP Wed Oct 10 14:56:29 CST 2018
m4 (GNU M4) 1.4.17
GNU Make 4.1
GNU patch 2.7.5
Perl version=‘5.22.1’;
sed (GNU sed) 4.2.2
tar (GNU tar) 1.28
texi2any (GNU texinfo) 6.1
xz (XZ Utils) 5.1.0alpha
g++ compilation OK

1.宿主机的库文件一致性检查:

   同样的,使用lfs7.9的library-check.sh:

#!/bin/bash
for lib in lib{gmp,mpfr,mpc}.la; doecho $lib: $(if find /usr/lib* -name $lib|grep -q $lib;then :;else echo not;fi) found
done
unset lib

   执行结果如下:

libgmp.la: not found
libmpfr.la: not found
libmpc.la: not found

  正如lfs的描述所说,这些库文件要么全有,要么全没有。这两种结果都是正确的。

LFS(Linux From Scratch)构建过程全记录(一):准备工作相关推荐

  1. 64位Ubuntu 12.04下搭建嵌入式Qt(4.8.6)、QtCreator、qvfb过程全记录

    最新公司搞一个新项目,需要在Linux下进行UI界面设计.选来选去,最后选择采用Qt平台来做,于是要开始研究一下Qt. Qt作为业内最著名的UI开发工具之一,是一套完整的跨平台C++图形用户界面应用程 ...

  2. ros2_object_analytics安装过程全记录

    ros2_object_analytics安装过程全记录 ros2_object_analytics安装过程全记录 问题总结 (1)OpenCV3.3依赖问题 (2)devel版本中librealse ...

  3. 在CentOS7上安装配置Corosync高可用集群过程全记录

    在CentOS7上安装配置Corosync高可用集群过程全记录 一.环境.拓朴及其他准备工作: 1-1:准备网络YUM源环境: All Nodes OS CentOS 7.3 x86_64: # wg ...

  4. Ubuntu16.04LTS+CUDA8.0+cuDNN5.1+Anaconda3(python3.6)+tensorflow_gpu-1.2.1安装过程全记录

    Ubuntu16.04LTS+CUDA8.0+cuDNN5.1+Anaconda3(python3.6)+tensorflow_gpu-1.2.1安装过程全记录 最近搭建了一台用于深度学习的服务器,其 ...

  5. 在CentOS7上通过RPM安装实现LAMP+phpMyAdmin安装过程全记录

    在CentOS7上通过RPM安装实现LAMP+phpMyAdmin安装过程全记录 时间:2017年9月20日 一.软件环境: IP:192.168.1.71 Hostname:centos73-2.s ...

  6. 服务器型号sc2312怎么看,HP MSA2312sa实施过程全记录

    HP MSA2312sa实施过程全记录 首次接触SAS接口的盘柜,在实施过程当中也碰到了一些小问题,为防止以后遗忘,特此做下纪录,同时和大家做下分享与交流. 硬件配置 4台HP DL380G7服务器( ...

  7. DL之Attention-ED:基于TF NMT利用带有Attention的 ED模型训练、测试(中英文平行语料库)实现将英文翻译为中文的LSTM翻译模型过程全记录

    DL之Attention-ED:基于TF NMT利用带有Attention的 ED模型训练(中英文平行语料库)实现将英文翻译为中文的LSTM翻译模型过程全记录 目录 测试输出结果 模型监控 训练过程全 ...

  8. NLP之WE之Skip-Gram:基于TF利用Skip-Gram模型实现词嵌入并进行可视化、过程全记录

    NLP之WE之Skip-Gram:基于TF利用Skip-Gram模型实现词嵌入并进行可视化 目录 输出结果 代码设计思路 代码运行过程全记录 输出结果 代码设计思路 代码运行过程全记录 3081 or ...

  9. AIX 关键系统文件被清空问题定位过程全记录

    问题描述 某日接到客户反馈,某系统备机重启后 telnet 无法登录,提示信息如下: telnet (testlpar1)telnetd: /bin/login: Cannot run a file ...

最新文章

  1. Android强制设置横屏或竖屏
  2. 011_TreeMap对键实现了Comparable接口的对象排序
  3. CTFshow 文件包含 web81
  4. 用双向链表实现一个栈
  5. hue 配置mysql数据源_hue-使用mysql作为元数据库
  6. [MySQL 优化] 移除多余的checksum
  7. python xlrd使用_python处理Excel xlrd的简单使用
  8. [原创]网银在线chinabank安全漏洞之“不完善的开发软件包”
  9. 让VS2008真正支持JQuery的智能感知
  10. 前端的常见的面试试题
  11. linux系统刷机教程,在 Linux 刷 BIOS
  12. 初学者如何利用米思齐编写出一套完整的程序
  13. 麦子学院Linux教程:环境搭建
  14. 为什么大厂们 一边裁员,一边招人。。
  15. U盘有占用空间,但无文件或者都变成了快捷方式
  16. 创建一个简单的workflow工作流(WF4)
  17. 云计算零基础(2)配置yum仓库
  18. brpc-client
  19. 懂得感恩,是收获幸福的源泉。懂得感恩,你会发现原来自己周围的一切都是那样的美好
  20. 混合动作空间(Dis_Conti_Hybrid)

热门文章

  1. 1.3. DIGITAL SIGNATURES数字签名
  2. 计算机的扩展模式,Win7双屏复制/双屏扩展设置教程
  3. 在html中加动画效果,教你如何在网页上用H5实现动画效果
  4. 凸包 初学 Andrew 和 Melkman (模板) 旋转卡(qia)壳(ke)
  5. 别错过,教你如何用电脑玩手机
  6. Java处理CSV或者制表符等分隔文件,比如Maf文件
  7. 修改Odoo 8版权信息
  8. spo0lsv病毒分析
  9. jQuery grid plung's Documentation
  10. Arithmetic Code 算术编码