基本FreeBSD维护简介

来自菜鸟教程
跳转至:导航、​搜索

介绍

在管理 FreeBSD 服务器时,了解有助于您保持系统良好状态的基本维护程序非常重要。

在本指南中,我们将介绍使您的服务器保持最新并正常运行所需的基本过程。 我们将介绍如何更新 FreeBSD 团队维护的基本操作系统。 我们还将讨论如何更新和维护通过端口或软件包系统安装的可选软件。

如果您在开始使用 FreeBSD 时需要帮助,请按照我们的指南 here 进行操作。

更新基本 FreeBSD 操作系统

使用 FreeBSD 时要意识到的一件重要事情是,基本操作系统是独立于系统上的其他软件构建和管理的。 这提供了许多好处,并允许 FreeBSD 团队仔细测试和开发系统的核心功能。

Note:在继续之前阅读本节底部有关当前更新过程中的错误的注释。

当您开始使用服务器时,安全更新很有可能已发布到基本系统。 要查询 FreeBSD 项目的服务器以获取这些更新、下载任何新文件并将它们安装到您的系统上,请键入以下命令:

sudo freebsd-update fetch install

如果您正在使用 DigitalOcean FreeBSD 安装,则默认包含 sudo。 如果您使用的是其他平台,您可能需要通过ports系统或软件包安装sudo,或者将su安装到root。

freebsd-update 命令是基本操作系统中软件的管理实用程序。 fetch 子命令下载任何新的更新,而 install 子命令将它们应用于实时系统。

如果有更新,您将看到受更新影响的软件列表。 您可以使用向下箭头滚动或使用空格键翻页。 到达列表底部后,将应用更新。

任何已更新的长时间运行的软件都需要重新启动才能使用新版本。 如果您看到内核有任何更新,则需要重新启动以防止出现奇怪的行为。 您可以通过键入以下内容来执行此操作:

sudo shutdown -r now

重要提示:更新过程中的错误

目前,here 上的 FreeBSD 更新程序存在上游错误。 该错误导致更新过程后系统重新启动时挂起。

有两种方法可以处理这种情况,大多数情况下首选第二种方法。

第一种是使用 DigitalOcean 控制面板简单地强制重启服务器。 这将导致服务器强制且不正常地重新启动,但是当您重新启动时,它将使用更新的环境。

更安全的替代方法是在更新之前禁用软更新或文件系统上的软更新日志。 软更新是问题的核心,因此这将防止重新启动挂起。 这是一个更广泛的过程,并将为您的磁盘将来需要的任何恢复添加一些时间(直到您重新启用这些功能)。

为此,在应用任何更新之前,请引导至单用户模式。 您可以通过键入以下内容来执行此操作:

sudo nextboot -o "-s" -k kernel
sudo reboot

接下来,进入您的 Droplet 的 DigitalOcean 控制面板,然后单击“控制台访问”按钮进入 Web 控制台。 启动完成后按“Enter”以获取救援 shell 会话。 从这里,您可以关闭软更新或软更新日志。

要完全禁用软更新,请键入:

tunefs -n disable /

如果您只想禁用软更新日志,这是一种不那么激烈的妥协,您可以使用以下命令:

tunefs -j disable /

完成后,您可以启动重新启动以再次以完全多用户模式重新启动服务器:

reboot

启动完成后,您可以使用上述过程获取并应用 FreeBSD 更新,而无需重新启动挂起。

我们建议您密切关注 错误报告 ,以便在上游修复可用时恢复这些更改。

自动更新检查

通过设置 cron 作业,可以将您的系统配置为每天自动检查这些安全补丁。 freebsd-update 实用程序有一个专门用于此目的的特殊 cron 子命令。

这将暂停一段随机时间(最多一个小时),以分散下载服务器上的负载。 然后它将检查更新并下载它们(基本上是后台的 fetch 操作)。 如果下载了更新,将通知指定的用户帐户。 更新不会自动安装,因此管理员可以决定适当的时间。

要设置此自动检查,请使用 sudo 权限编辑 /etc/crontab 文件:

sudo vi /etc/crontab

在文件的底部,添加如下所示的一行:

@daily root freebsd-update -t freebsd cron

上述命令将自动以 root 用户身份运行更新命令。 如果发现更新,将通知在 -t 组件之后指定的用户帐户。 在上面的示例中,将通知默认的 freebsd 用户。

完成后保存并关闭文件。

下次登录 freebsd 帐户时,您可以输入以下内容查看您的邮件:

mail

如果更新已下载,您将看到如下内容:

Mail version 8.1 6/6/93.  Type ? for help.
"/var/mail/freebsd": 1 message 1 new
>N  1 freebsd@freebsdserver       Thu Dec 18 21:45 209/3997  "freebsdserver security updates"
&

