5.4. 使用 Package 系统
上一页 | 第 5 章 安装应用程序: Packages 和 Ports | 下一页

## 5.4. 使用 Package 系统

Contributed by Chern Lee.

在 FreeBSD 系统上有几种不同的工具用来管理 package：

- `sysinstall` 工具可以在正在运行的系统上运行， 以完成安装、 删除和列出可用的以及已经安装的预编译软件包的任务。 如欲了解进一步信息， 请参阅 第 2.10.11 节 “安装预编译的软件包 (package)”。

- 这一节余下的部分将介绍用于管理预编译软件包的命令行工具。

### 5.4.1. 一个 package 的安装

您可以用 pkg_add(1) 这个命令从本地文件或网络上的服务器来安装一个 FreeBSD 软件包。

例 5.1. 在本地手动下载一个package,并安装它
`#` `ftp -a `ftp2.FreeBSD.org`` Connected to ftp2.FreeBSD.org. 220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready. 331 Guest login ok, send your email address as password. 230- 230- This machine is in Vienna, VA, USA, hosted by Verio. 230- Questions? E-mail freebsd@vienna.verio.net. 230- 230- 230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. `ftp>` `cd /pub/FreeBSD/ports/packages/sysutils/` 250 CWD command successful. `ftp>` `get lsof-4.56.4.tgz` local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz 200 PORT command successful. 150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes). 100% |**************************************************| 92375 00:00 ETA 226 Transfer complete. 92375 bytes received in 5.60 seconds (16.11 KB/s) `ftp>` `exit` `#` `pkg_add `lsof-4.56.4.tgz``

如果您没有本地package的安装盘 (如 FreeBSD CD-ROM)， 可以执行 pkg_add(1) 命令并加上 `-r` 选项。 这将迫使程序自动决定目标文件的正确格式和版本， 然后自动从一个 FTP 站点寻找和安装 package。

`#` `pkg_add -r `lsof``

上面的例子将下载正确的package， 而不需要用户的干预就可以安装。 如果您想指定 FreeBSD package 的镜像站点， 替换主站点， 就必须相应地设置 `PACKAGESITE` 这个环境变量， 覆盖原来的设置。 pkg_add(1) 使用 fetch(3) 下载文件， 可以使用多种环境变量， 包含 `FTP_PASSIVE_MODE`、 `FTP_PROXY`， 和 `FTP_PASSWORD`。 如果您使用 FTP/HTTP 代理或在防火墙后面， 您可能需要设置这些环境变量。 详细的列表请参考 fetch(3)。上述例子中用 `lsof` 替代了 `lsof-4.56.4`。 当使用远程安装 Package 的时候软件名字不需要包含版本号。 pkg_add(1) 将自动的找到这个软件最新的版本。

### 注意:

如果您使用 FreeBSD-CURRENT 或 FreeBSD-STABLE版本的FreeBSD， pkg_add(1) 将下载您的应用软件的最新版本。 如果您使用 -RELEASE 版本的 FreeBSD, 它将会获得与您的版本相应的软件包版本。 您可以通过修改环境变量 `PACKAGESITE` 来改变这一行为。 例如， 如果您运行 FreeBSD 8.1-RELEASE 系统， 默认情况下 pkg_add(1) 将尝试从 `ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.1-release/Latest/` 下载预编译的软件包。 如果您希望强制 pkg_add(1) 下载 FreeBSD 8-STABLE 的软件包， 则可以将 `PACKAGESITE` 设置为 `ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8-stable/Latest/`。

软件包采用 `.tgz` 和 `.tbz` 两种格式。您可以在 ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/ 下面或从 FreeBSD 的发行光盘找到， 它在每一个 4CD 的 FreeBSD 发行版的 `/packages`目录中。 软件包的设计规划与 `/usr/ports` 树一致。 每个分类都有自己的目录， 所有的软件包可以在目录 `All`中找到。

软件包系统的目录结构与ports的设计规划一致； 它们共同构成了整个 package/port。

### 5.4.2. 软件包的管理

pkg_info(1) 是用于列出已安装的所有软件包列表和描述的程序。

`#` `pkg_info` cvsup-16.1 A general network file distribution system optimized for CV docbook-1.2 Meta-port for the different versions of the DocBook DTD ...

pkg_version(1)是一个用来统计所有安装的软件包版本的工具。 它可以用来比较本地 package 的版本与 ports 目录中的当前版本是否一致。

`#` `pkg_version` cvsup = docbook = ...

在第二列的符号指出了安装版本的相关时间和本地ports目录树中可用的版本。

符号 | 含义
--- | ---
= | 在本地ports树中与已安装的软件包版本相匹配。
< | 已安装的版本要比在ports树中的版本旧。
> | 已安装的版本要比在ports树中的版本新 (本地的port树可能没有更新)。
? | 已安装的软件包无法在ports索引中找到。 (可能发生这种事情，举个例子， 您早先安装的一个 port 从 port 树中移出或改名了)
* | 软件包有很多版本。
! | 已安装的软件包在索引中存有记录， 但是由于某些原因 `pkg_version` 无法比较已安装的软件包与索引中相对应的版本号。

### 5.4.3. 删除一个软件包

要删除先前安装的软件package，只要使用pkg_delete(1) 工具。

`#` `pkg_delete `xchat-1.7.1``

需要注意的是， pkg_delete(1) 需要提供完整的包名； 如果您只是指定了类似 `xchat` 而不是 `xchat-1.7.1` 这样的名字， 则它将拒绝执行操作。 不过， 您可以使用 pkg_version(1) 来了解安装的 package 的版本。 除此之外， 也可以使用通配符：

`#` `pkg_delete `xchat\*``

这时， 所有名字以 `xchat` 开头的 package 都会被删掉。

### 5.4.4. 其它

所有已安装的 package 信息都保存在 `/var/db/pkg` 目录下。 安装文件的列表和每个 package 的内容和描述都能在这个目录的相关文件中找到。

上一页 | 上一级 | 下一页
5.3. 寻找您要的应用程序 | 起始页 | 5.5. 使用Ports Collection

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

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