Linux From Scratch 项目

在 Linux 的众多发行版中有一股清流,与当前快速无脑搭建系统环境相反,什么软件包都要构建者自行下载编译,设置开始构建前自己还需要有一台 Linux 作为宿主的 Linux From Scratch 项目。

Linux From Scratch(简称 LFS,下同)项目是由 Gerard Beekman 等人发起,通过撰写手册方式发布发行版系统构建流程的独特项目,目前手册由 Bruce Dubbs 维护,保持每半年更新一版的速度。

LFS 是所有发行版中比较特殊的发行版,当然是否属于 Linux 的发行版这件事也存疑。笔者确实在 distrowatch 上找到了关于 LFS 的发行版详细信息,但结合 LFS 项目首页的说明、以及本身的发布、构建方式来看,笔者更倾向于将其定位为一本分步构建 Linux 系统的手册,以及维护手册的项目。

自制 Linux 显然完全没有必要从每个组成部件的代码入手自制,那样太没有效率,顶级的程序员和无数的开发者换来的功能,非一人一力可以匹敌,也不是一本书写得完的。所以 LFS 的构建流程,以软件包为单位,从头至尾如同搭积木一样 DIY 一个 Linux 系统出来。

1.2.1 遵循的标准

首先,明确构建 LFS 的目标,完善 1.1.4 中提到的 Linux 系统所需要包含的要件,并使其基本遵循 POSIX.1-2008.、FHS 3.0 和 LSB 5.0 这三个标准。

需要声明的是 LFS 并没有完全遵守标准,其他的 Linux 发行版或多或少也存在不遵守的地方。而且标准随着行业发展会逐渐进化,并不是一成不变的。由于 LFS 的安装方式是纯手动编译的方式,在构建过一次两次 LFS 后,读者完全可以放飞自己,无需拘泥于所谓的标准。遵守标准的好处是系统的通用性和扩展性会更好,无论是构建者本人或是其他使用者,在通晓 Linux 常用知识后能简单上手使用;需要扩展安装其他软件包时出现的问题的概率会更小。

1. 可移植操作系统接口(POSIX)

POSIX(Portable Operating System Interface,可移植操作系统接口)这个名称是由 RMS 应 IEEE 的要求而提议的一个易于记忆的名称。它基本上是首字母缩写,而 X 则表明其对 UNIX API 的传承。Linux 基本上逐步实现了 POSIX 兼容,但并没有参加正式的 POSIX 认证。同时,Linux 的发展也影响到了 POSIX 后续的发展。

由于是直接构建软件包,不必直面标准的内容,就不多做介绍了。非常感谢 Austin Group 一直以来对于标准的维护,让他一直在迭代。如果对此感兴趣或是想要深入了解的话可以移步 Austin Group 的主页(https://www.opengroup.org/austin/),或者 POSIX.1-2017 的主页(https://pubs.opengroup.org/onlinepubs/9699919799/)。如果对 2008 版更有兴趣的话,也可以在 2017 的主页链接中找到以往的版本。

2. 文件系统层次结构标准(FHS)

FHS(Filesystem Hierarchy Standard,文件系统层次结构标准)定义了 Linux 操作系统中的主要目录及目录内容。FHS 由 Linux 基金会维护。 当前版本为 3.0 版,于 2015 年发布。多数 Linux 发行版遵从 FHS 标准并且声明其自身政策以维护 FHS 的要求。

这个标准用于规范 Linux 下各个目录的命名和功能。比如:/bin 是用于存放二进制文的位置,/home 是用于存放每个用户个人目录的位置。在构建的过程中会专门创建这些目录和文件以满足该标准。

3. Linux 标准规范(LSB)

LSB(Linux Standard Base,Linux 标准库)是由 Linux 基金会组织结构下的几个 Linux 发行版组成的联合项目,用于标准化软件系统结构,包括 Linux 内核中使用的文件系统层次结构标准。LSB 基于 POSIX 规范,单 UNIX 规范(SUS)和其他几个开放标准,但在某些领域进行了扩展。

LSB 的目标是开发和推广一系列开放标准,这些标准将提高 Linux 发行版之间的兼容性,并使软件应用程序能够在任何兼容系统上运行。LSB 合规性可通过认证程序对产品进行认证。

LSB 有 4 个独立的标准:核心(Core)、桌面(Desktop)、运行时语言(Runtime Languages)和成像(Imaging)。除了通用要求,还有架构特定要求。此外还有两个领域在试行:分别是 Gtk3 和图形(Graphics)。仅构建 LFS 并不能创建一个完全通过 LSB 认证测试的完整系统,需要很多 LFS 范围之外的额外软件包。在 BLFS 中有这些额外软件包的安装说明。

由 LFS 提供,用于满足 LSB 要求的软件包:

  • LSB 核心:bash, bc, binutils, coreutils, diffutils, file, findutils, gawk, grep, gzip, m4, man-db, ncurses, procps, psmisc, sed, shadow, tar, util-linux, zlib
  • LSB 桌面:无
  • LSB 运行时语言:PERL
  • LSB 成像:无
  • LSB GTK3 和 LSB 图形(试用):无

由 BLFS 提供,用于满足 LSB 要求的软件包:

  • LSB 核心:at, Batch (at 的一部分), cpio, ed, fcrontab, initd-tools, lsb_release, NSPR, NSS, PAM, pax, Sendmail (或 Postfix 或 Exim), time
  • LSB 桌面:ALSA, ATK, cairo, desktop-file-utils, freetype, fontconfig, gdk-pixbuf, glib2, GTK+2, Icon-naming-utils, libjpeg-turbo, libpng, libtiff, libxml2, MesaLib, Pango, xdg-utils, Xorg
  • LSB 运行时语言:python, libxml2, libxslt
  • LSB 成像:CUPS, cups-filters, ghostscript, SANE
  • LSB GTK3 和 LSB 图形(试用):GTK+3

LFS 和 BLFS 没有提供,用于满足 LSB 要求的软件包:

  • LSB 核心:无
  • LSB 桌面:Qt4(以及 Qt5 除外)
  • LSB 运行时语言:无
  • LSB 成像:无
  • LSB GTK3 和 LSB 图形(试行):无