SDB:系统升级到 Leap 15.6

跳转到:导航搜索
本指南展示了如何使用 Zypper 对 openSUSE 进行实时分发升级。



摘要

本页面解释了如何运行一系列命令行步骤以实时升级您的系统到最新版本的 openSUSE。从先前版本进行实时升级是官方支持的。这允许在原地执行完整的操作系统升级,而无需从头重新加载所有内容。

与使用安装介质进行离线升级相比,实时升级既有优点也有缺点。

优点包括

  • 您只需下载需要升级的软件包,从而大大减少带宽使用。
  • 在升级期间,您仍然可以使用您的工作站(尽管不建议这样做);唯一的停机时间是升级后的重启。
  • 您无需使用 DVD,也无需 DVD 刻录机。您无需使用 USB 驱动器。这是因为您启动现有系统,并从网络安装所有内容。

缺点

  • 如果由于任何原因升级中断(例如停电、网络断开)且过程无法继续,您的系统可能会损坏(这当然取决于过程停止的位置)。
  • 如果您有多个系统要升级,每次都会使用带宽,因此最好下载 ISO 镜像。
  • 它不会像离线 DVD 升级那样执行所有清理和维护工作。

如果您对离线升级(又称传统或 DVD 升级)感兴趣,请阅读 离线升级

升级 Leap Micro (基于事务的系统)

从 Leap Micro 6.0 升级到 Leap Micro 6.1 的示例将是

 $ sudo transactional-update shell
 $ zypper --releasever 6.1 dup
 $ exit # exit the transactional shell
 $ reboot

用户有一个包含升级版本的新快照,并且可以选择在升级不顺利的情况下引导到之前的 btrfs 快照。

迁移到新的 Leap 版本

一般规则

  • 请务必阅读您将要安装的新版本的烦人错误列表。其中一些可能会影响更新过程。通常,错误旁边会列出一些解决方案或变通方法,因此请确保您已为即将出现的问题做好准备。此外,请阅读 发布说明,其中列出了新版本中的更改和故障。
  • 所有重要数据都必须在开始升级过程之前进行备份。
  • 在升级分发之前,您必须使用当前运行版本的最新更新来更新系统。
  • 升级时不要跳过版本!例如:不要从 15.1 升级到 15.4。相反,从 15.1 升级到 15.2,然后到 15.3,然后才能从 15.3 升级到 15.4。

关于端口的注意事项(非 Intel 架构)

从旧版本(在关闭 Leap 差距之前)迁移到 15.3+ 的 ppc64le 和 aarch64 上的 Leap 用户应从其系统中删除所有 URL 中包含“/ports/”的仓库。Leap 的现有端口仓库只是符号链接。这将确保它们不会重复获取相同数据,并会加快仓库刷新速度。
x86_64、s390x 上的用户以及在 15.3 之后(适用于所有架构)全新安装 Leap 的用户不受影响。
所有 Leap rpm 都应从主 oss 仓库下载,

 http://download.opensuse.org/distribution/leap/$releasever/repo/oss/

此外,也从非 oss 仓库下载,

 http://download.opensuse.org/distribution/leap/$releasever/repo/-non-oss/

并从更新仓库下载,如 发行说明 中指定。
这不适用于 Tumbleweed 用户,因为 Tumbleweed 仍然积极地为非 Intel 架构利用 ports 子项目。

用户可以安装 openSUSE-repos,它始终提供最新的仓库定义。该软件包在 Leap 15.5、Tumbleweed 和 Leap Micro 5.4 中引入。较旧版本的用户需要从 software.opensuse.org 手动下载。

备份

我们建议使用基于 btrfs 的安装和 snapper openSUSE:Snapper_Tutorial 以实现轻松回滚。

检查当前版本

按如下方式查找您当前运行的 openSUSE 版本

lsb_release -d

more /etc/os-release

额外仓库处理

支持的起点是已应用所有当前更新的最新 openSUSE Leap 版本,但这不包括您可能添加的任意 openSUSE Build Service 仓库。我们建议您先禁用所有 OBS 仓库,执行升级,然后再重新启用它们。

尽管 zypper dup 现在可以更好地处理升级过程中的额外仓库,但可能需要手动检查新版本是否有可用的替换仓库,并在升级前调整 /etc/zypp/repos.d 中的 URL,或者在升级后重新添加仓库(参见步骤 6)。

然而,系统升级可能是一个完美的时机来删除一些仓库,因为太多的仓库会使维护复杂化。例如,假设我们有一些 Xfce 或 Plasma 仓库,我们为了获得更新版本而激活它们(比如我们需要一个功能或解决在新版本中处理的问题):现在是恢复到主线版本的完美时机。这将是考虑删除我们真正不需要的所有 HOME 仓库的机会。

