跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 升级指南 / 联机升级
适用范围 SUSE Linux Enterprise Server 15 SP4

5 联机升级

SUSE 提供了直观的图形工具和简单的命令行工具,供您将正在运行的系统升级到新服务包。两个工具都提供服务包回滚支持及其他功能。本章提供有关如何使用这些工具执行服务包升级的逐步说明。

5.1 概念概述

SUSE 会定期发布用于 SUSE Linux Enterprise 系列的新服务包。为了方便客户迁移到新的服务包,并最大限度减少停机时间,SUSE 支持在系统运行时进行联机迁移。

从 SLE 12 开始,YaST Wagon 已经由 YaST 迁移 (GUI) 和 Zypper 迁移(命令行)替代。此项更改的优点在于:

  • 在首个 RPM 更新之前,系统将始终处于定义的状态。

  • 在首个 RPM 更新之前可以取消.

  • 如果出现错误,可以轻松恢复。

  • 可以通过系统工具执行回滚 - 无需备份或恢复。

  • 使用所有活动软件源.

  • 可以跳过服务包

警告
警告:不支持对主要版本进行联机迁移

支持在服务包之间进行联机迁移。不支持通过联机迁移升级到新的主要版本。有关详细信息,请参见第 1 章 “升级路径和方法

请通过脱机迁移升级到新的主要版本。有关详细信息,请参见第 4 章 “脱机升级

重要
重要:升级 SUSE Manager 客户端

如果要升级的系统是 SUSE Manager 客户端,则无法通过 YaST 联机迁移或 zypper migration 进行升级。请改为使用客户端迁移过程。 《SUSE Manager Upgrade Guide》(SUSE Manager 升级指南)对此进行了说明。

5.2 服务包迁移工作流程

服务包迁移可通过 YaST、zypper 或 AutoYaST 执行。

在开始服务包迁移之前,必须在 SUSE Customer Center 或本地 RMT 服务器中注册您的系统。也可以使用 SUSE Manager。

不论使用哪种方式,服务包迁移都包含以下步骤:

  1. 在注册系统中查找可能的迁移目标。

  2. 选择一个迁移目标。

  3. 请求并启用新的软件源。

  4. 运行迁移。

迁移目标列表取决于您所安装和注册的产品。如果您安装的扩展没有新的 SP 可用,则无法向您提供迁移目标。

主机可用的迁移目标列表将始终从 SUSE Customer Center 检索,并与安装的产品或扩展相关。

5.3 取消服务包迁移

