如何在 FreeBSD 10.1 上安装和管理端口

介绍

FreeBSD是一个功能强大的操作系统,能够在各种各样的角色中发挥作用。在许多情况下,该操作系统的理想选择之一是其灵活性的声誉。

在本指南中,我们将讨论端口系统的一些好处,并展示如何使用它来获取和管理额外的软件,我们将涵盖如何使用命令安装,如何定制您的应用程序,以及如何利用一些常见的工具来简化端口维护。

<$>[注] 注: 截至 2022 年 7 月 1 日,DigitalOcean 不再支持通过控制面板或 API 创建新的 FreeBSD Droplets。

前提条件

要遵循本指南,您应该可以访问 FreeBSD 10.1 服务器和具有sudo权限的非根用户帐户。

管理 FreeBSD 软件的不同类型

FreeBSD 团队将 FreeBSD 操作系统作为一个一致的单元进行维护,其组件使用一个名为freebsd-update的工具进行更新,其行为主要通过位于/etc目录中的配置文件进行控制。

相比之下,可选软件是通过在文件系统中使用不同的流程、工具和位置进行管理的。 与基系统中的软件不同,可选软件是在 /usr/local/etc 目录中配置的。

在本指南中我们将描述的端口系统是通过位于/usr/ports的文件系统等级来管理的,该系统分类了 FreeBSD 知道如何构建的每个可用软件。在这个目录中,第一级子目录主要根据功能或语言来分类软件。在这些目录中,每个单独的软件都存在文件夹。软件可以通过简单的make命令或可用的辅助工具下载、配置、编译和安装。

系统支持的另一种安装类型是 packages ,它们是从端口集合中编译的软件二进制,使用合理的默认值。这是快速获取软件的好方法,但它失去了端口系统提供的定制水平。

准备港口树

端口树是/usr/ports目录下存在的层次结构名称,该层次结构包含与端口类别相符的目录,其中包含与个别端口相符的其他目录。

在我们开始操纵任何端口之前,我们应该确保此等级是最新的. 忘记更新端口等级可能会导致构建失败,因为端口试图检索和构建可能不再有效的文件。

我们可以使用一个名为portsnap的实用程序来更新端口树,该工具会查询 FreeBSD 端口服务器的更改。

记录我们最后的更新

在我们执行实际更新命令之前,我们需要在我们的端口树内的特定文件上注意到时刻印,称为 /usr/ports/UPDATING. 我们可以使用stat工具查看与文件相关的各种时刻印:

1stat -x /usr/ports/UPDATING

你应该看到这样的输出:

1File: "UPDATING"
2  Size: 375337 FileType: Regular File
3  Mode: (0644/-rw-r--r--)         Uid: (    0/    root)  Gid: (    0/   wheel)
4Device: 0,81 Inode: 2011338 Links: 1
5Access: Thu Dec 11 22:24:59 2014
6Modify: Thu Dec 11 15:40:12 2014
7Change: Thu Dec 11 22:24:59 2014

相反,您可能會收到這樣的錯誤:

1stat: /usr/ports/UPDATING: stat: No such file or directory

如果你看到这个,这意味着你没有在你的系统上初始化一个端口树. 如果是这样的情况,继续到下一节学习如何将一个初始的端口树提取到你的系统使用portsnap

我们要注意的值是更改更改时间,这些时间在上面的输出中被突出。在这种情况下,更改时间标签将是端口维护者最近修改文件的重要信息的时间标签。

我们需要记住时刻印,以便我们知道在我们刷新我们的端口树后我们需要注意哪些更新笔记。

1stat -x /usr/ports/UPDATING > ~/last_update

现在我们已经记录了这些信息,我们可以继续更新我们的港口树。

使用 Portsnap 更新 Ports Tree

一旦您对端口树上次更新时间有了很好的了解,您就可以将端口树同步到 FreeBSD 项目网站的最新信息。

如果您在 /usr/ports 目录中没有任何信息(如果您遇到我们在上一节提到的错误),您可以下载并提取整个端口树到该目录中使用 portsnap. 这个过程可能需要很长时间,但只有在您的 /usr/ports 目录是空的,这种情况应该只发生一次。

1sudo portsnap fetch extract

这将下载并将整个端口树提取到 /usr/port 目录中。

如果您已经在/usr/ports目录中建立了端口树(如果您能够在最后一节中记录时刻印记),则可以使用此命令将文件更新到最新的版本:

