FreeBSD 使用手册
上一页 | 第4章 　安装应用程序: Packages 和 Ports | 下一页

# 4.4 使用 Package 系统

Contributed by Chern Lee.

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

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

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

## 4.4.1 一个 package 的安装

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

例 4-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。

## 4.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` 无法比较已安装的软件包与索引中相对应的版本号。

## 4.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 都会被删掉。

## 4.4.4 其它

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

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

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

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