但是请记住,删除仓库会导致问题,即从其中安装的每个软件包都将恢复到另一个仓库(如果找到),或者被删除,或者保留在旧版本,具体取决于管理员的选择。如果您不打算立即清理其软件包,保留仓库处于活动状态可能是一个更好的方法。一个典型的例子是 Packman。

我们删除的每个仓库都会导致 zypper 在更新期间询问如何处理从它们安装的软件包:保留还是通过供应商更改升级。如果我们打算在系统升级后重新添加仓库,策略将是“保留”,否则是“更新”。我们可以使用“--allow-vendor-change”,但这可能会产生意想不到的后果,因为 zypper 将评估是否有任何软件包更适合从另一个仓库获取版本,同时考虑它们的优先级。

因此,您必须选择要走的道路,作为管理员 ;-)


执行升级

0. 新的 4096 位 RSA 签名密钥

新的 4096 位 RSA 签名密钥作为 openSUSE Leap 15.5 和 15.4 的一部分通过维护更新引入,此外还引入了新的 4096 位 RSA backports 密钥。

Leap 15.4 用户应在升级 15.5 之前更新其系统。

15.4 版本的用户目前需要手动导入密钥

 rpm --import /usr/lib/rpm/gnupg/keys/gpg-pubkey-29b700a4-62b07e22.asc

并且还需要导入新的 4096 openSUSE Backports 密钥

 rpm --import /usr/lib/rpm/gnupg/keys/gpg-pubkey-25db7ae0-645bae34.asc

我们很快将在 Leap 15.4 中添加自动导入功能,以实现无缝迁移到 Leap 15.5。

您可以从这里获取密钥 2023 gpg-pubkey-25db7ae0-645bae34.asc2023 gpg-pubkey-29b700a4-62b07e22.asc

1. 将系统更新到最新软件包

zypper refresh
zypper update

欲了解更多信息,请阅读 Zypper 用法

2. 更新仓库

检查 /etc/zypp/repos.d/ 中定义的 Leap 仓库是否已使用 $releasever 变量。如果它们仍然硬编码有特定的 Leap 版本号,则您需要先修改它们。例如,假设您当前的版本是 Leap 15.5,则可以通过以下方式完成

