4 安装应用程序:Packagesports

4.1 概要

FreeBSD捆绑了很多系统工具作为基本系统的一部分。然而,在实际工作中,你可能仍需要安装额外的第三方应用程序。FreeBSD提供了两种安装第三方应用程序的方法:FreeBSD ports collection和二进制软件包(package)。无论用哪种方式,你都可以从本地媒体(设备)或直接通过网络来安装你喜欢的最新版本的应用程序。

读完这章,你将了解到:

             如何安装第三方的二进制软件包。

             如何从ports collection安装第三方软件。

             如何删除先前安装的软件包。

4.2软件安装预览

如果你在安装第三方应用软件之前,就已经使用过UNIX系统了,那大概的安装情况是这样的:

1.    下载软件,可能是源代码形式或二进制形式。

2.    compressgzip来解开软件。

3.    阅读相关文档,了解如何安装。

4.    如果软件是以源代码形式发布的,先编译。这可能需要编辑一个makefile文件,或运行一个配置脚本和其他一些工作。

5.    测试和安装软件。

如果一切顺利的话,就这么简单。如果你在安装一个软件包时发生一些错误,你可能需要编辑一下代码,以使它能正常工作。

你可以继续使用传统的方式安装软件。然而,FreeBSD提供了两种技术:packagesports。就在写这篇文章的时候,已经有超过5900个第三方的应用程序可以使用了。

FreeBSD的应用程序包是一个可以下载的文件。这些包包含了预编译的拷贝,还有一些配置文件或文档。一个下载的包文件可以用FreeBSD的包管理命令来操作,例如pkg_addpkg_deletepkg_info等等。

用这种方法,安装一个新的应用程序可以用一个简单的命令来完成。一个FreeBSDport是一个可以自动从源代码编译成应用程序的文件集合。记住,如果你自己来编译的话,需要执行很多步的操作(解压,补丁,编译,安装)。这些整理port的文件集合包含了系统需要完成这个工作的必需信息。你可以运行一些简单的命令,那些源代码就可以自动地下载,解开,打补丁,编译,直至安装完成。

实际上,ports系统也可以被用来产生需要用pkg_add和不久就要讲到的其他包管理命令来安装的软件包。

Packagesports是互相依赖的。假设你想安装一个依赖于已经安装的特定库的应用程序。应用程序和那个库都已经应用于FreeBSD portspackages。如果你使用pkg_add命令或ports系统来添加应用程序,两个都必须注意库是否被安装,如果没有,需要先安装库。

这里给出的两种技术是很相似的,你可能会奇怪为什么FreeBSD会弄出这两种技术。其实,Packagesports都有它们自己的长处,使用哪一种完全取决于你自己的喜好。

Package的优点

             一个压缩的package通常要比一个压缩的包含源代码的应用程序小得多。

             package不需要进行额外的编译。对于很大的应用程序如MozillaKDEGNOME,这点很重要,特别是在你的系统比较小的情况下。

             包不需要你一定要知道如何在FreeBSD上编译软件的详细过程。

Ports 的优点

             package在编译时通常比较保守,因为他们必须运行在比较大型的系统上。通过从port安装,你可以细微调整编译选项来产生适合于处理器的代码。

             一些软件包已经把与它们相关的能做和不能做的事情的选项都编译进去了。例如,Apache可能就配置进了很多不同的组选项。你从port中建立软件,不一定要接受默认的选项,你可以自己来设置。

在一些例子中,多个package需要为同一个应用程序指定某个设置。例如,Ghostscript可以使用ghostscript packageghostscript-nox11 package,这取决于你是否安装了X11服务器。这样的略微调整对package是可能的,但如果一个应用程序有超过一个或两个不同的编译时钟选项时,就不行了。

             一些软件的许可条件禁止采用二进制形式发行。它们必须带上源代码。

             一些人不信任二进制发行形式。至少有了源代码,可以亲自阅读它,寻找潜在的问题。

             如果你要对软件打补丁,你就需要有源代码。

             一些人喜欢整天围着源代码转,所以他们喜欢亲自阅读源代码,修改源代码等等。

这章的其余部分将介绍如何使用packagesports来安装和管理第三方软件。

