如何将FreeBSD从版本10.2升级到10.3

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

介绍

FreeBSD 在不断发展; 该团队正在添加新功能并修补安全漏洞。 使您的服务器操作系统保持最新可确保更好的安全性和兼容性,FreeBSD 包含 freebsd-update 工具使这变得容易。 在本教程中,您将把运行 FreeBSD 10.2-RELEASE 的现有 FreeBSD 服务器升级到 10.3.RELEASE-p4。

警告: 与操作系统的主要版本之间的几乎所有升级一样,此过程存在失败、数据丢失或软件配置损坏的固有风险。 强烈建议进行全面备份和广泛测试。

为了避免这些问题,我们建议尽可能迁移到新的 FreeBSD 服务器,而不是就地升级。 升级时您可能仍需要查看软件配置的差异,但核心系统可能会具有更高的稳定性。 您可以查看我们关于 如何迁移到新的 Linux 服务器 的系列文章,这也应该主要适用于迁移到新的 FreeBSD 服务器。


先决条件

要遵循本教程,您将需要:

  • 运行 FreeBSD 10.2 的服务器。
  • 配置为使用 sudo 运行命令的用户帐户。 我们将使用默认的 freebsd 帐户,该帐户在您创建 FreeBSD Droplet 时自动创建。 要了解有关登录 FreeBSD Droplet 及其基本管理的更多信息,请查看 FreeBSD 入门 教程系列。

第 1 步 — 获取和应用补丁

为了升级操作系统,我们首先需要获取目标版本的包和补丁。 使用 freebsd 帐户登录服务器。

ssh freebsd@your_server_ip

然后,使用 freebsd-upgrade 命令收集有关系统升级的信息并确定需要更改的内容。 运行以下命令:

sudo freebsd-update upgrade -r 10.3-RELEASE

我们使用 -r 开关来指定我们要升级到的版本,即 10.3-RELEASE。 片刻之后,您将看到以下输出:

Outputsrc component not installed, skipped
Looking up update.FreeBSD.org mirrors... 4 mirrors found.
Fetching public key from update6.freebsd.org... done.
Fetching metadata signature for 10.2-RELEASE from update6.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... 

The following components of FreeBSD seem to be installed:
kernel/generic world/base world/doc world/games world/lib32

The following components of FreeBSD do not seem to be installed:

Does this look reasonable (y/n)? y

这使您有机会审查任何潜在的问题。 键入 y 并按 ENTER 继续。

注意: 请记住,本教程使用全新的 FreeBSD 10.2 服务器来指导您完成将 FreeBSD 基础系统升级到版本 10.3-RELEASE-p4 的所有步骤。 如果您修改或自定义了某些组件,请在继续之前创建备份,并自担风险接受本教程中描述的所有过程。


一旦您同意继续,该过程将应用更新和补丁。 您将看到以下输出:

OutputFetching metadata signature for 10.3-RELEASE from update6.freebsd.org... done.
Fetching metadata index... done.
Fetching 1 metadata patches. done.
Applying metadata patches... done.
Fetching 1 metadata files... done.
Inspecting system... 
Fetching files from 10.2-RELEASE for merging... done.
Preparing to download files... 
Fetching 10722 patches.....10....20....30....40....50....60....70....80....90
....100....110....120....130....140....150....160....170....180....190....200

    **. . .**

....10650....10660....10670....10680....10690....10700....10710....10720. done.
Applying patches... done.
Fetching 152 files... 
Attempting to automatically merge changes in files... done.

但是,该过程无法自动修补所有内容。 我们需要手动干预。

第 2 步——解决冲突

给操作系统打补丁后,freebsd-update会显示两条警告信息,您需要手动解决两个不同配置文件中的一些小冲突。 一个是 /etc/rc.subr,另一个是 /etc/ssh/sshd_config

您看到的第一个警告如下:

outputThe following file could not be merged automatically: `/etc/rc.subr`
Press Enter to edit this file in vi and resolve the conflicts
manually...

当您按下 Enter 时,/etc/rc.subr 文件将在 vi 文本编辑器中打开,您将看到以下文本:

/etc/rc.subr 文件有冲突需要手动解决

# $NetBSD: rc.subr,v 1.67 2006/10/07 11:25:15 elad Exp $
<<<<<<< current version
# $FreeBSD: releng/10.1/etc/rc.subr 273188 2014-10-16 22:00:24Z hrs $
=======
# $FreeBSD: releng/10.3/etc/rc.subr 292450 2015-12-18 19:58:34Z jilles $
>>>>>>> 10.3-RELEASE

通过删除与当前版本相关的行来修改此部分,这些行在上面以红色突出显示。 尽管我们当前运行的是 FreeBSD 10.2,但该文件将 10.1 称为“当前”。 删除这些行,使该部分类似于以下示例:

/etc/rc.subr 准备好继续

# $NetBSD: rc.subr,v 1.67 2006/10/07 11:25:15 elad Exp $
# $FreeBSD: releng/10.3/etc/rc.subr 292450 2015-12-18 19:58:34Z jilles $

警告: DigitalOcean 将 FreeBSD Droplets 的自定义配置和数据保存在 /etc/rc.digitalocean.d/ 目录下,并在 /etc/rc.subr 文件中引用。 请不要更改或删除与DigitalOcean相关的文件或配置。 /etc/rc.digitalocean.d/下的自定义配置和数据是使您的Droplet保持正常运行并与DigitalOcean的API集成的原因.


保存对文件的更改并退出编辑器。

关闭文本编辑器后,您将看到一行报告您刚刚更改的文件的成功合并。 然后你会看到第二个警告,说 /etc/ssh/sshd_config 配置文件需要你注意:

Output/var/db/freebsd-update/merge/new//etc/rc.subr: 2087 lines, 47888 characters.

The following file could not be merged automatically: `/etc/ssh/sshd_config`
Press Enter to edit this file in vi and resolve the conflicts
manually...

就像以前一样,当您按下 ENTER 时,您将看到一个您必须修改的文本文件。 您需要更改的部分将类似于您编辑的第一个文件。

/etc/ssh/sshd_config 文件有冲突需要手动解决

<<<<<<< current version
#       $OpenBSD: sshd_config,v 1.93 2014/01/10 05:59:19 djm Exp $
#       $FreeBSD: releng/10.1/crypto/openssh/sshd_config 264692 2014-04-20 12:46:18Z des $
=======
#       $OpenBSD: sshd_config,v 1.98 2016/02/17 05:29:04 djm Exp $
#       $FreeBSD: releng/10.3/crypto/openssh/sshd_config 296853 2016-03-14 13:05:13Z des $
>>>>>>> 10.3-RELEASE

再次,通过删除与当前版本相关的行来修改此部分,直到文件的部分如下所示:

/etc/ssh/sshd_config 准备继续

#       $OpenBSD: sshd_config,v 1.98 2016/02/17 05:29:04 djm Exp $
#       $FreeBSD: releng/10.3/crypto/openssh/sshd_config 296853 2016-03-14 13:05:13Z des $

保存对文件的更改并关闭编辑器。

编辑器关闭后,freebsd-update 进程将显示您更改的每个文件,并询问更改是否合理。 对这两个问题回答 y 以继续安装。

同意更改后,您将看到将要更新的二进制文件和配置文件的列表。 这个清单很长; 按 SPACE 一次向下滚动列表一页。 或者,如果您不想查看列表,请键入 q 退出。 不用担心; 按 q 不会中止升级过程。

该列表如下所示:

OutputThe following files will be added as part of updating to 10.3-RELEASE-p5:
/boot/kernel/ismt.ko
/boot/kernel/ismt.ko.symbols
/boot/kernel/linux64.ko
/boot/kernel/linux64.ko.symbols
/boot/kernel/linux_common.ko
/boot/kernel/linux_common.ko.symbols
/boot/kernel/mlx5.ko

    . . .

