15.构建LFS系统──安装系统基础软件(七)
时间:2006-11-17 来源:anima
十五、构建LFS系统──安装系统基础软件(七)
30.E2fsprogs-1.39
E2fsprogs 提供用于 ext2 文件系统的工具。它还支持 ext3 日志文件系统。
预计编译时间: 0.4 SBU
所需磁盘空间: 31.2 MB
安装E2fsprogs
root:/sources/diffutils-2.8.1# tar -zxvf $LFS/sources/e2fsprogs-1.39.tar.gz -C $LFS/sources
root:/sources/diffutils-2.8.1# cd $LFS/sources/e2fsprogs-1.39
推荐在 E2fsprogs 的源码目录外面来编译它:
root:/sources/e2fsprogs-1.39# mkdir -v build
mkdir: created directory `build'
root:/sources/e2fsprogs-1.39# cd build
root:/sources/e2fsprogs-1.39/build#
为编译E2fsprogs做准备:
root:/sources/e2fsprogs-1.39/build# ../configure --prefix=/usr --with-root-prefix="" \
> --enable-elf-shlibs –disable-evms
配置选项的含义:
--with-root-prefix="" 有的程序(如 e2fsck )对系统来说是非常重要的,例如,在 /usr 没有挂载的情况下。这些程序和库就应放在像 /lib 和 /sbin 这些目录中。如果没有把上面的参数传递给 E2fsprogs 的 configure 脚本,它就会把程序放在 /usr 目录下。 --enable-elf-shlibs 这会创建共享的库,供 E2fsprogs 包中的一些程序使用。 --disable-evms 这个选项禁止了企业卷管理系统(EVMS)插件的支持。因为这个插件并没有更新到适合最新的 EVMS 接口并且 EVMS 并不是基本 LFS 系统的一部分,所以我们并不需要这个插件。请参考 EVMS 网站 http://evms.sourceforge.net/ 以获得更多信息。
编译软件包:
root:/sources/e2fsprogs-1.39/build# make
要测试结果,请运行:make check 。
E2fsprogs 的一个测试会尝试分配 256 MB 内存。如果你没有充足的RAM空间,推荐打开足够的交换分区。参见“在新分区上创建新文件系统”和“挂载新分区”获取关于创建和激活交换分区的细节。
安装二进制和文档:
root:/sources/e2fsprogs-1.39/build# make install
安装共享库:
root:/sources/e2fsprogs-1.39/build# make install-libs
E2fsprogs 的内容
安装的程序: badblocks, blkid, chattr, compile_et, debugfs, dumpe2fs, e2fsck, e2image, e2label, filefrag, findfs, fsck, fsck.ext2, fsck.ext3, logsave, lsattr, mk_cmds, mke2fs, mkfs.ext2, mkfs.ext3, mklost+found, resize2fs, tune2fs, uuidgen.
安装的库: libblkid.{a,so}, libcom_err.{a,so}, libe2p.{a,so}, libext2fs.{a,so}, libss.{a,so}, libuuid.{a,so}
简要描述
badblocks |
用来检查设备(通常是硬盘分区)上的坏块 |
blkid |
定位并打印出块设备属性的命令行工具 |
chattr |
在 ext2 和 ext3 文件系统上改变文件属性 |
compile_et |
用来将错误代码(error-code)和相关出错信息的列表 转化为适用于 com_err 库的 C 语言文件 |
debugfs |
文件系统调试器。能用来检查和改变 ext2 文件系统的状态 |
dumpe2fs |
打印特定设备上现存的文件系统的超级块(super block)和块群(blocks group)的信息 |
e2fsck |
用来检查和修复 ext2 和 ext3 文件系统 |
e2image |
将关键的 ext2 文件系统数据保存到一个文件中 |
e2label |
显示或者改变指定设备上的 ext2 文件系统标识 |
filefrag |
报告一个文件的碎片情况 |
findfs |
通过卷标或通用唯一标识符(UUID)寻找文件系统 |
fsck |
用来检查或者修理文件系统 |
fsck.ext2 |
默认检查 ext2 文件系统 |
fsck.ext3 |
默认检查 ext3 文件系统 |
logsave |
把一个命令的输出保存在日志文件中 |
lsattr |
列出 ext2 文件系统上的文件属性 |
mk_cmds |
将一个包含命令列表的文件转化为适用于子系统库 libss 的 C 源文件 |
mke2fs |
用来创建 ext2 或 ext3 文件系统 |
mkfs.ext2 |
默认创建 ext2 文件系统 |
mkfs.ext3 |
默认创建 ext3 文件系统 |
mklost+found |
在 ext2 文件系统上创建一个 lost+found 目录,并给该目录预分配磁盘数据块,以减轻 e2fsck 命令的负担。 |
resize2fs |
可以用来增大或缩小 ext2 文件系统 |
tune2fs |
调整 ext2 文件系统的可调参数 |
uuidgen |
创建一个新的通用唯一标识符(UUID)。这个新 UUID 可以被认为是在所有已创建的 UUID 中独一无二的,不论是在本地的系统或者别的系统,过去还是将来。 |
libblkid |
包含设备识别和节点释放的库函数 |
libcom_err |
通用错误显示库 |
libe2p |
用于 dumpe2fs, chattr, lsattr |
libext2fs |
允许用户级的程序操作 ext2 文件系统 |
libss |
用于 debugfs |
libuuid |
用来给对象产生通用唯一标识符(UUID)使之可以在本地系统之外引用 |
31.File-4.17
File 是用来判断文件类型的工具。
预计编译时间: 0.1 SBU
所需磁盘空间: 7.5 MB
安装File
root:/sources/e2fsprogs-1.39/build# tar -zxvf $LFS/sources/file-4.17.tar.gz -C $LFS/sources
root:/sources/e2fsprogs-1.39/build# cd $LFS/sources/file-4.17
为编译File做准备:
root:/sources/file-4.17# ./configure –prefix=/usr
编译软件包:
root:/sources/file-4.17# make
这个软件包没有附带测试程序。
安装软件包:
root:/sources/file-4.17# make install
File 的内容
安装的程序: file
安装的库: libmagic.{a,so}
简要描述
file |
测试每一个指定的文件并且试图对它们进行分类。有三个测试集,按照下面的顺序执行:文件系统测试、幻数(magic number)测试、语言测试。第一个测试成功后会打印文件文件类型。 |
libmagic |
包含产生幻数(magic number)的函数,供file程序使用。 |
32.Findutils-4.2.27
Findutils 包含查找文件的工具,既能即时查找(递归的搜索目录,并可以显示、创建和维护文件),也能在数据库里查找(通常比递归查找快但是在数据库没有及时更新的情况下,结果并不可靠)。
预计编译时间: 0.2 SBU
所需磁盘空间: 12 MB
安装Findutils
root:/sources/file-4.17# mv $LFS/sources/findutils-4.2.27 $LFS/sources/old2
root:/sources/file-4.17# tar -zxvf $LFS/sources/findutils-4.2.27.tar.gz -C $LFS/sources
root:/sources/file-4.17# cd $LFS/sources/findutils-4.2.27
为编译Findutils做准备:
root:/sources/findutils-4.2.27# ./configure --prefix=/usr --libexecdir=/usr/lib/findutils \
> --localstatedir=/var/lib/locate
配置选项的含义:
--localstatedir 将 locate 数据库的位置指定为 /var/lib/locate ,以符合 FHS 标准。
编译软件包:
root:/sources/findutils-4.2.27# make
要测试结果,请运行:make check 。
安装软件包:
root:/sources/findutils-4.2.27# make install
LFS-Bootscripts 包中的一些脚本依赖于 find。因为在系统启动的前期,/usr 目录还是无法访问的(比如还没有挂载上),因此这个程序需要放在根分区上。 updatedb 脚本也需要用完全路径来修正:
root:/sources/findutils-4.2.27# mv -v /usr/bin/find /bin
`/usr/bin/find' -> `/bin/find'
root:/sources/findutils-4.2.27# sed -i -e 's/find:=${BINDIR}/find:=\/bin/' /usr/bin/updatedb
root:/sources/findutils-4.2.27#
Findutils 的内容
安装的程序: bigram, code, find, frcode, locate, updatedb, xargs
简要描述
bigram |
以前用来创建 locate 数据库。 |
code |
以前用来创建 locate 数据库。它是 frcode 的前身。 |
find |
在一个目录和其子目录里面找符合条件的文件 |
frcode |
被 updatedb 调用来压缩文件名列表,它使用的是前端压缩(front-compression),可以减小数据库4到5倍。 |
locate |
扫描一个文件名称数据库,可以列出在数据库中符合条件的文件或者目录。 |
updatedb |
更新 locate 数据库。它会扫描整个文件系统,包括所有挂载的文件系统(除非设定参数禁止),并且把每一个找到的文件和目录放到 locate 数据库里面。 |
xargs |
可以在一系列文件上运行同一个命令 |
33.Flex-2.5.33
Flex 软件包包含一个能生成识别文本模式的程序的工具。
预计编译时间: 0.1 SBU
所需磁盘空间: 8.4 MB
安装Flex
root:/sources/findutils-4.2.27# tar -jxvf $LFS/sources/flex-2.5.33.tar.bz2 -C $LFS/sources
root:/sources/findutils-4.2.27# cd $LFS/sources/flex-2.5.33
为编译Flex做准备:
root:/sources/flex-2.5.33# ./configure –prefix=/usr
编译软件包:
root:/sources/flex-2.5.33# make
要测试结果,请运行:make check 。
安装软件包:
root:/sources/flex-2.5.33# make install
一些程序试图在 /usr/lib 下面寻找 lex 库,可以创建一个符号链接来满足要求:
root:/sources/flex-2.5.33# ln -sv libfl.a /usr/lib/libl.a
create symbolic link `/usr/lib/libl.a' to `libfl.a'
root:/sources/flex-2.5.33#
一些程序并不知道 flex 而是试图寻找 lex 程序(flex 是实现 lex 功能的另一种也是更好的选择)。为了满足少数一些程序的需要,我们将创建一个 lex 脚本,这个脚本调用 flex 并通过它来模仿 lex 的输出文件命名惯例:
cat > /usr/bin/lex << "EOF"
#!/bin/sh
# Begin /usr/bin/lex
exec /usr/bin/flex -l "$@"
# End /usr/bin/lex
EOF
chmod -v 755 /usr/bin/lex
root:/sources/flex-2.5.33# cat > /usr/bin/lex << "EOF"
> #!/bin/sh
> # Begin /usr/bin/lex
>
> exec /usr/bin/flex -l "$@"
>
> # End /usr/bin/lex
> EOF
root:/sources/flex-2.5.33# chmod -v 755 /usr/bin/lex
mode of `/usr/bin/lex' changed to 0755 (rwxr-xr-x)
root:/sources/flex-2.5.33#
Flex 的内容
安装的程序: flex, lex
安装的库: libfl.a
简要描述
flex |
是一个用来生成识别文本的模式程序的工具。模式识别在很多程序中是非常有用,用户设置一些查询规则,然后 flex 可以生成一个查询程序。人们使用 flex 可以比亲自编写查询程序更便捷。 |
lex |
在 lex 仿真模式下运行 flex 的一个脚本 |
libfl.a |
flex 库 |
34.GRUB-0.97
GRUB 程序包包含 GRand 统一引导装载程序。
预计编译时间: 0.2 SBU
所需磁盘空间: 10.2 MB
安装GRUB
root:/sources/flex-2.5.33# tar -zxvf $LFS/sources/grub-0.97.tar.gz -C $LFS/sources
root:/sources/flex-2.5.33# cd $LFS/sources/grub-0.97
如果你把这个包缺省的优化参数(包括 -march 和 -mcpu 参数)改变的话,它会有些不正常的表现。因此,如果你定义了任何优化参数的话,比如 CFLAGS 和 CXXFLAGS ,我们劝你在编译时 unset 或修改它们。
开始先打一个补丁来达到更好的硬件侦测、修复 GCC 4.x 的一些问题以及为一些磁盘控制器提供更好的 SATA 支持:
root:/sources/grub-0.97# patch -Np1 -i ../grub-0.97-disk_geometry-1.patch
为编译GRUB做准备:
root:/sources/grub-0.97# ./configure –prefix=/usr
编译软件包:
root:/sources/grub-0.97# make
要测试结果,请运行:make check 。
安装软件包:
root:/sources/grub-0.97# make install
root:/sources/grub-0.97# mkdir -v /boot/grub
mkdir: created directory `/boot/grub'
root:/sources/grub-0.97# cp -v /usr/lib/grub/i386-pc/stage{1,2} /boot/grub
`/usr/lib/grub/i386-pc/stage1' -> `/boot/grub/stage1'
`/usr/lib/grub/i386-pc/stage2' -> `/boot/grub/stage2'
root:/sources/grub-0.97#
把 i386-pc 换成适合你的平台的路径。
i386-pc 目录还包含一些 *stage1_5 文件,是为不同的文件系统准备的。看看有哪些文件,并把你所需要的拷贝到 /boot/grub 目录下。多数人需要 e2fs_stage1_5 和/或 reiserfs_stage1_5 文件。
GRUB 的内容
安装的程序: grub, grub-install, grub-md5-crypt, grub-set-default, grub-terminfo, mbchk
简要描述
grub |
GRUB 的命令解释 shell |
grub-install |
在指定设备上安装 GRUB |
grub-md5-crypt |
以 MD5 加密一个密码 |
grub-set-default |
为 Grub 设置默认启动入口 |
grub-terminfo |
从 terminfo 名称产生 terminfo 命令。如果你在一个不常见的终端时,可以使用这个命令。 |
mbchk |
检查多重启动内核的格式 |
35.Gawk-3.1.5
Gawk 软件包包含用于管理文本文件的程序。
预计编译时间: 0.2 SBU
所需磁盘空间: 18.2 MB
安装Gawk
root:/sources/grub-0.97# mv $LFS/sources/gawk-3.1.5 $LFS/sources/old2
root:/sources/grub-0.97# tar -jxvf $LFS/sources/gawk-3.1.5.tar.bz2 -C $LFS/sources
root:/sources/grub-0.97# cd $LFS/sources/gawk-3.1.5
在某些情况下,Gawk-3.1.5会释放一块没有分配的内存。应用下面的patch可以解决问题:
root:/sources/gawk-3.1.5# patch -Np1 -i ../gawk-3.1.5-segfault_fix-1.patch
patching file io.c
root:/sources/gawk-3.1.5#
为编译Gawk做准备:
root:/sources/gawk-3.1.5# ./configure --prefix=/usr –libexecdir=/usr/lib
由于在 configure 脚本中的一个 bug ,Gawk 就不会发现 Glibc 中的某些方面的locale支持。 这个bug会导致很多问题。例如,Gettext 测试单元会失败。解决这个问题的方法就是在 config.h 中添加丢失的宏定义:
cat >>config.h <<"EOF"
#define HAVE_LANGINFO_CODESET 1
#define HAVE_LC_MESSAGES 1
EOF
root:/sources/gawk-3.1.5# cat >>config.h <<"EOF"
> #define HAVE_LANGINFO_CODESET 1
> #define HAVE_LC_MESSAGES 1
> EOF
root:/sources/gawk-3.1.5#
编译软件包:
root:/sources/gawk-3.1.5# make
要测试结果,请运行:make check 。
安装软件包:
root:/sources/gawk-3.1.5# make install
Gawk 的内容
安装的程序: awk(→gawk), gawk, gawk-3.1.5, grcat, igawk, pgawk, pgawk-3.1.5, pwcat
简要描述
awk |
指向 gawk 的链接 |
gawk |
awk 的GNU版本,用来管理文本文件的程序。 |
gawk-3.1.5 |
gawk 的硬链接 |
grcat |
读取组数据库 /etc/group |
igawk |
赋予 gawk 包含文件的能力 |
pgawk |
gawk 的概要分析(profiling)版本 |
pgawk-3.1.5 |
pgawk 的硬链接 |
pwcat |
/etc/passwd 读取密码数据库 |
36.Gettext-0.14.5
Gettext 用于系统的国际化和本地化,可以在编译程序的时候使用本国语言支持(NLS),可以使程序的输出使用用户设置的语言而不是英文。
预计编译时间: 1 SBU
所需磁盘空间: 65 MB
安装Gettext
root:/sources/gawk-3.1.5# mv $LFS/sources/gettext-0.14.5 $LFS/sources/old2
root:/sources/gawk-3.1.5# tar -zxvf $LFS/sources/gettext-0.14.5.tar.gz -C $LFS/sources
root:/sources/gawk-3.1.5# cd $LFS/sources/gettext-0.14.5
为编译Gettext做准备:
root:/sources/gettext-0.14.5# ./configure –prefix=/usr
编译软件包:
root:/sources/gettext-0.14.5# make && date +%c (开始于2006-11-14 20:48:40)
……
……
……
gcc -g -O2 -o .libs/fc5 format-c-5-prg.o ../lib/.libs/libgettextlib.so ../intl/.libs/libgnuintl.so -lc
creating fc5
make[3]: Leaving directory `/sources/gettext-0.14.5/gettext-tools/tests'
Making all in examples
make[3]: Entering directory `/sources/gettext-0.14.5/gettext-tools/examples'
Making all in po
make[4]: Entering directory `/sources/gettext-0.14.5/gettext-tools/examples/po'
make[4]: Nothing to be done for `all'.
make[4]: Leaving directory `/sources/gettext-0.14.5/gettext-tools/examples/po'
make[4]: Entering directory `/sources/gettext-0.14.5/gettext-tools/examples'
make[4]: Nothing to be done for `all-am'.
make[4]: Leaving directory `/sources/gettext-0.14.5/gettext-tools/examples'
make[3]: Leaving directory `/sources/gettext-0.14.5/gettext-tools/examples'
make[3]: Entering directory `/sources/gettext-0.14.5/gettext-tools'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/sources/gettext-0.14.5/gettext-tools'
make[2]: Leaving directory `/sources/gettext-0.14.5/gettext-tools'
make[1]: Leaving directory `/sources/gettext-0.14.5/gettext-tools'
make[1]: Entering directory `/sources/gettext-0.14.5'
make[1]: Nothing to be done for `all-am'.
make[1]: Leaving directory `/sources/gettext-0.14.5'
Tue Nov 14 20:52:19 2006 (结束于2006-11-14 20:52:19)
root:/sources/gettext-0.14.5#
要测试结果,请运行:make check 。 This takes a very long time, around 5 SUB.
安装软件包:
root:/sources/gettext-0.14.5# make install
Gettext 的内容
安装的程序: autopoint, config.charset, config.rpath, envsubst, gettext, gettext.sh, gettextize, hostname, msgattrib, msgcat, msgcmp, msgcomm, msgconv, msgen, msgexec, msgfilter, msgfmt, msggrep, msginit, msgmerge, msgunfmt, msguniq, ngettext, xgettext
安装的库: libasprintf.{a,so}, libgettextlib.so, libgettextpo.{a,so}, libgettextsrc.so
简要描述
autopoint |
将标准的 gettext infrastructure 文件拷贝到源码包中 |
config.charset |
产生一个依赖于系统的字符编码表 |
config.rpath |
输出依赖于系统的变量,描述如何在可执行程序中设置库文件的实时查找路径。 |
envsubst |
替换 shell 格式化字符串中的环境变量 |
gettext |
通过在消息列表中查找,来将一种自然语言的消息翻译成用户的本地语言 |
gettext.sh |
主要作为一个shell的函数库来为 gettext 服务 |
gettextize |
拷贝所有的标准 Gettext 文件到软件包的顶层目录下,以进行国际化。 |
hostname |
用不同的格式显示一个网络主机名 |
msgattrib |
根据翻译目录中消息的属性过滤它们,并且操作这些属性。 |
msgcat |
将给定的 .po 文件合并到一起 |
msgcmp |
比较两个 .po 文件,看它们是否包含相同的 msgid 字符串 |
msgcomm |
找出不同 .po 文件中的相同信息 |
msgconv |
把一个翻译列表转化成另一种字符编码 |
msgen |
建立一个英文翻译目录 |
msgexec |
对一个翻译列表中的所有翻译执行同一个命令 |
msgfilter |
对一个翻译列表中的所有翻译使用同一个过滤器 |
msgfmt |
从翻译列表生成一个二进制的消息列表 |
msggrep |
将一个翻译列表中的所有符合给定格式或者属于给定源文件的消息展开 |
msginit |
生成一个新的 .po 文件,并使用用户环境中的消息来对这个文件进行初始化。 |
msgmerge |
将两个翻译合并成一个 |
msgunfmt |
将二进制翻译文件反编译成源文件 |
msguniq |
将翻译目录中重复的翻译合并成一个 |
ngettext |
显示依赖于数字格式的文本文件的本国语言翻译 |
xgettext |
从源文件中展开消息行, 用来创建起始翻译模板 |
libasprintf |
定义 autosprintf 类,使 C 的函数以 C++ 程序可使用的结构输出,与 <string> 字符串和 <iostream> 流一起使用。 |
libgettextlib |
包含多个 gettext 程序使用的函数,是私有库 |
libgettextpo |
用来写处理 .po 文件的程序。当 Gettext 自带的标准程序(如 msgcomm, msgcmp, msgattrib, msgen)不能满足要求时,可以使用这个库。 |
libgettextsrc |
包含多个 gettext 程序使用的函数,是私有库。 |
37.Grep-2.5.1a
Grep 可以搜索文件中符合指定匹配模式的行。
预计编译时间: 0.1 SBU
所需磁盘空间: 4.8 MB
安装Grep
root:/sources/gettext-0.14.5# mv $LFS/sources/grep-2.5.1a $LFS/sources/old2
root:/sources/gettext-0.14.5# tar -jxvf $LFS/sources/grep-2.5.1a.tar.bz2 -C $LFS/sources
root:/sources/gettext-0.14.5# cd $LFS/sources/grep-2.5.1a
当前的 Grep 包有很多bug,尤其是对多字节的loacles的支持。RedHat 采用下面的这个patch来解决部分问题:
root:/sources/grep-2.5.1a# patch -Np1 -i ../grep-2.5.1a-redhat_fixes-2.patch
patching file doc/grep.1
patching file lib/posix/regex.h
patching file src/dfa.c
patching file src/grep.c
patching file src/search.c
patching file src/search.c.orig
patching file tests/fmbtest.sh
patching file tests/Makefile.am
patching file tests/Makefile.in
root:/sources/grep-2.5.1a#
需要修改测试文件的权限,才能使打过patch后在测试中通过:
root:/sources/grep-2.5.1a# chmod +x tests/fmbtest.sh
为编译Grep做准备:
root:/sources/grep-2.5.1a# ./configure --prefix=/usr –bindir=/bin
编译软件包:
root:/sources/grep-2.5.1a# make
要测试结果,请运行:make check 。
安装软件包:
root:/sources/grep-2.5.1a# make install
Grep 的内容
安装的程序: egrep(→grep), fgrep(→grep), grep
简要描述
egrep |
打印出匹配扩展正则表达式模式的行 |
fgrep |
对固定字符串列表进行匹配 |
grep |
对基本正则表达式进行匹配 |
38.Groff-1.18.1.1
Groff 软件包包含几个处理和格式化文本的程序。Groff 把标准的文本和特殊的命令翻译成格式化的输出,就像你在 man 手册页里看到的那样。
预计编译时间: 0.4 SBU
所需磁盘空间: 39.2 MB
安装Groff
root:/sources/grep-2.5.1a# tar -zxvf $LFS/sources/groff-1.18.1.1.tar.gz -C $LFS/sources
root:/sources/grep-2.5.1a# cd $LFS/sources/groff-1.18.1.1
应用下面的patch来添加 "ascii8" 和 "nippon" 设备到 Groff:
root:/sources/groff-1.18.1.1# patch -Np1 -i ../groff-1.18.1.1-debian_fixes-1.patch
注意
这些设备在转换一些非 ISO-8859-1 编码的非英语的 man 手册页时,会用到。现在对于 Groff-1.19.x 没有同样功能的patch:
许多屏幕字体没有 Unicode 的单引号和破折号。告诉 Groff 使用等价的 ASCII 字符:
root:/sources/groff-1.18.1.1# sed -i -e 's/2010/002D/' -e 's/2212/002D/' \ > -e 's/2018/0060/' -e 's/2019/0027/' font/devutf8/R.proto
Groff 希望环境变量 PAGE 包含缺省的纸张尺寸。对于在美国的人来说,就用下面的命令,如果你住在其他地方,可能需要把 PAGE=letter 改成 PAGE=A4 。
为编译 Groff 做准备:
PAGE=<paper_size> ./configure --prefix=/usr --enable-multibyte
root:/sources/groff-1.18.1.1# PAGE=A4 ./configure --prefix=/usr --enable-multibyte
编译软件包:
root:/sources/groff-1.18.1.1# make
这个软件包没有附带测试程序。
安装软件包:
root:/sources/groff-1.18.1.1# make install
有些文档程序,比如 xman ,没有下面的符号链接会不能正常工作:
root:/sources/groff-1.18.1.1# ln -sv eqn /usr/bin/geqn
create symbolic link `/usr/bin/geqn' to `eqn'
root:/sources/groff-1.18.1.1# ln -sv tbl /usr/bin/gtbl
create symbolic link `/usr/bin/gtbl' to `tbl'
root:/sources/groff-1.18.1.1#
Groff 的内容
安装的程序: addftinfo, afmtodit, eqn, eqn2graph, geqn(→eqn), grn, grodvi, groff, groffer, grog, grolbp, grolj4, grops, grotty, gtbl(→tbl), hpftodit, indxbib, lkbib, lookbib, mmroff, neqn, nroff, pfbtops, pic, pic2graph, post-grohtml, pre-grohtml, refer, soelim, tbl, tfmtodit, troff
简要描述
addftinfo |
读取一个 troff 字体文件并增加一些 groff 系统使用的附加点阵字体。 |
afmtodit |
建立同 groff 和 grops 一起使用的字体文件。 |
eqn |
将嵌于 troff 输入文件中的方程描述翻译成 troff 能够理解的命令 |
eqn2graph |
把 EQN 等式转换成反图像 |
geqn |
指向 eqn 的连接 |
grn |
groff 的 gremlin 文件预处理器 |
grodvi |
groff 的产生 TeX dvi 格式的驱动 |
groff |
groff 文档格式系统的前端。通常它调用 troff 程序和对指定设备适用的后处理器 |
groffer |
把 groff 文件和 man 文档显示在 X 和 tty 上 |
grog |
读取文件然后猜测使用 -e, -man, -me, -mm, -ms, -p, -s, -t 中的哪个 groff 参数来打印文件。并把带有这个参数的 groff 命令输出到标准输出。 |
grolbp |
LBP-4 和 LBP-8 激光打印机系列的 groff 驱动 |
grolj4 |
产生适用于HP Laserjet4 打印机的 PCL5 格式的 groff 驱动 |
grops |
将 GNU troff 的输出翻译成 PostScript |
grotty |
将 GNU troff 的标准输出翻译成适合类打字机设备的格式 |
gtbl |
指向 tbl 的连接 |
hpftodit |
使用 groff -Tlj4 从一个 HP-tagged 字体文件中创建 groff 使用的字体文件。 |
indxbib |
建立同 refer, lookbib, lkbib 一起使用的文件的文献数据库的反向列表 |
lkbib |
在文献数据库中搜索包括指定关键字的条目,并将其输出到标准输出 |
lookbib |
打印一个标准错误的提示,除非标准输入不是终端。从标准输入读入关键字搜索在指定文件中的文献数据库中的含有这些关键字的条目,并将结果输出到标准输出。 |
mmroff |
一个简易的 groff 预处理器 |
neqn |
将方程格式化,使其成为适应 ASCII 输出的脚本 |
nroff |
这个脚本用 nroff 命令仿真 groff 命令 |
pfbtops |
将 .pfb 格式的 Postscript 字体翻译成 ASCII 码 |
pic |
将内嵌于 troff 或 TeX 输入文件中的图像编译成 troff 或 TeX 理解的指令 |
pic2graph |
把 PIC 图表转换成反图像 |
post-grohtml |
将GNU troff 的输出翻译成 HTML |
pre-grohtml |
将GNU troff 的输出翻译成 HTML |
refer |
将一个文件拷贝到标准输出并丢弃 .[ 和 .] 之间作为引用的内容和在 .R1 和 .R2 之间解释如何处理这些引用的命令 |
soelim |
读取文件将其中的 .so 文件 表格替换为 文件 的内容 |
tbl |
将内嵌于 troff 或者 TeX 输入文件中的表格编译成 troff 或者 TeX 理解的指令 |
tfmtodit |
建立 groff -Tdvi 使用的字体文件 |
troff |
和 Unix 的 troff 高度兼容。一般运行 groff 来调用它,groff 依照合适的顺序并使用合适的参数来执行预处理程序和后处理程序。 |
39.Gzip-1.3.5
gzip 包含用 Lempel-Ziv 编码(LZ77)来压缩和解压文件的程序。
预计编译时间: 少于 0.1 SBU
所需磁盘空间: 2.2 MB
安装Gzip
root:/sources/groff-1.18.1.1# mv $LFS/sources/gzip-1.3.5 $LFS/sources/old2
root:/sources/groff-1.18.1.1# tar -zxvf $LFS/sources/gzip-1.3.5.tar.gz -C $LFS/sources
root:/sources/groff-1.18.1.1# cd $LFS/sources/gzip-1.3.5
Gzip 有两个安全漏洞,下面的补丁可以修正它:
root:/sources/gzip-1.3.5# patch -Np1 -i ../gzip-1.3.5-security_fixes-1.patch
patching file gzip.c
root:/sources/gzip-1.3.5#
为编译Gzip做准备:
root:/sources/gzip-1.3.5# ./configure –prefix=/usr
gzexe 脚本里包含对 gzip 程序的硬路径引用。由于我们后面要改变 gzip 程序的位置,就需要用下面的命令改变脚本中的硬路径:
root:/sources/gzip-1.3.5# sed -i 's@"BINDIR"@/bin@g' gzexe.in
编译软件包:
root:/sources/gzip-1.3.5# make
这个软件包没有附带测试程序。
安装软件包:
root:/sources/gzip-1.3.5# make install
把 gzip 程序移动到 /bin 目录并创建一些常用的符号连接:
root:/sources/gzip-1.3.5# mv -v /usr/bin/gzip /bin
`/usr/bin/gzip' -> `/bin/gzip'
root:/sources/gzip-1.3.5# rm -v /usr/bin/{gunzip,zcat}
removed `/usr/bin/gunzip'
removed `/usr/bin/zcat'
root:/sources/gzip-1.3.5# ln -sv gzip /bin/gunzip
create symbolic link `/bin/gunzip' to `gzip'
root:/sources/gzip-1.3.5# ln -sv gzip /bin/zcat
create symbolic link `/bin/zcat' to `gzip'
root:/sources/gzip-1.3.5# ln -sv gzip /bin/compress
create symbolic link `/bin/compress' to `gzip'
root:/sources/gzip-1.3.5# ln -sv gunzip /bin/uncompress
create symbolic link `/bin/uncompress' to `gunzip'
root:/sources/gzip-1.3.5#
Gzip 的内容
安装的程序: compress(→gzip), gunzip(→gzip), gzexe, gzip, uncompress(→gunzip), zcat(→gzip), zcmp, zdiff, zegrep, zfgrep, zforce, zgrep, zless, zmore, znew
简要描述
compress |
压缩和解压缩文件 |
gunzip |
解压由 gzip 压缩过的文件 |
gzexe |
将文件压缩成可以自解压的可执行文件 |
gzip |
通过 Lempel-Ziv 编码(LZ77)压缩指定的文件 |
uncompress |
解压由 gzip 压缩过的文件 |
zcat |
将解压缩的数据写到标准输出上 |
zcmp |
在压缩文件上调用 cmp 命令 |
zdiff |
在压缩文件上调用 diff 命令 |
zegrep |
在压缩文件上调用 egrep 命令 |
zfgrep |
在压缩文件上调用 fgrep 命令 |
zforce |
强制性地为每一个 gzip 文件加上 .gz 扩展名,这样gzip 就不会对它们再次进行压缩。这个程序可能在一个文件经过传输后名字被截短的情况下能够派上用场。 |
zgrep |
在压缩文件上调用 grep 命令 |
zless |
在压缩文件上调用 less 命令 |
zmore |
在压缩文件上调用 more 命令 |
znew |
将.Z格式的文件(使用 compress 压缩)转压缩成.gz格式(使用 gzip 压缩) |
40.Inetutils-1.4.2
Inetutils 包含基本的网络程序。
预计编译时间: 0.2 SBU
所需磁盘空间: 8.9 MB
安装Inetutils
root:/sources/gzip-1.3.5# tar -zxvf $LFS/sources/inetutils-1.4.2.tar.gz -C $LFS/sources
root:/sources/gzip-1.3.5# cd $LFS/sources/inetutils-1.4.2
应用一个patch,使其能够在GCC-4.0.3下编译:
root:/sources/inetutils-1.4.2# patch -Np1 -i ../inetutils-1.4.2-gcc4_fixes-3.patch
patching file ftp/ftp_var.h
patching file libinetutils/ttymsg.c
root:/sources/inetutils-1.4.2#
我们并不安装 Inetutils 的全部程序,然而,它默认会把所有程序的 man 文档都装上。下面的补丁能解决这个问题:
root:/sources/inetutils-1.4.2# patch -Np1 -i ../inetutils-1.4.2-no_server_man_pages-1.patch
为编译Inetutils做准备:
root:/sources/inetutils-1.4.2# ./configure --prefix=/usr --libexecdir=/usr/sbin \
> --sysconfdir=/etc --localstatedir=/var \
> --disable-logger --disable-syslogd \
> --disable-whois –disable-servers
配置选项的含义:
--disable-logger 阻止 inetutils 安装 logger 程序,脚本利用这个程序向系统日志守护进程传递消息。我们不安装它是因为 Util-linux 包含一个更好的版本。 --disable-syslogd 这个参数阻止 inetutils 安装 System Log Daemon(系统日志守护进程),我们将在后面的 Sysklogd 软件包中安装它。 --disable-whois 阻止 inetutils 编译 whois 客户端,因为它已经很陈旧了。在 BLFS book 里面有安装更好的 whois 客户端的指导。 --disable-servers 阻止安装几种网络服务器。这些服务器对于基本的 LFS 系统是不合适的,有的还不安全,很多服务器都有更好的替代者。参见 http://www.linuxfromscratch.org/blfs/view/svn/basicnet/inetutils.html 。
编译软件包:
root:/sources/inetutils-1.4.2# make
这个软件包没有附带测试程序。
安装软件包:
root:/sources/inetutils-1.4.2# make install
把 ping 程序移动到符合 FHS 标准的位置:
root:/sources/inetutils-1.4.2# mv -v /usr/bin/ping /bin
`/usr/bin/ping' -> `/bin/ping'
root:/sources/inetutils-1.4.2#
Inetutils 的内容
安装的程序: ftp, ping, rcp, rlogin, rsh, talk, telnet, tftp
简要描述
ftp |
文件传输协议程序 |
ping |
向网络主机发送请求应答包,并报告回复所需的时间。 |
rcp |
远程文件拷贝 |
rlogin |
远程登陆 |
rsh |
运行远程 shell |
talk |
与另一个用户交谈 |
telnet |
TELNET 协议接口 |
tftp |
小文件传输程序 |