第7章  用户级应用程序

翻译:Henry Hu.
7.1. 那么,在哪儿能找到用户级应用程序?
7.2. 我如何为我的机器配置 INN ( 互联网新闻 )?
7.3. FreeBSD 支持 Java™ 吗 ?
7.4. 为什么我无法在 6.X 或 7.X-STABLE 机器上联编这个 port?
7.5. 尝试通过 make index 来构建 INDEX 文件, 但失败了, 这是为什么?
7.6. 为什么 CVSup 没有集成到 FreeBSD 的主代码树?
7.7. 我已经更新了源代码,请问我如何更新我已经安装了的 ports?
7.8. 为什么 /bin/sh 功能这么少 ? 为什么 FreeBSD 不使用 bash 或者其他 shell?
7.9. 为什么 Netscape®Opera 启动需要的时间这么久?
7.10. 在使用 CVSup 更新了 Ports 套件中的一部分之后, 许多 ports 都不能联编了, 并给出了奇怪的错误信息! 发生什么了? 是不是 Ports 套件出大问题了?
7.11. 我如何从我的 MIDI 文件创建音乐 CD ?

7.1. 那么,在哪儿能找到用户级应用程序?

请浏览 ports 页 来获取有关移植到 FreeBSD 上的软件包的信息。这个列表目前 包含 20,000 个软件并且正在迅速增长,所以你可以通过经常 查看该页面或者订阅 FreeBSD 公告邮件列表 来获取关于新项目的周期性更新。

大多数 ports 应该能在 6.X、 7.X 和 8.X 开发分支的系统上运行。 每次 FreeBSD 发布一个新版本, ports 树的发布时的一个快照也会包含在 ports/ 目录中。

我们也支持“预编译包”的概念, 其实也就是一个压缩了的二进制发布包,附带有一点小小的智能, 能够完成手动安装所要做的所有工作。 一个预编译包能被轻松地多次安装及卸载而不用了解里面 包含了哪些文件等令人厌烦的的细节。

使用 sysinstall(8) (在 Configure 菜单项中) 的 Packages 预编译包安装菜单, 或以您希望安装的预编译包名字作为参数执行 pkg_add(1) 命令就可以安装预编译包了。 预编译包的扩展名, 通常会是 .tbz, 而发布 CDROM 发行版的人会在他们的光盘上提供一个 packages/All 目录。 用于不同版本的 FreeBSD 的这类文件, 也可以通过网络从下列位置安装:

或者从离你最近的本地镜像站点下载。

请注意, 并不是所有的 ports 都有与之对应的预编译包, 因为我们在不断地增加新的软件。 如果有兴趣, 我们建议您定期到 ftp.FreeBSD.org 主站看看有哪些包可用。

7.2. 我如何为我的机器配置 INN ( 互联网新闻 )?

在安装好 news/inn 预编译包或 port 之后, Dave Barr's INN Page 是个很好的起点,在那里你能找到 INN 的 FAQ.

7.3. FreeBSD 支持 Java™ 吗 ?

是的。请查看 http://www.FreeBSD.org/java/

7.4. 为什么我无法在 6.X 或 7.X-STABLE 机器上联编这个 port?

如果您运行的 FreeBSD 版本严重落后于 -CURRENT-STABLE, 您可能需要更新 Ports 套件; 请参阅 Porters 手册 中的 保持同步 部分了解更多关于如何完成这样操作的信息。 如果您的系统已经是最新版了, 有可能有人提交了对 port 的变动, 使其能够在 -CURRENT 上运行, 但影响了它在 -STABLE 上的正常工作。 请通过 send-pr(1) 命令报告这一问题, 因为 Ports 套件应该是能够在 -CURRENT-STABLE 分支上同时运行的。

7.5. 尝试通过 make index 来构建 INDEX 文件, 但失败了, 这是为什么?

首先,请确认你有一套完整的最新的 Ports 套件。 影响到从最新的 Ports 套件构建 INDEX 文件的问题是很明显的, 所以总是会很快得到解决。

但是,如果你已经更新到了最新版,可能你遇到的是另一个问题。 make index 在处理不完整的 Ports 套件副本时, 存在已知问题。 它假定您本地版本的 ports 均有其所依赖的全部 ports 副本。 具体来说, 如果你在硬盘中有 foo/bar 的一个副本,并且 foo/bar 依赖于 baz/quux, 那么您的硬盘上也必须有 baz/quux 的一个副本, 对于 baz/quux 依赖的 ports 也一样, 等等。 否则, make index 没有足够多的信息来创建它的依赖关系树。

对于使用 cvsup(1) (或 csup(1)) 来更新 Ports 套件, 但又通过 refuse 中指定来不安装某些类别的 FreeBSD 用户来说, 这是个尤其明显的问题。 理论上, 用户应该能够删除某些类别, 但实际上有太多的 ports 基于其它类别的 ports。 在有人对此问题拿出一套解决方案之前, 实际情况就是如果需要构建 INDEX 文件, 就必须有完整的 Ports 套件的副本。