4.3 寻找你要的应用程序

在你安装任何应用程序之前,需要知道你需要什么,那个应用程序叫什么。FreeBSD中可用的应用程序正在不断地增长着。幸运的是,有许多方法可以找到你所需要的程序。

             FreeBSD站点上拥有一个可以搜索到的当前所有可用的应用程序列表,在(http://www.FreeBSD.org/ports/)上。它分很多种类,你既可以通过程序的名称来搜索,也可以在分类中列出所有可用的应用程序。

             Dan Langille维护着网站FreshPortshttp://www.freshports.org/)。FreshPort时刻追踪着在ports中应用程序的变化。当有任何程序被升级时,他们就会发email提醒你。

             如果你不知道你想要的应用程序的名字,可以通过FreshMeat (http://www.freshmeat.net/) AppWatch (http://www.appwatch.com/)这样的网站来寻找。如果应用程序被找到了,你可以回FreeBSD的主站去看一下这个应用程序是否已经被port进去了。

4.4 使用package系统

4.4.1安装一个package

你可以使用pkg_add工具从本地或通过网络从一台服务器上安装FreeBSDpackage

例如4-1.下载一个package然后在本地安装:

# ftp 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 [email protected].

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/irc

250 CWD command successful.

ftp> get xchat-1.7.1.tgz

local: xchat-1.7.1.tgz remote: xchat-1.7.1.tgz

150 Opening BINARY mode data connection for 'xchat-1.7.1.tgz' (471488 bytes).

100% |**************************************************|   460 KB    00:00 ETA

226 Transfer complete.

471488 bytes received in 5.37 seconds (85.70 KB/s)

ftp> exit

# pkg_add xchat-1.7.1.tgz

#

 

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

              # pkg_add –r xchat-1.7.1

上面的例子将下载正确的package,而不需要用户的干预就可以安装。Package文件是以.tgz的格式分发的。你可以在(ftp://ftp.freebsd.org/pub/FreeBSD/ports/packages/)或FreeBSD CDROM上找到。每一个FreeBSD发行CD都把package放在/packages目录中。packages的设计与/usr/ports树很相似。每个分类都有它自己的目录,每个package也能在所有目录下找到。Package系统的目录结构是与port的目录结构相对应的;它们以package/port的形式互相协调工作。

4.4.2删除一个package

要删除先前安装的软件package,只要使用pkg_delete工具。

# pkg_delete xchat-1.7.1

#

4.4.3管理packages

pkg_info是用来列出和描述已安装的不同package的工具。

       # pkg_info

     cvsup-bin-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是一个用来统计所有安装的package版本的工具。它可以用来比较本地package的版本与ports目录中的当前版本是否一致。

       # pkg_version

    cvsup-bin                    =

    docbook                     =

    ...

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

=

       在本地ports树中与已安装的软件包相匹配。

<

       已安装的版本要比在ports树中的版本来得老。

>

       已安装的版本要比在ports树中的版本来得新。

?

       已安装的软件包无法在ports索引中找到。

*

       软件包有很多版本。

 

4.4.4其他一些

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

4.5使用Ports Collection

下面的章节提供了使用ports collection来安装或卸载程序的基本用法。

4.5.1 安装Ports

当提到Ports collection时,第一个要说明的就是何谓“skeleton”。简单地说,一个port skeleton是让一个程序在FreeBSD上简洁地编译并安装的所需文件的最小组合。每个port skeleton包含:

             一个makefilemakefile包括好几个部分,指出应用程序是如何编译的和它将被安装在系统的哪个地方。

             一个distinfo文件。这个文件包括这些信息:这些文件需要被下载后才能建立,需要checksums,确保在下载过程中文件不会被破坏。

             一个files目录。这个目录包括在你的FreeBSD系统上编译和安装程序需要用到的补丁。这些补丁基本上都是些小文件,指出特定文件作了哪些修正。

它们是一些纯文本的格式,基本上是这样的“Remove line 10” “Change line 26 to this”。这些补丁以“diffs”出名,因为它们是用diff程序来产生的。这个目录也包含了其它在建立port时要用到的文件。

             一个pkg-comment文件。这是一行程序的描述。

             一个pkg-descr文件。这是一个提供更多细节,有多行的程序描述文件。

             一个pkg-plist文件。这是即将被安装的所有文件的列表。它告诉ports系统在重新安装时什么文件需要被删除。

现在,你已经了解了足够的ports collection的背景信息,你可以准备安装port了。共有两种安装方法,下面具体介绍。

在你安装之前,你需要选择一个安装的port。有几种方法可以来这样做,最容易的方法是到FreeBSD的网站上查看port的列表。每个port都有一个描述文件,你需要在安装之前先浏览一下。你可以通过浏览port列表或使用网站的搜索功能。每个port也包括一个描述,所以你可以在安装它之前阅读一下每个port的介绍。

另外一种方法是使用whereis命令。只需要输入“whereis <你想安装的程序>”,如果能被系统找到,你就会看到它的保存路径:

#whereis  lsof

lsof: /usr/ports/sysutils/lsof

#

这个命令告诉你lsof(一个系统工具)能在/usr/ports/sysutils/lsof目录中找到。

另外一种查找port的方法是使用ports collection内建的搜索功能。要使用这个功能,你先要进入/usr/ports目录,然后运行make search key=program-name,这里的“program-name”就是你要找的程序的名称。例如,如果你要找lsof

# cd /usr/ports

# make search key=lsof

Port: lsof-4.56.4

Path: /usr/ports/sysutils/lsof

Info: Lists information about open files (similar to fstat(1))

Maint: [email protected]

Index: sysutils

B-deps:

R-deps:

你要密切注意输出内容的“Path:”行,它告诉你能在哪儿找到它。其他的信息是在安装port时不需要的,在这里就不提了。

注意: 你必须具有root权限才能安装port

CDROM安装port

做这一步的前提是你有一张FreeBSD的安装光盘。如果你没有,可以从FreeBSD商店订购一张(www.freebsdmall.com)。在确信光盘已经放入光驱之后,需要先挂上/cdrom,才可以安装port。开始,改变目录到你要安装的port所在的目录:

# cd /usr/ports/sysutils/lsof

一旦进入lsof目录,你就可以看到port skeleton文件了。下面要编译port。只需要在命令行简单地输入make命令。做好之后,你可以看到下面的信息:

# make

>>>lsof_4.57D.freebsd.tar.gz doesn`t seem to exist in /usr/ports/distfiles/.

>>>Attempting to fetch from file:/cdrom/ports/distfiles/.

===>Extracting for lsof-4.57

...

[extraction output snipped]

...

>>>Checksum OK for lsof_4.57D.freebsd.tar.gz.

===>Patching for lsof-4.57

===>Applying FreeBSD patches for lsof-4.57

===>Configuring for lsof-4.57

...

[configure output snipped]

...

===>Building for lsof-4.57

...

[compilation snipped]

...

#

注意,一旦编译完成,你需要回到你的命令行。下面就安装port,在命令行输入make install

# make install

===>Installing for lsof-4.57

...

[install routines snipped]

...

===>Generating temporary packing list

===>Compressing manual pages for lsof-4.57

===>Registering installation for lsof-4.57

===>SECURITY NOTE:

This port has installed the following binaries which execute with

increased privileges.

#

回到命令行后,你就可以运行刚才安装的应用程序了。由于lsof是一个需要拥有更高特权才能运行的程序,所以会出现一个安全警告。在建立和安装port的过程中,你必须注意系统出现的任何警告。

注意:你也可以只运行make install,把makemake install两步并作一步来执行。

请记住有些port由于许可证的原因,不允许通过cdrom来安装。这可能有很多原因,包括在下载安装前需要注册,重新发布没有得到许可等等。如果你希望安装一个cdrom上没有的port,你可能需要在线安装。

通过internet安装port

正如前一节所讲到的,这一节假定你已经连接到Internet上了。如果没有的话,你只好通过CDROM来安装了。

通过Internet安装一个port,实际上跟你通过CDROM安装是一样的。两者之间唯一的不同是程序的源代码是从Internet上而不是从CDROM上下载。

有关的步骤是一样的:

# make install

>>>lsof_4.57D.freebsd.tar.gz doesn’t seem to exist in /usr/ports/distfiles/.

===>Attempting to fetch from ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.

Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%

439860 bytes transferred in 18.0 seconds (23.90 kBps)

===>Extracting for lsof-4.57

...

[extraction output snipped]

...

>>>Checksum OK for lsof_4.57D.freebsd.tar.gz.

===>Patching for lsof-4.57

===> Applying FreeBSD patches for lsof-4.57

===>Configuring for lsof-4.57

...

[configure output snipped]

...

===>Building for lsof-4.57

...

[compilation snipped]

...

===>Installing for lsof-4.57

...

[install routines snipped]

...

===>Generating temporary packing list

===>compressing manual pages for lsof-4.57

===> Registering installation for lsof-4.57

===> SECURITY NOTE:

This port has installed the following binaries which execute with

increased privileges.

#

正如你所看到的,唯一的不同是那些告诉你系统是从哪儿找到port行的。在下一节中,你将学到如何从你的系统中删除一个port

4.5.2 删除已经安装的port

现在你已经知道如何安装port了,你大概想知道如何删除它们吧。例如,已经安装好了一个port,不久发现安装的是一个错误的port。下面的段落将谈到这些问题。

现在我们将删除我们刚才安装的lsof。正如安装port时一样,第一件事情是你必须改变port的目录。如果你记得的话,那应该是/usr/ports/irc/lsof。你改变了目录后,就要准备删除lsof了。你可以执行下面的deinstall程序:

# cd /usr/ports/irc/lsof

# make deinstall

===> Deinstalling for lsof-4.57

就这么简单。你现在已经把lsof从系统中删除掉了。如果你想再重新安装它的话,可以在/usr/ports/irc/lsof目录下执行make reinstall命令。

4.6 安装中出现的问题

下面这些将介绍有关ports collection的经常会问到的问题,和一些基本的解决问题的方法,以及如果一个port坏掉了该怎么办。

4.6.1一些问题与解答

1.我认为应该作一个有关modem的讨论?

哦,你可能想到了计算机的串口。我们这儿使用的“port”是从一个Unix系统“porting”一个程序到另一个系统,不是指计算机的端口。

2. 什么是补丁(patch)?

一个补丁(patch)是一个小文件,主要描述文件如何从一个版本升级到另一个版本。它一般是纯文本的,基本上说是些像“delete line 23”“add these two lines after line 468”,或“change line 197 to this”这样的东西。它们以diff闻名,因为它们是由diff这个程序产生。

3. tarball是指什么?

它就是以.tar结尾的文件,或者是诸如以.tar.gz.tar.Z.tar.bz2.tgz结尾的文件。基本上,它是一个已经被打包或压缩的目录树。这种技术最早被用于磁带机上,但后来它被广泛运用于互联网上用来发布程序源代码。你可以看到在它里面有些什么文件,甚至你可以亲自使用标准的UNIX tar程序解开它们,只要这样做:

% tar tvzf foobar.tar.gz

% tar xzvf foobar.tar.gz

% tar tvf foobar.tar

% tar xvf foobar.tar

4. checksum呢?

这是一个由统计检查文件里所有资料而产生的数字。如果有任何字符改变了,那checksum就不会再跟统计的结果一样,所以经过简单的比较就可以看出差异。

5. 我照你说的方法从光盘编译port都很顺利,怎么一安装kermit就出错?

# make install

>> cku190.tar.gz doesn't seem to exist on this system.

>> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.

为什么找不到,难道这张光盘没有用?

就像在从光盘编译port那节所解释的,有些port因为授权的限制不能放进光盘。Kermit就是个例子。Kermit的授权不允许把它做的tarball放进光盘,所以必须自己动手下载——真是抱歉!

会有这些错误信息是因为当时没有连上网络。只要从MASTER_SITES (列在Makefile)中所列的任一个网站把文件下载下来,就可以重新开始安装的步骤了。

6. 我照做了,可是当要把文件放进/usr/ports/distfiles时却得到没有许可的错误信息。

Port的机制是到/usr/ports/distfiles中找tarball,可是因为它是符号连接(symlink)到光盘的,所以那个目录只读而且也没有办法复制任何东西进去。用下面说的方法就可以让它去找其他地方:

# make DISTDIR=/where/you/put/it install

7. Port的设计是只有把所有东西都放在/usr/ports下才能用吗?我的系统管理员说要把所有东西都放在/u/people/guests/wurzburger下,不过这样好像不能用。

可以用PORTSDIRPREFIX这两个变量来告诉port机制使用别的目录。例如,

# make PORTSDIR=/u/people/guests/wurzburger/ports install

会在/u/people/guests/wurzburger/ports里编译port并把所有东西安装在/usr/local下。

# make PREFIX=/u/people/guests/wurzburger/local install

会在/usr/ports里编译port并安装至/u/people/guests/wurzburger/local。毫无疑问的,

# make PORTSDIR=.../ports PREFIX=.../local install

会结合这两种(要在这页完整的写出来太长了,不过它应该给了你大致的思想了)

一些使用imakeX视窗系统的一部分)的port不能很好地与PREFIX一起工作,而且一定要安装在/usr/X11R6下。同样的,一些Perl port会跳过PREFIX,在Perl树中安装。让这些port去尊重PREFIX是一件困难或不可能的事情。

如果不想每次安装一个port都要把这些字再打一次,把这些设置放到环境变量里会是个好主意。读读shell的联机手册来获得做这些事的指导。

8. 我没有FreeBSD的光盘,不过我想要把所有的tarball放在手边,这样就不用每次装一个port就要等待下载。有什么好方法可以一次全下载下来吗?

要得到ports collection每个tarball的话,执行:

# cd /usr/ports

# make fetch

对于一个简单的port目录中的所有tarball来说,可以这样:

# cd /usr/ports/ directory

# make fetch

大概你已经猜到了,只是针对一个port

9. 我知道从临近的FreeBSD 镜像站下载比较快。可是有办法从MASTER_SITES列出的网站以外的站下载port吗?

可以。如果知道的话,例如ftp.FreeBSD.orgMASTER_SITES上面列的任何站都近,那就这么做:

# cd /usr/ports/directory

#make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch

10. 在它去把它们拉下来之前,我想知道需要make什么样的文件?

make fetch-list会列出一个port所需的文件。

11. 有办法阻止port进行编译吗?我想在它安装前hacking一下程序代码,不过每次都要边看边按control-C很讨厌。

make extract会在源代码下载完并解开后停止。

12. 我正在试图做自己的port,我想暂停一下编译,以便我有机会看看我的补丁是否工作正常。有一个针对补丁的像make extract一样的命令吗?

有的,make patch就是你想要的。你大概可以找到PATCH_DEBUG这个更有用的选项。顺便说一下,谢谢你的努力!

13.我已经听说一些编译器选项可能会引起错误,是真的吗?我要如何确定我编译的port使用了正确的设置?

是的,使用gcc2.6.3版本(FreeBSD 2.1.02.1.5版本附带的),-02选项可能会引起代码错误,除非你使用-fno-strength-reduce选项。(绝大多数port不使用-02选项)。你可以像这样来指定编译器的选项:

# make CFLAGS=‘-O2 -fno-strength-reduce’ install

或是通过编辑/etc/make.conf文件,但不幸的是,不是所有的port都适合这样做。最可靠的做法是执行make configure,然后进入源代码目录,手工检查makefiles文件,但如果源代码有很多子目录,每个子目录都有它们自己的makefiles文件,这样做可能会让人觉得很乏味。

默认的FreeBSD编译选项是比较保守的,所以如果你不对它们作修改,就不会有任何问题。

14.我很难找到我想要的一些port。有一个有关哪个port可用的列表吗?

看看/usr/ports目录下的INDEX文件。如果你想用一个关键字搜索ports collection,你也可以这样做。例如,你要搜索与LISP程序语言相关的port,使用下面的命令:

% cd /usr/ports

% make search key=lisp

15.我想安装foo port,但系统突然停止了编译,而开始编译bar port。这是怎么回事?

Foo port需要先安装bar——例如,如果foo使用图形,bar可能有一个图形处理程序的库。或者,bar可能是一个编译foo port时需要的工具。

16. 我从port安装了一个叫做grizzle程序,坦白地说,它很浪费空间。我想把它删掉,但我不知道它把所有文件都放在哪里了。有什么线索吗?

没有问题,只要键入:

# pkg_delete grizzle-6.5

或者你可以键入:

# cd /usr/ports/somewhere/grizzle

# make deinstall

17. 等一下,你必须知道你使用的那个命令的版本号码。你不会真的期望我记住它,是吗?

一点也不,你可以用下面的命令把它找出来:

# pkg_info -I ‘grizzle*’

Information for grizzle-6.5:

grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot’em up

arcade game.

版本号也可以使用pkg_info或键入ls /var/db/pkg命令来找到。

18. 谈到磁盘空间,port目录看起来占用了相当大的空间。在那儿添加和删除一些东西安全吗?

是的,如果你已经安装了程序,而且很清楚你不需要源代码,不要把它留在附近。最可靠的办法是这样:

# cd /usr/ports

# make clean

这样将仔细检查所有port子目录,然后将删除每个port的除skeletons之外的所有东西。

提示:可以不需要重复地访问每个makefile就可以达到同样的目的。例如,你可以使用下面的命令直接删除所有的工作子目录:

# find /usr/ports -depth -name work -exec rm -rf {} \;

19. 我已经试过了,但它仍然将所有的tarballdistfiles中你访问过的东西保留着。我要如何将那些也删掉呢?

是的,如果你确信你已经完成了,那些可能仍然保留着。它们可以用手工的方式删除,或使用make distclean命令。

20. 我喜欢玩很多很多的程序。有办法一口气把所有的都装上吗?

只要这样做:

# cd /usr/ports

# make install

小心点,一些port可能用同样名称的安装文件。如果你安装两个图形port,它们都安装/usr/local/bin/plot,那你需要注意一些问题。

21. OK,我试过了,但我想安装可能要化很长时间,所以我就去睡觉了,让它自己继续安装。当我今天早上去看的时候,它只安装了三个半的port。到底发生了什么错误?

没有,问题是有一些port需要问你一些我们无法回答你的问题。(如:“Do you want to print on A4US letter sized paper?”),必须要手工回答这些问题。

22. 我真的不想整天待在显示器前,有更好的主意吗?

Ok,在你睡觉/工作/逛公园之前,可以这样做:

# cd /usr/ports

# make -DBATCH install

这样就会安装每个port,而不需要用户输入任何东西。当你回来后就完成了工作:

# cd /usr/ports

# make -DINTERACTIVE install

23. 在工作中,我们使用frobble,但我们想按我们的要求作一些修改。有办法制作我们自己的package吗,以便可以更容易地在我们的网站上发布?

没有问题,假定你知道如何打补丁:

# cd /usr/ports/somewhere/frobble

# make extract

# cd work/frobble-2.8

[Apply your patches]

# cd ../..

# make package

24. 这个port真的很聪明。我急切地想知道你是如何做的。有什么秘密吗?

根本就没什么秘密,你只要看看/usr/ports/Mk目录bsd.port.mkbsd.port.subdir.mk的文件。(对于这些复杂的shell脚本感到厌恶的读者建议不要看这个目录下的文件)。

4.6.2. 帮助!Port损坏了 

如果你遇到port不能用了,可以这样做:

1.         修复它!Porter的使用手册(http://www.FreeBSD.org/porters-handbook/index.html)包含了在“Ports”时的很多细节信息,所以你可以参考它修复损坏的port或者提交你自己做的port

2.         遇到困难时,可以通过email寻求帮助!先给port的维护者发一封email。输入make maintainer或读一下Makefile文件找到维护者的email地址。记住要包括这个port的名称和版本,还有遇到的错误。如果你没有得到维护者的回复,你可能要使用send-pr命令提交一个错误报告。

3.         可以从你附近的ftp站点上下载一些升级包。主力站点是ftp.freebsd.org,在它的Packages 目录中有很多主要的软件包。但你最好先检查一下当地的镜像站点!因为这样工作起来可能要快一点。使用pkg_add程序将这些软件包安装到你的系统。