1sudo portsnap fetch update

此命令只会提取那些与 /usr/port 结构中的文件不同的文件,因此比命令的 提取' 变体需要更少的时间。

一旦您的端口树建立或更新,您可以开始在系统上管理和使用端口。

搜索应用程序的港口树

现在,您在系统上已经更新了端口树等级,您可以开始查看可用的软件,有几种方法可以做到这一点,每个方法都有其优点。

搜索在哪里

搜索应用程序的最简单的方法是使用whereis命令以名称进行搜索,这将搜索您的系统上的命令,并在端口树中搜索。

通常情况下,如果应用程序没有安装,但搜索是一个有效的端口,它会返回端口树内的端口路径。

例如,我们可以通过键入以下方式搜索wget实用程序:

1whereis wget

如果端口没有安装,我们会看到这样的东西:

1wget: /usr/ports/ftp/wget

由于路径从/usr/port开始,我们知道这是一个可安装的端口,如果我们想要安装该端口,我们可以使用返回的路径。

如果wget命令已经安装,我们可能会看到这样的输出:

1wget: /usr/local/bin/wget /usr/local/man/man1/wget.1.gz /usr/ports/ftp/wget

这包括通往实际安装的可执行文件的路径、应用程序的页面文件以及端口树内的端口位置。

使用echo命令在文件系统等级中搜索

FreeBSD 手册中,作者还建议使用只使用Echo命令和端口树的内置结构进行搜索。

在文件系统中,每个端口都由一个单独的目录代表,其中包含构建和在FreeBSD系统上安装软件所需的所有信息。

为了协助组织,这些端口在 /usr/ports 中的类别目录中按函数组合。所以在上面的 wget 示例中,我们看到 wget 命令已被分类到 ftp 组中。

我们可以通过使用Echo命令和Wildcards来利用这种一致的结构,因为我们可能不知道端口将存在的类别,所以我们会用星座代替该目录级别,我们也可以在我们的搜索术语之前和之后将这些设置,如果我们想在我们的匹配中更灵活,所以我们可以通过键入wget相关的程序搜索:

