由于您将要替换许多程序所依赖的基础库,您可以想象可能会出现的问题。
对我来说,一切都很顺利,直到我输入了 make install。大约在安装过程进行到一半时,我收到了一个错误,告诉我 rm 无法运行,并且我发现即使是像 cp、ls、mv、ln、tar 等常用命令也无法工作;所有这些命令都告诉我,它们无法找到所需的库部分。
但是有帮助可用。您可以强制编译程序时将库编译到程序中,这样程序就不需要从库中查找它们。
因此,在本章中,我们将把安装所需的所有实用程序编译成静态版本。
从以下位置获取最新版本:ftp.gnu.org/gnu/binutils;在撰写本文时,这是 2.14 版本
打开软件包
tar xIvf binutils-2.14.tar.bz2 |
切换到该目录
cd binutils-2.14 |
配置 Makefiles
./configure |
编译源代码
make |
使用以下命令安装它们
make install |
如果您在编译 binutils 时遇到问题,涉及到 gettext 的问题(错误指示类似于:"undeclared reference to lib_intl" 或类似),请安装最新版本,可从 ftp.gnu.org/gnu/gettext 获取。
如果这没有帮助,请尝试禁用本地语言支持,方法是使用
./configure --no-nls |
您不需要构建 binutils 的静态版本,尽管这样做没有坏处,但我遇到许多系统运行非常旧的版本,几乎每次都遇到错误,所以我认为在这里提及它们是一个好主意。
make 命令负责编译源代码,调用 gcc 和编译所需的所有其他程序。由于如果新的 glibc 出现问题,您可能需要编译某些东西,因此最好使其为静态的,否则在出现错误后可能无法工作。
从 ftp.gnu.org/gnu/make/ 下载源代码;在撰写本文时,当前版本为 3.80
解压源代码,例如。
tar xIvf make-3.80.tar.bz2 |
切换到创建的目录
cd make-3.80 |
注意确保二进制文件是静态构建的
export CFLAGS="-static -O2 -g" |
运行 configure 脚本
./configure |
编译内容
make |
安装二进制文件
make install |
进行检查
make -v |
恭喜!您又编译了另一个静态链接的程序。
core-utils 是诸如:cp、rm、ln、mv 等命令。如果在安装过程中出现错误,这些是帮助您重新启动系统的绝对必要条件,因此静态二进制文件在这里确实是必要的。
再次,从以下位置下载源代码 tarball:ftp.gnu.org/gnu/coreutils/;在撰写本文时,当前版本为 5.0。
解压它
tar xIvf coreutils-5.0.tar.bz2 |
切换到该目录
cd coreutils-5.0 |
注意确保二进制文件是静态构建的
export CFLAGS="-static -O2 -g" |
配置软件包
./configure |
编译二进制文件
make |
并安装它们
make install |
验证是否使用了正确的 core-utils
cp --version |
现在这些非常基本的工具的二进制文件是静态的,您可以确保在任何需要它们的时候它们都能工作。
您已经使用 GNU tar 解压缩了到目前为止编译和安装的所有程序。但是,在发生崩溃后,您可能需要编译 glibc 所需的另一个程序,在这种情况下(我自己也经历过!),手头有一个可工作的 tar 来解压缩丢失的程序非常有用。对于 tar,我们还需要注意 bz2 压缩算法,该算法未包含在 tar 的正常源代码发行版中。
从 ftp.gnu.org/gnu/tar 获取 GNU tar 的源代码;在撰写本文时,最新版本为 1.13。
由于许多源代码 tarball 使用 bzip2 压缩,我们希望内置支持,而不是使用管道,因此请从以下位置获取补丁:ftp://infogroep.be/pub/linux/lfs/lfs-packages/4.1/tar-1.13.patch。
通过调用以下命令解压源代码
tar xzvf tar-1.13.tar.gz |
将补丁复制到 tar 的源代码目录
cp tar-1.13.patch tar-1.13/ |
应用补丁
patch -Np1 -i tar-1.13.patch |
设置编译器标志以生成静态二进制文件
export CFLAGS="-static -O2 -g" |
现在我们准备好配置了
./configure |
使用以下命令编译
make |
下一步,安装软件包
make install |
快速检查以确保从现在开始使用新版本
tar --version |
如果您在执行 make 时遇到问题,请尝试关闭本地语言支持 (nls)。您可以通过使用以下选项调用 configure 来实现此目的
--disable-nls |
注意: 在这个新版本的 tar 中,您必须使用-j开关来解压缩 .bzip2 文件,因此不再是
tar xIvf anyfile.tar.bz2 |
tar xjvf anyfile.tar.bz2 |
我更喜欢 Bash 作为我的 shell;如果您使用不同的 shell,请确保在安装 glibc 之前已安装了它的静态版本。
从以下位置获取 Bash:ftp.gnu.org/gnu/bash/。下载您可以找到的最新版本;在撰写本文时,这是 2.05b 版本。
解压源代码树
tar xzvf bash-2.05b.tar.gz |
转到目录
cd bash-2.05a |
设置一切以构建静态版本
export CFLAGS="-static -O2 -g" |
配置 makefiles
./configure |
./configure --help |
编译所有内容
make |
安装编译后的二进制文件
make install |
确保没有其他版本遗留下来(例如在我的 Suse-Linux 中/bin/),方法是复制文件
cp /usr/local/bin/bash /bin/ |
您现在已经安装了 Bash 的静态版本。因此,二进制文件比平常大得多,但它在任何情况下都可以运行。
如果您喜欢使用其他 shell,您可以自由选择,但请确保它是静态链接的版本。欢迎通过电子邮件向我发送一种以静态版本构建您选择的 shell 的方法,并且很有可能它将在本文档的下一个修订版中实现。
Midnight Commander 是一个非常有用的文件管理器,支持许多不错的功能,例如透明解压缩打包文件、内置的复制、移动和其他常用命令,以及集成的编辑器。
要编译此软件,您需要安装 glib;在某些发行版中,情况已经是这样。如果您在 make 命令中收到错误,提示 ld 找不到 glib,您将需要首先安装此库。您可以从以下位置获取源代码:ftp.gnome.org/pub/gnome/sources/glib/2.2/,并且安装非常简单。
以下是构建 Midnight Commander 的步骤
从 http://www.ibiblio.org/pub/Linux/utils/file/managers/mc/" 获取源代码;在撰写本文时,最新版本为 4.6.0。
解压源代码
tar xzvf mc-4.6.0.tar.gz |
切换到您刚刚创建的目录
cd mc-4.6.0 |
设置配置文件
./configure |
开始编译
make |
安装所有内容
make install |