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

5 联机升级

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

5.1 概念概述

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

从 SLE 12 开始,YaST Wagon 已经由 YaST 迁移 (GUI) 和 Zypper 迁移(命令行)替代。系统支持以下功能:

  • 系统在首个 RPM 更新之前始终处于指定的状态

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

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

  • 通过系统工具回滚;不需要备份/恢复

  • 使用所有活动储存库

  • 可以跳过服务包

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

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

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

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 快照(请参见第 7 章 “通过 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

这会更改所有与包相关操作的行为,例如安装增补程序或新包的行为。

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

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

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

  3. 如果您是 LTSS 订购者,请确保 LTSS 扩展储存库处于活动状态。

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

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

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

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

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

  9. 如果迁移工具提供更新储存库,建议单击继续。

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

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

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

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 计算机(如果尚未注册):

    tux > sudo SUSEConnect --regcode YOUR_REGISTRATION_CODE
  3. 如果您是 LTSS 订购者,请确保 LTSS 扩展储存库处于活动状态。

  4. 运行 zypper migration

    tux > sudo zypper migration
    Executing 'zypper  patch-check'
    
    Refreshing service 'SUSE_Linux_Enterprise_Server_12_x86_64'.
    Loading repository data...
    Reading installed packages...
    0 patches needed (0 security patches)
    
    Available migrations:
    
        1 | SUSE Linux Enterprise Server 12 SP1 x86_64
        2 | SUSE Linux Enterprise Server 12 SP2 x86_64

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

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

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

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

  5. 查看所有更改,特别是即将去除的包。键入 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 ↓ 键在外壳中滚动。

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

5.6 使用 Plain Zypper 升级

如果不能使用 YaST 迁移或 Zypper 迁移,您仍可以单纯通过 Zypper 并执行一些人工交互进行迁移。要开始服务包迁移,请执行以下操作:

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

  2. 用旧 SUSE Linux Enterprise 储存库更新包管理工具:

    tux > sudo zypper patch --updatestack-only
  3. 如果系统已注册,则需要先取消注册:

    tux > sudo SUSEConnect --de-register
  4. 去除旧安装源和储存库,并调整第三方储存库。

  5. 添加新的安装源,不论是本地的还是远程的(有关占位符 REPOSITORY,请参考第 2.3 节 “模块依赖项和生命周期”):

    sudo zypper addrepo REPOSITORY

    您也可以使用 SUSE Customer Center 或储存库镜像工具。适用于 AMD64/Intel 64 上的 SUSE Linux Enterprise 12 SP1 的命令为:

    tux > sudo SUSEConnect -p SLES/12.2/x86_64 OPTIONS

    请注意,系统不支持跨体系结构升级。

    Zypper 将显示新旧内核之间的冲突。选择解决方案 1 继续。

    Problem: product:SLES-12.2-0.x86_64 conflicts with kernel < 4.4 provided by kernel-default-VERSION
     Solution 1: Following actions will be done:
      replacement of kernel-default-VERSION with kernel-default-VERSION
      deinstallation of kernel-default-VERSION
     Solution 2: do not install product:SLES-12.2-0.x86_64
  6. 完成迁移:

    tux > sudo zypper ref -f -s
    tux > sudo zypper dup --no-allow-vendor-change --no-recommends

    第一个命令会更新所有服务和储存库。第二个命令会执行发行套件升级。在这里,最后两个选项比较重要:-no-allow-vendor-change 确保第三方 RPM 不会重写基础系统中的 RPM。--no-recommends 选项可确保初始安装过程中取消选择的包不会再次被添加。

5.7 回滚服务包

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

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

    tux > sudo snapper list

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

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

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

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

    tux > sudo snapper rollback

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

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

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

    1. 运行以下命令以刷新服务和储存库:

      tux > sudo zypper ref -fs
    2. 运行以下命令以获得活动的储存库列表:

      tux > sudo zypper lr

      仔细检查此命令的输出。为此次更新添加的服务和储存库不应该包含在列表中。例如,如果您是从 SLES 12 SP1 回滚到 SLES 12 SP2,则列表中必须包含 SP1 储存库,而不包含 SLES12-SP2-PoolSLES12-SP2-Updates 储存库。

      如果列出了错误的储存库,请将其删除,必要时,请用与您的产品或服务包版本匹配的版本替换它们。有关受支持迁移路径的储存库列表,请参见第 2.3 节 “模块依赖项和生命周期”

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

      tux > sudo SUSEConnect --status

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

      tux > 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 12 SP1 迁移到 12 SP2)。有关详细信息,请参见《SUSE Manager Best Practices》(SUSE Manager 最佳实践)Client Migration(客户端迁移)一章中的Migrating SUSE Linux Enterprise Server 12 or later to version 12 SP2(将 SUSE Linux Enterprise Server 12 或更高版本迁移到版本 12 SP2)一节

https://www.suse.com/documentation/suse-manager/,版本 3.1)。

5.9 从 openSUSE Leap 迁移到 SUSE Linux Enterprise Server

可将 openSUSE 安装联机迁移到 SUSE Linux Enterprise Server。此过程与第 5.5 节 “使用 Zypper 升级”类似,但需要执行一些额外的步骤。我们建议先在与生产设置相同的测试系统上运行此过程,然后再在生产系统中执行。

要查看支持迁移的 openSUSE Leap 版本,请阅读第 1.1 节 “支持的 SLE 15 SP1 升级路径”

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

openSUSE 储存库提供的包比 SUSE Linux Enterprise Server 储存库提供的包要多。如果您安装了 openSUSE 储存库中的任何包,迁移后,它们将不再会接收更新。如果执行下面的过程,将会去除这些包。

请确保 SUSE Linux Enterprise Server 储存库中提供了运行系统所需的全部包。您也可以检查 SUSE Package Hub 储存库中是否提供了这些包。有关细节,请参见第 18.3 节 “SUSE Package Hub”

要从 openSUSE Leap 迁移,请执行以下过程:

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

  2. 安装 SUSEConnect

    root # zypper in SUSEConnect
  3. 去除在迁移过程中造成文件冲突的包。

    root # rpm -e --nodeps yast2-branding-openSUSE
    root # rpm -e --nodeps yast2-branding-openSUSE-Oxygen
  4. 在 SCC 中注册,以获取 SUSE Linux Enterprise Server 储存库。

    root # SUSEConnect -r REGISTRATION_CODE -p SLES/15.0/x86_64
  5. 列出并禁用系统上的所有 openSUSE 储存库。

    root # zypper lr
    root # zypper mr -d REPO_IDS

    REPO_IDS 替换为所有已启用 openSUSE 储存库的空格分隔列表。

  6. 现在,添加安装所需的模块。

    root # SUSEConnect --list-extensions
    [...]
    root # SUSEConnect -p sle-module-basesystem/15.0/x86_64

    为了取代大多数 Leap 包,我们建议启用 Basesystem、Desktop Applications、Server Applications 和 Legacy 模块。此外,我们建议启用 SUSE Package Hub。

  7. 将安装的包迁移到 SUSE Linux Enterprise Server 储存库。

    root # zypper dup --force-resolution
  8. 去除孤立的包。

    root # zypper rm $(zypper --no-refresh packages --orphaned | gawk '{print $5}' | tail -n +5)
  9. 最后,重引导系统。