从头构建Linux系统之三 —— 下载源码包和补丁

本章将会下载所有用于编译基本Linux系统的必要源码包和补丁,此处列出的源码包版本适用于本系列教程的操作步骤,不推荐使用其他版本的源码包!

某些源码包的下载链接并不总是能够访问的,有的开源项目会在新版本发布的时候,就把旧版本的源码包删除(例如file开源项目)。如果碰到这种情况,那么也可以访问LFS项目的FTP站点(ftp://ftp.lfs-matrix.net/pub/lfs/lfs-packages/7.10/),在此处也可以下载本系列教程需要的所有源码包和补丁。

本章的所有操作都以root用户身份运行!

一、系统配置

前一章设置了$LFS环境变量,并且挂载了LFS的专用文件系统,但是这些设置都是临时的,并没有写入任何配置文件之中,这就导致宿主机系统重启之后,这些设置都会丢失。现在,需要将这些设置持久化至宿主机系统之中,确保重启之后不会丢失。

1. 持久化环境变量配置

在宿主机系统中运行以下命令,编辑/etc/profile文件:

  1. vi /etc/profile

在这个文件最后新建一行,添加如下内容,然后保存和退出:

  1. export LFS=/mnt/lfs

2. 持久化文件系统配置

在宿主机系统中运行以下命令,查看LFS专用磁盘(sdb)分区的UUID:

  1. blkid

上述命令的返回信息如下图所示,红框之内便是LFS专用磁盘分区的UUID:

获取磁盘分区的UUID

编辑/etc/fstab文件:

  1. vi /etc/fstab

在这个文件最后新建七行,添加如下内容,然后保存和退出:

  1. UUID=2702ca0c-87cc-42c2-b008-4f683e9325d8 /mnt/lfs ext4 defaults 1 2
  2. UUID=cd4e9148-0487-4985-824f-6f9f170c6cc6 swap swap defaults 0 0
  3. UUID=145ef48c-83ec-409c-80a4-6bc59cbc96df /mnt/lfs/boot ext4 defaults 1 2
  4. UUID=5bcba74f-24ba-4a13-8d2b-68507ba293c7 /mnt/lfs/usr/local ext4 defaults 1 2
  5. UUID=677cfa9b-1d7f-4ff1-96e4-d737e10e1288 /mnt/lfs/tmp ext4 defaults 1 2
  6. UUID=99d3c85a-ca55-419b-b59a-c1ea8bd7f742 /mnt/lfs/usr/src ext4 defaults 1 2
  7. UUID=df180372-1503-42be-8da4-163b354d466a /mnt/lfs/home ext4 defaults 1 2

其中,每一行的UUID就是先前获得的每个磁盘分区的UUID。每行配置的每个字段的含义,请参考fstab文件的相关文档,本章不再赘述。

3. 重启宿主机系统

运行以下命令,重新启动宿主机系统:

  1. reboot

4. 检查配置

宿主机系统重启完毕之后,检查环境变量配置:

  1. echo $LFS

若输出信息如下图所示,则表示环境变量持久化配置成功:

检查LFS环境变量

检查文件系统配置:

  1. df -lh

若输出信息如下图所示,则表示文件系统持久化配置成功:

检查LFS文件系统

检查内存交换区配置:

  1. swapon -s

若输出信息如下图所示,则表示内存交换区持久化配置成功:

检查内存交换区

二、下载源码包和补丁

1. 源码包版本

编译基本的Linux系统所必需的源码包版本,如下表所示:

名称 版本号 大小
Acl 2.2.52 380 KB
Attr 2.4.47 336 KB
Autoconf 2.69 1,186 KB
Automake 1.15 1,462 KB
Bash 4.3.30 7,7791 KB
Bc 1.06.95 288 KB
Binutils 2.27 25,488 KB
Bison 3.0.4 1,928 KB
Bzip2 1.0.6 764 KB
Check 0.10.0 752 KB
Coreutils 8.25 5,591 KB
DejaGNU 1.6 512 KB
Diffutils 3.5 1,330 KB
Eudev 3.2 1,744 KB
E2fsprogs 1.43.1 6,846 KB
Expat 2.2.0 405 KB
Expect 5.45 614 KB
File 5.28 760 KB
Findutils 4.6.0 3,692 KB
Flex 2.6.1 816 KB
Gawk 4.1.3 2,258 KB
GCC 6.2.0 97,441 KB
GDBM 1.12 822 KB
Gettext 0.19.8.1 7,041 KB
Glibc 2.24 13,237 KB
GMP 6.1.1 1,898 KB
Gperf 3.0.4 960 KB
Grep 2.25 1,300 KB
Groff 1.22.3 4,091 KB
GRUB 2.02~beta3 5,890 KB
Gzip 1.8 712 KB
Iana-Etc 2.30 201 KB
Inetutils 1.9.4 1,333 KB
Intltool 0.51.0 159 KB
IPRoute2 4.7.0 577 KB
Kbd 2.0.3 1,013 KB
Kmod 23 440 KB
Less 481 310 KB
LFS-Bootscripts 20150222 31 KB
Libcap 2.25 64 KB
Libpipeline 1.4.1 787 KB
Libtool 2.4.6 951 KB
Linux 4.7.2 88,290 KB
M4 1.4.17 1,122 KB
Make 4.2.1 1,375 KB
Man-DB 2.7.5 1,471 KB
Man-pages 4.07 1,445 KB
MPC 1.0.3 655 KB
MPFR 3.1.4 1,096 KB
Ncurses 6.0 3,059 KB
Patch 2.7.5 711 KB
Perl 5.24.0 13,825 KB
Pkg-config 0.29.1 1,967 KB
Procps 3.3.12 826 KB
Psmisc 22.21 447 KB
Readline 6.3 2,411 KB
Sed 4.2.2 1,035 KB
Shadow 4.2.1 1,558 KB
Sysklogd 1.5.1 88 KB
Sysvinit 2.88dsf 108 KB
Tar 1.29 1,950 KB
Tcl 8.6.6 5,731 KB
Texinfo 6.1 4,416 KB
Time Zone Data 2016f 306 KB
Udev-lfs Tarball udev-lfs-20140408 11 KB
Util-linux 2.28.1 4,061 KB
Vim 7.4 9,632 KB
XML::Parser 2.44 232 KB
Xz Utils 5.2.2 993 KB
Zlib 1.2.8 441 KB

这些源码包总共大约会占用414 MB的磁盘空间。

2. 补丁信息

除了上述的源码包之外,编译LFS系统还需要一些补丁文件。这些补丁会修复某些源码包的错误,或者优化某些开源组件的工作方式。所有补丁文件的相关信息,如下表所示:

名称 大小
Bash Upstream Fixes Patch 15 KB
Bc Memory Leak Patch 1.4 KB
Bzip2 Documentation Patch 1.6 KB
Coreutils Internationalization Fixes Patch 146 KB
Glibc FHS Patch 2.8 KB
Kbd Backspace/Delete Fix Patch 12 KB
Readline Upstream Fixes Patch 8 KB
Sysvinit Consolidated Patch 3.9 KB

这些补丁文件总共大约会占用190.7 KB的磁盘空间。

3. 创建wget-list文件

本章会使用wget命令下载所有的源码包和补丁文件,如果手动逐个下载的话,操作过程会非常繁琐。此时,可以创建wget-list文件,包含所有源码包和补丁的下载地址,wget命令能够通过这个文件批量下载:

  1. vi /root/Downloads/wget-list

wget-list文件的内容,如下所示:

  1. http://download.savannah.gnu.org/releases/acl/acl-2.2.52.src.tar.gz
  2. http://download.savannah.gnu.org/releases/attr/attr-2.4.47.src.tar.gz
  3. http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.xz
  4. http://ftp.gnu.org/gnu/automake/automake-1.15.tar.xz
  5. http://ftp.gnu.org/gnu/bash/bash-4.3.30.tar.gz
  6. http://alpha.gnu.org/gnu/bc/bc-1.06.95.tar.bz2
  7. http://ftp.gnu.org/gnu/binutils/binutils-2.27.tar.bz2
  8. http://ftp.gnu.org/gnu/bison/bison-3.0.4.tar.xz
  9. http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
  10. http://sourceforge.net/projects/check/files/check/0.10.0/check-0.10.0.tar.gz
  11. http://ftp.gnu.org/gnu/coreutils/coreutils-8.25.tar.xz
  12. http://dbus.freedesktop.org/releases/dbus/dbus-1.10.10.tar.gz
  13. http://ftp.gnu.org/gnu/dejagnu/dejagnu-1.6.tar.gz
  14. http://ftp.gnu.org/gnu/diffutils/diffutils-3.5.tar.xz
  15. http://dev.gentoo.org/~blueness/eudev/eudev-3.2.tar.gz
  16. http://downloads.sourceforge.net/project/e2fsprogs/e2fsprogs/v1.43.1/e2fsprogs-1.43.1.tar.gz
  17. http://prdownloads.sourceforge.net/expat/expat-2.2.0.tar.bz2
  18. http://prdownloads.sourceforge.net/expect/expect5.45.tar.gz
  19. ftp://ftp.astron.com/pub/file/file-5.28.tar.gz
  20. http://ftp.gnu.org/gnu/findutils/findutils-4.6.0.tar.gz
  21. https://github.com/westes/flex/releases/download/v2.6.1/flex-2.6.1.tar.xz
  22. http://ftp.gnu.org/gnu/gawk/gawk-4.1.3.tar.xz
  23. http://ftp.gnu.org/gnu/gcc/gcc-6.2.0/gcc-6.2.0.tar.bz2
  24. http://ftp.gnu.org/gnu/gdbm/gdbm-1.12.tar.gz
  25. http://ftp.gnu.org/gnu/gettext/gettext-0.19.8.1.tar.xz
  26. http://ftp.gnu.org/gnu/glibc/glibc-2.24.tar.xz
  27. http://ftp.gnu.org/gnu/gmp/gmp-6.1.1.tar.xz
  28. http://ftp.gnu.org/gnu/gperf/gperf-3.0.4.tar.gz
  29. http://ftp.gnu.org/gnu/grep/grep-2.25.tar.xz
  30. http://ftp.gnu.org/gnu/groff/groff-1.22.3.tar.gz
  31. http://alpha.gnu.org/gnu/grub/grub-2.02~beta3.tar.xz
  32. http://ftp.gnu.org/gnu/gzip/gzip-1.8.tar.xz
  33. http://anduin.linuxfromscratch.org/LFS/iana-etc-2.30.tar.bz2
  34. http://ftp.gnu.org/gnu/inetutils/inetutils-1.9.4.tar.xz
  35. http://launchpad.net/intltool/trunk/0.51.0/+download/intltool-0.51.0.tar.gz
  36. https://www.kernel.org/pub/linux/utils/net/iproute2/iproute2-4.7.0.tar.xz
  37. https://www.kernel.org/pub/linux/utils/kbd/kbd-2.0.3.tar.xz
  38. https://www.kernel.org/pub/linux/utils/kernel/kmod/kmod-23.tar.xz
  39. http://www.greenwoodsoftware.com/less/less-481.tar.gz
  40. http://www.linuxfromscratch.org/lfs/downloads/7.10/lfs-bootscripts-20150222.tar.bz2
  41. https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.25.tar.xz
  42. http://download.savannah.gnu.org/releases/libpipeline/libpipeline-1.4.1.tar.gz
  43. http://ftp.gnu.org/gnu/libtool/libtool-2.4.6.tar.xz
  44. https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.7.2.tar.xz
  45. http://ftp.gnu.org/gnu/m4/m4-1.4.17.tar.xz
  46. http://ftp.gnu.org/gnu/make/make-4.2.1.tar.bz2
  47. http://download.savannah.gnu.org/releases/man-db/man-db-2.7.5.tar.xz
  48. https://www.kernel.org/pub/linux/docs/man-pages/man-pages-4.07.tar.xz
  49. http://www.multiprecision.org/mpc/download/mpc-1.0.3.tar.gz
  50. http://www.mpfr.org/mpfr-3.1.4/mpfr-3.1.4.tar.xz
  51. http://ftp.gnu.org/gnu//ncurses/ncurses-6.0.tar.gz
  52. http://ftp.gnu.org/gnu/patch/patch-2.7.5.tar.xz
  53. http://www.cpan.org/src/5.0/perl-5.24.0.tar.bz2
  54. https://pkg-config.freedesktop.org/releases/pkg-config-0.29.1.tar.gz
  55. http://sourceforge.net/projects/procps-ng/files/Production/procps-ng-3.3.12.tar.xz
  56. http://downloads.sourceforge.net/project/psmisc/psmisc/psmisc-22.21.tar.gz
  57. http://ftp.gnu.org/gnu/readline/readline-6.3.tar.gz
  58. http://ftp.gnu.org/gnu/sed/sed-4.2.2.tar.bz2
  59. http://pkg-shadow.alioth.debian.org/releases/shadow-4.2.1.tar.xz
  60. http://www.infodrom.org/projects/sysklogd/download/sysklogd-1.5.1.tar.gz
  61. http://anduin.linuxfromscratch.org/sources/other/systemd/systemd-231.tar.xz
  62. http://download.savannah.gnu.org/releases/sysvinit/sysvinit-2.88dsf.tar.bz2
  63. http://ftp.gnu.org/gnu/tar/tar-1.29.tar.xz
  64. http://sourceforge.net/projects/tcl/files/Tcl/8.6.6/tcl-core8.6.6-src.tar.gz
  65. http://ftp.gnu.org/gnu/texinfo/texinfo-6.1.tar.xz
  66. http://www.iana.org/time-zones/repository/releases/tzdata2016f.tar.gz
  67. http://anduin.linuxfromscratch.org/LFS/udev-lfs-20140408.tar.bz2
  68. https://www.kernel.org/pub/linux/utils/util-linux/v2.28/util-linux-2.28.1.tar.xz
  69. ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2
  70. http://cpan.metacpan.org/authors/id/T/TO/TODDR/XML-Parser-2.44.tar.gz
  71. http://tukaani.org/xz/xz-5.2.2.tar.xz
  72. http://www.zlib.net/zlib-1.2.8.tar.xz
  73. http://www.linuxfromscratch.org/patches/lfs/7.10/bash-4.3.30-upstream_fixes-3.patch
  74. http://www.linuxfromscratch.org/patches/lfs/7.10/bc-1.06.95-memory_leak-1.patch
  75. http://www.linuxfromscratch.org/patches/lfs/7.10/bzip2-1.0.6-install_docs-1.patch
  76. http://www.linuxfromscratch.org/patches/lfs/7.10/coreutils-8.25-i18n-2.patch
  77. http://www.linuxfromscratch.org/patches/lfs/7.10/glibc-2.24-fhs-1.patch
  78. http://www.linuxfromscratch.org/patches/lfs/7.10/kbd-2.0.3-backspace-1.patch
  79. http://www.linuxfromscratch.org/patches/lfs/7.10/readline-6.3-upstream_fixes-3.patch
  80. http://www.linuxfromscratch.org/patches/lfs/7.10/sysvinit-2.88dsf-consolidated-1.patch

4. 下载源码包和补丁

创建存放源码包和补丁的目录:

  1. mkdir -v $LFS/sources

将这个目录设置为具有可写和粘滞(sticky)权限。在一个粘滞目录中,即使有多个用户对某个文件具有可写权限,也只有文件所有者才能删除这个文件。运行以下命令:

  1. chmod -v a+wt $LFS/sources

使用wget命令,通过wget-list文件批量下载源码包和补丁:

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

三、MD5校验

1. 创建md5sums文件

所有的源码包和补丁文件下载完毕之后,还需要进行MD5校验,确保数据的完整性。此时,需要创建md5sums文件,包含所有源码包和补丁的MD5码:

  1. vi /root/Downloads/md5sums

md5sums文件的内容,如下所示:

  1. a61415312426e9c2212bd7dc7929abda acl-2.2.52.src.tar.gz
  2. 84f58dec00b60f2dc8fd1c9709291cc7 attr-2.4.47.src.tar.gz
  3. 50f97f4159805e374639a73e2636f22e autoconf-2.69.tar.xz
  4. 9a1ddb0e053474d9d1105cfe39b0c48d automake-1.15.tar.xz
  5. a27b3ee9be83bd3ba448c0ff52b28447 bash-4.3.30.tar.gz
  6. 5126a721b73f97d715bb72c13c889035 bc-1.06.95.tar.bz2
  7. 2869c9bf3e60ee97c74ac2a6bf4e9d68 binutils-2.27.tar.bz2
  8. c342201de104cc9ce0a21e0ad10d4021 bison-3.0.4.tar.xz
  9. 00b516f4704d4a7cb50a1d97e6e8e15b bzip2-1.0.6.tar.gz
  10. 53c5e5c77d090e103a17f3ed7fd7d8b8 check-0.10.0.tar.gz
  11. 070e43ba7f618d747414ef56ab248a48 coreutils-8.25.tar.xz
  12. 1fdc2eb0d592c4f89d82d24dfdf02f0b dejagnu-1.6.tar.gz
  13. 569354697ff1cfc9a9de3781361015fa diffutils-3.5.tar.xz
  14. 7e42d9b9ed8162021665139520676367 eudev-3.2.tar.gz
  15. 1775f3f0eed9dee1c5f39e08d1964a97 e2fsprogs-1.43.1.tar.gz
  16. 2f47841c829facb346eb6e3fab5212e2 expat-2.2.0.tar.bz2
  17. 44e1a4f4c877e9ddc5a542dfa7ecc92b expect5.45.tar.gz
  18. 3f7771424aa855f32094b49571e19b33 file-5.28.tar.gz
  19. 9936aa8009438ce185bea2694a997fc1 findutils-4.6.0.tar.gz
  20. cd3c86290fc2676a641aefafeb10848a flex-2.6.1.tar.xz
  21. 97f8f44149ea9b9e94be97f68988be87 gawk-4.1.3.tar.xz
  22. 9768625159663b300ae4de2f4745fcc4 gcc-6.2.0.tar.bz2
  23. 9ce96ff4c99e74295ea19040931c8fb9 gdbm-1.12.tar.gz
  24. df3f5690eaa30fd228537b00cb7b7590 gettext-0.19.8.1.tar.xz
  25. 97dc5517f92016f3d70d83e3162ad318 glibc-2.24.tar.xz
  26. e70e183609244a332d80529e7e155a35 gmp-6.1.1.tar.xz
  27. c1f1db32fb6598d6a93e6e88796a8632 gperf-3.0.4.tar.gz
  28. 04e96b0e6f0fe6a180ae62c88fcd0af6 grep-2.25.tar.xz
  29. cc825fa64bc7306a885f2fb2268d3ec5 groff-1.22.3.tar.gz
  30. ab399fc6f74a97d66ff77f04b743149c grub-2.02~beta3.tar.xz
  31. f7caabb65cddc1a4165b398009bd05b9 gzip-1.8.tar.xz
  32. 3ba3afb1d1b261383d247f46cb135ee8 iana-etc-2.30.tar.bz2
  33. 87fef1fa3f603aef11c41dcc097af75e inetutils-1.9.4.tar.xz
  34. 12e517cac2b57a0121cda351570f1e63 intltool-0.51.0.tar.gz
  35. d4b205830cdc2702f8a0cbd6232129cd iproute2-4.7.0.tar.xz
  36. 231b46e7142eb41ea3ae06d2ded3c208 kbd-2.0.3.tar.xz
  37. 3cf469f40ec2ed51f56ba45ea03793e7 kmod-23.tar.xz
  38. 50ef46065c65257141a7340123527767 less-481.tar.gz
  39. d4c219f80adf3c93265f409ef9966e3d lfs-bootscripts-20150222.tar.bz2
  40. 6666b839e5d46c2ad33fc8aa2ceb5f77 libcap-2.25.tar.xz
  41. e54590ec68d6c1239f67b5b44e92022c libpipeline-1.4.1.tar.gz
  42. 1bfb9b923f2c1339b4d2ce1807064aa5 libtool-2.4.6.tar.xz
  43. ae493473d074185205a54bc8ad49c3b4 linux-4.7.2.tar.xz
  44. 12a3c829301a4fd6586a57d3fcf196dc m4-1.4.17.tar.xz
  45. 15b012617e7c44c0ed482721629577ac make-4.2.1.tar.bz2
  46. 37da0bb0400cc7b640f33c26f6052202 man-db-2.7.5.tar.xz
  47. 6d6c59b83431852ba44930785def30d4 man-pages-4.07.tar.xz
  48. d6a1d5f8ddea3abd2cc3e98f58352d26 mpc-1.0.3.tar.gz
  49. 064b2c18185038e404a401b830d59be8 mpfr-3.1.4.tar.xz
  50. ee13d052e1ead260d7c28071f46eefb1 ncurses-6.0.tar.gz
  51. e3da7940431633fb65a01b91d3b7a27a patch-2.7.5.tar.xz
  52. 99f39abe614b50719d9915431e54fc1e perl-5.24.0.tar.bz2
  53. f739a28cae4e0ca291f82d1d41ef107d pkg-config-0.29.1.tar.gz
  54. 957e42e8b193490b2111252e4a2b443c procps-ng-3.3.12.tar.xz
  55. 935c0fd6eb208288262b385fa656f1bf psmisc-22.21.tar.gz
  56. 33c8fb279e981274f485fd91da77e94a readline-6.3.tar.gz
  57. 7ffe1c7cdc3233e1e0c4b502df253974 sed-4.2.2.tar.bz2
  58. 2bfafe7d4962682d31b5eba65dba4fc8 shadow-4.2.1.tar.xz
  59. c70599ab0d037fde724f7210c2c8d7f8 sysklogd-1.5.1.tar.gz
  60. 6eda8a97b86e0a6f59dabbf25202aa6f sysvinit-2.88dsf.tar.bz2
  61. a1802fec550baaeecff6c381629653ef tar-1.29.tar.xz
  62. 98ebf13bbd90257e006c219369dd5f67 tcl-core8.6.6-src.tar.gz
  63. 1d7ec1888fae00730693597852b00cde texinfo-6.1.tar.xz
  64. b20b3c1618db1984aac685e763de001d tzdata2016f.tar.gz
  65. c2d6b127f89261513b23b6d458484099 udev-lfs-20140408.tar.bz2
  66. e2d863efaf4fd330a42c5efe9f1b02b4 util-linux-2.28.1.tar.xz
  67. 607e135c559be642f210094ad023dc65 vim-7.4.tar.bz2
  68. af4813fe3952362451201ced6fbce379 XML-Parser-2.44.tar.gz
  69. e26772b69940085c0632589ab1d52e64 xz-5.2.2.tar.xz
  70. 28f1205d8dd2001f26fec1e8c2cebe37 zlib-1.2.8.tar.xz
  71. e183ab08f0a51a7c5a2e974eb1ecbc46 bash-4.3.30-upstream_fixes-3.patch
  72. 877e81fba316fe487ec23501059d54b8 bc-1.06.95-memory_leak-1.patch
  73. 6a5ac7e89b791aae556de0f745916f7f bzip2-1.0.6-install_docs-1.patch
  74. c6334ed5b03062ef7e9649e8ceb2cfc1 coreutils-8.25-i18n-2.patch
  75. 9a5997c3452909b1769918c759eff8a2 glibc-2.24-fhs-1.patch
  76. f75cca16a38da6caa7d52151f7136895 kbd-2.0.3-backspace-1.patch
  77. 6b0d9f4e79319d56a7fee9b35e5cfd1b readline-6.3-upstream_fixes-3.patch
  78. 0b7b5ea568a878fdcc4057b2bf36e5cb sysvinit-2.88dsf-consolidated-1.patch

2. MD5校验

运行以下命令,通过md5sums文件进行MD5完整性校验:

  1. cd $LFS/sources
  2. md5sum -c /root/Downloads/md5sums

若MD5校验结果如下图所示,则表示所有已下载的源码包和补丁是完整的:

进行MD5完整性校验

现在,编译LFS系统所必需的源码包和补丁文件已经全部下载完成了。下一章会为编译一个Linux临时系统做好最后的准备,包括创建一个临时工具目录、新建一个无特权用户和设置合适的编译环境。