# 6.45\. Man-DB-2.4.3
Man-DB 包含查找和显示 man 手册页的程序。
**预计编译时间:** 0.2 SBU**所需磁盘空间:** 9 MB
## 6.45.1\. 安装 Man-DB
对 Man-DB 的源码需要做三个调整。
第一,改变已翻译的 Man-DB 带的 manual 页的位置,使其在传统和 UTF-8 的 locale 环境下均能使用:
```
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` 这样的命令时的冗余结果:
```
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
```
`col` 是 Util-linux 的一部分, `lynx` 基于文本的浏览器(参见 BLFS 的安装说明), `vgrind` 把程序源码转换为 Groff 的输入,`grap` 在 Groff 文档中对图表排版非常有用。 `vgrind` 和 `grap` 不是查看 manual 页所必须的。它们不是 LFS 的一部分,也不是 BLFS 的一部分,但是在完成 LFS 之后,你应该能够自己安装。
为编译 Man-DB 做准备:
```
./configure --prefix=/usr --enable-mb-groff --disable-setuid
```
**配置选项的含义:**
_`--enable-mb-groff`_
通知 `man` 在格式化非ISO-8859-1格式的 manual 页时,使用 "ascii8" 和 "nippon" Groff 设备。
_`--disable-setuid`_
使 `man` 不能给用户 `man` 设置uid位。
编译软件包:
```
make
```
这个软件包没有附带测试程序。
安装软件包:
```
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
```
一些关于 man 和 info 页的压缩可以在 BLFS 手册中找到([_http://www.linuxfromscratch.org/blfs/view/cvs/postlfs/compressdoc.html_](http://www.linuxfromscratch.org/blfs/view/cvs/postlfs/compressdoc.html))。
## 6.45.2\. 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_](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_](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。下一个版本可能就不会需要了。
## 6.45.3\. 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_ 格式的行。 |
- Linux From Scratch
- 序言
- i. 前言
- ii. 目标读者
- iii. 先决条件
- iv. 对宿主系统的要求
- v. 排版约定
- vi. 本书的组织结构
- vii. 勘误表
- I. 简介
- 1. 简介
- 1.1. 如何构建一个 LFS 系统?
- 1.2. 与上一版本有何不同?
- 1.3. 更新日志
- 1.4. 资源
- 1.5. 帮助
- 2. 准备一个新分区
- 2.1. 简介
- 2.2. 创建一个新分区
- 2.3. 在新分区上创建文件系统
- 2.4. 挂载新分区
- 3. 软件包和补丁
- 3.1. 简介
- 3.2. 全部软件包
- 3.3. 需要的补丁
- 4. 最后的准备工作
- 4.1. 关于环境变量 $LFS
- 4.2. 创建 $LFS/tools 目录
- 4.3. 添加 LFS 用户
- 4.4. 设置工作环境
- 4.5. 关于 SBU
- 4.6. 关于软件包测试套件
- 5. 构建临时编译环境
- 5.1. 简介
- 5.2. 工具链技术说明
- 5.3. Binutils-2.16.1 - 第一遍
- 5.4. GCC-4.0.3 - 第一遍
- 5.5. Linux-Libc-Headers-2.6.12.0
- 5.6. Glibc-2.3.6
- 5.7. 调整工具链
- 5.8. Tcl-8.4.13
- 5.9. Expect-5.43.0
- 5.10. DejaGNU-1.4.4
- 5.11. GCC-4.0.3 - 第二遍
- 5.12. Binutils-2.16.1 - 第二遍
- 5.13. Ncurses-5.5
- 5.14. Bash-3.1
- 5.15. Bzip2-1.0.3
- 5.16. Coreutils-5.96
- 5.17. Diffutils-2.8.1
- 5.18. Findutils-4.2.27
- 5.19. Gawk-3.1.5
- 5.20. Gettext-0.14.5
- 5.21. Grep-2.5.1a
- 5.22. Gzip-1.3.5
- 5.23. M4-1.4.4
- 5.24. Make-3.80
- 5.25. Patch-2.5.4
- 5.26. Perl-5.8.8
- 5.27. Sed-4.1.5
- 5.28. Tar-1.15.1
- 5.29. Texinfo-4.8
- 5.30. Util-linux-2.12r
- 5.31. 清理系统
- 5.32. 改变所有者
- III. 构建 LFS 系统
- 第六章 安装系统基础软件
- 6.1. 简介
- 6.2. 挂载虚拟内核文件系统
- 6.3. 包管理
- 6.4. 进入 Chroot 环境
- 6.5. 创建系统目录结构
- 6.6. 创建必需的文件与符号连接
- 6.7. Linux-Libc-Headers-2.6.12.0
- 6.8. Man-pages-2.34
- 6.9. Glibc-2.3.6
- 6.10. 再次调整工具链
- 6.11. Binutils-2.16.1
- 6.12. GCC-4.0.3
- 6.13. Berkeley DB-4.4.20
- 6.14. Coreutils-5.96
- 6.15. Iana-Etc-2.10
- 6.16. M4-1.4.4
- 6.17. Bison-2.2
- 6.18. Ncurses-5.5
- 6.19. Procps-3.2.6
- 6.20. Sed-4.1.5
- 6.21. Libtool-1.5.22
- 6.22. Perl-5.8.8
- 6.23. Readline-5.1
- 6.24. Zlib-1.2.3
- 6.25. Autoconf-2.59
- 6.26. Automake-1.9.6
- 6.27. Bash-3.1
- 6.28. Bzip2-1.0.3
- 6.29. Diffutils-2.8.1
- 6.30. E2fsprogs-1.39
- 6.31. File-4.17
- 6.32. Findutils-4.2.27
- 6.33. Flex-2.5.33
- 6.34. GRUB-0.97
- 6.35. Gawk-3.1.5
- 6.36. Gettext-0.14.5
- 6.37. Grep-2.5.1a
- 6.38. Groff-1.18.1.1
- 6.39. Gzip-1.3.5
- 6.40. Inetutils-1.4.2
- 6.41. IPRoute2-2.6.16-060323
- 6.42. Kbd-1.12
- 6.43. Less-394
- 6.44. Make-3.80
- 6.45. Man-DB-2.4.3
- 6.46. Mktemp-1.5
- 6.47. Module-Init-Tools-3.2.2
- 6.48. Patch-2.5.4
- 6.49. Psmisc-22.2
- 6.50. Shadow-4.0.15
- 6.51. Sysklogd-1.4.1
- 6.52. Sysvinit-2.86
- 6.53. Tar-1.15.1
- 6.54. Texinfo-4.8
- 6.55. Udev-096
- 6.56. Util-linux-2.12r
- 6.57. Vim-7.0
- 6.58. 关于调试符号
- 6.59. 再次清理系统
- 6.60. 最终的清理
- 7. 配置系统启动脚本
- 7.1. 简介
- 7.2. LFS-Bootscripts-6.2
- 7.3. 启动脚本是如何工作的?
- 7.4. LFS 系统的设备和模块处理
- 7.5. 配置 setclock 脚本
- 7.6. 配置 Linux 控制台
- 7.7. 配置 sysklogd 脚本
- 7.8. 创建 /etc/inputrc 文件
- 7.9. Bash Shell 启动文件
- 7.10. 配置 localnet 脚本
- 7.11. 定制 /etc/hosts 文件
- 7.12. 为设备创建惯用符号连接
- 7.13. 配置网络脚本
- 8. 使 LFS 系统能够启动
- 8.1. 简介
- 8.2. 创建 /etc/fstab 文件
- 8.3. Linux-2.6.16.27
- 8.4. 使 LFS 系统能够启动
- 9. 结束
- 9.1. 结束
- 9.3. 重启系统
- 9.4. 现在做什么?
- IV. 附录
- A. 缩写和名词
- B. 致谢
- C. 依赖关系
- 长索引