5 联机升级 #
SUSE 提供了直观的图形工具和简单的命令行工具,供您将正在运行的系统升级到新服务包。它们提供“回滚”服务包支持及其他功能。本章将逐步介绍如何使用这些工具来执行服务包升级。
5.1 概念概述 #
SUSE 会定期发布用于 SUSE Linux Enterprise 系列的新服务包。为了方便客户迁移到新的服务包,并最大限度减少停机时间,SUSE 支持在系统运行时进行联机迁移。
从 SLE 12 开始,YaST Wagon 已经由 YaST 迁移 (GUI) 和 Zypper 迁移(命令行)替代。此项更改的优点在于:
在首个 RPM 更新之前,系统将始终处于定义的状态。
在首个 RPM 更新之前可以取消.
如果出现错误可以轻松恢复.
可以通过系统工具执行“回滚” - 无需备份或恢复。
使用所有活动储存库.
可以跳过服务包
仅支持在服务包之间进行联机迁移。不支持通过联机迁移升级到新的主要版本。有关细节,请参见第 1 章 “升级路径和方法”。
请通过脱机迁移升级到新的主要版本。有关细节,请参见第 4 章 “脱机升级”。
如果要升级的系统是 SUSE Manager 客户端,则无法使用 YaST 在线迁移或 zypper migration
进行升级。请改为使用客户端迁移过程。
《SUSE Manager Upgrade Guide》(SUSE Manager 升级指南)对此进行了说明。
5.2 服务包迁移工作流程 #
服务包迁移可通过 YaST、zypper
或 AutoYaST 执行。
在开始服务包迁移之前,必须在 SUSE Customer Center 或本地 RMT 服务器中注册您的系统。也可以使用 SUSE Manager。
不论使用哪种方式,服务包迁移都包含以下步骤:
在注册系统中查找可能的迁移目标。
选择一个迁移目标。
请求并启用新的储存库。
运行迁移。
迁移目标列表取决于您所安装和注册的产品。如果您安装的扩展没有新的 SP 可用,则无法向您提供迁移目标。
主机可用的迁移目标列表将始终从 SUSE Customer Center 检索,并与安装的产品或扩展相关。
5.3 取消服务包迁移 #
在迁移过程中,只能在特定阶段取消服务包迁移:
包升级过程开始之前,系统上只有极小的更改,例如服务和储存库的更改。恢复
/etc/zypp/repos.d/*
以便还原到之前的状态。包升级过程开始之后,可以使用 Snapper 快照(请参见第 7 章 “通过 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 会话)。
如果您是 LTSS 订购者,请确保 LTSS 扩展储存库处于活动状态。
运行 YaST 联机更新以获得系统的最新包更新。
安装包 yast2-migration 及其依赖项(在 YaST 的 › 下)。
重启动 YaST;如果不重启动,新安装的模块将不会显示在控制中心中。
在 YaST 中,选择SUSE Linux Enterprise Server 版本,此模块会列于 或 类别下)。YaST 将显示可能的迁移目标和摘要。如果有多个迁移目标可用于系统,请从列表中选择一个。
(根据要升级的从列表中选择一个迁移目标,然后单击
继续。如果迁移工具提供更新储存库,建议单击
继续。如果“联机迁移”工具找到来自 DVD 或本地服务器的过时储存库,强烈建议您将其禁用。过时储存库来自上一个服务包。系统会自动去除来自 SUSE Customer Center 或 RMT 的所有旧储存库。
单击
,查看摘要并继续迁移过程。确认 。成功迁移后,请重启动系统。
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
。
要开始服务包迁移,请执行以下操作:
如果您已登录到要更新的计算机上某个正在运行的 GNOME 会话,请切换到文本控制台。建议不要从 GNOME 会话运行更新。请注意,这并不适用于从远程计算机登录的情况(除非您正在使用 GNOME 运行 VNC 会话)。
注册 SUSE Linux Enterprise 计算机(如果尚未注册):
tux >
sudo
SUSEConnect
--regcode YOUR_REGISTRATION_CODE如果您是 LTSS 订购者,请确保 LTSS 扩展储存库处于活动状态。
运行
zypper migration
:tux >
sudo
zypper migration
Executing 'zypper patch-check --updatestack-only' Refreshing service 'Basesystem_Module_15_x86_64'. Refreshing service 'Desktop_Applications_Module_15_x86_64'. Refreshing service 'SUSE_Linux_Enterprise_Server_15_x86_64'. Refreshing service 'Server_Applications_Module_15_x86_64'. Loading repository data... Reading installed packages... 0 patches needed (0 security patches) Executing 'zypper refresh' Repository 'SLE-Module-Basesystem15-Pool' is up to date. Repository 'SLE-Module-Basesystem15-Updates' is up to date. Repository 'SLE-Module-Desktop-Applications15-Pool' is up to date. Repository 'SLE-Module-Desktop-Applications15-Updates' is up to date. Repository 'SLE-Product-SLES15-Pool' is up to date. Repository 'SLE-Product-SLES15-Updates' is up to date. Repository 'SLE-Module-Server-Applications15-Pool' is up to date. Repository 'SLE-Module-Server-Applications15-Updates' is up to date. All repositories have been refreshed. Available migrations: 1 | SUSE Linux Enterprise Server 15 SP2 x86_64 Basesystem Module 15 SP2 x86_64 Desktop Applications Module 15 SP2 x86_64 Python 2 Module 15 SP2 x86_64 Server Applications Module 15 SP2 x86_64 2 | SUSE Linux Enterprise Server 15 SP1 x86_64 Basesystem Module 15 SP1 x86_64 Desktop Applications Module 15 SP1 x86_64 Python 2 Module 15 SP1 x86_64 Server Applications Module 15 SP1 x86_64 [num/q]:有关迁移过程的一些备注:
如果有多个迁移目标可用于系统,Zypper 会让您从列表中选择一个服务包。这与跳过一个或多个服务包一样。请注意,基础产品(SLES、SLED)的联机迁移仍然只适用于在主要版本的服务包之间进行。
默认情况下,Zypper 会使用
--no-allow-vendor-change
选项,以传递到zypper
dup
。如果某包是从第三方储存库安装的,此选项会阻止该包替换成来自 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 会话)。
用旧 SUSE Linux Enterprise 储存库更新包管理工具:
tux >
sudo
zypper
patch --updatestack-only获取当前未指派储存库的包(孤立的包)列表。这些包将不会迁移,且不保证迁移后可正常工作(因为这些包所依赖的其他包可能已通过某种不再兼容的方式发生了更改)。若要获取该列表,请运行
tux >
sudo
zypper packages --orphaned仔细检查该列表,去除所有不再需要的孤立包。记下所有剩余的孤立包,稍后需要进行比较。
运行以下命令,获取系统当前已订阅的所有储存库的列表:
tux >
sudo
zypper repos -u需要重新编写下面的储存库 URL,使其指向新服务包的相应储存库(需将
SLE-15
替换为SLE-15-SP1
)。如果储存库的 URL 如下所示:http://rmt.example.com/repo/SUSE/Products/SLE-15-Product-SLES/x86_64/product/
需将其更改为
http://rmt.example.com/repo/SUSE/Products/SLE-15-SP1-Product-SLES/x86_64/product/
需要对已启用的所有储存库执行此操作。同时请考虑对当前已禁用的储存库执行此操作,以免未来在激活这些储存库时,系统中包含错误的安装源。
要更改储存库 URL,请采取以下做法:
使用
› › 。选择一个储存库,然后单击 以进行必要更改。针对所有储存库重复此过程。使用 Zypper. 添加一个新储存库,然后去除相应的旧储存库:
tux >
sudo
zypper addrepo -f URL NAME-15-SP1tux >
sudo
zypper removerepo NAME编辑
/etc/zypp/repos.d
中的储存库配置文件。每个储存库由一个配置文件表示。必须在每个文件中更改baseurl
参数的值。
运行
zypper repos -u
检查更改,然后运行以下命令更新储存库:tux >
sudo
zypper refresh -f -s如果更新储存库失败,请再次检查是否输入了错误的 URL。如果无法解决问题,建议禁用失败的储存库。
如果正确配置了所有储存库,请再次运行
tux >
sudo
zypper refresh -f -s,以确保所有储存库都是最新的。
在开始迁移之前,建议先执行测试运行:
tux >
sudo
zypper dup -D --no-allow-vendor-change --no-recommends参数
-D
将执行试运行,即进行模拟迁移而不是实际更改系统。如果出现问题,请先解决问题,然后再继续。如果测试运行成功,请运行以下命令来执行实际迁移tux >
sudo
zypper dup --no-allow-vendor-change --no-recommends-no-allow-vendor-change
确保第三方 RPM 不会重写基础系统中的 RPM。--no-recommends
选项可确保初始安装过程中取消选择的包不会再次被添加。迁移完成且系统已引导进入新的服务包版本后,请再次运行孤立包检查:
tux >
sudo
zypper packages --orphaned将新列表与开始迁移之前生成的列表进行比较。如果列表中出现新包,原因可能是这些包已移到新服务包中的其他模块。如果以前的安装中不包含该模块,则不会更新该包。
您可以在 https://scc.suse.com/packages 上检查包所属的模块。使用
zypper addrepo
或 YaST 软件储存库模块添加缺失的模块,然后运行以下命令更新孤立的包:tux >
sudo
zypper install --no-recommends LIST OF PACKAGES现已成功迁移到新服务包!
5.7 回滚服务包 #
如果服务包对于您而言不起作用,则 SUSE Linux Enterprise 支持将系统恢复到开始服务包迁移之前的状态。前提是对 Btrfs 根分区启用了快照(自 SLES 12 开始,这一直是默认设置)。有关详细信息,请参见第 7 章 “通过 Snapper 进行系统恢复和快照管理”。
获取所有 Snapper 快照的列表:
tux >
sudo
snapper list查看输出以找到在开始服务包迁移之前刚创建的快照。
列包含相应的声明,并且 列中会将该快照标记为important
。记住 列中的快照编号,以及 列中该快照的日期。重引导系统。从引导菜单中选择15 SP2 开头的项并引导它。
,然后选择上一步中记下的日期和编号所对应的快照。此时会装载第二个引导菜单(快照中的那个)。选择以 SLES系统会引导到先前的状态,并且系统分区会以只读方式装入。以
root
身份登录,并检查您是否选择了正确的快照。另外,请确保一切如常。请注意,由于根文件系统是以只读方式装入的,因此功能可能受限。如果出现问题,或者您引导了错误的快照,请重新引导并选择从另一个快照引导 — 到此为止,系统尚未进行任何永久更改。如果快照正确并且按预期工作,请运行以下命令让更改永久生效:
tux >
sudo
snapper rollback然后重引导。在引导屏幕上,选择默认的引导项以重引导至恢复后的系统。
检查是否已正确重设置储存库配置。另外,检查是否所有产品均已正确注册。如果以上任何一项不正确,则稍后可能无法再有效地执行系统更新,或者可能会使用错误的包储存库更新系统。
请先确保系统可以访问因特网,再开始此过程。
运行以下命令以刷新服务和储存库:
tux >
sudo
zypper ref -fs运行以下命令以获得活动的储存库列表:
tux >
sudo
zypper lr仔细检查此命令的输出。为此次更新添加的服务和储存库不应该包含在列表中。例如,如果您是从 SLES15 SP1 回滚到 SLES15,则列表中必须包含
SLES15
储存库,而不包含SLES15-SP1
储存库。如果列出了错误的储存库,请将其删除,必要时,请用与您的产品或服务包版本匹配的版本替换它们。有关受支持迁移路径的储存库列表,请参见第 2.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 15 GA 迁移到 SLES 15 SP1)。
如果您的计算机由 SUSE Manager 管理,请根据 SUSE Manager 文档中所述更新计算机。https://documentation.suse.com/suma/ 上的《SUSE Manager Upgrade Guide》(SUSE Manager 升级指南)中介绍了客户端迁移过程。
5.9 从 openSUSE Leap 升级到 SUSE Linux Enterprise Server #
您可将 openSUSE 安装联机升级到 SUSE Linux Enterprise Server。此过程与第 5.5 节 “使用 Zypper 升级”类似,但需要执行一些额外的步骤。在生产系统上执行此过程之前,建议您先在复制了生产系统设置的测试系统上运行此过程。
要查看支持迁移的 openSUSE Leap 版本,请阅读第 1.1 节 “支持的 SLES 15 SP2 升级路径”。
openSUSE 储存库提供的包比 SUSE Linux Enterprise Server 储存库提供的包要多。如果您安装了 openSUSE 储存库中的任何包,迁移后,它们将不再会接收更新。如果执行下面的过程,将会去除这些包。
请确保 SUSE Linux Enterprise Server 储存库中提供了运行系统所需的全部包。您也可以检查 SUSE Package Hub 储存库中是否提供了这些包。有关细节,请参见第 20.3 节 “SUSE Package Hub”。
要从 openSUSE Leap 迁移,请执行以下过程:
切换到 TTY,例如,按 Ctrl–Alt–F1。然后以
root
身份登录。安装 SUSEConnect。
root #
zypper in SUSEConnect
在 SCC 中注册,以获取 SUSE Linux Enterprise Server 储存库。
root #
SUSEConnect -r REGISTRATION_CODE -p SLES/15.1/x86_64
列出并禁用系统上的所有 openSUSE 储存库。
root #
zypper lr
root #
zypper mr -d REPO_IDS
将 REPO_IDS 替换为所有已启用 openSUSE 储存库的空格分隔列表。
现在,添加安装所需的模块。
root #
SUSEConnect --list-extensions
[...]root #
SUSEConnect -p sle-module-basesystem/15.1/x86_64
为了取代大多数 Leap 包,我们建议启用 Basesystem、Desktop Applications、Server Applications 和 Legacy 模块。此外,我们建议启用 SUSE Package Hub。
将安装的包迁移到 SUSE Linux Enterprise Server 储存库。
root #
zypper dup --force-resolution
去除孤立的包。
root #
zypper rm $(zypper --no-refresh packages --orphaned | gawk '{print $5}' | tail -n +5)
最后,重引导系统。