依赖关系分析

在正式开始编译最终系统之前,我们需要静下心来认真分析一下这个最终系统究竟需要哪些东西。

所谓”依赖性”是多方面的。一般来说,可以分为”运行时依赖”、”编译安装依赖”、”测试依赖”三个层面。为了构建一个严谨的自依赖系统,显然这三种依赖性都必须满足。运行时依赖比较简单,一般就是库的依赖;而后两种依赖则比较复杂(运行时依赖实际上取决于编译安装依赖)。比如,如果你不需要安装文档,那么 Textinfo 就不是必须的;如果你不需要国际化支持,那么 GetText 也不是必需的,等等。庆幸的是 LFS-Book 的附录部分给出了宝贵的依赖关系资料,可以提供参考,这样可以省去很多麻烦。

首先,我们来看看”核心”部分需要哪些东西。很显然,下面这些是必须的:GRUB, Kernel, Glibc, Sysklogd, Dcron, Bash, IPRoute2, Apache, PHP, PostgreSQL, OpenSSH, Iptables 。再深入思考一下,就会发现如下组件也是”核心”部分必须的:E2fsprogs(被mount和xfs_repair依赖),XFS(用于开机时的磁盘检查),Ncurses(被Readline/Bash依赖),Readline(被Bash/PostgreSQL依赖),Zlib(被Apache/PostgreSQL/OpenSSH依赖),JPEG+PNG(被PHP依赖),PCRE(被Apache/PHP依赖),OpenSSL(被Apache/OpenSSH/PostgreSQL依赖),Util-linux 与 Coreutils 中的部分程序。核心部分只需要满足运行时依赖即可。

然后,再看看”扩展”部分需要哪些东西。这部分的选择因人而异,这里就大致选择了几个系统管理相关的组件和几个实用工具:Coreutils, Procps, Psmisc, Util-linux, Bzip2, Findutils, Grep, Sed, Tar, XFS 。选择这部分组件时,暂时无需考虑依赖关系。

最后,考虑到可扩展性以及将来的组件升级与维护等,就必须构建一个自依赖的系统。也就是说,所有组件加在一起必须能构成一个完整的依赖环(3种依赖关系全部满足)。本文安装的、并且未在前面提到的软件包都属于这个用途。它们都属于”扩展”。

需要说明的是,这里的”核心”与”扩展”的划分不是绝对严格的:扩展部分的组件严格属于”扩展”,而核心部分的组件通常只有某一部分属于”核心”(其他部分归入”扩展”)。比如 Glibc 的基本库部分就属于”核心”,而扩展库、实用程序、文档、头文件等则属于”扩展”。

包管理

其实这么简单的系统根本不需要包管理,所以本文并不使用任何一种包管理技术,只是使用了一种非常简单的 DESTDIR 方法来将每个包都复制一份到/root目录下,以方便管理员查看每个软件包究竟安装了哪些东西。当然,并不是所有软件包都遵循这个约定俗成的规则,对于这些软件包使用的命令也有所不同。


相关内容

    暂无相关文章