在迁移过程中,只能在特定阶段取消服务包迁移:

  1. 在软件包升级开始之前,仅对系统进行极小的更改,例如对服务和软件源的更改。恢复 /etc/zypp/repos.d/* 以便还原到之前的状态。

  2. 软件包升级过程开始之后,可以使用 Snapper 快照还原到之前的状态(请参见第 10 章 “通过 Snapper 进行系统恢复和快照管理)。

  3. 选择迁移目标之后,SUSE Customer Center 更改了软件源数据。要手动还原此状态,请使用 SUSEConnect --rollback

5.4 使用联机迁移工具 (YaST) 升级

要通过 YaST 执行服务包迁移,请使用联机迁移工具。默认情况下,YaST 不会从第三方软件源安装任何软件包。如果某软件包是从第三方软件源安装的,YaST 会阻止该软件包替换成来自 SUSE 的相同软件包。

注意
注意:减小安装大小

执行服务包迁移时,YaST 会安装所有推荐的软件包。特别是在自定义最小安装的情况下,这样可能会大幅增加系统的安装大小。

要更改此默认行为并只允许必要的软件包,请调整 /etc/zypp/zypp.conf 中的 solver.onlyRequires 选项。

solver.onlyRequires = true

另外,请编辑文件 /etc/zypp/zypper.conf 并更改 installRecommends 选项。

installRecommends=false

这会更改所有与软件包相关操作的行为,例如安装补丁或新软件包的行为。要更改某次调用的 Zypper 行为,请使用 --no-recommends 参数。

要开始服务包迁移,请执行以下操作:

  1. 停用注册服务器上所有未使用的扩展,以免将来发生依赖性冲突。如果您忘记了某个扩展,YaST 稍后会检测未使用的扩展软件源,并将其停用。

  2. 如果您已登录到要更新的计算机上某个正在运行的 GNOME 会话,请切换到文本控制台。建议不要从 GNOME 会话运行更新。请注意,这并不适用于从远程计算机登录的情况(除非您正在使用 GNOME 运行 VNC 会话)。

  3. 运行 YaST 联机更新以获得系统的最新软件包更新。

  4. 安装 yast2-migration 软件包及其依赖项(在 YaST 的软件 › 软件管理下)。

  5. 重启动 YaST;如果不重启动,新安装的模块将不会显示在控制中心中。

  6. 在 YaST 中,选择联机迁移(根据要升级的 SUSE Linux Enterprise Server 版本,此模块会列于系统软件类别下)。YaST 将显示可能的迁移目标和摘要。如果有多个迁移目标可用于系统,请从列表中选择一个。

  7. 从列表中选择一个迁移目标,然后单击下一步继续。

  8. 如果迁移工具提供更新软件源,建议单击继续。

  9. 如果“联机迁移”工具找到来自 DVD 或本地服务器的过时软件源,强烈建议您将其禁用。过时软件源来自上一个服务包。系统会自动去除来自 SUSE Customer Center 或 RMT 的旧软件源。

  10. 单击下一步,查看摘要并继续迁移过程。确认开始更新

  11. 成功迁移后,请重启动系统。

5.5 使用 Zypper 升级

要用 Zypper 执行服务包迁移,请使用命令行工具 zypper migration(来自包 zypper-migration-plugin.

注意
注意:减小安装大小

执行服务包迁移时,YaST 会安装所有推荐的软件包。特别是在自定义最小安装的情况下,这样可能会大幅增加系统的安装大小。

要更改此默认行为并只允许必要的软件包,请调整 /etc/zypp/zypp.conf 中的 solver.onlyRequires 选项。

solver.onlyRequires = true

另外,请编辑文件 /etc/zypp/zypper.conf 并更改 installRecommends 选项。

installRecommends=false

这会更改所有与软件包相关操作的行为,例如安装补丁或新软件包的行为。要更改某次调用的 Zypper 行为,请使用 --no-recommends 参数。

要开始服务包迁移,请执行以下操作:

  1. 如果您已登录到要更新的计算机上某个正在运行的 GNOME 会话,请切换到文本控制台。建议不要从 GNOME 会话运行更新。请注意,这并不适用于从远程计算机登录的情况(除非您正在使用 GNOME 运行 VNC 会话)。

  2. 注册 SUSE Linux Enterprise 计算机(如果尚未注册):

    > sudo SUSEConnect --regcode YOUR_REGISTRATION_CODE
  3. 开始迁移:

    > sudo zypper migration

    有关迁移过程的一些备注:

    • 如果有多个迁移目标可用于系统,Zypper 会让您从列表中选择一个服务包。这与跳过一个或多个服务包一样。请注意,基础产品(SLES、SLED)的联机迁移仍然只适用于在主要版本的服务包之间进行。

    • 默认情况下,Zypper 会使用 --no-allow-vendor-change 选项,以传递到 zypper dup。如果某软件包是从第三方软件源安装的,此选项会阻止该软件包替换成来自 SUSE 的相同软件包。

    • 如果 Zypper 找到来自 DVD 或本地服务器的过时软件源,强烈建议您将其禁用。系统会自动去除旧的 SUSE Customer Center 或 RMT 软件源。

  4. 查看所有更改,特别是即将去除的软件包。键入 y(要升级的软件包的确切数目会根据系统的不同而变化)继续:

    266 packages to upgrade, 54 to downgrade, 17 new, 8 to reinstall, 5 to remove, 1 to change arch.
    Overall download size: 285.1 MiB. Already cached: 0 B  After the operation, additional 139.8 MiB will be used.
    Continue? [y/n/? shows all options] (y):

    使用 ShiftPage ↑ShiftPage ↓ 键在外壳中滚动。

  5. 成功迁移后,请重启动系统。

5.6 使用 Plain Zypper 升级

如果因无法访问互联网或注册服务器而未能注册您的系统,则无法使用 YaST 迁移或 zypper migration 迁移到新服务包。在这种情况下,您仍可以通过普通的 Zypper 和一些手动交互来迁移到新服务包。

重要
重要:仅适用于未注册的系统

只有因无法访问互联网或注册服务器而未能注册的系统才支持通过此路径迁移到新服务包。例如,位于受特殊保护的网络中的计算机。如果您的系统已注册,请使用 YaST 或 Zypper 迁移。

重要
重要:安装源

此迁移路径要求您要迁移的系统有权访问安装源。例如,可以设置 RMT 服务器或 SLP 服务器来实现此目的。

此外,系统必须能够访问所安装产品版本的最新更新软件源。

  1. 如果您已登录到要迁移计算机上正在运行的图形会话,请注销该会话,并切换到文本控制台。不建议从图形会话内部运行更新。请注意,这并不适用于从远程计算机登录的情况(除非您正在使用 X 运行 VNC 会话)。

  2. 用旧 SUSE Linux Enterprise 软件源更新软件包管理工具:

    > sudo zypper patch --updatestack-only
  3. 获取当前未指派软件源的软件包(孤立的软件包)列表。将不会迁移这些软件包,且不保证迁移后它们可正常工作(因为这些软件包所依赖的其他软件包可能发生了更改,与这些软件包不再兼容)。若要获取该列表,请运行:

    > sudo zypper packages --orphaned

    仔细检查该列表,去除所有不再需要的孤立软件包。记下所有剩余的孤立软件包,稍后需要进行比较。

  4. 运行以下命令,获取系统当前已订阅的所有软件源的列表:

    > sudo zypper repos -u

    更新每个软件源 URL,使其产品版本号变为 15-SP4。例如,如果某个软件源的 URL 为

    http://rmt.example.com/repo/SUSE/Products/SLE-15-SP2-Product-SLES/x86_64/product/

    请将其变为

    http://rmt.example.com/repo/SUSE/Products/SLE-15-SP3-Product-SLES/x86_64/product/

    需要对已启用的所有软件源执行此操作。同时请考虑对当前已禁用的软件源执行此操作,以免未来在激活这些软件源时,系统中包含错误的安装源。

    要更改软件源 URL,请采取以下做法:

    1. 使用 YaST › 软件 › 软件源。选择一个软件源,然后单击编辑以进行必要更改。针对所有软件源重复此过程。

    2. 使用 Zypper.运行以下命令去除旧软件源

      > sudo zypper removerepo OLD_REPO_ID

      然后运行以下命令添加相应的新软件源

       > sudo zypper addrepo -f URL NAME-15-SP4
    3. 编辑 /etc/zypp/repos.d 中的软件源配置文件。每个软件源由一个配置文件表示。必须在每个文件中更改 baseurl 参数的值。

  5. 运行 zypper repos -u 检查更改,然后运行以下命令更新软件源:

    > sudo zypper refresh -f -s

    如果更新软件源失败,请再次检查是否输入了错误的 URL。如果无法解决问题,建议禁用失败的软件源。

    如果正确配置了所有软件源,请再次运行

    > sudo zypper refresh -f -s

    ,以确保所有软件源都是最新的。

  6. 在开始迁移之前,建议先执行测试运行:

    > sudo zypper dup -D --no-allow-vendor-change --no-recommends

    参数 -D 将执行试运行,即模拟迁移而不实际更改系统。如果出现问题,请先解决问题,然后再继续。如果测试运行成功,请运行以下命令来执行实际迁移:

    > sudo zypper dup --no-allow-vendor-change --no-recommends

    -no-allow-vendor-change 确保第三方 RPM 不会重写基础系统中的 RPM。--no-recommends 选项可确保初始安装过程中取消选择的软件包不会再次被添加。

  7. 迁移完成且系统已引导进入新的服务包版本后,请再次运行孤立软件包检查:

    > sudo zypper packages --orphaned

    将新列表与开始迁移之前生成的列表进行比较。如果列表中出现新软件包,原因可能是这些软件包已移到新服务包中的其他模块。如果以前的安装中不包含该模块,则不会更新该软件包。

    您可以在 https://scc.suse.com/packages 上检查软件包所属的模块。使用 zypper addrepo 或 YaST 软件源模块添加缺失的模块,然后运行以下命令更新孤立的软件包:

    > sudo zypper install --no-recommends LIST OF PACKAGES
  8. 现已成功迁移到新服务包!

5.7 回滚服务包

如果服务包对于您而言不起作用,则 SUSE Linux Enterprise 支持将系统恢复到开始服务包迁移之前的状态。前提是对 Btrfs 根分区启用了快照(自 SLES 12 开始,这一直是默认设置)。有关详细信息,请参见第 10 章 “通过 Snapper 进行系统恢复和快照管理

  1. 获取所有 Snapper 快照的列表:

    > sudo snapper list

    查看输出以找到在开始服务包迁移之前刚创建的快照。Description 列包含相应的声明,并且 Userdata 列中会将该快照标记为 important。记住 # 列中的快照编号,以及 Date 列中该快照的日期。

  2. 重新启动系统。从引导菜单中选择从只读快照启动引导加载程序,然后选择上一步中记下的日期和编号所对应的快照。此时会装载第二个引导菜单(快照中的那个)。选择以 SLES 15 SP4 开头的项并引导它。

  3. 系统会引导到先前的状态,并且系统分区会以只读方式挂载。以 root 身份登录,并检查您是否选择了正确的快照。另外,请确保一切如常。请注意,由于根文件系统是以只读方式挂载的,因此功能可能受限。

    如果出现问题,或者您引导了错误的快照,请重新引导并选择从另一个快照引导 — 到此为止,系统尚未进行任何永久更改。如果快照正确并且按预期工作,请运行以下命令让更改永久生效:

    > sudo snapper rollback

    重引导计算机。在引导屏幕上,选择默认的引导项以重引导至恢复后的系统。

  4. 检查是否已正确重设置软件源配置。另外,检查是否所有产品均已正确注册。如果以上任何一项不正确,则稍后可能无法再有效地执行系统更新,或者可能会使用错误的软件包软件源更新系统。

    请先确保系统可以访问互联网,再开始此过程。

    1. 运行以下命令以刷新服务和软件源:

      > sudo zypper ref -fs
    2. 运行以下命令以获得活动的软件源列表:

      > sudo zypper lr

      仔细检查此命令的输出。为此次更新添加的服务和软件源不应该包含在列表中。例如,如果您是从 SLES 15 SP4 回滚到 SLES15 GA,则列表中必须包含 SLES15-GA 软件源,而不包含 SLES15-SP4 软件源。

      如果列出了错误的软件源,请将其删除,必要时,请用与您的产品或服务包版本匹配的版本替换它们。有关受支持迁移路径的软件源列表,请参见第 2.3 节 “模块依赖项和生命周期”。(请注意,没有必要进行手动干预,因为软件源会自动更新,但最好进行校验并执行任何必要的更正。)

    3. 最后,通过运行以下命令检查所有已安装产品的注册状态:

      > sudo SUSEConnect --status

      所有产品都应该报告为已注册。若非如此,请运行以下命令修复注册:

      > sudo SUSEConnect --rollback

现在,您已成功将系统恢复到就在开始服务包迁移之前捕获的状态。

5.8 使用 SUSE Manager 升级

SUSE Manager 是一个服务器解决方案,用于提供适用于 SUSE Linux Enterprise 客户端的更新、补丁和安全修复。它随附了一套工具和基于 Web 的用户界面,用于执行管理任务。有关 SUSE Manager 的详细信息,请参见 https://www.suse.com/products/suse-manager/

SP 迁移允许从一个服务包 (SP) 迁移到同一个主要版本中的另一个服务包(例如,从 SLES 15 GA 迁移到 SLES 15 SP4)。

如果您的计算机由 SUSE Manager 管理,请根据 SUSE Manager 文档中所述更新计算机。https://documentation.suse.com/suma/ 上的《SUSE Manager Upgrade Guide》(SUSE Manager 升级指南)中介绍了客户端迁移过程。

5.9 从 openSUSE Leap 升级到 SUSE Linux Enterprise Server

您可以将 openSUSE Leap 安装升级到 SUSE Linux Enterprise Server。升级过程与第 5.4 节 “使用联机迁移工具 (YaST) 升级”类似,但需要执行一些额外的步骤。在生产系统上执行此过程之前,建议您先在复制了生产系统设置的测试系统上运行此过程。

要了解哪些 openSUSE Leap 版本支持迁移,请参见第 1.2 节 “支持的 SLES 15 SP4 升级路径”

警告
警告:并非所有 openSUSE 软件包都可迁移

openSUSE 提供的软件包比 SUSE Linux Enterprise Server 的要多。大多数额外的软件包都可通过 SUSE Package Hub 获得并且将会迁移。任何无法通过 SUSE Package Hub 获得的额外软件包在迁移后都不会再接收更新,因此应在迁移后将其去除。

请确保 SUSE Linux Enterprise Server 和 SUSE Package Hub 软件源中提供了运行系统所需的全部软件包。有关 SUSE Package Hub 的详细信息,请参见 https://packagehub.suse.com/

过程 5.1︰ 将 openSUSE Leap 升级到 SUSE Linux Enterprise Server

要从 openSUSE Leap 迁移到 SUSE Linux Enterprise Server,请执行以下步骤:

  1. 切换到 TTY,例如,按 CtrlAltF1 键切换。然后以 root 身份登录。

  2. 安装 yast2-registrationrollback-helper 软件包。

    # zypper in yast2-registration rollback-helper
  3. 启用 rollback-helper 服务:

    # systemctl enable rollback
  4. 在 SUSE Customer Center 中注册系统:

    # yast2 registration
  5. 执行迁移:

    # yast2 migration

    如果发生软件包冲突,YaST 提供了一个可供选择的解决方案列表。

  6. 去除孤立的软件包:

    # zypper rm $(zypper --no-refresh packages --orphaned | gawk '{print $5}' | tail -n +5)
  7. 重引导系统:

    # reboot

现在,您已成功将系统迁移到 SUSE Linux Enterprise Server

如果您在迁移后遇到问题,可以像升级服务包一样还原迁移。有关说明,请参见第 5.7 节 “回滚服务包”