5 联机升级 #
SUSE 提供了直观的图形工具和简单的命令行工具,供您将正在运行的系统升级到新服务包。两种工具都提供服务包“回滚”支持及其他功能。本章提供有关如何使用这些工具执行服务包升级的逐步说明。
5.1 概念概述 #
SUSE 会定期发布用于 SUSE Linux Enterprise 系列的新服务包。为了方便客户迁移到新的服务包,并最大限度减少停机时间,SUSE 支持在系统运行时进行在线迁移。
从 SLE 12 开始,YaST Wagon 已经由 YaST 迁移 (GUI) 和 Zypper 迁移(命令行)替代。此项更改的优点在于:
- 在首个 RPM 更新之前,系统将始终处于定义的状态。 
- 在首个 RPM 更新之前可以取消. 
- 如果出现错误,可以轻松恢复。 
- 可以通过系统工具执行“回滚” - 无需备份或恢复。 
- 使用所有活动储存库. 
- 可以跳过服务包 
仅支持在服务包之间进行在线迁移。不支持通过在线迁移升级到新的主要版本。有关详细信息,请参见 第 2 章 “升级路径和方法”。
请通过脱机迁移升级到新的主要版本。有关详细信息,请参见 第 4 章 “脱机升级”。
    如果要升级的系统是 SUSE Multi-Linux Manager 客户端,则无法通过 YaST 在线迁移或 zypper migration 进行升级。请改用 Client Migration 过程。SUSE Multi-Linux Manager Upgrade Guide 中介绍了此过程。
   
5.2 服务包迁移工作流程 #
   服务包迁移可通过 YaST、zypper 或 AutoYaST 执行。
  