The following files will be updated as part of updating to 10.3-RELEASE-p5:
/.cshrc
/.profile
/COPYRIGHT
/bin/[
/bin/cat
/bin/chflags
/bin/chio

    . . .

查看列表后,您将返回终端提示符。 您已准备好执行安装。

第 3 步 — 安装 FreeBSD 10.3

更新已下载,基本文件已成功合并或配置,因此要安装下载的升级,请使用以下命令:

sudo /usr/sbin/freebsd-update install

这是您将看到的输出:

Outputsrc component not installed, skipped
Installing updates...
Kernel updates have been installed.  Please reboot and run
"/usr/sbin/freebsd-update install" again to finish installing updates.

安装会提示您重新启动,因此请执行以下命令来重新启动您的机器:

sudo reboot

您将与 SSH 会话断开连接,重新启动大约需要一分钟。 一旦您的机器重新联机,请重新登录并继续下一步。

注意: 您必须重新启动服务器才能加载新的 10.3-RELEASE-p4 内核及其修补的二进制文件,这些文件仅在启动过程中加载。 不要在不重新启动的情况下继续下一步。


第 4 步 — 完成安装过程

让我们检查一下我们服务器的版本,以确保升级过程正常并且加载了新内核。 首先,重新登录到您的服务器:

ssh freebsd@your_server_ip

登录后,运行以下命令:

uname -a

您将看到以下输出,表明升级成功:

OutputFreeBSD YOUR_HOSTNAME 10.3-RELEASE-p4 FreeBSD 10.3-RELEASE-p4 #0: Sat May 28 12:23:44 UTC 2016     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64

但是我们还没有完成升级。 我们需要安装自发布以来可能发生的任何最终更新,因此再次运行 freebsd-update

sudo /usr/sbin/freebsd-update install

您将看到以下输出:

Outputsrc component not installed, skipped
Installing updates...
Installing updates...
install: ///var/db/etcupdate/current/etc/mtree/BSD.debug.dist: No such file or directory
install: ///var/db/etcupdate/current/etc/periodic/daily/480.leapfile-ntpd: No such file or directory
 done.

忽略最后的两个警告是安全的。 此过程将创建或更新这两个文件。

当您升级 FreeBSD 时,您还应该升级所有第三方安装的软件包,尤其是在您进行主要版本升级时。 为此,请运行以下命令:

sudo pkg upgrade

输出将如下所示:

OutputUpdating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.

    . . .

Processing entries: 100%
FreeBSD repository update completed. 25089 packages processed.
New version of pkg detected; it needs to be installed first.
The following 1 package(s) will be affected (of 0 checked):

Installed packages to be UPGRADED:
        pkg: 1.5.6 -> 1.7.2

The process will require 242 KiB more space.
2 MiB to be downloaded.

Proceed with this action? [y/N]: y

键入 y 并按 ENTER 继续,您将看到以下输出:

OutputFetching pkg-1.7.2.txz: 100%    2 MiB   1.3MB/s    00:02    
Checking integrity... done (0 conflicting)
[1/1] Upgrading pkg from 1.5.6 to 1.7.2...
[1/1] Extracting pkg-1.7.2: 100%
Updating FreeBSD repository catalogue...
Repo "FreeBSD" upgrade schema 2011 to 2012: Add depends formula field
Repo "FreeBSD" upgrade schema 2012 to 2013: Add vital field
FreeBSD repository is up-to-date.
All repositories are up-to-date.
Checking for upgrades (24 candidates): 100%
Processing candidates (24 candidates): 100%
The following 24 package(s) will be affected (of 0 checked):

Installed packages to be UPGRADED:
        xproto: 7.0.27 -> 7.0.28
        sudo: 1.8.13 -> 1.8.16_1
        rsync: 3.1.1_3 -> 3.1.2_1
        python27: 2.7.9_1 -> 2.7.11_2
        py27-setuptools27: 17.0 -> 20.0
        py27-pip: 7.0.3 -> 8.0.2
        perl5: 5.20.2_5 -> 5.20.3_12
        pcre: 8.37_4 -> 8.38_1
        libxml2: 2.9.2_3 -> 2.9.3
        libxcb: 1.11_1 -> 1.11.1
        libnet: 1.1.6_3,1 -> 1.1.6_4,1
        libiconv: 1.14_8 -> 1.14_9
        libX11: 1.6.2_3,1 -> 1.6.3,1
        kbproto: 1.0.6 -> 1.0.7
        indexinfo: 0.2.3 -> 0.2.4
        gobject-introspection: 1.42.0 -> 1.46.0
        glib: 2.42.2 -> 2.46.2
        gettext-runtime: 0.19.4 -> 0.19.7
        expat: 2.1.0_3 -> 2.1.1_1
        dbus: 1.8.16 -> 1.8.20
        curl: 7.43.0_2 -> 7.48.0_1
        ca_root_nss: 3.19.3 -> 3.22.2
        avahi-app: 0.6.31_3 -> 0.6.31_5

Installed packages to be REINSTALLED:
        dbus-glib-0.104 (option added: DOCS)

The process will require 5 MiB more space.
39 MiB to be downloaded.

Proceed with this action? [y/N]: y

再次键入 y,然后键入 ENTER 继续。

软件包将升级,但要确保您的用户可以访问最新版本,请运行 rehash 命令:

rehash

至此,升级过程完成。 但是如果出了什么问题呢?

第 5 步 — 回滚失败的安装(可选)

整个升级过程应该很顺利,但是如果在升级过程中出现问题,您可以使用以下命令回滚最近安装的软件包:

sudo freebsd-update rollback

这将启动回滚过程,让您回到原来的位置。 您还可以恢复在开始该过程之前所做的最新备份。

结论

将操作系统升级到较新版本并及时应用安全补丁是持续系统管理的重要方面。 freebsd-update 命令使这两个任务都可以轻松完成。 熟悉该过程后,您将能够自行执行未来的升级。

要了解有关如何升级 FreeBSD 的更多信息,您可以阅读 An Introduction To Basic FreeBSD Maintenance,或查看 FreeBSD 手册 中的相应章节。