本书中安装的软件包只是冰山一角。我们希望您从 LFS 书籍和 BLFS 书籍中获得的经验,能为您编译、安装和配置本书未包含的软件包提供必要的基础。
当您要将软件包安装到 / 或 /usr
以外的位置时,您就在大多数机器的默认环境设置之外进行安装。以下示例应能帮助您确定如何纠正这种情况。这些示例涵盖了可能需要更新的完整设置范围,但并非所有情况都需要全部使用。
扩展 PATH 以包含 $PREFIX/bin。
为 root 扩展 PATH 以包含 $PREFIX/sbin。
将 $PREFIX/lib 添加到 /etc/ld.so.conf,或扩展 LD_LIBRARY_PATH 以包含它。在使用后一种选项之前,请查看 http://xahlee.info/UnixResource_dir/_/ldpath.html。如果修改了
/etc/ld.so.conf,请记得以 root 用户身份执行 ldconfig 来更新 /etc/ld.so.cache。
将 $PREFIX/man 添加到 /etc/man_db.conf。
将 $PREFIX/info 添加到 INFOPATH。
将 $PREFIX/lib/pkgconfig 添加到
PKG_CONFIG_PATH。某些软件包现在将
.pc 文件安装到 $PREFIX/share/pkgconfig 中,因此您可能也需要包含此目录。
在编译依赖于您所安装软件包的软件包时,将 $PREFIX/include 添加到 CPPFLAGS。
在编译依赖于该软件包所安装库的软件包时,将 $PREFIX/lib
添加到 LDFLAGS。
如果您在寻找本书中未包含的软件包,以下是搜索所需软件包的几种不同方法。
如果您知道软件包的名称,请在 SourceForge 上搜索(https://sourceforge.net/directory/),并在
GitHub 上搜索(https://github.com/)。也可以在 Google
上搜索(https://google.com/)。有时在 https://rpmfind.net/ 搜索
rpm,或在 https://www.debian.org/distrib/packages#search_packages
搜索 deb,也可能找到指向该软件包的链接。
如果您知道可执行文件的名称,但不知道它所属的软件包,请先在 Google 上搜索该可执行文件的名称。如果结果过多,请尝试在 Debian 仓库中搜索该可执行文件(https://www.debian.org/distrib/packages#search_contents)。
处理新软件包的一些一般性提示:
许多较新的软件包遵循 ./configure && make && make install 流程。可通过 ./configure --help 命令获取 configure 所接受选项的帮助信息。
大多数软件包都包含编译和安装的文档。有些文档非常优秀,有些则不然。请查看软件包的主页,以获取任何额外和更新的编译与配置提示。
如果您在编译软件包时遇到问题,请尝试在 LFS 存档中搜索错误信息(https://www.linuxfromscratch.org/search.html),如果失败,再尝试在 Google 上搜索。通常,某个发行版已经解决了该问题(许多发行版使用开发版本的软件包,因此他们比我们这些通常使用稳定发布版本的人更早看到变化)。但要谨慎——所有构建者往往带有不再需要的补丁,并且有些修复仅因他们在构建软件包时的特定选择而必需。您可能需要深入搜索才能找到针对您尝试使用的软件包版本的修复,甚至找到该软件包本身(名称有时并非您期望的那样,例如 ghostscript 的名称中通常带有前缀或后缀),但以下说明可能会有所帮助,特别是对于那些像编辑们一样试图构建最新版本并遇到问题的人:
Arch https://www.archlinux.org/packages/——在“Keywords”框中输入软件包名称,选择软件包名称,选择“Source
Files”字段,然后选择 PKGBUILD
条目以查看他们如何构建该软件包。
Debian http://ftp.debian.org/debian/pool(如果有您所在国家的版本,请使用它)——源代码将位于
.tar.gz 压缩包中(要么是原始上游的 .orig
源代码,要么是包含符合 Debian 自由软件指南部分的 dfsg),并附有带版本号的 .diff.gz 或 .tar.gz
附加文件。这些附加文件通常会显示软件包的构建方式,并可能包含补丁。在 .diff.gz 版本中,任何补丁都会在
debian/patches 中创建文件。
Fedora 软件包源代码会不时重组。目前,rpm 的软件包源代码位于 https://src.fedoraproject.org/projects/rpms/%2A,您可以在搜索框中输入软件包名称进行查找。如果找到该软件包,您可以查看文件(用于控制构建的 specfile、各种补丁)或提交记录。如果失败,您可以下载 srpm(源代码 rpm),并使用 rpmextract(参见页面底部的提示)。对于 rpm,请访问 https://dl.fedoraproject.org/pub/fedora/linux/,然后选择您要查看的仓库——development/rawhide 是最新的开发版,或选择 releases 查看发行版中附带的内容,updates 查看发行版的更新,或 updates/testing 查看可能可用或存在问题的最近更新。
Gentoo——首先使用搜索引擎查找看起来能解决问题的 ebuild,或在 https://packages.gentoo.org/
搜索——使用搜索字段。注意该软件包在 portage 层次结构中的位置,例如 app-something/。通常,您可以将 ebuild 视为一种伪代码/
shell 组合,其中包含一些您可以猜测其功能的函数,例如 dodoc。如果修复只是
sed,请尝试一下。但在大多数情况下,修复会使用补丁。要查找补丁,请使用
gentoo-portage 镜像:在美国似乎通常保持更新的两个镜像链接是 https://mirror.rackspace.com/gentoo-portage/
和 https://mirror.steadfast.net/gentoo-portage/。在树中向下导航到该软件包,然后进入
files/ 目录查找补丁。有时 portage
镜像尚未更新,特别是对于较新的补丁。在少数情况下,gentoo 会将补丁打包到 tarball 中,并且
ebuild 会包含格式为
https://dev.gentoo.org/~${PATCH_DEV}/distfiles/${P}-patches-${PATCH_VER}.tar.xz
的链接,请在构建中查找 PATCH_DEV 和 PATCH_VER,并在浏览器中或使用 wget 格式化完整的
URL。请记住开发人员 ID 前的 '~',并注意在浏览器中尝试访问 URL 的上层目录可能会跳转到
www.gentoo.org 或返回 403(禁止访问)。
openSUSE 提供滚动发布,部分软件包版本位于 https://download.opensuse.org/source/tumbleweed/repo/oss/src/,但其他版本位于 ../update/openSUSE-current/src —— 源代码似乎仅以源代码 rpm 的形式提供。
Slackware——官方软件包浏览器目前不可用。 https://slackbuilds.org/
网站在其非官方仓库中提供了当前和以前的版本,包含指向主页、下载以及某些单独文件(特别是 .SlackBuild 文件)的链接。
Ubuntu http://ftp.ubuntu.com/ubuntu/pool/——请参阅上面的 Debian 说明。
如果所有其他方法都失败,请尝试 blfs-support 邮件列表。
如果您找到的软件包仅有 .deb 或 .rpm 格式,则有多种提取方法。
.deb 文件只是由 ar 创建和提取的归档文件。可以通过运行以下命令提取:ar x $PACKAGE.deb。它会提取许多文件;但重要的是
data.tar.gz,它包含了通常从中安装的所有文件。
对于 .rpm 文件,您可以安装 rpmextract(参见
PKGBUILD 了解他们如何安装该软件包),并使用该软件包中的 rpmextract.sh 来提取文件。它会提取到多个目录,例如
app 和 usr。您也可以使用 File-Roller-44.7 或 ark-26.04.1 进行提取。