在开始服务包迁移之前,必须在 SUSE Customer Center 或本地 RMT 服务器中注册您的系统。也可以使用 SUSE Multi-Linux Manager。
不论使用哪种方式,服务包迁移都包含以下步骤:
- 在注册系统中查找可能的迁移目标。 
- 选择一个迁移目标。 
- 请求并启用新的储存库。 
- 运行迁移。 
迁移目标列表取决于您所安装和注册的产品。如果您安装的扩展没有新的 SP 可用,则无法向您提供迁移目标。
主机可用的迁移目标列表将始终从 SUSE Customer Center 检索,并与安装的产品或扩展相关。
5.3 取消服务包迁移 #
在迁移过程中,只能在特定阶段取消服务包迁移:
- 在软件包升级开始之前,仅对系统进行极小的更改,例如对服务和储存库的更改。恢复 - /etc/zypp/repos.d/*以便还原到之前的状态。
- 软件包升级过程开始之后,可以使用 Snapper 快照还原到之前的状态(请参见第 10 章 “使用 Snapper 进行系统恢复和快照管理”)。 
- 选择迁移目标之后,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 参数。
  
要开始服务包迁移,请执行以下操作:
- 停用注册服务器上所有未使用的扩展,以免将来发生依赖性冲突。如果您忘记了某个扩展,YaST 稍后会检测未使用的扩展储存库,并将其停用。 
- 如果您已登录到要更新的计算机上某个正在运行的 GNOME 会话,请切换到文本控制台。建议不要从 GNOME 会话运行更新。请注意,这并不适用于从远程计算机登录的情况(除非您正在使用 GNOME 运行 VNC 会话)。 
- 运行 YaST 联机更新以获得系统的最新软件包更新。 
- 安装软件包 yast2-migration 及其依赖项(在 YaST 的 › 中)。 
- 重启动 YaST;如果不重启动,新安装的模块将不会显示在控制中心中。 
- 在 YaST 中,选择(根据要升级的 SUSE Linux Enterprise Server 版本,此模块会列于或类别下)。YaST 将显示可能的迁移目标和摘要。如果有多个迁移目标可用于系统,请从列表中选择一个。 
- 从列表中选择一个迁移目标,然后单击继续。 
- 如果迁移工具提供更新储存库,建议单击继续。 
- 如果在线迁移工具在 DVD 或本地服务器中找到过时的储存库,强烈建议您将其禁用。过时的储存库适用于以前的服务包。系统会自动去除来自 SUSE Customer Center 或 RMT 的旧储存库。 - 如果注册服务器不提供模块或扩展的迁移方法,其储存库配置将保持不变。如果储存库是第三方储存库且与特定产品版本或服务包并不相关(例如 ),通常会发生这种情况。如有必要,您可以在迁移后手动检查储存库配置。 
- 单击,查看摘要并继续迁移过程。单击确认。 
- 成功迁移后,请重启动系统。 
5.5 使用 Zypper 升级 #
   要通过 Zypper 执行服务包迁移,请使用软件包 zypper-migration-plugin 中的命令行工具 zypper migration。
  
执行服务包迁移时,YaST 会安装所有推荐的软件包。特别是在自定义最小安装的情况下,这样可能会大幅增加系统的安装大小。
    要更改此默认行为并仅允许所需的软件包,请调整 /etc/zypp/zypp.conf 中的 solver.onlyRequires 选项。
   
solver.onlyRequires = true
    此外,请编辑文件 /etc/zypp/zypper.conf 并更改 installRecommends 选项。
   
installRecommends=false
    这会更改所有与软件包相关操作的行为,例如安装补丁或新软件包的行为。要更改某次调用的 Zypper 行为,请使用 --no-recommends 参数。
  
要开始服务包迁移,请执行以下操作:
- 如果您已登录到要更新的计算机上某个正在运行的 GNOME 会话,请切换到文本控制台。建议不要从 GNOME 会话运行更新。请注意,这并不适用于从远程计算机登录的情况(除非您正在使用 GNOME 运行 VNC 会话)。 
- 注册 SUSE Linux Enterprise 计算机(如果尚未注册): - >- sudo- SUSEConnect--regcode YOUR_REGISTRATION_CODE
- 开始迁移: - >- sudo- zypper migration- 有关迁移过程的一些备注: - 如果有多个迁移目标可用于系统,Zypper 会让您从列表中选择一个服务包。这与跳过一个或多个服务包一样。请注意,基础产品(SLES、SLED)的在线迁移仍然只适用于在主要版本的服务包之间进行。 
- 默认情况下,Zypper 使用传递给 - zypper- dup的选项- --no-allow-vendor-change。如果某软件包是从第三方储存库安装的,此选项会阻止该软件包替换成来自 SUSE 的相同软件包。
- 如果 Zypper 找到来自 DVD 或本地服务器的过时储存库,强烈建议您将其禁用。系统会自动去除旧的 SUSE Customer Center 或 RMT 储存库。 
 
- 查看所有更改,特别是即将去除的软件包。键入 - 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): - 使用 Shift–Page ↑ 或 Shift–Page ↓ 键在外壳中滚动。 
- 成功迁移后,请重启动系统。 
5.6 使用 Plain Zypper 升级 #
   如果因无法访问互联网或注册服务器而未能注册您的系统,则无法使用 YaST 迁移或 zypper migration 迁移到新服务包。在这种情况下,您仍可以通过普通的 Zypper 和一些手动交互来迁移到新服务包。
  
只有因无法访问互联网或注册服务器而未能注册的系统才支持通过此路径迁移到新服务包。例如,位于受特殊保护的网络中的计算机。如果您的系统已注册,请使用 YaST 或 Zypper 迁移。
此迁移路径要求您要迁移的系统有权访问安装源。例如,可以设置 RMT 服务器或 SLP 服务器来实现此目的。
此外,系统必须能够访问所安装产品版本的最新更新储存库。
- 如果您已登录到要迁移计算机上正在运行的图形会话,请注销该会话,并切换到文本控制台。不建议从图形会话内部运行更新。请注意,这并不适用于从远程计算机登录的情况(除非您正在使用 X 运行 VNC 会话)。 
- 更新软件包管理工具: - >- sudo- zypperpatch --updatestack-only
- 确保 - /etc/zypp/repos.d/中的所有 SUSE Linux Enterprise Server 储存库配置文件都使用变量- $releasever:- >- grep baseurl /etc/zypp/repos.d/*.repo/etc/zypp/repos.d/rmt.repo:baseurl=https://rmt.example.com/repo/SUSE/Products/SLE-15-SP5-Product-SLES/x86_64/product/ /etc/zypp/repos.d/updates.repo:baseurl=https://updates.suse.com/SUSE/Products/SLE-Product-SLES/$releasever/x86_64/product[...]- 在此示例中,文件 - updates.repo使用变量,而- rmt.repo则是对版本字符串- 15-SP5进行硬编码。要将所有储存库配置文件中的所有- 15-SP5都替换为- $releasever,请运行:- >- sudo- sed -i 's/15-SP5/${releasever}/g' /etc/zypp/repos.d/*.repo- 如有必要,请使用不同的版本字符串重复此命令,以确保更新所有储存库配置文件。 
- 检查是否正确配置了所有储存库: - >- sudo- zypper --releasever=15-SP7 repos -u- 现在,您应该会看到储存库 URL 中包含 - 15-SP7。请注意,某些第三方储存库可能不受版本控制。假定它们适用于所有 SUSE Linux Enterprise Server 版本。
- 将所有储存库都切换并更新至 15 SP7: - >- sudo- zypper --releasever=15-SP7 refresh -f -s- 如果更新储存库失败,请再次检查是否输入了错误的 URL。如果无法解决问题,建议禁用失败的储存库。 
- 测试迁移: - >- sudo- zypper --releasever=15-SP7 dup -D --no-allow-vendor-change --no-recommends- 参数 - -D将执行试运行,即模拟迁移而不实际更改系统。如果出现问题,请先解决问题,然后再继续。- 选项 - -no-allow-vendor-change可防止第三方软件包替换基础系统中的 RPM 软件包。选项- --no-recommends确保初始安装过程中取消选择的软件包不会再次被添加。
- 升级整个发行套件: - >- sudo- zypper --releasever=15-SP7 dup --no-allow-vendor-change --no-recommends- 使用上面的命令,zypper 会提前下载所有软件包。如果您的互联网连接可能失败,采用这种做法会更可靠。要下载并安装堆中的软件包,请运行: - >- sudo- zypper zypper --releasever=15-SP7 dup --no-allow-vendor-change --no-recommends --download-in-heaps- 发行套件更新完毕后,SUSE Linux Enterprise Server 会将 - $releasever变量设置为新版本,这样您就无需再使用- --releasever选项指定该版本。
- 迁移成功后,请重引导系统。 
5.7 回滚服务包 #
如果服务包对于您而言不起作用,则 SUSE Linux Enterprise 支持将系统恢复到开始服务包迁移之前的状态。前提是对 Btrfs 根分区启用了快照(自 SLES 12 开始,这一直是默认设置)。有关详细信息,请参见第 10 章 “使用 Snapper 进行系统恢复和快照管理”。
- 获取所有 Snapper 快照的列表: - >- sudosnapper list- 查看输出以找到在开始服务包迁移之前刚创建的快照。 列包含相应的说明,并且 列中会将该快照标记为 - important。记住 列中的快照编号,以及 列中该快照的日期。
- 重新启动系统。从引导菜单中选择,然后选择上一步记下的日期和编号所对应的快照。此时会加载第二个引导菜单(快照中的那个)。选择以 SLES 15 SP7 开头的条目并将其引导。 
- 系统会引导到先前的状态,并且系统分区会以只读方式挂载。以 - root身份登录,并检查您是否选择了正确的快照。另外,请确保一切如常。请注意,由于根文件系统是以只读方式挂载的,因此功能可能受限。- 如果出现问题,或者您引导了错误的快照,请重新引导并选择从另一个快照引导 — 到此为止,系统尚未进行任何永久更改。如果快照正确并且按预期工作,请运行以下命令让更改永久生效: - >- sudosnapper rollback- 重引导计算机。在引导屏幕上,选择默认的引导项以重引导至恢复后的系统。 
- 检查是否已正确重置储存库配置。另外,检查是否所有产品均已正确注册。如果以上任何一项不正确,则稍后可能无法再有效地执行系统更新,或者可能会使用错误的软件包储存库更新系统。 - 请先确保系统可以访问互联网,再开始此过程。 - 运行以下命令以刷新服务和储存库: - >- sudozypper ref -fs
- 运行以下命令以获得活动的储存库列表: - >- sudozypper lr- 仔细检查此命令的输出。为此次更新添加的服务和储存库不应该包含在列表中。例如,如果您是从 SLES 15 SP7 回滚到 SLES 15 GA,则列表中必须包含 - SLES15-GA储存库,而不包含- SLES15-SP7储存库。- 如果列出了错误的储存库,请将其删除,必要时,请用与您的产品或服务包版本匹配的版本替换它们。有关受支持迁移路径的储存库列表,请参见第 1.3 节 “模块依赖项和生命周期”。(请注意,没有必要进行手动干预,因为储存库会自动更新,但最好进行校验并执行任何必要的更正。) 
- 最后,通过运行以下命令检查所有已安装产品的注册状态: - >- sudoSUSEConnect --status- 所有产品都应该报告为 - Registered。若非如此,请运行以下命令修复注册:- >- sudoSUSEConnect --rollback
 
现在,您已成功将系统恢复到就在开始服务包迁移之前捕获的状态。
5.8 使用 SUSE Multi-Linux Manager 升级 #
SUSE Multi-Linux Manager 是一款服务器解决方案,用于提供适用于 SUSE Linux Enterprise 客户端的更新、补丁和安全更新。它随附了一套工具和基于 Web 的用户界面,用于执行管理任务。有关 SUSE Multi-Linux Manager 的详细信息,请参见 https://www.suse.com/products/multi-linux-manager/。
SP 迁移允许从一个服务包 (SP) 迁移到同一个主要版本中的另一个服务包(例如,从 SLES 15 GA 迁移到 SLES 15 SP7)。
如果您的计算机由 SUSE Multi-Linux Manager 管理,请按照 SUSE Multi-Linux Manager 文档中的说明对其进行更新。您可以查看 https://documentation.suse.com/multi-linux-manager/ 上的 SUSE Multi-Linux Manager Upgrade Guide,了解 Client Migration 过程。
5.9 从 openSUSE Leap 升级到 SUSE Linux Enterprise Server #
您可以将 openSUSE Leap 安装升级到 SUSE Linux Enterprise Server。要了解哪些 Leap 版本支持迁移,请参见第 2.3 节 “支持的 SLES 15 SP7 升级和迁移路径”。
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.9.1 使用 yast2 migration 升级 #
以下过程与第 5.4 节 “使用在线迁移工具 (YaST) 升级”类似,但需要执行一些额外的步骤。在生产系统上执行此过程之前,建议您先在复制了生产系统设置的测试系统上运行此过程。
yast2 migration 将 openSUSE Leap 升级到 SUSE Linux Enterprise Server #要从 openSUSE Leap 迁移到 SUSE Linux Enterprise Server,请执行以下步骤:
- 关闭所有未使用的应用程序,并切换到 TTY(例如按 Ctrl–Alt–F1)。然后以 - root身份登录。
- 安装 yast2-migration 和 rollback-helper 软件包。 - #- zypper in yast2-migration rollback-helper
- 启用 - rollback-helper服务:- #- systemctl enable rollback
- 在 SUSE Customer Center 中注册系统: - #- yast2 registration
- 执行迁移: - #- yast2 migration- 如果发生软件包冲突,YaST 提供了一个可供选择的解决方案列表。 
- 重引导系统: - #- reboot
现在,您已成功将系统迁移到 SUSE Linux Enterprise Server。继续第 6 章 “完成升级”,去除孤立的软件包以确保您运行的是完全受支持的 SUSE Linux Enterprise 安装。
如果您在迁移后遇到问题,可以像升级服务包一样还原迁移。有关说明,请参见第 5.7 节 “回滚服务包”。
5.9.2 使用 yast2 migration_sle 升级 #
从 Leap 15.4 开始,以技术预览的形式提供了从 openSUSE Leap 迁移到 SUSE Linux Enterprise Server 的简化方法。
yast2 migration_sle 将 openSUSE Leap 升级到 SUSE Linux Enterprise Server #要从 openSUSE Leap 迁移到 SUSE Linux Enterprise Server,请执行以下步骤:
- 关闭所有未使用的应用程序(建议)。 
- 安装 yast2-migration-sle 和 rollback-helper 软件包。 - >- sudo- zypper in yast2-migration-sle rollback-helper
- 启用 - rollback-helper服务:- >- sudo- systemctl enable rollback
- 打开 YaST 并选择 › ,或运行: - >- sudo- yast2 migration_sle- 向导将指导您完成迁移过程。如果有等待中的更新,可以在注册系统之前安装这些更新。要注册系统,请输入您的注册代码和电子邮件地址。要注册到本地 RMT 服务器中,请提供其 URL 而不是注册代码,并将电子邮件地址留空。 - 注册系统后,迁移进程将添加 SUSE Linux Enterprise Server 储存库,并安装 SLE 软件包以替换 openSUSE 软件包。 
- 重引导系统: - >- sudo- reboot
现在,您已成功将系统迁移到 SUSE Linux Enterprise Server。继续第 6 章 “完成升级”,去除孤立的软件包以确保您运行的是完全受支持的 SUSE Linux Enterprise 安装。
如果您在迁移后遇到问题,可以像升级服务包一样还原迁移。有关说明,请参见第 5.7 节 “回滚服务包”。