6.47.1. 安装 Man-DB
LFS 创建了 /usr/man
和 /usr/local/man
作为符号连接。把它们从 man_db.conf
文件中删除,以防当使用如 whatis 之类的程序时会出现多余的结果:
sed -i -e '\%\t/usr/man%d' -e '\%\t/usr/local/man%d' src/man_db.conf.in
为编译 Man-DB 作准备:
./configure --prefix=/usr --libexecdir=/usr/lib \
--sysconfdir=/etc --disable-setuid \
--enable-mb-groff --with-browser=/usr/bin/lynx \
--with-col=/usr/bin/col --with-vgrind=/usr/bin/vgrind \
--with-grap=/usr/bin/grap
配置选项的含义:
-
--disable-setuid
-
使 man 不能给用户
man
设置 uid 位。
-
--enable-mb-groff
-
通知 man-db 使用 Debian
打过补丁的多字节版本的 groff。
-
--with-...
-
这四个参数是用来设定某些默认程序的。col 程序是 Util-linux-ng
包的一部分,lynx
是基于文本的网络浏览器(参考 BLFS 获得安装指导),vgrind 把源代码转换成 Groff
输入格式,grap 对于在
Groff 文件中图表排版很有用。vgrind 和 grap 对于浏览手册页的一般需求不是必须的。它们不是
LFS 或 BLFS 的必要步骤,但是如果你在安装完 LFS 后想要安装它们,你应该要能够做到。
编译软件包:
make
这个软件包没有附带测试套件。
安装软件包:
make install
6.47.2. LFS 中的非英文手册页
有一些包提供非英语的手册页。只有在它们的位置和编码匹配 "man" 程序的时候,才能用其他语言正常显示。但是不同的 Linux
发行版本关于在文件系统中手册页用何种字符编码存储有不同的政策(man 程序的相关选择,如它的编译方式和所运用的补丁等)。
例如,Debian 先前要求俄罗斯语的手册页应该用 KOI8-R 字符编码并放置在 /usr/share/man/ru
中。现在,他们的 man 程序(Man-DB)还可以在 /usr/share/man/ru.UTF-8
查找用 UTF-8 编码的俄罗斯语手册页。而
Fedora 只允许使用用 UTF-8 编码的手册页。俄罗斯于的手册页被放在 /usr/share/man/ru
中,他们的 man 程序不承认 /usr/share/man/ru.UTF-8
。许多发行版本完全忽略磁盘上的编码,使最终的用户在编译时会尽可能少地遇到不正确的编码手册页。当
man
运行所需页的时候,如果磁盘编码与它所需的编译形式不符的话,它将在编译的时候显示出完全不可读的内容。
不同版本发行商关于手册页编码的分歧导致了维护 upstream 包的混乱。一个包可能包含 UTF-8
手册页,而另一个包可能包含以前其他编码形式的手册页。man 查找手册页的方式是基于用户 locale
的设置。Man-DB 使用内置的表(如下所示)来决定基于用户
locale 设置的手册页在磁盘上的编码形式,但是这只在所找到的目录的拓展名中没有关于编码描述的情况下。例如,如果目录名中有
".UTF-8",那么 Man-DB 就会知道所有存在于
/usr/share/man/fr.UTF-8
中的手册页都是用
UTF-8 编码的,并根据内置表,应将所有放置在 /usr/share/man/ru
中的手册页用 KOI8-R 编码。
表 6.1. manual 页的字符编码表
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
|
Bulgarian (bg)
|
CP1251
|
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
|
Serbian (sr)
|
ISO-8859-5
|
Turkish (tr)
|
ISO-8859-9
|
Simplified Chinese (zh_CN)
|
GBK
|
Simplified Chinese, Singapore (zh_SG)
|
GBK
|
Traditional Chinese (zh_TW)
|
BIG5
|
Traditional Chinese, Hong Kong (zh_HK)
|
BIG5HKSCS
|
注意
不在上面列表中的语言的 Manual 页是不支持的。由于 no_NO 到 nb_NO 的转变,挪威语无法使用,并且在
Man-DB 的后续版本中,nb_NO locale
将固定不变。韩语目前也是不具功能的,因为 LFS 中运用的是不完整的 Debian 的 Groff 补丁。
软件包可能会被安装一个没有正确命名的目录下,这取决于包的开发者是为那个发行版本设计的软件包。为了支持手册页能在它被安装在的目录下转变成正确的编码,运用
convert-mans
脚本。它会使手册页在安装之前(或之后)转变成另一种编码。用下面的脚本安装 convert-mans:
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
如果 upstream 分散了以前编码的手册也,手册页会被拷贝到/usr/share/man/<language
code>
。例如德语的网页(
German manual pages)可以用下面的命令安装:
mkdir -p /usr/share/man/de
cp -rv man? /usr/share/man/de
如果manual 页是 UTF-8 编码的(例如,针对 "RedHat" 的),而不是上面列表中的,他们可能从 UTF-8
转变为列表中的编码,或者他们会被之后安装在 /usr/share/man/<language code>
.UTF-8
。
例如,法语的 manual 页( French
manual pages )可以使用下面的命令安装:
convert-mans UTF-8 ISO-8859-1 man?/*.?
mkdir -p /usr/share/man/fr
cp -rv man? /usr/share/man/fr
注意
法语手册页已经包含转换的脚本。上面的介绍仅仅是作为例子来说明 convert-mans 脚本的使用方法。
最后作为举例说明 UTF-8 编码的手册页的安装,法语手册页可以用下面的命令安装:
mkdir -p /usr/share/man/fr.UTF-8
cp -rv man? /usr/share/man/fr.UTF-8