您可以通过键入与通知关联的消息编号来查看更新列表:

1

当您对将要更改的软件感到满意时,您可以通过键入以下内容快速安装更新:

sudo freebsd-update install

如果应用了任何内核补丁,请记住重新启动机器,并重新启动受更新影响的任何服务。

同步操作系统源

您可能不时想要做的一项任务是将 FreeBSD 源代码的副本同步到您的系统。 由于各种原因,这很有用。 某些端口需要正确构建当前源,并且该源也可用于开始跟踪新的软件分支。

FreeBSD 源代码保存在 SVN 存储库中。 如果您只需要源的最新版本,而不需要 subversion 带来的大量开销,您可以使用名为 svnup 的实用程序来同步当前源。 这比使用颠覆本身要快得多。

您可以通过键入以下命令来安装 svnup 包:

sudo pkg install svnup

如果您更喜欢使用端口,您可以通过键入以下内容来获取:

cd /usr/ports/net/svnup
sudo make config-recursive install clean

拥有该实用程序后,我们应该稍微调整配置文件。 在文本编辑器中使用 sudo 权限打开它:

sudo vi /usr/local/etc/svnup.conf

首先,我们需要从列表中选择一个镜像。 配置文件中有多行host=行,全部注释掉。 选择一个您认为可能与您关系密切的并取消注释:

. . .
[defaults]
work_directory=/var/tmp/svnup
#host=svn.freebsd.org
#host=svn0.us-west.freebsd.org
host=svn0.us-east.freebsd.org
#host=svn0.eu.freebsd.org

. . .

接下来,您应该确保描述每个 SVN 分支的文件部分都引用了您正在使用的发布版本。 您可以通过在命令行中键入以下内容来找到您的发布版本:

freebsd-version
10.1-RELEASE-p2

这告诉我们操作系统的分支以及最后的系统补丁级别。 对于我们当前的目的,我们要注意的部分是第一个破折号之前的数字。 在这种情况下,它指定 10.1RELEASE 表示我们目前正在跟踪发布分支,这是可用于 FreeBSD 的最稳定的分支。

回到文件中,确保 [release] 下的 branch= 参数的定义指向这个数字:

. . .

[release]
branch=base/releng/10.1
target=/usr/src

. . .

这将确保您下载正确的源。 完成后保存并关闭文件。

现在,由于我们正在跟踪发布分支,我们可以输入:

sudo svnup release

这会将最新版本的源代码树下载到 /usr/src。 您可以通过重新运行此命令随时更新它。

如果您需要在源代码上运行 subversion 命令的能力,则必须下载 subversion 工具。 您可以通过键入以下内容来安装该软件包:

sudo pkg install subversion

如果您更喜欢使用端口,您可以通过键入以下内容来获取该工具:

cd /usr/ports/devel/subversion
sudo make config-recursive install clean

使用 subversion 命令将花费 显着 更多时间。 它不仅会下载树中每个文件的当前版本,还会下载项目的整个历史。

如果您之前使用 svnup 工具同步了源,则需要在使用 subversion 检出源之前删除源树:

sudo rm -rf /usr/src

有关如何使用 subversion 的详细说明超出了本指南的范围。 但是,一般的想法是针对 FreeBSD 源镜像之一上的分支之一发出 checkout 命令。

例如,要检查与上面使用 svnup 命令相同的源,我们可以输入如下内容:

sudo svn checkout https://svn0.us-east.FreeBSD.org/base/releng/10.1 /usr/src

请注意,此命令的 URL 基本上只是我们在 svnup 配置文件中看到的 host=branch= 定义的组合。

更新系统的可选软件记录

FreeBSD 提供了两种不同的格式来在您的服务器上安装附加软件。 第一个是基于源的系统,称为“ports”,第二个是基于可用端口的预编译包存储库。 对于驻留在基本操作系统之外的软件,需要使用许多附加工具进行管理。

系统保存有关可安装在以 /usr/ports 为根的目录层次结构中的端口的信息。 这种目录结构称为“端口树”。 在我们接触任何端口之前,我们应该确保我们的端口树有关于我们可用软件的最新信息。 我们可以使用 portsnap 命令来做到这一点。

portsnap 命令的语法在某些方面反映了 freebsd-update 命令的语法。 在 DigitalOcean 上,源树将预先填充有关可用端口的初始信息,您可以按照第二个 portsnap 命令中的说明进行更新。

如果您 不是 使用 DigitalOcean,那么您的 /usr/ports 目录在您刚开始时可能是空的。 如果是这种情况,第一次使用 portsnap 时,应该使用 extract

sudo portsnap fetch extract

这将获取一个完整的端口树并将其提取到 /usr/ports 中。 这可能需要一段时间,并且只有在 /usr/ports 中没有任何信息时才需要。

