16.构建LFS系统──安装系统基础软件(八)
时间:2006-11-17 来源:anima
十六、构建LFS系统──安装系统基础软件(八)
41.IPRoute2-2.6.16-060323
IPRoute2 包含了基本的和高级的基于 IPv4 网络的程序。
预计编译时间: 0.2 SBU
所需磁盘空间: 4.8 MB
安装IPRoute2
root:/sources/inetutils-1.4.2# tar -zxvf $LFS/sources/iproute2-2.6.16-060323.tar.gz -C $LFS/sources
root:/sources/inetutils-1.4.2# cd $LFS/sources/iproute2-2.6.16-060323
编译软件包:
root:/sources/iproute2-2.6.16-060323# make SBINDIR=/sbin
make 选项的含义:
SBINDIR=/sbin 确保将 IPRoute2 包中的二进制文件安装到 /sbin 目录中以符合 FHS 标准,因为一些 IPRoute2 二进制文件将会被 LFS-Bootscripts 使用。这个软件包没有附带测试程序。
安装软件包:
root:/sources/iproute2-2.6.16-060323# make SBINDIR=/sbin install
arpd 二进制文件链接到在 /usr 目录中的Berkeley DB库,并且使用数据库 /var/lib/arpd/arpd.db。因此,按照 FHS,它必须存在于 /usr/sbin目录中。移动它到那里:
root:/sources/iproute2-2.6.16-060323# mv -v /sbin/arpd /usr/sbin
`/sbin/arpd' -> `/usr/sbin/arpd'
root:/sources/iproute2-2.6.16-060323#
IPRoute2 的内容
安装的程序: arpd, ctstat(→lnstat), ifcfg, ifstat, ip, lnstat, nstat, routef, routel, rtacct, rtmon, rtpr, rtstat(→lnstat), ss, tc.
简要描述
arpd |
用户空间的 ARP 守护进程。用在大型网络中,那里内核空间的 ARP 实现不是很合适;或者是用在设置一个蜜罐。 |
ctstat |
连接状态工具 |
ifcfg |
ip命令的shell脚本包装 |
ifstat |
显示网络接口的统计信息,包括接口发送和接收到的包数量。 |
ip |
主可执行程序,它包含以下几个功能: ip link [device] 查看和修改设备状态 ip addr 查看地址的特性,添加新地址、删除旧地址。 ip neighbor 查看邻居的特性,添加新邻居、删除旧邻居。 ip rule 查看和修改路由规则 ip route 查看路由表和修改路由表规则 ip tunnel 查看和修改 IP 隧道及其特性 ip maddr 查看和修改多播地址及其特性 ip mroute 设置、修改、删除多播路由 ip monitor 不间断的监视设备状态、地址、路由 |
lnstat |
提供 Linux 网络统计信息,用于替代旧的 rtstat 程序。 |
nstat |
显示网络统计信息 |
routef |
ip route 的一个组件,用于刷新路由表。 |
routel |
ip route 的一个组件,用于列出路由表。 |
rtacct |
显示 /proc/net/rt_acct 文件的内容 |
rtmon |
路由监视工具 |
rtpr |
将 ip -o 的输出转换为可读的格式 |
rtstat |
路由状态工具 |
ss |
类似于 netstat 命令,显示活动的连接。 |
tc |
流量控制,用于实现服务质量(QOS)和服务级别(COS): tc qdisc 建立排队规则 tc class 建立基于级别的队列调度 tc estimator 估算网络流量 tc filter 设置 QOS/COS 包过滤器 tc policy 设置 QOS/COS 规则 |
42.Kbd-1.12
Kbd 包含键盘映射表和键盘工具。
预计编译时间: 少于 0.1 SBU
所需磁盘空间: 12.3 MB
安装Kbd
root:/sources/iproute2-2.6.16-060323# tar -jxvf $LFS/sources/kbd-1.12.tar.bz2 -C $LFS/sources
root:/sources/iproute2-2.6.16-060323# cd $LFS/sources/kbd-1.12
Backspace 键和 Delete 键的功能在 kbd 包的键盘映射中是不一样的。下面的 patch 修正了 i386 的键盘映射中的这个问题:
root:/sources/kbd-1.12# patch -Np1 -i ../kbd-1.12-backspace-1.patch
打完 patch 之后,Backspace 键会产生字符编码 127,Delete 键会产生一个著名的逃脱序列。
应用 patch 来修正 Kbd 中的 setfont 在 GCC-4.0.3 下编译出错的问题:
root:/sources/kbd-1.12# patch -Np1 -i ../kbd-1.12-gcc4_fixes-1.patch
patching file src/psffontop.c
root:/sources/kbd-1.12#
为编译Kbd做准备:
root:/sources/kbd-1.12# ./configure --datadir=/lib/kbd
Configuring for DATADIR=/lib/kbd
checking for gcc
gcc is /usr/bin/gcc
You have <locale.h>
You have <libintl.h> and gettext()
Assuming that you want to enable NLS support.
(Otherwise, edit defines.h and delete the line with ENABLE_NLS)
Done. You can run make now.
root:/sources/kbd-1.12#
配置选项的含义:
--datadir=/lib/kbd 这个选项把键盘布局信息存放到根分区内,而不是存放在默认的 /usr/share/kbd。
编译软件包:
root:/sources/kbd-1.12# make
这个软件包没有附带测试程序。
安装软件包:
root:/sources/kbd-1.12# make install
注意
对于一些语言(例如,白俄罗斯),在 Kbd 包中没有提供相应的键盘映射。系统假定使用 ISO-8859-5 编码,通常使用 CP1251 键盘映射。 这些语种的用户需要单独下载相应的键盘映射:
LFS-Bootscripts 包中的一些脚本依赖于 kbd_mode, openvt,和 setfont。因为 /usr 在启动的早些时候是无法访问的(没有挂载)。那些二进制文件需要放在根分区上:
root:/sources/kbd-1.12# mv -v /usr/bin/{kbd_mode,openvt,setfont} /bin
`/usr/bin/kbd_mode' -> `/bin/kbd_mode'
`/usr/bin/openvt' -> `/bin/openvt'
`/usr/bin/setfont' -> `/bin/setfont'
root:/sources/kbd-1.12#
Kbd 的内容
安装的程序: chvt, deallocvt, dumpkeys, fgconsole, getkeycodes, kbd_mode, kbdrate, loadkeys, loadunimap, mapscrn, openvt, psfaddtable(→psfxtable), psfgettable(→psfxtable), psfstriptable(→psfxtable), psfxtable, resizecons, setfont, setkeycodes, setleds, setmetamode, showconsolefont, showkey, unicode_start, unicode_stop
简要描述
chvt |
改变前台虚拟终端 |
deallocvt |
重新分配不用的虚拟终端 |
dumpkeys |
显示键盘转换表 |
fgconsole |
显示活动虚拟控制台的数量 |
getkeycodes |
显示内核中扫描码与键盘码的转换表 |
kbd_mode |
设置或显示键盘模式 |
kbdrate |
设置或显示键盘重复和延迟的速度 |
loadkeys |
加载键盘转换表 |
loadunimap |
加载内核的 Unicode 到字体(unicode-to-font)之间的影射表 |
mapscrn |
把用户定义的输出字符影射表加载到控制台驱动器中。注意这个程序已经过时,它实现的功能已经并入 setfont 程序。 |
openvt |
在一个新虚拟终端启动一个程序 |
psfaddtable |
链接到 psfxtable |
psfgettable |
链接到 psfxtable |
psfstriptable |
链接到 psfxtable |
psfxtable |
一套处理控制台字体的 Unicode 字符表的工具 |
resizecons |
让内核改变控制台的大小 |
setfont |
改变控制台的 EGA 或 VGA 字体 |
setkeycodes |
告诉内核的键盘驱动程序在扫描码/键码(scancode-to-keycode)影射表中加入新的影射,当你的键盘上有某些特殊建的时候这个就很有用了。 |
setleds |
设置当前终端键盘的发光二极管(LED)标志 |
setmetamode |
设置键盘的元键(meta key) |
showconsolefont |
显示当前 EGA / VGA 终端的屏幕字体 |
showkey |
测试键盘发出的扫描码和键码 |
unicode_start |
使控制台进入 UNICODE 模式。在 LFS 系统中从不使用,因为应用程序并未配置为支持 UNICODE 。 |
unicode_stop |
终止控制台的 UNICODE 模式 |
43.Less-394
Less 软件包包含一个文本文件查看器。
预计编译时间: 0.1 SBU
所需磁盘空间: 2.6 MB
安装 Less
root:/sources/kbd-1.12# tar -zxvf $LFS/sources/less-394.tar.gz -C $LFS/sources
root:/sources/kbd-1.12# cd $LFS/sources/less-394
为编译 Less 做准备:
root:/sources/less-394# ./configure --prefix=/usr --sysconfdir=/etc
配置选项的含义:
--sysconfdir=/etc 这个选项告诉程序建立软件包时在 /etc 目录里查找配制文件。
编译软件包:
root:/sources/less-394# make
这个软件包没有附带测试程序。
安装软件包:
root:/sources/less-394# make install
./mkinstalldirs /usr/bin /usr/man/man1
/usr/bin/install -c less /usr/bin/less
/usr/bin/install -c lesskey /usr/bin/lesskey
/usr/bin/install -c lessecho /usr/bin/lessecho
/usr/bin/install -c -m 644 ./less.nro /usr/man/man1/less.1
/usr/bin/install -c -m 644 ./lesskey.nro /usr/man/man1/lesskey.1
/usr/bin/install -c -m 644 ./lessecho.nro /usr/man/man1/lessecho.1
root:/sources/less-394#
Less 的内容
安装的程序: less, lessecho, lesskey
简要描述
less |
一个文件显示或分页程序。它显示某文件的内容,并可以分卷、寻找字符串、跳转到某一标记。 |
lessecho |
在 Unix 系统中,可以用来扩展元字符,比如 * 和 ? |
lesskey |
为 less 定义按健 |
44. Make-3.80
Make 自动地确定一个大型程序的哪些片段需要重新编译,并且发出命令去重新编译它们。
预计编译时间: 0.1 SBU
所需磁盘空间: 7.8 MB
安装 Make
root:/sources/less-394# mv $LFS/sources/make-3.80 $LFS/sources/old2
root:/sources/less-394# tar -jxvf $LFS/sources/make-3.80.tar.bz2 -C $LFS/sources
root:/sources/less-394# cd $LFS/sources/make-3.80
为编译 Make 做准备:
root:/sources/make-3.80# ./configure --prefix=/usr
编译软件包:
root:/sources/make-3.80# make
要测试结果,请运行:make check 。
安装软件包:
root:/sources/make-3.80# make install
Make 的内容
安装的程序: make
简要描述
make |
自动地确定一个大型程序的哪些片段需要重新编译,并且发出命令去重新编译它们。 |
45.Man-DB-2.4.3
Man-DB 包含查找和显示 man 手册页的程序。
预计编译时间: 0.2 SBU
所需磁盘空间: 9 MB
安装 Man-DB
root:/sources/make-3.80# tar -zxvf $LFS/sources/man-db-2.4.3.tar.gz -C $LFS/sources
root:/sources/make-3.80# cd $LFS/sources/man-db-2.4.3
对 Man-DB 的源码需要做三个调整。
第一,改变已翻译的 Man-DB 带的 manual 页的位置,使其在传统和 UTF-8 的 locale 环境下均能使用:
root:/sources/man-db-2.4.3# mv man/de{_DE.88591,} &&
> mv man/es{_ES.88591,} &&
> mv man/it{_IT.88591,} &&
> mv man/ja{_JP.eucJP,} &&
> sed -i 's,\*_\*,??,' man/Makefile.in
第二,使用 sed 的替换功能来删除 man_db.conf 文件中的 "/usr/man" 行, 来避免在使用像 whatis 这样的命令时的冗余结果:
root:/sources/man-db-2.4.3# sed -i '/\t\/usr\/man/d' src/man_db.conf.in
第三,改变 Man-DB 在运行时应该能够发现的程序的记录,但它们还没有安装:
cat >>include/manconfig.h.in <<"EOF"
#define WEB_BROWSER "exec /usr/bin/lynx"
#define COL "/usr/bin/col"
#define VGRIND "/usr/bin/vgrind"
#define GRAP "/usr/bin/grap"
EOF
root:/sources/man-db-2.4.3# cat >>include/manconfig.h.in <<"EOF"
> #define WEB_BROWSER "exec /usr/bin/lynx"
> #define COL "/usr/bin/col"
> #define VGRIND "/usr/bin/vgrind"
> #define GRAP "/usr/bin/grap"
> EOF
root:/sources/man-db-2.4.3#
col 是 Util-linux 的一部分, lynx 基于文本的浏览器(参见 BLFS 的安装说明), vgrind 把程序源码转换为 Groff 的输入,grap 在 Groff 文档中对图表排版非常有用。 vgrind 和 grap 不是查看 manual 页所必须的。它们不是 LFS 的一部分,也不是 BLFS 的一部分,但是在完成 LFS 之后,你应该能够自己安装。
为编译 Man-DB 做准备:
root:/sources/man-db-2.4.3# ./configure --prefix=/usr --enable-mb-groff –disae-setuid
配置选项的含义:
--enable-mb-groff 通知 man 在格式化非ISO-8859-1格式的 manual 页时,使用 "ascii8" 和 "nippon" Groff 设备。 --disable-setuid 使 man 不能给用户 man 设置uid位。编译软件包:
root:/sources/man-db-2.4.3# make
这个软件包没有附带测试程序。
安装软件包:
root:/sources/man-db-2.4.3# make install
一些软件包提供这个版本 man 无法显示的 UTF-8 编码的 man 手册页。 下面的脚本将会允许它们中的一些转换成为下面表中的编码格式。Man-DB 期望 manual 页的编码格式是下面表中的一项。在显示它们的时 候,可以根据需要转换成实际的 locale 编码,因此它们能够在传统的和 UTF-8 的locale下显示。因为脚本是在系统构建和对公共数据 中限制使用的,所以,我们不必担心错误检测和使用非预期的临时文件名。
cat >>convert-mans <<"EOF"
#!/bin/sh -e
FROM="$1"
TO="$2"
shift ; shift
while [ $# -gt 0 ]
do
FILE="$1"
shift
iconv -f "$FROM" -t "$TO" "$FILE" >.tmp.iconv
mv .tmp.iconv "$FILE"
done
EOF
install -m755 convert-mans /usr/bin
root:/sources/man-db-2.4.3# cat >>convert-mans <<"EOF"
> #!/bin/sh -e
> FROM="$1"
> TO="$2"
> shift ; shift
> while [ $# -gt 0 ]
> do
> FILE="$1"
> shift
> iconv -f "$FROM" -t "$TO" "$FILE" >.tmp.iconv
> mv .tmp.iconv "$FILE"
> done
> EOF
root:/sources/man-db-2.4.3# install -m755 convert-mans /usr/bin
一些关于 man 和 info 页的压缩可以在 BLFS 手册中找到(http://www.linuxfromscratch.org/blfs/view/cvs/postlfs/compressdoc.html)。
Non-English Manual Pages in LFS
每一种 Linux 的发行版在存储 manual 页的字符编码方面都有自己的方法。比如,RedHat 以 UTF-8 编码存储所有的 manual 页;然而 Debian 使用不同的语言编码(通常是8位的)。这 就导致包在为不同发行版设置 manual 页时不兼容。
LFS采用跟 Debian 一样的方法。这是因为 Man-DB 不能够理解 UTF-8 存储的 man 手册页。Man-DB 比 Man 好在在任意的 locale 下不需要额外的配置就可以使用。最后,我们没有选用 RedHat 的方法,因为它的groff文本格式组织的不好。
语言跟字符编码的关联已经列在下面的表中。Man-DB 会在查看的时候自动的将它们转变为 locale 的编码。
Table 6.1. manual 页的字符编码表 pages
Language (code) |
Encoding |
---|---|
Danish (da) |
ISO-8859-1 |
German (de) |
ISO-8859-1 |
English (en) |
ISO-8859-1 |
Spanish (es) |
ISO-8859-1 |
Finnish (fi) |
ISO-8859-1 |
French (fr) |
ISO-8859-1 |
Irish (ga) |
ISO-8859-1 |
Galician (gl) |
ISO-8859-1 |
Indonesian (id) |
ISO-8859-1 |
Icelandic (is) |
ISO-8859-1 |
Italian (it) |
ISO-8859-1 |
Dutch (nl) |
ISO-8859-1 |
Norwegian (no) |
ISO-8859-1 |
Portuguese (pt) |
ISO-8859-1 |
Swedish (sv) |
ISO-8859-1 |
Czech (cs) |
ISO-8859-2 |
Croatian (hr) |
ISO-8859-2 |
Hungarian (hu) |
ISO-8859-2 |
Japanese (ja) |
EUC-JP |
Korean (ko) |
EUC-KR |
Polish (pl) |
ISO-8859-2 |
Russian (ru) |
KOI8-R |
Slovak (sk) |
ISO-8859-2 |
Turkish (tr) |
ISO-8859-9 |
注意
不在上面列表中的语言的 Manual 页是不支持的。挪威语无法使用,因为从 no_NO 到 nb_NO 的locale转变。韩语因为不完整的 patch 也是功能不全的。 of the incomplete Groff patch.
如果 manual 页的编码是 Man-DB 所预期的,manual 页就会被拷贝到 /usr/share/man/<language code>。例如,法语的 manual 页(http://ccb.club.fr/man/man-fr-1.58.0.tar.bz2) 可以使用下面的命令安装:
mkdir -p /usr/share/man/fr &&
cp -rv man? /usr/share/man/fr
如果 manual 页是 UTF-8 编码的(例如,针对 "RedHat" 的) ,而不是上面列表中的。它们不得不在安装之前从 UTF-8 转变为列表中的编码。这可以通过 convert-mans 来实现。比如,西班牙的 manual 页 (http://ditec.um.es/~piernas/manpages-es/man-pages-es-1.55.tar.bz2) 可以通过下面的命令来安装:
mv man7/iso_8859-7.7{,X}
convert-mans UTF-8 ISO-8859-1 man?/*.?
mv man7/iso_8859-7.7{X,}
make install
注意
在转换的过程中需要除去 man7/iso_8859-7.7 文件,因为它已经存在于ISO-8859-1中,这是 man-pages-es-1.55 的一个bug。下一个版本可能就不会需要了。
Man-DB 的内容
安装的程序: accessdb, apropos, catman, convert-mans,lexgrog, man, mandb, manpath, whatis, zsoelim
简要描述
accessdb |
将 whatis 数据库的内容转储为人类可读形式 |
apropos |
搜索 whatis 数据库,显示包含给定字符串的系统命令的简短描述。 |
catman |
创建或更新预格式化的 manual 页 |
convert-mans |
重新格式化 man 手册页,以使 Man-DB 能够显示它们 |
lexgrog |
显示一行给定 manual 页的摘要信息。 |
man |
格式化并显示请求的 manual 页 |
mandb |
创建或更新 whatis 数据库 |
manpath |
显示 $MANPATH 的内容或在man.conf中设置的搜索路径(如果 $MANPATH 没有设置),以及用户的环境变量。 |
whatis |
搜索 whatis 数据库,显示包含给定关键字的系统命令的简短描述。 |
zsoelim |
读取文件并用提到的 file 的内容来替换 .so file 格式的行。 |
46.Mktemp-1.5
Mktemp 软件包包含用于在 shell 脚本中创建安全临时文件的程序。
预计编译时间: 少于 0.1 SBU
所需磁盘空间: 0.4 MB
安装Mktemp
root:/sources/man-db-2.4.3# tar -zxvf $LFS/sources/mktemp-1.5.tar.gz -C $LFS/sources
root:/sources/man-db-2.4.3# cd $LFS/sources/mktemp-1.5
许多脚本目前仍然使用被反对使用的类似于 mktemp 的 tempfile 程序,我们现在要给 Mktemp 打一个补丁,以使它包含 tempfile 包装:
root:/sources/mktemp-1.5# patch -Np1 -i ../mktemp-1.5-add_tempfile-3.patch
patching file Makefile.in
patching file tempfile
root:/sources/mktemp-1.5#
为编译Mktemp做准备:
root:/sources/mktemp-1.5# ./configure --prefix=/usr –with-libc
配置选项的含义:
--with-libc 这个使得 mktemp 程序从系统的 C 库中使用 mkstemp 和 mkdtemp 的功能。
编译软件包:
root:/sources/mktemp-1.5# make
gcc -c -I. -I. "-DMKTEMP_VERSION=\"1.5\"" -g -O2 mktemp.c
gcc -o mktemp mktemp.o
root:/sources/mktemp-1.5#
这个软件包没有附带测试程序。
安装软件包:
root:/sources/mktemp-1.5# make install
/bin/sh ./mkinstalldirs /usr/bin /usr/man/man1
/bin/sh ./install-sh -c -m 0555 -s mktemp /usr/bin/mktemp
/bin/sh ./install-sh -c -m 0444 ./mktemp.man /usr/man/man1/mktemp.1
root:/sources/mktemp-1.5# make install-tempfile
/bin/sh ./install-sh -c -m 0555 ./tempfile /usr/bin/tempfile
root:/sources/mktemp-1.5#
Mktemp 的内容
安装的程序: mktemp, tempfile
简要描述
mktemp |
使用安全性较强的方式创建临时文件,用于脚本中。 |
tempfile |
使用比 mktemp 安全性较弱的方式创建临时文件,但是能够满足向后的兼容性。 |
47.Module-Init-Tools-3.2.2
Module-Init-Tools 包含处理 2.5.47 及以上版本的内核模块时使用的工具。
预计编译时间: 少于 0.1 SBU
所需磁盘空间: 7 MB
安装Module-Init-Tools
root:/sources/mktemp-1.5# tar -jxvf $LFS/sources/module-init-tools-3.2.2.tar.bz2 -C $LFS/sources
root:/sources/mktemp-1.5# cd $LFS/sources/module-init-tools-3.2.2
首先更正一个当模块被指定使用正则表达式时会出现的潜在问题:
root:/sources/module-init-tools-3.2.2# patch -Np1 -i ../module-init-tools-3.2.2-modprobe-1.patch
patching file modprobe.c
root:/sources/module-init-tools-3.2.2#
执行下面的命令进行测试(注意 make distclean 命令需要清理源码树,因为作为测试过程的一部分,源码会重新编译:
root:/sources/module-init-tools-3.2.2# ./configure &&
> make check &&
> make distclean
为编译 Module-Init-Tools 做准备:
root:/sources/module-init-tools-3.2.2# ./configure --prefix=/ --enable-zlib
编译软件包:
root:/sources/module-init-tools-3.2.2# make
安装软件包:
root:/sources/module-init-tools-3.2.2# make INSTALL=install install
make[1]: Entering directory `/sources/module-init-tools-3.2.2'
/bin/sh ./mkinstalldirs //bin
install lsmod //bin/lsmod
/bin/sh ./mkinstalldirs //sbin
install insmod //sbin/insmod
install modprobe //sbin/modprobe
install rmmod //sbin/rmmod
install depmod //sbin/depmod
install modinfo //sbin/modinfo
install insmod.static //sbin/insmod.static
/bin/sh ./mkinstalldirs //sbin
install generate-modprobe.conf //sbin/generate-modprobe.conf
/bin/sh ./mkinstalldirs /usr/share/man/man5
install -m 644 ./modprobe.conf.5 /usr/share/man/man5/modprobe.conf.5
install -m 644 ./modules.dep.5 /usr/share/man/man5/modules.dep.5
/bin/sh ./mkinstalldirs /usr/share/man/man8
install -m 644 ./depmod.8 /usr/share/man/man8/depmod.8
install -m 644 ./insmod.8 /usr/share/man/man8/insmod.8
install -m 644 ./lsmod.8 /usr/share/man/man8/lsmod.8
install -m 644 ./rmmod.8 /usr/share/man/man8/rmmod.8
install -m 644 ./modprobe.8 /usr/share/man/man8/modprobe.8
install -m 644 ./modinfo.8 /usr/share/man/man8/modinfo.8
make[1]: Leaving directory `/sources/module-init-tools-3.2.2'
root:/sources/module-init-tools-3.2.2#
make 参数的含义:
INSTALL=install 正常情况下,如果二进制文件已经存在了,make install 就不会安装它们。 这个选项是调用 install 而不是使用默认封装的脚本。
Module-Init-Tools 的内容
安装的程序: depmod, generate-modprobe.conf, insmod, insmod.static, lsmod, modinfo, modprobe, rmmod
简要描述
depmod |
创建一个可加载内核模块的依赖关系文件,modprobe 用它来自动加载模块。 |
generate-modprobe.conf |
从一个现存的2.2 或者 2.4版本内核的模块设置中创建一个 modprobe.conf 文件 |
insmod |
向正在运行的内核加载模块 |
insmod.static |
insmod 的静态编译版本 |
lsmod |
显示当前已加载的内核模块信息 |
modinfo |
检查与内核模块相关联的目标文件,并打印出所有能得到的信息。 |
modprobe |
利用 depmod 创建的依赖关系文件来自动加载相关的模块 |
rmmod |
从当前运行的内核中卸载模块 |
48.Patch-2.5.4
Patch 根据"补丁"文件的内容来修改原来的文件。补丁文件通常是用 diff程序创建的,包含如何修改文件的指导。
预计编译时间: 少于 0.1 SBU
所需磁盘空间: 1.6 MB
安装Patch
root:/sources/module-init-tools-3.2.2# mv $LFS/sources/patch-2.5.4 $LFS/sources/old2
root:/sources/module-init-tools-3.2.2# tar -zxvf $LFS/sources/patch-2.5.4.tar.gz -C $LFS/sources
root:/sources/module-init-tools-3.2.2# cd $LFS/sources/patch-2.5.4
为编译Patch做准备:
root:/sources/patch-2.5.4# ./configure –prefix=/usr
编译软件包:
root:/sources/patch-2.5.4# make
……
……
……
gcc -c -DHAVE_CONFIG_H -Ded_PROGRAM=\"ed\" -I. -I. -g -O2 quotearg.c
quotearg.c: In function 'quotearg_n_options':
quotearg.c:341: warning: incompatible implicit declaration of built-in function 'abort'
gcc -c -DHAVE_CONFIG_H -Ded_PROGRAM=\"ed\" -I. -I. -g -O2 quotesys.c
gcc -c -DHAVE_CONFIG_H -Ded_PROGRAM=\"ed\" -I. -I. -g -O2 util.c
gcc -c -DHAVE_CONFIG_H -Ded_PROGRAM=\"ed\" -I. -I. -g -O2 version.c
gcc -c -DHAVE_CONFIG_H -Ded_PROGRAM=\"ed\" -I. -I. -g -O2 xmalloc.c
gcc -o patch -g -O2 addext.o argmatch.o backupfile.o basename.o error.o inp.o maketime.o partime.o patch.o pch.o quotearg.o quotesys.o util.o version.o xmalloc.o
patch.o: In function `make_temp':
/sources/patch-2.5.4/patch.c:1325: warning: the use of `mktemp' is dangerous, better use `mkstemp'
root:/sources/patch-2.5.4#
这个软件包没有附带测试程序。
安装软件包:
root:/sources/patch-2.5.4# make install
/bin/sh ./mkinstalldirs /usr/bin /usr/man/man1
/usr/bin/install -c patch /usr/bin/`echo patch | sed 's,x,x,'`
/usr/bin/install -c -m 644 ./patch.man /usr/man/man1/`echo patch | sed 's,x,x,'`.1
root:/sources/patch-2.5.4#
Patch 的内容
安装的程序: patch
简要描述
patch |
根据一个patch 文件来对文件进行修改。通常情况下,一个 patch 文件是一个差别清单。这个清单用diff程序创建。通过将这些差别应用到原始文件,patch 创建出修订版本。 |
49.Psmisc-22.2
Psmisc 包含有用于显示进程信息的程序。
预计编译时间: 少于 0.1 SBU
所需磁盘空间: 2.2 MB
安装Psmisc
root:/sources/patch-2.5.4# tar -zxvf $LFS/sources/psmisc-22.2.tar.gz -C $LFS/sources
root:/sources/patch-2.5.4# cd $LFS/sources/psmisc-22.2
为编译Psmisc做准备:
root:/sources/psmisc-22.2# ./configure --prefix=/usr –exec-prefix=""
配置选项的含义:
--exec-prefix="" 这个确保 Psmisc 二进制文件按照 FHS 标准被安装在 /bin 而不是 /usr/bin ,因为一些 Psmisc 二进制文件将被 LFS-Bootscripts 使用。
编译软件包:
root:/sources/psmisc-22.2# make
这个软件包没有附带测试程序。
安装软件包:
root:/sources/psmisc-22.2# make install
没有理由把 pstree 和 pstree.x11 程序安装在 /bin 中,所以将他们移动到 /usr/bin 中:
root:/sources/psmisc-22.2# mv -v /bin/pstree* /usr/bin
`/bin/pstree' -> `/usr/bin/pstree'
`/bin/pstree.x11' -> `/usr/bin/pstree.x11'
root:/sources/psmisc-22.2#
默认情况下, Psmisc 的 pidof 程序未被安装。 这通常情况下不是问题。因为它将在这之后的 Sysvinit 包中被安装,而且这个包提供了一个更好的 pidof 程序。如果你打算不使用 Sysvinit ,则可通过创建下面的符号连接来安装完整的 Psmisc :
root:/sources/psmisc-22.2# ln -sv killall /bin/pidof
create symbolic link `/bin/pidof' to `killall'
root:/sources/psmisc-22.2#
Psmisc 的内容
安装的程序: fuser, killall, pstree, pstree.x11(→pstree)
简要描述
fuser |
报告使用所给文件或文件系统的进程的进程ID(PID)。 |
killall |
通过进程名来终止进程,它发送消息到所有正在运行任意所给指令的进程。 |
oldfuser |
报告使用所给文件或文件系统的进程的进程ID(PID)。 |
pstree |
以目录树的形式显示所有正在运行的进程 |
pstree.x11 |
同 pstree ,只是它在退出前要求确认 |
50.Shadow-4.0.15
Shadow 包含用于在安全方式下处理密码的程序。
预计编译时间: 0.3 SBU
所需磁盘空间: 18.6 MB
安装Shadow
root:/sources/psmisc-22.2# tar -jxvf $LFS/sources/shadow-4.0.15.tar.bz2 -C $LFS/sources
root:/sources/psmisc-22.2# cd $LFS/sources/shadow-4.0.15
注意
如果你打算强制使用高强度密码,请参考 http://www.linuxfromscratch.org/blfs/view/svn/postlfs/cracklib.html 以获得如何在安装 Shadow 之前先安装 Cracklib 的指导。然后在下面的 configure 命令中加入 --with-libcrack 项。
为编译Shadow做准备:
root:/sources/shadow-4.0.15# ./configure --libdir=/lib --enable-shared –without-selinux
配置选项的含义:
--without-selinux selinux 的支持默认是打开的,但是 selinux 不包含在 LFS 基本系统中。如果这个选项不设置, configure 脚本会报错。禁止安装 groups 程序和它的手册,Coreutils 软件包提供了一个更好的版本:
root:/sources/shadow-4.0.15# sed -i 's/groups$(EXEEXT) //' src/Makefile
root:/sources/shadow-4.0.15# find man -name Makefile -exec sed -i '/groups/d' {} \;
禁止安装中文和韩文的手册页,因为Man-DB不能很好的格式化它们:
root:/sources/shadow-4.0.15# sed -i -e 's/ ko//' -e 's/ zh_CN zh_TW//' man/Makefile
Shadow 支持在 UTF-8 编码环境下的其他编码的手册。Man-DB 可以通过我们安装的 convert-mans 脚本来转换并显示它们。
root:/sources/shadow-4.0.15# for i in de es fi fr id it pt_BR; do
> convert-mans UTF-8 ISO-8859-1 man/${i}/*.?
> done
root:/sources/shadow-4.0.15# for i in cs hu pl; do
> convert-mans UTF-8 ISO-8859-2 man/${i}/*.?
> done
root:/sources/shadow-4.0.15# convert-mans UTF-8 EUC-JP man/ja/*.?
root:/sources/shadow-4.0.15# convert-mans UTF-8 KOI8-R man/ru/*.?
root:/sources/shadow-4.0.15# convert-mans UTF-8 ISO-8859-9 man/tr/*.?
编译软件包:
root:/sources/shadow-4.0.15# make
这个软件包没有附带测试程序。
安装软件包:
root:/sources/shadow-4.0.15# make install
Shadow 使用两个文件来设置系统的身份认证。下面安装这两个设置文件:
root:/sources/shadow-4.0.15# cp -v etc/{limits,login.access} /etc
`etc/limits' -> `/etc/limits'
`etc/login.access' -> `/etc/login.access'
root:/sources/shadow-4.0.15#
不使用默认的 crypt 加密方法, 而使用更为安全的 MD5 对密码进行加密, 并且它同样允许密码长于 8 个字符。同时将用户邮箱位置从过时的 /var/spool/mail 修改到 /var/mail 是也有必要的(Shadow 普遍默认使用这个位置)。这两件事都可以通过在将相应的配置文件复制至目标位置之前,对其进行更改来达到:
root:/sources/shadow-4.0.15# sed -e's@#MD5_CRYPT_ENAB.no@MD5_CRYPT_ENAB yes@' \
> -e 's@/var/spool/mail@/var/mail@' \
> etc/login.defs > /etc/login.defs
注意
如果你在编译 Shadow 时启用了 Cracklib 支持,请在下面的 sed 命令中插入:
sed -i 's@DICTPATH.*@DICTPATH\t/lib/cracklib/pw_dict@' \
/etc/login.defs
移动一些放错位置的符号连结或程序到正确位置:
root:/sources/shadow-4.0.15# mv -v /usr/bin/passwd /bin
`/usr/bin/passwd' -> `/bin/passwd'
root:/sources/shadow-4.0.15#
移动 Shadow 的动态库到一个更为合适的地方:
root:/sources/shadow-4.0.15# mv -v /lib/libshadow.*a /usr/lib
`/lib/libshadow.a' -> `/usr/lib/libshadow.a'
`/lib/libshadow.la' -> `/usr/lib/libshadow.la'
root:/sources/shadow-4.0.15# rm -v /lib/libshadow.so
removed `/lib/libshadow.so'
root:/sources/shadow-4.0.15# ln -sfv ../../lib/libshadow.so.0 /usr/lib/libshadow.so
create symbolic link `/usr/lib/libshadow.so' to `../../lib/libshadow.so.0'
root:/sources/shadow-4.0.15#
useradd 程序的 -D 选项要求存在 /etc/default 目录以便程序能够正常工作:
root:/sources/shadow-4.0.15# mkdir -v /etc/default
mkdir: created directory `/etc/default'
root:/sources/shadow-4.0.15#
配置Shadow
这个软件包中含有用来增加、修改和删除用户或组、设置和更改他们的密码、和执行其他管理任务的工具。为了获得对 password shadowing (影子密码) 的完全解释,请参见 doc/HOWTO 文件,它在解包后的源码目录树中。假如要使用 Shadow 支持,请注意那些需要对密码进行校验的程序(如显示管理器、FTP 程序、pop3进程等)必须兼容 Shadow 。也就是说,他们需要能够与影子密码一起工作。
为了使用影子密码,运行以下指令:
root:/sources/shadow-4.0.15# pwconv
为使用组影子密码,运行:
root:/sources/shadow-4.0.15# grpconv
Setting the root password
通过运行以下命令来设置 root 用户的密码:
root:/sources/shadow-4.0.15# passwd root
Changing password for root
Enter the new password (minimum of 5, maximum of 127 characters)
Please use a combination of upper and lower case letters and numbers.
New password:
Re-enter new password:
Password changed.
root:/sources/shadow-4.0.15#
Shadow 的内容
安装的程序: chage, chfn, chgpasswd, chpasswd, chsh, expiry, faillog, gpasswd, groupadd, groupdel, groupmod, grpck, grpconv, grpunconv, lastlog, login, logoutd, newgrp, newusers, nologin, passwd, pwck, pwconv, pwunconv, sg(→newgrp), su, useradd, userdel, usermod, vigr(→vipw), vipw
安装的库: libshadow.{a,so}
简要描述
chage |
用于设置必须对密码进行更改的最大间隔天数 |
chfn |
用于对用户的全名及其他信息进行修改 |
chgpasswd |
用于对一整个系列的组账号密码进行更新 |
chpasswd |
用于对一整个系列的用户账号密码进行更新 |
chsh |
用于更改一个用户的默认的登录 shell |
expiry |
检查并加强当前的密码过期策略 |
faillog |
用于检查记录登录失败的日志,或是设置账户在被锁定前最大的登录失败次数,亦可用于重置登录失败的次数。 |
gpasswd |
用来增加和删除组中的成员和管理员 |
groupadd |
用指定的名称建一个组 |
groupdel |
删除指定名称的组 |
groupmod |
用来修改所指定组的名称或 GID |
grpck |
校验组文件 /etc/group 和 /etc/gshadow 的完整性 |
grpconv |
从正常组文件中创建或更新一影子组文件 |
grpunconv |
从 /etc/gshadow 更新 /etc/group 并将前者删除 |
lastlog |
报告最近的所有用户的登录或是所指定用户的登录 |
login |
被系统用来允许用户进行登录 |
logoutd |
一个后台程序,用来加强对登录时间和端口进行限制 |
newgrp |
用来在登录会话期间对当前的 GID 进行修改 |
newusers |
用来对一整个系列的用户账户进行创建或更新 |
nologin |
显示一个账户不可用的信息,被设计用来作为那些不准登录的账户的默认 shell。 |
passwd |
用来对一个用户或组账户进行密码修改 |
pwck |
校验密码文件 /etc/passwd 和 /etc/shadow 的完整性 |
pwconv |
从一个正常的密码文件中创建或更新一影子密码文件 |
pwunconv |
从 /etc/shadow 更新 /etc/passwd 并删除前者 |
sg |
当一个用户的 GID 被设置到所给的组时执行所指定的命令 |
su |
用另一个用户和组ID来运行一个 shell |
useradd |
用所给名称建立一个新的用户或更新默认新用户的信息 |
userdel |
删除所指定的用户账户 |
usermod |
用来更改所给用户的登录名、用户标识(UID)、shell、最初组、主目录等 |
vigr |
编辑 /etc/group 或 /etc/gshadow 文件 |
vipw |
编辑 /etc/passwd 或 /etc/shadow 文件 |
libshadow |
包含了本包中大部分程序所用到的函数 |