在很少的情况下 INDEX 不能被构建是因为涉及到 make.conf 中设定的 WITH_*WITHOUT_* 变量的奇特的情况。 如果你认为这是问题所在, 请在将其报告至 FreeBSD ports 邮件列表 之前先尝试把这些构建变量关闭再编译 INDEX 文件。

7.6. 为什么 CVSup 没有集成到 FreeBSD 的主代码树?

FreeBSD 基本系统是设计为能够自行联编的 ── 换句话说, 只需要使用非常有限的工具就能够联编整个操作系统。 因此, 用于编译 FreeBSD 源代码的联编工具均与源代码捆绑在一起。 这其中包括 C 编译器 (gcc(1))、 make(1)awk(1) 以及类似的其他工具。

由于 CVSup 是使用 Modula-3 来书写的, 将其加入 FreeBSD 基本系统需要同时加入并维护 Modula-3 编译器。 这不仅会增加 FreeBSD 源代码消耗的磁盘空间, 也会增加许多额外的维护工作。 因此, 对开发人员和用户来说, 将 CVSup 作为一个单独的 port 提供都会带来很大的便利, 它可以很容易地通过随 FreeBSD 安装 CD 附带的预编译包来安装。

不过, 从 FreeBSD 6.2-RELEASE 开始, FreeBSD 用户没有整合在基本系统中的与 CVSup 兼容的客户端的时代结束了。 感谢 Maxime Henrion 的工作, CVSup 使用 C 重写成了 csup(1), 并成为了基本系统的一部分。 虽然它目前还没有完全实现 CVSup 的功能, 它已经足够 (并且非常快!) 用来完成代码的同步工作了。 对于 6.2 之前的系统, 可以通过 port 或 package (参见 net/csup) 来安装它。

7.7. 我已经更新了源代码,请问我如何更新我已经安装了的 ports?

FreeBSD 本身并不包含用于升级 port 的工具, 但提供了一些简化升级工作的工具。 您可以安装这些附加的工具来简化 port 的日常维护, 具体细节, 请参见 FreeBSD 使用手册中的 如何升级 Ports 部分。

7.8. 为什么 /bin/sh 功能这么少 ? 为什么 FreeBSD 不使用 bash 或者其他 shell?

因为 POSIX® 要求必须有这样一个 shell 。

详细解答: 许多人需要编写能够被移植到各种系统上的 shell 脚本。 这就是为什么 POSIX 详细规范了 shell 以及其他常用工具。 许多脚本是为 Bourne shell 所写, 并且多种重要的编程接口 (make(1), system(3), popen(3), 以及其它类似的高级脚本语言, 比如 Perl 和 Tcl) 都使用 Bourne shell 来解释命令。 因为 Bourne shell 被如此广泛而频繁地使用, 对它来说快速启动, 行为确定, 占用很少的内存是很重要的。

现在的实现是我们尽全力同时满足最多的要求的结果。 为了保持 /bin/sh 尽可能小, 我们没有提供许多其它 shell 所具有的简便功能。 这也是为什么 Ports 套件中包含许多功能强大的像 bashscshtcsh 以及 zsh 这样的 shell 的原因。 (您可以自己比较它们的内存占用, 通过在 ps -u 的输出列表中观察 “VSZ” 和 “RSS” 列。)

7.9. 为什么 Netscape®Opera 启动需要的时间这么久?

常见的原因是您系统中的 DNS 配置不正确。 NetscapeOpera 在启动时均检查 DNS, 而在它们收到回应或确定网络没有连接之前, 是不会出现在桌面上的。

7.10. 在使用 CVSup 更新了 Ports 套件中的一部分之后, 许多 ports 都不能联编了, 并给出了奇怪的错误信息! 发生什么了? 是不是 Ports 套件出大问题了?

如果您只更新 Ports 套件中的一部分, 使用的是 CVSup 的某些子集而不是 ports-all CVSup 集合, 就应该 确保 同时更新了 ports-base 子集! 具体原因在 使用手册 中进行了介绍。

7.11. 我如何从我的 MIDI 文件创建音乐 CD ?

要从 MIDI 文件创建音乐 CD, 首先要从 ports 安装 audio/timidity++, 然后手动安装 Eric A. Welsh 制作的 GUS 补丁包, 这个补丁包可以在 http://alleg.sourceforge.net/digmid.html 找到。 正确安装了 TiMidity++ 之后, 可以用下列命令将 MIDI 文件转换为 WAV 文件:

% timidity -Ow -s 44100 -o /tmp/juke/01.wav 01.mid

随后您可以将 WAV 文件转换成其它格式, 或者刻录到音乐 CD 上, 后者在 FreeBSD 使用手册 中进行了介绍。

本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.