1echo /usr/ports/*/*wget*

这将返回类似于此的东西:

1/usr/ports/ftp/gwget /usr/ports/ftp/wget /usr/ports/www/ruby-wgettsv /usr/ports/www/wgetpaste

这可能比whereis命令更灵活,因为它不需要准确的匹配。

使用可用的目标进行搜索

搜索端口的最强大方法是使用创建命令。

这也是用于在系统上构建和安装端口的命令,但更一般来说是一种灵活的工具,可以用来轻松执行在配置文件中定义的复杂任务。

要使用此功能,您必须先移动到端口树的底部,这里定义了目标:

1cd /usr/ports

执行搜索的通用语法是:

1make [search|quicksearch] [searchtype]=[searchquery] [modifiers]

旨在搜索端口树的两个目标是搜索快速搜索,它们具有完全相同的功能,仅在默认显示上有所不同。

搜索目标将返回有关端口名称、端口树中的路径、一般描述,然后返回有关构建的详细信息,包括维护者电子邮件、构建依赖、运行依赖和上游 URL。

搜索类型可以是以下任何一种:

  • 名称 :只搜索端口的名称字段。
  • 关键 :搜索端口的名称、评论和依赖字段。
  • path :搜索端口等级中的特定路径。
  • info :搜索端口的信息(描述)字段。
  • maint :搜索维护者电子邮件地址。
  • cat :根据端口类别进行搜索。

例如,如果您的搜索包含「xname=apache」,则不会返回任何具有名称字段中的字符串「apache」的端口。

下面,你可以看到搜索快速搜索目标的输出差异。

1make search name=htop
1Port:   htop-1.0.3
2Path:   /usr/ports/sysutils/htop
3Info:   Better top(1) - interactive process viewer
4Maint:  [email protected]
5B-deps: autoconf-2.69 autoconf-wrapper-20131203 automake-1.14_1 automake-wrapper-20131203 gettext-runtime-0.19.3 indexinfo-0.2.2 libexecinfo-1.1_3 libffi-3.0.13_3 libiconv-1.14_6 m4-1.4.17_1,1 ncurses-5.9.20141213 perl5-5.18.4_11 python2-2_3 python27-2.7.9 readline-6.3.8
6R-deps: libexecinfo-1.1_3 lsof-4.89.b,8 ncurses-5.9.20141213
7WWW:    http://htop.sourceforge.net/

另一方面,快速搜索目标只显示了它找到的匹配的基本信息:

1make quicksearch name=htop
1Port:   htop-1.0.3
2Path:   /usr/ports/sysutils/htop
3Info:   Better top(1) - interactive process viewer

例如,如果我们要搜索ntop网络监视器,我们可能会看到这样的结果:

1make quicksearch name=ntop
 1Port:   ntopng-zmq-3.2.3_1
 2Path:   /usr/ports/devel/ntopng-zmq
 3Info:   NTOPNG specific ZMQ library
 4
 5Port:   diveintopython-5.4_1
 6Path:   /usr/ports/lang/diveintopython
 7Info:   Free Python tutorial book that is "not For Dummies(tm)"
 8
 9Port:   ntop-5.0.1_8
10Path:   /usr/ports/net/ntop
11Info:   Network monitoring tool with command line and web interfaces
12
13Port:   ntopng-1.2.1_1
14Path:   /usr/ports/net/ntopng
15Info:   Network monitoring tool with command line and web interfaces
16
17Port:   sntop-1.4.3_1
18Path:   /usr/ports/net/sntop
19Info:   Monitor status of network nodes using fping

在这里,我们可以看到大多数结果与ntop有关,但我们还有一本关于学习Python的书,我们可以通过添加路径规格来进一步过滤:

1make quicksearch name=ntop path=/net
 1Port:   ntop-5.0.1_8
 2Path:   /usr/ports/net/ntop
 3Info:   Network monitoring tool with command line and web interfaces
 4
 5Port:   ntopng-1.2.1_1
 6Path:   /usr/ports/net/ntopng
 7Info:   Network monitoring tool with command line and web interfaces
 8
 9Port:   sntop-1.4.3_1
10Path:   /usr/ports/net/sntop
11Info:   Monitor status of network nodes using fping

我们还可以以几种不同的方式修改搜索的行为,一些有效的修改者是:

  • icase :将此设置为1以启用案例不敏感性。 此为默认值。 若要使搜索情形敏感,请将此设置为0
  • display : 此包含一个字符串分开的字段列表,可在输出中显示。
  • keylim : 限制搜索(使用关键搜索类型)仅限于所显示的字段。

例如,我们可以通过输入输入搜索含有Paste字符串的描述或路径:

1make search key=Paste display=path,info keylim=1 icase=0
 1Path:   /usr/ports/devel/pear-SebastianBergmann_PHPCPD
 2Info:   Copy/Paste Detector (CPD) for PHP code
 3
 4Path:   /usr/ports/devel/py-zope.copypastemove
 5Info:   Copy, Paste, and Move support for content components
 6
 7Path:   /usr/ports/german/bsdpaste
 8Info:   Pastebin web application to upload and read text on a webserver
 9
10Path:   /usr/ports/www/p5-WWW-Pastebin-PastebinCom-Create
11Info:   Paste to http://pastebin.com from Perl
12
13Path:   /usr/ports/www/p5-WebService-NoPaste
14Info:   Pastebin web application to upload snippets of text
15
16Path:   /usr/ports/www/py-django-dpaste
17Info:   Pastebin Django application that powers dpaste.de
18
19Path:   /usr/ports/www/wgetpaste
20Info:   Paste to several pastebin services via bash script

您在搜索中可能遇到的另一个情况是已移动或删除的端口。

1make quicksearch name=wget
 1. . .
 2
 3Port:   ftp/emacs-wget
 4Moved:
 5Date:   2011-05-02
 6Reason: Has expired: Upstream disappeared and distfile is no longer available
 7
 8Port:   ftp/wgetpro
 9Moved:
10Date:   2011-10-14
11Reason: Vulnerable since 2004-12-14
12
13Port:   www/wget4web
14Moved:
15Date:   2012-01-01
16Reason: Has expired: Depends on expired www/apache13

如果一个端口已移动到一个新的位置,则移动字段将包含可以找到端口的新位置;如果这个字段存在但空,则该端口已被删除。

即使这些被删除,它们仍然会出现在搜索结果中. 如果您希望防止移动或删除的端口出现,您可以将环境变量PORTSEARCH_MOVED设置为0

例如,要将此变量设置为0仅用于以下命令,使用默认 tcsh,我们可以键入:

1env PORTSEARCH_MOVED=0 make quicksearch name=wget
 1Port:   gwget-1.0.4_9
 2Path:   /usr/ports/ftp/gwget
 3Info:   GNOME wget front-end
 4
 5Port:   wget-1.16
 6Path:   /usr/ports/ftp/wget
 7Info:   Retrieve files from the Net via HTTP(S) and FTP
 8
 9Port:   ruby20-ruby-wgettsv-0.95
10Path:   /usr/ports/www/ruby-wgettsv
11Info:   Collect WWW resources and generate TSV data
12
13Port:   wgetpaste-2.25
14Path:   /usr/ports/www/wgetpaste
15Info:   Paste to several pastebin services via bash script

正如你所看到的,所有已经移动或删除的条目现在被过滤出我们的结果. 如果你想使这是默认的行为,你可以设置 PORTSEARCH_MOVED=0在你的 make.conf 文件:

1sudo sh -c 'echo "PORTSEARCH_MOVED=0" >> /etc/make.conf'

使用 Make 安装端口

一旦你找到了你想要安装的端口,你可以轻松下载所需的文件,构建二进制,并使用命令安装它。

要安装一个端口,请转到端口树内的端口目录. 您可以通过上述任何搜索方法找到这个位置. 为了证明这一点,我们将安装一个名为portmaster的端口,我们将在本指南晚些时候需要。

首先,更改到端口位置. portmaster 端口保留在 ports-mgmt 类别中:

1cd /usr/ports/ports-mgmt/portmaster

现在,我们可以轻松下载、配置、编译和安装该端口,使用make目标,因为这些操作会影响我们的系统,我们需要使用sudo

1sudo make config
2sudo make fetch
3sudo make checksum
4sudo make depends
5sudo make extract
6sudo make patch
7sudo make configure
8sudo make build
9sudo make install

我们可以通过单个命令之后列出每个目标来缩短这一点:

1sudo make config fetch checksum depends extract patch configure build install

然而,这几乎总是不必要的。上面列出的每个目标都会调用任何前面的目标,以便完成任务。

1sudo make install

通常,我们希望在安装目标之前稍微扩展这个命令链,以确保我们正确配置了一切。我们通常希望在安装目标之前指定config-recursive,这不是上面的管道中的一个选项,以便在安装开始时负责这个端口的配置和任何依赖。

我们通常还想在安装后稍微清理,以恢复磁盘空间并保持系统清洁。我们可以用清洁清洁的目标来做到这一点。清洁的目标会删除用于构建这个端口和任何依赖端口的提取源代码。

因此,典型的安装命令可能看起来像这样:

1sudo make config-recursive install distclean

这将提示您在流程开始时配置端口和任何依赖性。之后,它将下载并验证源档案的完整性。然后它将更改背景以满足任何缺失的依赖性。当该过程完成时,它将返回所涉及的端口,提取档案,应用任何必要的补丁,并根据您选择的选项进行配置。然后它将编译应用程序并在您的系统上安装。之后,它将删除该端口的扩展源代码和任何依赖性。

/usr/ports/ports-mgmt/portmaster 目录中执行上述命令:

1sudo make config-recursive install distclean

如果您正在使用列出的壳之一,您可以选择在这里配置工具的壳完成:

FreeBSD port config

portmaster端口没有任何依赖性,但如果有,依赖性配置选项将在目标端口配置后直接呈现。

如果您正在使用默认 tcsh,则您将在每次安装后重新扫描 PATH,以便您的壳环境知道所有安装的应用程序:

1rehash

如果上述过程成功,您已经成功安装了第一个端口。

虽然主要操作系统和配置是在常规位置完成的,但通过端口系统安装的可选软件安装在/usr/local等级中。

这意味着,要配置可选软件,您将不得不在/usr/local/etc目录中查看。 执行程序本身主要保存在/usr/local/bin/usr/local/sbin目录中。

关于作为服务运行的应用程序的注意事项

要记住的一点是,如果你正在安装一个作为服务运行的端口,安装程序不会自动启动该服务,事实上,你必须采取几步来启动 FreeBSD 中的服务。

如果您想要一次启动服务,您可以通过键入:

1sudo service servicename onestart

例如,要启动MySQL,您可以键入:

1sudo service mysql-server onestart

假设任何必要的配置已经完成,这将启动服务一次. 如果您希望以更晚的时间停止服务,您可以键入:

1sudo service mysql-server onestop

虽然这适用于快速测试,但不是在FreeBSD中管理服务的理想方式. 要将您的服务配置为在每次启动时启动,您必须启用它。

指定可选服务如何启动的 init 文件存储在 /usr/local/etc/rc.d 目录中. 在每个 init 文件中,一个名为 rcvar’ 的变量告诉 init 系统在 `/etc/rc.conf 文件中的变量,以确定是否要启动该服务。

1grep rcvar /usr/local/etc/rc.d/*

您将收到一个看起来像这样的列表:

1/usr/local/etc/rc.d/avahi-daemon:rcvar=avahi_daemon_enable
2/usr/local/etc/rc.d/avahi-dnsconfd:rcvar=avahi_dnsconfd_enable
3/usr/local/etc/rc.d/dbus:rcvar=dbus_enable
4/usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable

突出的输出部分显示了我们需要将变量设置为YES以启用每个服务。

例如,要启用rsync交响器服务,我们可以将此行添加到/etc/rc.conf:

1rsyncd_enable="YES"

在使用正常服务管理命令之前,适当的行必须在 /etc/rc.conf 文件中。

1sudo sh -c "echo 'rsyncd_enable="YES"' >> /etc/rc.conf"

这将导致 rsync daemon 每次启动都启动。你现在可以使用服务命令而不使用前缀来控制服务。

1sudo service rsyncd start

您可以通过键入再次停止服务:

1sudo service rsyncd stop

删除已安装的端口

如果您已安装了您不再需要的端口,您可以使用类似但更简单的过程从系统中删除该应用程序。

我们可以使用卸载目标从我们的系统中删除应用程序. 再次,更改与您想要删除的应用程序相关的端口树中的目录:

1cd /usr/ports/ports-mgmt/portmaster

您可以通过键入从您的系统中删除应用程序:

1sudo make deinstall

如果您还想删除您为此端口配置的选项,则可以通过键入:

1sudo make rmconfig

若要删除此端口及其所有依赖的配置选项,请键入:

1sudo make rmconfig-recursive

如果您使用上面的命令删除了portmaster,请通过键入重新安装它:

1sudo make reinstall distclean

应用程序更新

现在你知道如何安装或删除程序,我们应该展示如何保持应用程序的最新。

检查更新文件,查找重要更新笔记

在本指南开始时,我们为 /usr/ports/UPDATING’ 文件保存了时刻印,然后使用 portsnap’ 来更新我们的端口树。

該「/usr/ports/UPDATING」檔案包含關於系統管理員可能需要額外手動步驟的更新和變更的關於端口維護者的重要注意事項。 未能閱讀此檔案並在更新應用程式之前執行其建議,可能會讓您的系統無法使用或影響您的應用程式的功能。

首先,检查我们在我们的主目录中保存到文件的时刻印:

1cat ~/last_update
1File: "/usr/ports/UPDATING"
2  Size: 375337 FileType: Regular File
3  Mode: (0644/-rw-r--r--)         Uid: (    0/    root)  Gid: (    0/   wheel)
4Device: 0,81 Inode: 2011338 Links: 1
5Access: Thu Dec 11 22:24:59 2014
6Modify: Thu Dec 11 15:40:12 2014
7Change: Thu Dec 11 22:24:59 2014

请记住,修改时间标记表示我们系统上的更新文件是由端口维护者修改的最后一次,而更改时间标记表示我们最后一次同步的时间。

现在打开更新的更新文件:

1less /usr/ports/UPDATING

文件将看起来有点像这个:

 1This file documents some of the problems you may encounter when upgrading
 2your ports. We try our best to minimize these disruptions, but sometimes
 3they are unavoidable.
 4
 5You should get into the habit of checking this file for changes each time
 6you update your ports collection, before attempting any port upgrades.
 7
 820150101:
 9  AFFECTS: users of net/unison and net/unison-nox11
10  AUTHOR: [email protected]
11
12  Unison has been upgraded to version 2.48, which uses a different wire
13  protocol than 2.40 did. In order to support synchronization with
14  other computers where Unison is still at version 2.40, a new port
15  net/unison240 has been created. It provides unison240 and if that is
16  GTK2-enabled, also unison240-text. This unison240 port can be
17  installed in parallel with the existing net/unison port.
18
1920141230:
20  AFFECTS: users of deskutils/xpad
21  AUTHOR: [email protected]
22
23  deskutils/xpad has been moved to deskutils/xpad3, since 4.x has been around
24  for a while.
25
26  Should you wish to stick with legacy branch at this time;
27
28  # portmaster -o deskutils/xpad deskutils/xpad3
29
30. . .

此檔案包含每個可用端口的每個潛在的突破性變更,直到2008年。

  • 自上次更新您的端口以来已添加
  • 包括您在您的系统上安装的端口

因此,对于这个例子,我们只需要注意自12月11日以来添加的通知,涉及我们安装的端口. 如果您不知道在您的系统上安装了哪些端口,您可以使用portmaster创建一个完整的列表:

1portmaster -l
 1===>>> Root ports (No dependencies, not depended on)
 2===>>> dialog4ports-0.1.5_2
 3===>>> pkg-1.4.0
 4===>>> pkgconf-0.9.7
 5===>>> portmaster-3.17.7
 6===>>> rsync-3.1.1_3
 7===>>> 5 root ports
 8
 9===>>> Trunk ports (No dependencies, are depended on)
10===>>> ca_root_nss-3.17.3_1
11===>>> expat-2.1.0_2
12
13. . .

输出将根据它们的依赖关系分成部分,使用此信息来检查更新笔记。

如果需要任何手动步骤,请完成这些步骤,然后继续进行其余的更新。

检查已知漏洞

更新时要注意的另一个考虑是,安装在您的系统上的软件是否有已知的安全漏洞。

FreeBSD 维护了一个漏洞数据库,您可以检查您的任何端口或包是否存在安全问题。此功能包含在pkg工具中。

1sudo pkg audit -F

这将从FreeBSD项目的服务器下载最新版本的漏洞数据库,然后检查安装的所有端口或包的版本,并将其与安全数据库中的条目进行比较。

如果您系统上安装的任何端口或包存在数据库中已知的漏洞,您将被警告。

下面我们将讨论如何更新系统上的所有端口,或者只是一个子集,无论您的更新策略如何,您必须至少更新已知安全漏洞的端口。

更新已安装的端口

一旦您完成了在更新文件中描述的任何手动步骤,您可以更新您的软件。

要查看哪些端口有可用的更新,您可以使用带有-L旗的portmaster命令:

1portmaster -L
 1===>>> Root ports (No dependencies, not depended on)
 2===>>> dialog4ports-0.1.5_2
 3===>>> pkg-1.4.0
 4        ===>>> New version available: pkg-1.4.3
 5===>>> pkgconf-0.9.7
 6===>>> portmaster-3.17.7
 7===>>> rsync-3.1.1_3
 8===>>> 5 root ports
 9
10===>>> Trunk ports (No dependencies, are depended on)
11===>>> ca_root_nss-3.17.3_1
12===>>> expat-2.1.0_2
13
14. . .
15
16===>>> 44 total installed ports
17        ===>>> 4 have new versions available

这提供了与我们之前使用的选项的低端变体类似的输出,但它也检查了可用的更新。在这里,我们可以看到‘pkg’端口有一个新的版本。

若要升级单个端口,您可以进入端口树内的端口目录位置并重新安装新版本的软件:

1sudo make deinstall reinstall

你也可以用portmaster命令做同样的事情,你必须提供类别和端口名称,例如,要升级wget命令,我们可以输入:

1sudo portmaster ftp/wget

许多来自其他背景的用户发现portmaster比使用我们上面描述的make目标更为熟悉的软件管理体验。

虽然可以独立升级端口,但通常最好同时更新所有软件。

1sudo portmaster -a

这将更新系统上的所有端口到其最新版本. 任何新的配置选项将在过程的开始时向您呈现. 如果您有任何已安装的「pkg」和通过端口系统可用的更新的版本的包,这些都将更新并过渡到端口。

结论

到目前为止,您应该对在 FreeBSD 系统上如何使用端口有很好的了解. 端口非常灵活,允许您轻松地自定义您的服务器上的大多数应用程序。

许多管理员欢迎在编译时间和增加控制之间进行交易,但您的需求可能会有所不同. 然而,无论您在 FreeBSD 上使用的软件策略如何,了解端口系统都是很好的投资。

Published At
Categories with 技术
comments powered by Disqus