要更新我们系统关于可用端口的信息(每个后续的 portsnap 运行),请输入:

sudo portsnap fetch update

此过程可能需要一些时间,具体取决于您上次更新端口树的时间。 它必须为自上次运行以来已修改的每个可用软件下载相当数量的文件。 这将使用有关端口的信息填充 /usr/ports 层次结构。

pkg 打包系统也可以利用其中的一些信息。 但是,它还维护自己的数据库以跟踪可用于安装的预构建二进制包。 要更新此内容,您可以键入:

sudo pkg update

这将从 FreeBSD 项目的服务器获取最新的软件包数据库信息。 值得注意的是,对于许多 pkg 操作,pkg update 作为命令执行的一部分会自动执行,因此并不总是需要作为独立命令。

更新可选软件

到目前为止,我们已经学习了如何更新和应用更新到基本操作系统。 我们还学习了如何更新我们的操作系统源代码以及如何刷新有关可用端口和软件包的本地信息。

现在,我们可以使用此更新的软件信息来下载和应用更新到我们的可选软件。 根据您使用的是端口还是软件包,该过程会有所不同。 如果您使用这两者的混合,您可能需要处理一些过程。

找出可以更新的软件

更新软件的第一步是找出哪些应用程序有可用的新版本。 我们可以通过几种不同的方式做到这一点。

使用 pkg 命令检查更新

如果您想将系统上安装的软件与可用的最新版本的更新信息进行比较,您可以使用 pkgversion 子命令。 这会向您显示已安装的版本,并且可以选择显示有关可用版本的信息。

值得注意的是,此命令将显示通过 端口和软件包安装的可选软件。 此命令不区分安装源,因此它能够准确显示系统上所有可用的更新。

我们可以通过键入以下内容来查看我们的软件是否是最新的:

pkg version -vIL=

如果在最新的索引文件(之前通过 portsnap 命令下载的)中引用了任何软件的新版本,输出将显示差异。 例如:

perl5-5.18.4_10                    <   needs updating (index has 5.18.4_11)

由于我们正在根据我们的端口树中的最新索引文件检查安装在我们系统上的软件,因此有时您会在端口树中存在尚未进入软件包的更新时检查这一点。 发生这种情况是因为软件包是从端口树构建的,并且通常不得不稍微落后。

由于这种可能性,上述命令可能会显示实际上尚未作为软件包提供的更新。 要发现这些实例,您可以将上述命令的输出与此命令的输出进行比较:

pkg version -vRL=

此命令检查 pkg 系统的可用软件包数据库中的新版本(而不是端口树中的索引文件)。 如果这两个命令产生相同的输出,那么您将能够使用 pkg 系统更新任何包。

如果第一个命令中的更新没有出现在第二个命令中,这意味着更改尚未打包。 如果您正在为需要更新的软件使用软件包,您可以等到软件包赶上,或者您可以切换到端口以立即获取最新更新。

使用 Portmaster 检查更新

如果您经常选择使用 ports 系统从源代码构建软件,一个有吸引力的替代方法是 portmaster 命令。 该工具对于 FreeBSD 上任何基于端口的软件管理任务都很有用,从检查和应用更新到安装或删除端口及其所有依赖项。

要获取 portmaster 命令,您可以安装包或从端口系统编译它。

要安装软件包,请键入:

sudo pkg install portmaster

如果您希望从源代码编译该工具,请切换到端口树中的包目录并使用 make 安装它:

cd /usr/ports/ports-mgmt/portmaster
sudo make install clean

安装后,您可能会看到一条有关将一些信息添加到 /etc/make.conf 文件并转换包数据库的消息。 如果您从 FreeBSD 10.1 或更高版本开始,则不需要这样做。

安装 portmaster 后,您可以通过键入以下内容检查更新:

portmaster -L

这将检查系统上安装的所有软件,并将其与索引文件进行比较,以查看是否有新版本可用。 这与 pkg 命令的操作方式相同,因为无论软件是使用端口还是软件包安装,它都会显示更新。 它根据软件与其他软件的依赖关系对软件进行分类。

任何有可用更新的软件都会有这样的缩进行:

===>>> perl5-5.18.4_10
        ===>>> New version available: perl5-5.18.4_11

在底部,摘要行将描述可以更新的应用程序数量:

===>>> 42 total installed ports
        ===>>> 1 has a new version available

由于 portmaster 主要与端口一起使用,因此所有检测到的更新都应该可供应用程序使用。

检查软件漏洞

FreeBSD 维护一个漏洞数据库,应该定期检查以确保您系统上安装的软件没有漏洞。

虽然有时更新系统上的所有软件是有益的,但至少,任何具有已知漏洞的软件都应尽早更新。 要检查系统上安装的任何可选软件的已知漏洞,请键入:

pkg audit -F

这将从 FreeBSD 服务器下载最新的漏洞数据库,并根据您系统上安装的软件检查它。 如果您安装的软件存在任何漏洞,它会提醒您。

检查更新说明

在更新任何软件之前, 必不可少 检查更新可能导致的任何损坏。 FreeBSD 端口维护者有时必须做出没有用户干预就无法干净应用的更改。 如果您未能检查这些情况,您最终可能会遇到无法运行的软件并可能导致系统损坏。

/usr/ports 目录中,名为 UPDATING 的文件包含有关可能产生意外结果的任何软件更新的信息。 要读取此文件,请键入:

less /usr/ports/UPDATING

这个简单的文本文件将包含有关需要额外注意的任何更新的信息,无论是否安装了软件。 每个条目都将标有引用更新提交到端口树的日期。 另一件需要注意的是,该文件包含可追溯到 2008 年的更新信息。 该文件将如下所示:

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.

20141208:
  AFFECTS: users of ports-mgmt/poudriere, ports-mgmt/poudriere-devel
  AUTHOR: bdrewery@FreeBSD.org

  8.4 jails created with Poudriere 3.1, or poudriere-devel-3.0.99.20141117
  should be recreated with 'jail -d' and 'jail -c'. This fixes pkg(8)
  crashes.

20141205:
  AFFECTS: users of polish/kadu
  AUTHOR: pawel@FreeBSD.org

  Before running kadu 1.x for the first time upstream developers
  advise to backup your ~/.kadu directory.

. . .

您应该检查此文件以了解自上次更新以来添加的任何更新问题。 由于此文件包含大量与您正在考虑的更新无关的信息,或者因为它涉及系统上未安装的软件,或者因为它详细说明了先前更新的问题,您通常只需检查靠近文件顶部的条目。

如果在升级之前需要采取任何额外的步骤,请立即完成。

更新包和端口

采取 UPDATING 文件中建议的任何操作后,您现在应该可以更新软件了。 我们使用的方法取决于您是否要为您的软件使用预编译包或基于源的端口。

如果您主要使用软件包并希望使用这种格式进行升级,您可以使用 pkg upgrade 命令:

sudo pkg upgrade

这应该可以升级所有有可用更新的软件包。

关于此方法需要注意的一点是,如果您混合使用包和端口,包更新可能会尝试重新安装您使用端口系统构建的软件。 当您使用不同的选项编译应用程序、选择需要不同依赖项的自定义等时,可能会发生这种情况。 从打包版本。

此场景将如下所示:

freebsd@wowie:~ % sudo pkg upgrade
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
Updating database digests format: 100%
Checking for upgrades (2 candidates): 100%
Processing candidates (2 candidates): 100%
The following 1 packages will be affected (of 0 checked):

Installed packages to be REINSTALLED:
        portmaster-3.17.7 (options changed)

The operation will free 1 KB.
40 KB to be downloaded.

Proceed with this action? [y/N]:

在这种情况下,portmaster 命令是通过 ports 系统安装的,但 pkg 正试图使其与它所知道的版本保持一致。 如果您希望保留自定义的端口版本,可以按“N”进行此操作,然后通过键入以下内容锁定包:

sudo pkg lock portmaster

这将阻止软件升级,允许您使用 pkg upgrade 命令升级软件的其余部分。 当您希望升级锁定的软件时,您可以通过键入以下命令暂时解锁它:

sudo pkg unlock portmaster

如果您主要使用 portmaster 和端口来处理您的软件包,您可以通过键入以下命令升级所有可选安装的软件:

sudo portmaster -a

系统将要求您选择要升级的端口的选项。 如果您不知道任何选项的含义,或者如果您没有任何特定的选择理由,则可以使用默认值。

如果您在升级软件包之前使用 portmaster,由于端口和软件包更新之间的滞后,以前使用软件包安装的某些软件现在可能会使用端口进行更新。 如果这对您来说不是问题,请随意使用此方法。 如果您更愿意为您的软件使用软件包,最好等到重新打包更新。

如果您希望更精细地更新您的包,您还可以通过在端口树中指定其类别和名称来升级特定包:

sudo portmaster category/portname

例如,要升级 vim-lite 端口,您可以发出以下命令:

sudo portmaster editors/vim-lite

结论

如您所见,为了维护您的 FreeBSD 服务器,需要执行很多不同的过程。

其中一些任务,如更新基础系统源代码的过程,不需要经常运行,而其他任务,如更新基础操作系统和更新任何具有已知漏洞的软件,则应经常完成。 维护您的系统一开始可能看起来很复杂,但随着您熟悉所使用的工具,就会变得相当简单。

要了解有关如何使用包的更多信息,请点击 此链接 。 要更好地了解如何使用端口,请遵循 本指南