介绍
FreeBSD是一个强大的操作系统,能够在各种角色中运行。 在许多场景中,这种操作系统的理想选择是其灵活性的声誉。 这个名声大贡献来自FreeBSD的从源,被称为端口的系统安装软件支持的方法。
在本指南中,我们将讨论ports系统的一些优点,并将演示如何使用它来获取和管理附加软件。 我们将介绍如何使用安装make
命令,如何自定义您的应用程序,以及如何利用一些常用工具,使港口维护更加方便。
先决条件
为了本指南跟着,你应该有机会获得一台FreeBSD服务器10.1和非root用户帐户sudo
权限。 这个指南可以帮助您登录到您的FreeBSD服务器,并建立合理的工作环境。
管理不同类型的FreeBSD软件
FreeBSD团队将基本的FreeBSD操作系统作为一个连贯的单元。 它的部件都采用一种称为工具更新freebsd-update
和他们的行为主要是通过位于内的配置文件控制/etc
目录中。 虽然您可以安装和使用捆绑软件的替代软件,但是您无法轻松或安全地删除包含在基本系统中的软件,因为这些被视为操作系统的功能必不可少的组成部分。
相比之下,可选软件使用不同的进程,工具和文件系统中的位置来管理。 不像从基础系统软件,可选软件在配置中/usr/local/etc
的目录。 FreeBSD提供了两种批准的方法,用于在系统上下载和安装附加软件。
ports系统,我们将在本指南中描述的,是通过位于一个文件系统层次管理/usr/ports
的分类每个可用的软件,FreeBSD下知道如何建立。 在此目录中,第一级子目录主要根据功能或语言对软件进行分类。 在这些目录中,每个单独的软件都存在文件夹。 软件可以下载,配置,编译并安装或者通过简单的make
命令或通过提供辅助工具。 ports集合中的软件包括在FreeBSD系统上构建和运行应用程序所需的所有补丁。
另一种类型的系统支持安装包是,这是利用合理的默认端口集合编译软件二进制文件。 这是一种快速获取软件的好方法,但它会丧失由ports系统提供的定制级别。 您可以了解更多有关如何管理软件包本指南 。
预处理端口树
港口树是存在的下方的层次结构的名称/usr/ports
目录。 此层次结构包含与端口类别相对应的目录,其中包含与各个端口对应的其他目录。
在我们开始操作任何端口之前,我们应该确保这个层次结构是最新的。 忘记刷新端口层次结构可能导致构建失败,因为端口尝试提取和构建可能不再有效的文件。
我们可以更新使用了一个叫ports树portsnap
。 此工具查询FreeBSD ports服务器的更改。
注意我们的最后更新
之前我们执行的实际更新命令,我们需要注意的时间戳对我们所谓的ports树中的特定文件/usr/ports/UPDATING
。 我们可以用stat
工具来查看与该文件相关的各种时间戳:
stat -x /usr/ports/UPDATING
您应该看到如下所示的输出:
File: "UPDATING"
Size: 375337 FileType: Regular File
Mode: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ wheel)
Device: 0,81 Inode: 2011338 Links: 1
Access: Thu Dec 11 22:24:59 2014
Modify: Thu Dec 11 15:40:12 2014
Change: Thu Dec 11 22:24:59 2014
有一个机会,你会收到一个错误,像这样:
stat: /usr/ports/UPDATING: stat: No such file or directory
如果你看到这个,这意味着你没有在你的系统上初始化一个ports树。 如果是这种情况,请继续到下一个部分,了解如何使用提取初始端口树到您的系统portsnap
。
我们要注意的值是“修改”和“更改”时间,这在上面的输出中突出显示。 在这种情况下,“修改”时间戳将是端口维护者使用重要信息修改文件的最近时间。 “更改”时间戳将是文件最后一次同步到您的服务器。
我们需要记住时间戳,以便我们知道在刷新ports树之后需要注意哪些更新注释。 我们可以通过键入以下内容将它们保存到我们的主目录中的文件:
stat -x /usr/ports/UPDATING > ~/last_update
现在我们已经记录了这些信息,我们可以更新我们的ports树。
使用Portsnap更新端口树
一旦你了解ports树最后一次更新的时间,你可以将ports树与FreeBSD项目网站的最新信息同步。 要做到这一点,我们将使用一个名为工具portsnap
。
如果你没有在任何信息/usr/ports
目录(如果你遇到了我们在上一节中提到的错误),您可以下载并解压整个端口树与该目录portsnap
。 这个过程可能需要相当长的时间,但如果你只需要/usr/ports
目录是空的,这种情况只能发生一次。 如果您的FreeBSD服务器在DigitalOcean上,您的ports树应该已经初始化:
sudo portsnap fetch extract
这将下载并解压整个端口树中/usr/ports
目录。
如果你已经有建在一个ports树/usr/ports
目录(如果你能够记录在最后一节的时间戳),您可以更新文件的最新版本使用下面的命令:
sudo portsnap fetch update
此命令将只能提取那些来自内部的那些不同的文件/usr/ports
结构,因此将需要显著的时间少于extract
命令的变体。 这是应在端口树的日常更新中使用的格式。
一旦构建或更新了端口树,就可以开始管理和使用系统上的端口。
搜索应用程序的端口树
现在您的系统上有一个更新的端口树层次结构,您可以开始查看您可用的软件。 有几种方法可以做到这一点,每种方法都有其优点。
与搜索whereis
搜索应用程序的最简单的方法是通过使用名称whereis
命令。 这将搜索您的系统上和ports树中的命令。 如果找到匹配项,它将返回系统上应用程序的相关路径信息。
通常,如果应用程序未安装,但是搜索是针对有效的端口,则它将返回端口树中的端口的路径。 如果安装了应用程序,它通常的路径返回可执行文件,港口,而且往往是man
页:
例如,我们可以搜索wget
通过键入此实用程序:
whereis wget
如果端口没有安装,我们会看到这样:
wget: /usr/ports/ftp/wget
由于路径开头/usr/ports
,我们知道这是一个可安装的端口。 如果我们希望安装这个端口,我们可以使用返回的路径。
如果wget
已安装的命令,我们可能会看到输出如下:
wget: /usr/local/bin/wget /usr/local/man/man1/wget.1.gz /usr/ports/ftp/wget
这包括路径实际安装的可执行,该man
为应用程序页面文件,ports树中的端口的位置。
搜索使用echo
在文件系统层次命令
在FreeBSD使用手册 ,作者还建议只使用搜索的一个相当新颖的方式echo
命令和ports树的内置结构。
ports树设置的所有下的有关文件和目录/usr/ports
目录。 在文件系统中,每个端口由一个不同的目录表示,其中包含在FreeBSD系统上构建和安装软件所需的所有信息。
为了帮助组织,这些端口按功能分类的文件夹内分组内/usr/ports
。 所以在wget
上面的例子中,我们看到wget
命令已在内部分类ftp
基。 因此, /usr/ports
目录包含的类别目录,反过来,包含端口目录。
我们可以通过使用的利用此一致的结构echo
命令和通配符。 因为我们可能不知道端口将存在的类别,我们将用星号替换该目录级别。 如果我们希望在我们的匹配中更灵活,我们也可以把它们放在我们的搜索项之前和之后。 因此,我们可以搜索wget
通过输入相关的程序:
echo /usr/ports/*/*wget*
这将返回类似于这样的东西:
/usr/ports/ftp/gwget /usr/ports/ftp/wget /usr/ports/www/ruby-wgettsv /usr/ports/www/wgetpaste
这可以比更灵活一点whereis
命令,因为它不需要完全匹配。
搜索使用可用make
目标
搜索端口的最有力的方式就是使用make
命令。
这也是用于在系统上构建和安装端口的命令,但更通常是一个灵活的工具,可用于轻松执行已在配置文件中定义的复杂任务。 FreeBSD的开发者已经创建了make
“指标”(任务定义),将执行搜索端口树不同的标准。
要使用此功能,必须先移动到ports树的基址。 这就是make
的定义目标:
cd /usr/ports
执行搜索的一般语法是:
make [search|quicksearch] [searchtype]=[searchquery] [modifiers]
这两个make
用于搜索ports树目标是search
和quicksearch
。 这些具有完全相同的功能,仅在它们的默认显示方面不同。
在search
目标将在港口树返回的信息有关端口的名称,路径,一般的描述,然后详细关于构建包括维护者电子邮件,建立依赖关系,运行依赖,和上游的URL。 在quicksearch
目标只返回端口名称,路径和描述。
搜索类型可以是以下任何一种:
- 名称 :仅在港口的名称字段进行搜索。
- 键 :名称,注释中搜索,依赖港口的领域。
- 路径 :端口层次结构中搜索特定的路径。
- 信息 :端口的信息(描述)字段中进行搜索。
- MAINT:维护者的电子邮件地址搜索。
- 猫 :基于端口的分类搜索。
- bdeps:搜索每个端口的构建时依赖。
- rdeps:搜索每个端口的运行时依赖关系。
- WWW:搜索端口网站。
您还可以在上述任何类别之前添加“x”,以删除满足匹配的结果。 例如,如果你搜索包括xname=apache
,即在其名称字段中的字符串“Apache”将不予退还任何端口。
让我们来看一些简单的例子。 下面,你可以看到的输出的差异search
和quicksearch
目标。 在search
目标包括有关比赛的详细情况:
make search name=htop
Port: htop-1.0.3
Path: /usr/ports/sysutils/htop
Info: Better top(1) - interactive process viewer
Maint: gaod@hychen.org
B-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
R-deps: libexecinfo-1.1_3 lsof-4.89.b,8 ncurses-5.9.20141213
WWW: http://htop.sourceforge.net/
在另一方面, quicksearch
目标仅显示有关它找到比赛的基本信息:
make quicksearch name=htop
Port: htop-1.0.3
Path: /usr/ports/sysutils/htop
Info: Better top(1) - interactive process viewer
可以组合不同的搜索类型来缩小搜索结果范围。 例如,如果我们要搜索ntop
网络监控,我们可能会看到的结果是这样的:
make quicksearch name=ntop
Port: ntopng-zmq-3.2.3_1
Path: /usr/ports/devel/ntopng-zmq
Info: NTOPNG specific ZMQ library
Port: diveintopython-5.4_1
Path: /usr/ports/lang/diveintopython
Info: Free Python tutorial book that is "not For Dummies(tm)"
Port: ntop-5.0.1_8
Path: /usr/ports/net/ntop
Info: Network monitoring tool with command line and web interfaces
Port: ntopng-1.2.1_1
Path: /usr/ports/net/ntopng
Info: Network monitoring tool with command line and web interfaces
Port: sntop-1.4.3_1
Path: /usr/ports/net/sntop
Info: Monitor status of network nodes using fping
在这里,我们可以看到,大部分的结果都相关ntop
,但我们也有一本关于学习Python的。 我们可以通过添加路径规范进一步过滤:
make quicksearch name=ntop path=/net
Port: ntop-5.0.1_8
Path: /usr/ports/net/ntop
Info: Network monitoring tool with command line and web interfaces
Port: ntopng-1.2.1_1
Path: /usr/ports/net/ntopng
Info: Network monitoring tool with command line and web interfaces
Port: sntop-1.4.3_1
Path: /usr/ports/net/sntop
Info: Monitor status of network nodes using fping
我们还可以以几种不同的方式修改搜索的行为。 一些有效的修饰符是:
- ICASE:将其设置为“1”开启不区分大小写。 这是默认值。 要使搜索区分大小写,请将其设置为“0”。
- 显示 :这包含的字段,以逗号分隔的列表,在输出显示。
- keylim:限制只显示那些字段搜索(使用“钥匙”搜索类型)。 将其设置为“1”可将其打开。
例如,我们可以通过键入以下内容来搜索包含大写字符串“Paste”的描述或路径:
make search key=Paste display=path,info keylim=1 icase=0
Path: /usr/ports/devel/pear-SebastianBergmann_PHPCPD
Info: Copy/Paste Detector (CPD) for PHP code
Path: /usr/ports/devel/py-zope.copypastemove
Info: Copy, Paste, and Move support for content components
Path: /usr/ports/german/bsdpaste
Info: Pastebin web application to upload and read text on a webserver
Path: /usr/ports/www/p5-WWW-Pastebin-PastebinCom-Create
Info: Paste to http://pastebin.com from Perl
Path: /usr/ports/www/p5-WebService-NoPaste
Info: Pastebin web application to upload snippets of text
Path: /usr/ports/www/py-django-dpaste
Info: Pastebin Django application that powers dpaste.de
Path: /usr/ports/www/wgetpaste
Info: Paste to several pastebin services via bash script
在搜索中可能遇到的另一种情况是已经移动或删除的端口。 这些结果如下所示:
make quicksearch name=wget
. . .
Port: ftp/emacs-wget
Moved:
Date: 2011-05-02
Reason: Has expired: Upstream disappeared and distfile is no longer available
Port: ftp/wgetpro
Moved:
Date: 2011-10-14
Reason: Vulnerable since 2004-12-14
Port: www/wget4web
Moved:
Date: 2012-01-01
Reason: Has expired: Depends on expired www/apache13
如果端口已移动到新位置,“移动”字段将包含可以找到端口的新位置。 如果此字段存在,但为空,则端口已删除。
即使这些内容已删除,它们仍会显示在您的搜索结果中。 如果你想防止移动或删除端口从显示出来,你可以设置PORTSEARCH_MOVED
环境变量设置为“0”。
例如,要将此变量设置为“0”,只有后面,使用默认的命令tcsh
,我们可以输入:
env PORTSEARCH_MOVED=0 make quicksearch name=wget
Port: gwget-1.0.4_9
Path: /usr/ports/ftp/gwget
Info: GNOME wget front-end
Port: wget-1.16
Path: /usr/ports/ftp/wget
Info: Retrieve files from the Net via HTTP(S) and FTP
Port: ruby20-ruby-wgettsv-0.95
Path: /usr/ports/www/ruby-wgettsv
Info: Collect WWW resources and generate TSV data
Port: wgetpaste-2.25
Path: /usr/ports/www/wgetpaste
Info: Paste to several pastebin services via bash script
如您所见,已移动或删除的所有条目现在已从结果中过滤掉。 如果你想使这个默认的行为,可以设定PORTSEARCH_MOVED=0
在你make.conf
文件中:
sudo sh -c 'echo "PORTSEARCH_MOVED=0" >> /etc/make.conf'
使用Make安装端口
一旦你找到你想要安装一个端口,你可以方便地下载所需的文件,建立二进制程序,并使用安装make
命令。
要安装端口,请更改为端口树中端口的目录。 您可以通过上面给出的任何搜索方法找到此位置。 为了证明这一点,我们将安装一个叫做端口portmaster
,我们将在以后需要本指南的
首先,更改为端口位置。 该portmaster
端口保持在ports-mgmt
类别:
cd /usr/ports/ports-mgmt/portmaster
现在,我们可以很容易地下载,配置,编译和安装使用的端口make
目标。 由于这些操作会影响我们的系统,我们需要使用sudo
。 在很长的路要做到这一点是通过个人呼叫make
,这样。 不要键入这些命令,我们将显示一个更短的版本:
sudo make config
sudo make fetch
sudo make checksum
sudo make depends
sudo make extract
sudo make patch
sudo make configure
sudo make build
sudo make install
我们可以通过一个单一的上市后各项指标缩短这个有点make
像这样的命令:
sudo make config fetch checksum depends extract patch configure build install
然而,这几乎总是不必要的。 上面列出的每个目标将调用任何先前的目标,以完成任务。 所以上面可以简单地压缩成:
sudo make install
通常,我们想要稍微扩展这个命令链,以确保我们正确配置了一切。 我们通常要指定config-recursive
,没有在上面管道的选项,之前install
的为了照顾配置该端口,并在安装开始任何依赖的目标。 否则构建过程可能停止并等待用户输入部分通过构建必要的依赖关系。
我们通常还要在安装后清理一点,以回收磁盘空间并保持一个干净的系统。 我们可以用做clean
或distclean
的目标。 在clean
目标删除用于构建该端口,任何依赖口提取的源代码。 该distclean
的目标做到这一点为好,但也删除这个包从压缩源存档/usr/ports/distfiles
目录。
因此,典型的安装命令可能如下所示:
sudo make config-recursive install distclean
这将提示您在进程的开始配置端口和任何依赖项。 之后,它将下载并验证源归档的完整性。 然后它将更改上下文以满足任何缺失的依赖关系。 该过程完成后,它将返回到相关端口,解压缩归档,应用任何必要的修补程序,并根据您选择的选项进行配置。 然后它将编译应用程序并将其安装在您的系统上。 之后,它将删除此端口和任何依赖关系的扩展源代码。 然后它将删除此端口的源归档。
执行上述中的命令/usr/ports/ports-mgmt/portmaster
目录:
sudo make config-recursive install distclean
您将看到一个用于应用程序的单个对话框。 如果您使用列出的shell之一,您可以选择在此处为该工具配置shell完成:
该portmaster
端口没有任何相关性,但如果有任何,对于依赖的配置选项将直接上方目标端口的配置后提出的。 将会下载,配置和安装该端口。
如果您使用的是默认tcsh
,你会希望每一个安装后重新扫描路径来让你的shell环境是知道所有安装的应用程序的:
rehash
如果上述过程成功,您已成功安装了第一个端口。
而主操作系统和配置在传统的位置完成后,通过口系统安装可选软件安装中/usr/local
层次。
这意味着,配置可选的软件,你将不得不在看/usr/local/etc
的目录。 这些可执行文件本身保持主要在/usr/local/bin
,并/usr/local/sbin
的目录。 在配置或启动应用程序时,请记住这一点。
关于作为服务运行的应用程序的注释
需要记住的一点是,如果要安装将作为服务运行的端口,安装过程将不会自动启动服务。 实际上,为了在FreeBSD中启动服务,您必须采取几个步骤。
如果您希望单次启动服务,可以键入以下命令:
sudo service servicename onestart
例如,要启动MySQL,您可以键入:
sudo service mysql-server onestart
假设任何必要的配置已经完成,这将启动服务一次。 如果您想稍后停止服务,可以键入:
sudo service mysql-server onestop
虽然这适用于快速测试,但它不是在FreeBSD中管理服务的理想方式。 要将服务配置为在每次引导时启动,您必须启用它。 要做到这一点,你必须添加一行到/etc/rc.conf
文件。
指定如何选购服务启动初始化文件保存在/usr/local/etc/rc.d
目录。 在这些初始化文件,一个叫做变量rcvar
通知init系统该中的变量/etc/rc.conf
去寻找,以确定是否启动该服务文件。 对于每一个可选的服务,你可以找到适当的行添加到/etc/rc.conf
通过输入文件:
grep rcvar /usr/local/etc/rc.d/*
你会收到一个看起来像这样的列表:
/usr/local/etc/rc.d/avahi-daemon:rcvar=avahi_daemon_enable
/usr/local/etc/rc.d/avahi-dnsconfd:rcvar=avahi_dnsconfd_enable
/usr/local/etc/rc.d/dbus:rcvar=dbus_enable
/usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable
输出的突出显示部分显示了我们需要设置为“YES”以启用每个服务的变量。
例如,为了使rsync
守护进程服务,我们可以加入这一行到/etc/rc.conf
:
rsyncd_enable="YES"
相应的行必须在/etc/rc.conf
文件使用正常的服务管理命令之前。 例如,可以将上述行添加到底部/etc/rc.conf
既可用文本编辑器,或通过键入文件:
sudo sh -c "echo 'rsyncd_enable="YES"' >> /etc/rc.conf"
这将导致rsync守护程序在每次启动时启动。 现在,您可以使用控制服务service
命令而不带“一”前缀。 例如,您可以通过键入以下内容来启动服务:
sudo service rsyncd start
您可以通过键入以下内容再次停止服务:
sudo service rsyncd stop
删除已安装的端口
如果已安装了不再需要的端口,则可以使用类似但更直接的过程从系统中删除该应用程序。
我们可以使用deinstall
目标从系统中删除的应用程序。 再次,更改到与您要删除的应用程序相关联的ports树中的目录:
cd /usr/ports/ports-mgmt/portmaster
您可以通过键入以下内容从系统中删除应用程序:
sudo make deinstall
如果您还要删除为此端口配置的选项,可以键入以下命令:
sudo make rmconfig
要删除此端口及其所有依赖项的配置选项,请键入:
sudo make rmconfig-recursive
如果删除portmaster
使用上面的命令,通过键入重新安装:
sudo make reinstall distclean
更新应用程序
现在,您知道如何安装或删除程序,我们应该演示如何保持您的应用程序是最新的。
检查重要更新注释的UPDATING文件
在本指南的开始,我们保存了时间戳的/usr/ports/UPDATING
文件中,我们使用之前portsnap
刷新我们港口的树。
将/usr/ports/UPDATING
文件包含从约,可能需要由管理员额外的手动步骤更新和更改端口维护者的重要事项。 未能读取此文件并在更新应用程序之前应用其建议可能会使系统处于不可用状态或影响应用程序的功能。
首先,检查我们保存到主目录中文件的时间戳:
cat ~/last_update
File: "/usr/ports/UPDATING"
Size: 375337 FileType: Regular File
Mode: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ wheel)
Device: 0,81 Inode: 2011338 Links: 1
Access: Thu Dec 11 22:24:59 2014
Modify: Thu Dec 11 15:40:12 2014
Change: Thu Dec 11 22:24:59 2014
记住,“修改”时间戳表示我们系统上的UPDATING文件最后一次由端口维护者修改,“更改”时间戳表示上次同步的时间。 上面的信息是旧的时间戳。 我们可以从这些信息中得知,我们需要注意从12月11日到当前日期的任何条目。
立即打开刷新的UPDATING文件:
less /usr/ports/UPDATING
该文件看起来有点类似于:
This file documents some of the problems you may encounter when upgrading
your ports. We try our best to minimize these disruptions, but sometimes
they are unavoidable.
You should get into the habit of checking this file for changes each time
you update your ports collection, before attempting any port upgrades.
20150101:
AFFECTS: users of net/unison and net/unison-nox11
AUTHOR: madpilot@FreeBSD.org
Unison has been upgraded to version 2.48, which uses a different wire
protocol than 2.40 did. In order to support synchronization with
other computers where Unison is still at version 2.40, a new port
net/unison240 has been created. It provides unison240 and if that is
GTK2-enabled, also unison240-text. This unison240 port can be
installed in parallel with the existing net/unison port.
20141230:
AFFECTS: users of deskutils/xpad
AUTHOR: jgh@FreeBSD.org
deskutils/xpad has been moved to deskutils/xpad3, since 4.x has been around
for a while.
Should you wish to stick with legacy branch at this time;
# portmaster -o deskutils/xpad deskutils/xpad3
. . .
这个文件包含每一个可能的突破性的变化,每一个可用的端口一直回到2008年。你只需要注意以下通知:
- 自上次更新您的端口以来已添加
- 涉及您在系统上安装的端口
因此,对于这个例子,我们只需要注意自12月11日以来添加的涉及我们安装的端口的通知。 如果您不知道哪些端口安装在系统上,则可以使用portmaster
来创建一个完整的列表:
portmaster -l
===>>> Root ports (No dependencies, not depended on)
===>>> dialog4ports-0.1.5_2
===>>> pkg-1.4.0
===>>> pkgconf-0.9.7
===>>> portmaster-3.17.7
===>>> rsync-3.1.1_3
===>>> 5 root ports
===>>> Trunk ports (No dependencies, are depended on)
===>>> ca_root_nss-3.17.3_1
===>>> expat-2.1.0_2
. . .
输出将根据其依赖关系划分为多个部分。 使用此信息来检查UPDATING注释。
如果需要任何手动步骤,请完成这些步骤,然后继续进行其余更新。
检查已知的漏洞
在更新时要记住的另一个考虑因素是您的系统上安装的软件是否有任何已知的安全漏洞。
FreeBSD维护一个漏洞数据库,您可以检查它以查看任何端口或程序包是否存在安全问题。 这种功能被包括在pkg
工具。 通过键入以下内容运行安全审核:
sudo pkg audit -F
这将从FreeBSD项目的服务器下载最新版本的漏洞数据库。 然后它将检查所有已安装的端口或软件包的版本,并将其与安全数据库中的条目进行比较。
如果您的系统上安装的任何端口或软件包已知数据库中的漏洞,您将收到警报。 通常,这些将至少有一个最新的可用端口修补问题。
下面,我们将讨论如何更新系统上的所有端口或仅更新一个子集。 无论您的更新策略如何,至少必须更新已知安全漏洞的端口。
更新已安装的端口
在您完成UPDATING文件中列出的任何手动步骤后,您可以更新软件。
要查看哪些端口有可用更新,您可以使用portmaster
命令和-L
标志:
portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> dialog4ports-0.1.5_2
===>>> pkg-1.4.0
===>>> New version available: pkg-1.4.3
===>>> pkgconf-0.9.7
===>>> portmaster-3.17.7
===>>> rsync-3.1.1_3
===>>> 5 root ports
===>>> Trunk ports (No dependencies, are depended on)
===>>> ca_root_nss-3.17.3_1
===>>> expat-2.1.0_2
. . .
===>>> 44 total installed ports
===>>> 4 have new versions available
这提供了类似于我们之前使用的选项的小写变体的输出,但它也检查可用的更新。 在这里,我们可以看到, pkg
端口具有可用的新版本。 我们可以看到,总共有4个端口有新版本可用。
要升级单个端口,您可以转到端口树中的端口的目录位置,然后重新安装新版本的软件:
sudo make deinstall reinstall
您也可以实现用同样的portmaster
命令。 您必须提供类别和端口名称。 例如,升级wget
命令,我们可以输入:
sudo portmaster ftp/wget
上面的命令也可以用来安装端口。 许多用户来自其他背景来找到portmaster
比使用更熟悉的软件管理经验, make
,我们上文所述的目标。
虽然可以独立升级端口,但通常最好同时更新所有软件。 你可以做到这一点portmaster
使用-a
标志:
sudo portmaster -a
这将更新系统上的所有端口到其最新版本。 任何新的配置选项将在过程开始时显示给您。 如果你有安装的软件包pkg
与可通过端口系统更新的版本中,这些将被更新,并过渡到港口为好。
结论
到目前为止,您应该对如何使用FreeBSD系统上的端口有一个相当好的把握。 端口非常灵活,允许您轻松地轻松地自定义服务器上的大多数应用程序。
许多管理员欢迎在编译时间和增加控制之间进行权衡,但是您的需求可能会有所不同。 然而,了解端口系统是一个很好的投资,无论您在FreeBSD上的软件策略。 有时候,关键更新可能没有可用的软件包,并且有一些软件由于许可限制而无法以打包格式分发。 这些情况需要使用端口,而不考虑您的偏好。