简介
在管理FreeBSD服务器时,重要的是要了解基本的维护程序,这将有助于您保持系统的良好状态。
在本指南中,我们将介绍使您的服务器保持最新并正常运行所需的基本流程。我们将介绍如何更新FreeBSD团队维护的基本操作系统。我们还将讨论如何更新和维护通过端口或包系统安装的可选软件。
如果您需要有关免费BSD入门的帮助,请遵循我们的指南here.
<$>[备注] 注意: 从2022年7月1日起,DigitalOcean不再支持通过控制面板或API创建新的FreeBSD水滴。但是,您仍然可以使用自定义图像来旋转FreeBSD水滴。了解如何通过我们的产品documentation.]将自定义图像导入到DigitalOcean <$>
更新基础版FreeBSD操作系统
在使用FreeBSD时需要注意的一点是,基本操作系统是与系统上的其他软件分开构建和管理的。 这提供了许多好处,并允许FreeBSD团队仔细测试和开发系统的核心功能。
注意 :在继续之前,请阅读本节底部关于当前更新过程中错误的说明。
当您开始使用服务器时,很可能已将安全更新发布到基本系统。要查询FreeBSD项目的服务器以获取这些更新、下载任何新文件并将其安装在您的系统上,请键入以下命令:
1sudo freebsd-update fetch install
根据您使用的平台,您可能需要通过端口系统或包安装sudo
,或者将su
安装到根目录。
frebsd-update
命令是基本操作系统中软件的管理实用程序。fetch
子命令下载所有新的更新,而install
子命令将它们应用于活动系统。
如果有更新,您将看到受更新影响的软件列表。您可以用向下箭头滚动,也可以用空格键翻页。一旦您到达列表的底部,就会应用更新。
任何已更新的长时间运行的软件都需要重新启动才能使用新版本。如果您看到内核有任何更新,则需要重新启动以防止出现异常行为。您可以通过键入以下命令来执行此操作:
1sudo shutdown -r now
重要提示:更新过程中的Bug
目前,在here.上运行的免费BSD更新过程存在一个上游错误该错误导致在更新过程后系统重新启动时挂起。
处理这种情况的最安全方法是在更新之前禁用文件系统上的软更新或软更新日志。软更新是问题的核心,因此这将防止重新启动挂起。这是一个比较繁琐的过程,并且会为将来您的磁盘所需的任何恢复增加一些时间(直到您重新启用这些功能)。
为此,在应用任何更新之前,请引导进入单用户模式。您可以通过键入以下命令来执行此操作:
1sudo nextboot -o "-s" -k kernel
2sudo reboot
从这里,您可以关闭软更新或软更新日志。
要完全禁用软更新,请键入以下内容:
1tunefs -n disable /
如果您只想禁用软更新日志记录,这是一种不太激烈的妥协,您可以使用以下命令:
1tunefs -j disable /
完成此操作后,您可以启动重新启动,以再次以完全多用户模式重新启动服务器:
1reboot
启动完成后,您可以使用上述过程获取并应用FreeBSD更新,而无需重新启动挂起。
我们建议您密切关注错误report],以便在上游修复程序可用时恢复这些更改。
自动检查更新
您可以通过设置一个‘cron作业,将您的系统配置为每天自动检查这些安全补丁。
frebsd-update实用程序有一个专门用于此目的的特殊
cron`子命令。
这将随机暂停一段时间(最多一个小时),以便分散下载服务器上的负载。然后它将检查更新并下载它们(基本上是后台的fetch
操作)。如果下载了更新,将通知指定的用户帐户。更新不会自动安装,因此管理员可以决定适当的时间。
要设置此自动检查,请使用sudo
权限编辑/etc/crontab
文件:
1sudo vi /etc/crontab
在文件的底部,添加如下所示的一行:
1@daily root freebsd-update -t freebsd cron
上述命令将以根用户身份自动运行更新命令。如果发现更新,会通知-t
组件后指定的用户帐号。在上面的示例中,会通知默认的frebsd
用户。
完成后保存并关闭该文件。
下次登录到frebsd
帐户时,您可以通过键入以下命令来检查邮件:
1mail
如果下载了更新,您将看到类似以下内容:
1Mail version 8.1 6/6/93. Type ? for help.
2"/var/mail/freebsd": 1 message 1 new
3>N 1 freebsd@freebsdserver Thu Dec 18 21:45 209/3997 "freebsdserver security updates"
4&
您可以通过键入与通知关联的消息编号来查看更新列表:
11
当您对要更改的软件感到满意时,可以通过键入以下命令快速安装更新:
1sudo freebsd-update install
如果应用了任何内核补丁,请记住重新启动计算机,并重新启动受更新影响的所有服务。
同步操作系统源
您可能需要经常做的一项任务是将FreeBSD源代码的副本同步到您的系统中。 由于各种原因,这是有用的。 某些移植需要当前源代码才能正确构建,并且源代码也可以用于开始跟踪到新的软件分支。
FreeBSD源代码在SVN存储库中维护。如果您只需要源码的最新版本,而不需要Subversion带来的大量开销,您可以使用名为svnup
的实用程序来同步当前源码。这比使用Subversion本身要快得多。
您可以通过键入以下命令安装svnup
程序包:
1sudo pkg install svnup
如果您更喜欢使用该端口,可以通过键入以下命令获得该端口:
1cd /usr/ports/net/svnup
2sudo make config-recursive install clean
一旦你有了这个实用程序,我们应该稍微调整一下配置文件。 在文本编辑器中使用sudo
权限打开它:
1sudo vi /usr/local/etc/svnup.conf
首先,我们需要从列表中选择一个镜像。 在配置文件中有多个host=
行,所有这些都被注释掉了。 选择一个你认为可能离你很近的,然后取消注释:
1. . .
2[defaults]
3work_directory=/var/tmp/svnup
4#host=svn.freebsd.org
5#host=svn0.us-west.freebsd.org
6host=svn0.us-east.freebsd.org
7#host=svn0.eu.freebsd.org
8
9. . .
接下来,您应该确保描述每个SVN分支的文件部分引用了您正在使用的发布版本。通过在命令行中键入以下命令,您可以在您的发行版中找到以下内容:
1freebsd-version
110.1-RELEASE-p2
这告诉我们操作系统的分支以及最后的系统补丁级别。 为了我们当前的目的,我们要注意的部分是第一个破折号之前的数字。 在这种情况下,它指定为10.1
。 RELEASE
表示我们目前正在跟踪release分支,这是FreeBSD最稳定的分支。
回到文件中,确保[Release]
下的Branch=
参数的定义指向这个数字:
1. . .
2
3[release]
4branch=base/releng/10.1
5target=/usr/src
6
7. . .
这将确保您下载的源文件是正确的。完成后保存并关闭该文件。
现在,由于我们正在跟踪发布分支,我们可以输入:
1sudo svnup release
这会将源树的最新版本下载到/usr/src
。您可以通过重新运行此命令随时对其进行更新。
如果您需要在源代码上运行Subversion命令的能力,则必须下载Subversion工具。 您可以通过键入以下命令来安装该软件包:
1sudo pkg install subversion
如果您更喜欢使用端口,可以通过键入以下命令获取该工具:
1cd /usr/ports/devel/subversion
2sudo make config-recursive install clean
使用subversion
命令将花费显著 更多的时间。它不仅会下载树中每个文件的当前版本,还会下载项目的整个历史。
如果您之前已经使用svnup
工具同步源,则在使用subversion
签出源之前,需要移除源树:
1sudo rm -rf /usr/src
有关subversion
的详细使用说明不在本指南的讨论范围内。然而,一般的想法是对其中一个FreeBSD源镜像上的一个分支发出一个‘check out’命令。
例如,要签出与我们使用上面的svnup
命令所做的完全相同的源代码,我们可以键入如下内容:
1sudo svn checkout https://svn0.us-east.FreeBSD.org/base/releng/10.1 /usr/src
请注意,该命令的URL基本上只是我们在svnup
配置文件中看到的host=
和Branch=
定义的组合。
更新系统可选软件记录
FreeBSD提供了两种不同的格式来在您的服务器上安装其他软件。第一个是称为port
的基于源代码的系统,第二个是基于可用端口的预编译包的存储库。对于驻留在基本操作系统之外的软件,需要使用许多附加工具进行管理。
系统保存有关可安装在以/usr/ports
为根的目录层次结构中的端口的信息。这种目录结构称为端口树
。在我们接触任何端口之前,我们应该确保我们的端口树具有关于我们可用的软件的最新信息。我们可以使用portSnap
命令来执行此操作。
portSnap
命令的语法在某些方面与frebsd-update
命令的语法类似。
根据您的云提供商的不同,您的/usr/ports
目录在启动时可能为空。如果是这样的话,第一次使用portSnap
时,应该使用eart
:
1sudo portsnap fetch extract
这将获取一个完整的端口树并将其解压缩到/usr/ports
中。这可能需要一段时间,仅当您在/usr/ports
中没有任何信息时才需要。
要更新我们系统的有关可用端口的信息(每次后续的portSnap
运行),请键入以下内容:
1sudo portsnap fetch update
此过程可能需要一些时间,具体取决于您上次更新端口树的时间。 它必须为自上次运行以来修改过的每一个可用软件下载相当数量的文件。 这将用端口信息填充/usr/ports
层次结构。
‘pkg’包装系统也可以利用其中的一些信息。但是,它还维护自己的数据库,以跟踪可供安装的预构建二进制包。要更新此命令,您可以键入:
1sudo pkg update
这将从FreeBSD项目的服务器获取最新的包数据库信息。值得注意的是,对于许多pkg
操作,pkg更新
是作为命令执行的一部分自动执行的,因此并不总是需要作为独立的命令。
更新可选软件
到目前为止,我们已经学习了如何更新并将更新应用于基本操作系统。 我们还学习了如何更新操作系统源代码,以及如何刷新有关可用端口和软件包的本地信息。
现在,我们可以使用此更新的软件信息来下载并将更新应用于我们的可选软件。 这个过程会有所不同,这取决于你使用的是端口还是包。 如果你是使用这两个的混合物,你可能需要处理一些过程。
了解哪些软件可以升级
更新软件的第一步是找出哪些应用程序有可用的新版本。我们可以用几种不同的方法来做这件事。
使用pkg命令检查更新
如果要将系统上已安装的软件与可用的最新版本的更新信息进行比较,可以使用pkg
的version
子命令。这将显示已安装的版本,并可以选择显示有关可用版本的信息。
值得注意的是,该命令将显示通过端口和 包安装的可选软件。此命令不区分安装源,因此它能够准确显示系统上可用的所有更新。
我们可以通过键入以下命令来查看我们的软件是否为最新版本:
1pkg version -vIL=
如果在最新的索引文件中有对任何软件的新版本的引用(通过先前通过portSnap
命令下载),则输出将显示差异。例如:
1perl5-5.18.4_10 < needs updating (index has 5.18.4_11)
由于我们是根据端口树中的最新索引文件检查系统上安装的软件,因此有时您会在端口树中有尚未进入程序包的更新时进行检查。之所以会发生这种情况,是因为包是从端口树构建的,通常需要稍微滞后一些。
由于这种可能性,上述命令可能会显示尚未以包的形式实际提供的更新。要发现这些实例,您可以将上面命令的输出与此命令的输出进行比较:
1pkg version -vRL=
此命令检查pkg
系统的可用包数据库中的新版本(而不是端口树中的索引文件)。如果这两个命令产生相同的输出,那么您将能够使用pkg
系统更新任何包。
如果第一个命令中有未在第二个命令中显示的更新,这意味着更改尚未打包。如果您正在为需要更新的软件使用包,您可以等待包跟上,也可以切换到端口以立即获取最新更新。
使用Portmaster检查更新
如果您更多地选择使用PORTS系统从源代码构建软件,一个有吸引力的替代方案是`portmaster‘命令。此工具可用于在FreeBSD上执行任何基于端口的软件管理任务,从检查和应用更新,到安装或删除端口及其所有依赖项。
要获取portmaster
命令,您可以安装包,也可以从端口系统编译。
要安装该程序包,请键入:
1sudo pkg install portmaster
如果您更愿意从源代码编译该工具,请切换到端口树中的包目录,并使用make安装它:
1cd /usr/ports/ports-mgmt/portmaster
2sudo make install clean
安装后,您可能会看到一条消息,提示您将一些信息添加到您的/etc/make.conf
文件中,并转换您的包数据库。如果您从FreeBSD 10.1或更高版本开始,则不需要执行此操作。
安装portmaster
后,您可以通过键入以下命令来检查更新:
1portmaster -L
这将检查系统上安装的所有软件,并将其与索引文件进行比较,以查看是否有新版本可用。这与pkg
命令的工作方式相同,因为无论软件是使用端口还是使用包安装的,它都会显示更新。它根据软件在依赖关系方面与其他软件的连接方式对软件进行分类。
任何具有可用更新的软件都将有一个缩进行,如下所示:
1===>>> perl5-5.18.4_10
2 ===>>> New version available: perl5-5.18.4_11
在底部,汇总行将描述可以更新的应用程序数量:
1===>>> 42 total installed ports
2 ===>>> 1 has a new version available
由于portmaster
主要与端口一起工作,因此检测到的所有更新都应可供应用。
软件漏洞检查
FreeBSD维护一个漏洞数据库,应定期检查该数据库,以确保您系统上安装的软件中没有漏洞。
虽然有时更新系统上的所有软件是有益的,但至少应该尽早更新任何有已知漏洞的软件。要检查系统上安装的任何可选软件是否存在已知漏洞,请键入以下命令:
1pkg audit -F
这将从FreeBSD服务器下载最新的漏洞数据库,并对照系统上安装的软件进行检查。如果您安装的软件存在任何漏洞,它会向您发出警报。
查看更新说明
在更新任何软件之前,必须 检查更新可能导致的任何中断。在没有用户干预的情况下,FreeBSD端口维护人员有时必须做出一些无法干净利落地应用的更改。如果您没有检查这些情况,您可能会得到无法运行的软件,并可能导致系统崩溃。
在/usr/ports
目录中,有一个名为UPDATING
的文件,其中包含可能出现意外结果的所有软件更新的信息。要读取此文件,请键入以下内容:
1less /usr/ports/UPDATING
这个简单的文本文件将包含有关需要额外注意的任何更新的信息,无论软件是否已安装。 每个条目都将标记引用的更新提交到端口树的日期。 另一件需要注意的事情是,该文件包含的更新信息可以追溯到2008年。 该文件看起来像这样:
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
820141208:
9 AFFECTS: users of ports-mgmt/poudriere, ports-mgmt/poudriere-devel
10 AUTHOR: [email protected]
11
12 8.4 jails created with Poudriere 3.1, or poudriere-devel-3.0.99.20141117
13 should be recreated with 'jail -d' and 'jail -c'. This fixes pkg(8)
14 crashes.
15
1620141205:
17 AFFECTS: users of polish/kadu
18 AUTHOR: [email protected]
19
20 Before running kadu 1.x for the first time upstream developers
21 advise to backup your ~/.kadu directory.
22
23. . .
您应该检查此文件是否有自上次更新以来添加的任何更新问题。由于此文件包含大量与您正在考虑的更新无关的信息,无论是因为它涉及系统上未安装的软件,还是因为它详细说明了以前更新的问题,因此您通常只需检查靠近文件顶部的条目。
如果您需要在升级前采取任何额外步骤,请立即完成。
更新套餐和端口
在执行了UPDATING
文件中建议的任何操作后,您现在应该已经准备好更新软件了。我们使用的方法将取决于您希望为您的软件使用预编译包还是基于源代码的端口。
如果您主要使用的是套餐,并且希望使用此格式进行升级,可以使用pkg upgrade
命令:
1sudo pkg upgrade
这应该提供升级所有有可用更新的软件包。
关于此方法需要注意的一点是,如果您混合了包和端口,包更新可能会尝试重新安装您使用端口系统构建的软件。当您使用与打包版本不同的选项、所选的需要不同依赖项的定制等编译应用程序时,可能会发生这种情况。
此场景如下所示:
1freebsd@wowie:~ % sudo pkg upgrade
2Updating FreeBSD repository catalogue...
3FreeBSD repository is up-to-date.
4All repositories are up-to-date.
5Updating database digests format: 100%
6Checking for upgrades (2 candidates): 100%
7Processing candidates (2 candidates): 100%
8The following 1 packages will be affected (of 0 checked):
9
10Installed packages to be REINSTALLED:
11 portmaster-3.17.7 (options changed)
12
13The operation will free 1 KB.
1440 KB to be downloaded.
15
16Proceed with this action? [y/N]:
在本例中,portmaster
命令是通过端口系统安装的,但pkg
正在尝试使其与它所知道的版本保持一致。如果您希望保留您的自定义端口版本,您可以按N
执行此操作,然后通过键入以下命令锁定包:
1sudo pkg lock portmaster
这将阻止软件升级,允许您使用pkg upgrade
命令升级软件的其余部分。当您希望升级已锁定的软件时,可以通过键入以下命令暂时解锁:
1sudo pkg unlock portmaster
如果您主要使用portmaster
和端口来处理您的包,您可以通过键入以下命令来升级所有可选安装的软件:
1sudo portmaster -a
系统将要求您为要升级的端口选择选项。如果您不知道任何选项的含义,或者如果您没有任何特定的选择原因,则可以使用缺省值。
如果您在升级包之前使用portmaster
,由于端口和包更新之间的滞后,一些以前使用包安装的软件现在可能会使用端口进行更新。如果这对您来说不是问题,请随意使用此方法。如果您宁愿继续使用软件的包,最好是等到更新被重新打包。
如果您希望精确更新程序包,还可以通过指定端口树中的类别和名称来升级特定的程序包:
1sudo portmaster category/portname
例如,要升级vim-lite
端口,可以发出以下命令:
1sudo portmaster editors/vim-lite
结论
正如您所看到的,为了维护您的FreeBSD服务器,需要进行许多不同的过程。
其中一些任务,如更新基本系统的源代码的过程,不需要频繁运行,而其他任务,如更新基本操作系统和更新任何存在已知漏洞的软件,应该经常完成。维护您的系统乍看起来可能很复杂,但当您熟悉您正在使用的工具时,就会变得相当简单。