sed -i 's/15.5/${releasever}/g' /etc/zypp/repos.d/*.repo
Icon-warning.png
警告: 由于“缩小 Leap 差距”,一些在 15.3 版本中使用“openSUSE_Leap_${releasever}”的仓库可能会将目标更改为 15.4 版本的“${releasever}”(从现在开始,SLES 和 Leap 将相同,因此 OBS 无需保留两个二进制相同的 rpm 版本)。显然,上述查询无法处理此问题,因此您将收到“Repository 'xxxxx' is invalid.”错误。
解决方案 - 按照仓库 URL,但向上一个级别从“openSUSE_Leap_15.3”,并检查可用目标。如果存在“15.4”,则手动更正 URL。

3. 用新仓库刷新

切换所有仓库并刷新到 15.6

zypper --releasever=15.6 refresh

4. 执行完整分发升级

现在执行完整的分发升级。

Icon-warning.png
警告:强烈建议您在 X-window 图形模式之外运行升级。因此建议您从运行级别 3(文本 + 网络)或虚拟控制台运行该命令。不幸的是,很多时候 WIFI 连接仅在运行级别 5 中管理/可用,因此虚拟文本控制台可能是最好的选择,同时在后台保持登录图形控制台。人们在升级过程中遇到 X 会话停止/崩溃,导致升级中止,这反过来又使系统处于不一致的状态。要更改到运行级别 3,请参阅 SDB:Switch_runlevel。要保持在运行级别 5,但使用“虚拟控制台”,请键入 control-alt-F1(例如)。
zypper --releasever=15.6 dup

使用上述命令,zypper 将提前下载所有软件包——如果您的互联网连接可能出现故障,这会更可靠。要批量下载软件包并批量安装它们,请使用

zypper --releasever=15.6 dup --download-in-heaps

完成 dup 后,openSUSE 会将 releasever 变量设置为新版本。

如果您在官方发布日期之前执行了上述分发升级,您可能已安装了发布候选版 (RC) 或里程碑版本,现在需要重复最终的 zypper dup 步骤才能接收最终版本。

5. 重启

升级后,重启系统。

6. (可选) 添加额外仓库

搜索您之前使用过的更新的 openSUSE Leap 15.6 兼容第三方仓库——如果您仍然需要它们——并添加它们。

Icon-warning.png
警告:请谨慎使用。使用第三方仓库可能会破坏您的系统或导致不稳定。
zypper addrepo --name <name> <url> <alias>

或者,如果您有 .repo 文件的 URL

zypper ar <url.repo>

执行 zypper up 可能足以从这些额外仓库更新您的软件。

之后

发现并享受 :)

此外,可以不时运行 zypper up 以确保您拥有已启用的各种仓库的最新可用软件包。YOU (Yast Online Update) 仅处理来自官方仓库的安全更新。


旧版迁移

从 Leap < 15.2 升级

检查更新仓库是否存在并已启用

zypper repos --uri

检查是否http://download.opensuse.org/update/leap/15.3/oss/存在于 URI 列的某个值中,并且 Enabled 列为 Yes,如以下示例所示 - 将 15.3 替换为您当前运行的版本

#  | Alias           | Name            | Enabled | Refresh | URI
---+-----------------+-----------------+---------+---------+----------------------------------------------------
1  | repo-update     | repo-update     | Yes     | Yes     | http://download.opensuse.org/update/leap/15.3/oss/

如果 Enabled 列显示 No,请通过以下命令启用它

zypper modifyrepo --enable repo-update
其中“repo-update”是更新仓库的名称。
添加更新仓库
适用:如果您的预升级系统是 15.0 或更早版本,并且更新仓库尚不存在。
zypper addrepo --check --refresh --name 'openSUSE-Leap-15.0-Update' http://download.opensuse.org/update/leap/15.0/oss/ repo-update
将上述 15.0 替换为您的当前 openSUSE 版本。

注意:openSUSE Leap 15.3 添加了两个额外的更新仓库,一个用于 openSUSE Backports,一个用于 SUSE Linux Enterprise,这些额外的仓库在在线安装期间使用,并通过 openSUSE-release 的维护更新与 Leap 15.3 GA 一起交付到 Leap 15.3 系统。这在发行说明中有深入的介绍。

将 /var/cache 移动到单独的子卷

适用:如果根文件系统是 Btrfs,并且您正在从 Leap < 15.0 升级。

/var/cache 包含大量高度易失性数据,例如带有不同版本 RPM 软件包的 Zypper 缓存,用于每次更新。由于存储的数据大多是冗余但高度易失的,快照占用的磁盘空间会非常快速地增加。为解决此问题,将 /var/cache 移动到单独的子卷

  • 找出根文件系统的设备名称
df /
  • 识别所有其他子卷的父子卷。对于 openSUSE 15.1 安装,这是一个以 @ 命名的子卷
btrfs subvolume list / | grep '@'
  • 如果此命令的输出为空,则您没有以 @ 命名的子卷。在这种情况下,您可以继续使用子卷 ID 5,该 ID 在旧版本的 openSUSE 中使用。
  • 将特定子卷挂载到临时挂载点
mount /dev/<root-device> -o subvol=@ /mnt
如果子卷名称中没有 @,则挂载子卷 ID 5
mount /dev/<root-device> -o subvolid=5 /mnt
  • /mnt/var/cache 可能已经存在,并且可能与 /var/cache 是同一个目录。为避免数据丢失,请将其移动
mv /mnt/var/cache /mnt/var/cache.old
  • 创建新子卷
btrfs subvol create /mnt/var/cache
  • 如果现在有一个目录 /var/cache.old,请将其移动到新位置
mv /var/cache.old/* /mnt/var/cache
如果不是这种情况,请执行
mv /var/cache/* /mnt/var/cache/
  • 移动后(可选)删除 /mnt/var/cache.old
rm -rf /mnt/var/cache.old
  • 从临时挂载点卸载子卷
umount /mnt
  • 为新的 /var/cache 子卷添加一个条目到 /etc/fstab。使用现有子卷作为模板进行复制。确保 UUID 不变(这是根文件系统的 UUID),并将子卷名称及其挂载点一致地更改为 /var/cache。
  • 挂载 /etc/fstab 中指定的新子卷
mount /var/cache

跨架构迁移

不支持从 32 位 openSUSE 升级到 Leap。Leap 仅支持 64 位。如果您的硬件支持 x86_64,您可以先将 Leap 升级到 64 位。请参阅 32 位到 64 位升级 - 请注意,这些说明仅在 13.2 上进行过测试,可能不再适用。

在 AArch64 架构(64 位 ARM)上,不支持从 Leap 15.0 升级到 Leap >= 15.1。请在这些系统上进行全新安装。

请注意,原则上,此升级过程仅被视为“尽力而为”。这意味着由于某些第三方软件包和无数可能的配置,某些组合可能会在升级时导致失败。

其他迁移场景

迁移到 openSUSE Tumbleweed

注意:根据 factory 邮件列表,已在 openQA 中测试了从 openSUSE 12.x 直接升级到 Tumbleweed(直到快照 1101)。目前(2017 年 11 月)正在测试从 13.x 和 42.x 直接升级到 TW。但是,这并不意味着您应该这样做!您可能会遇到未知问题。

迁移到 SUSE Linux Enterprise

如果您有兴趣从 openSUSE Leap 迁移到 SUSE Linux Enterprise。请遵循 我们的迁移到 SUSE Linux Enterprise 指南