ZSystems/将SLES升级到openSUSE

跳转到:导航搜索

LinuxONE社区云仅提供SLES、RHEL和Ubuntu作为开发/测试的可能Linux发行版,更准确地说,是RHELubuntuSLES15 SP4(后者是本指南的先决条件)。


本教程将指导您将虚拟机从当前的SLES 15 Service Pack 4升级到openSUSE Tumbleweed(滚动发行版,与(其他)固定版SLES/openSUSE不同)。

LinuxONE社区实例的SLES发行版已更新至SLES 15 SP4(截至2025年9月)。


禁用SLES

您可以使用cat /etc/os-release来验证您的SLES系统。

sudo zypper services显示所有SLES仓库背后的服务名称。您可以使用zypper removeservice ${alias}禁用它们。

示例

sudo zypper removeservice SMT-http_lxslsmt

注意:会产生一条错误消息,指出服务未(不再?)安装(但并不重要,反正只是一个例子)

由于/etc/zypp/services.d中的所有服务都与SLES相关(截至本文撰写时,SLES 15-SP4——grep文件显示了这一点)并且我们无论如何都打算升级到Tumbleweed,因此直接删除所有服务的配置文件是合理的(升级到Tumbleweed之后)。

sudo su -
cd /etc/zypp/services.d
rm -rf *

或者,可以将services.d目录移动到(例如)services.d.old,并创建一个新的(空)services.d目录(类似于(旧的)repos.d目录,见下文)。

注意:与SP1/2不同,SP4(至少从2023年9月起安装在LinuxONE实例上)不再只安装并启用一个服务,而是有几个(大约六七个)。其中至少一个会导致即使在升级/切换到Tumbleweed之后,原始的SLES仓库(及其内容!)仍然被拉入。这可能很危险,因为最终可能会得到一个“混合系统”——一些软件包来自SLES(从Tumbleweed降级),另一些来自Tumbleweed。这样的系统可能无法正常启动。由于我们没有提供对LinuxONE实例串行(启动)控制台访问的Web UI,这可能非常难以调试(和修复),并且很可能需要设置一个新的LinuxONE实例。

长话短说:一旦您的实例在Tumbleweed上运行,这些服务都不再需要,因为它们都与SLES相关。

更优雅的解决方案是使用具有动态上限的zypper removeservice,如下所述

NUM_OF_SVCS=$(zypper ls | tail -1 | cut -d\| -f1 | sed 's/  *$//')
for i in $(seq 1 $NUM_OF_SVCS); do sudo zypper removeservice $i; done

升级到openSUSE Leap

SLES 15 SP1要求先升级到openSUSE Leap的最新版本(截至本文撰写时为15.5),然后才能升级到openSUSE Tumbleweed。注意:对于预装了SLES 15 SP2或更高版本的系统,可以跳过此步骤,但执行此操作可能仍然更安全(对Tumbleweed的升级更“顺畅”)。

  1. 验证您的存储库
sudo zypper repos --uri

注意:对于当前的LinuxONE实例,/etc/zypp/repos.d包含大约50个(!)仓库条目——尽管并非所有都已启用,但数量仍然很多...

  1. 一次禁用大量存储库
sudo mv /etc/zypp/repos.d /etc/zypp/repos.d.old
sudo mkdir /etc/zypp/repos.d 
  1. 添加所有必需的Leap存储库
sudo zypper ar -f https://download.opensuse.org/distribution/leap/15.6/repo/oss/ "OSS Leap 15.6"
sudo zypper ar -f https://download.opensuse.org/distribution/leap/15.6/repo/non-oss/ "Non-OSS Leap 15.6"
  1. 验证您的存储库
sudo zypper repos --uri

注意:当使用zypper removeservice移除服务时,下面的内容显然不适用,仅当使用rm -rf *强制移除/etc/zypp/services.d下的服务时才适用。

zypper repo --uri检查服务<==>仓库配对/"连接"。=> 一旦所有服务都被删除,zypper repo --uri会自动删除每个(以前)对应的仓库,如消息所示(待定:这些服务<==>仓库关联是SLES特有的,还是openSUSE也存在/可能存在?=> 搞清楚)。

hbarsles15sp4:/etc/zypp # zypper repos --uri
Warning: Unknown service 'Basesystem_Module_s390x': Removing orphaned service 
repository 'Basesystem_Module_s390x:SLE-Module-Basesystem15-SP4-Pool'
Removing repository 'SLE-Module-Basesystem15-SP4-Pool' 
................................................................................ ..................................................[done]
Warning: Unknown service 'Development_Tools_Module_s390x': Removing orphaned 
service repository 'Development_Tools_Module_s390x:SLE-Module-DevTools15-SP4- Debuginfo-Updates'
Removing repository 'SLE-Module-DevTools15-SP4-Debuginfo-Updates' 
.......................................................................................................................[done]
Warning: Unknown service 'Public_Cloud_Module_s390x': Removing orphaned service 
repository 'Public_Cloud_Module_s390x:SLE-Module-Public-Cloud15-SP4-Updates'
Removing repository 'SLE-Module-Public-Cloud15-SP4-Updates' 
.............................................................................................................................[done]
[...]

=> 事实上,ls -l /etc/zypp/repos.d(之后)不显示任何条目。

  1. 刷新以更新密钥
sudo zypper refresh
  1. 执行升级
sudo zypper dup --allow-vendor-change --force-resolution

目前(SLES15 SP4 => openSUSE Leap 15.6 升级)会抱怨一个冲突的密钥文件——只需回答y,因为这只是2个升级步骤中的第1步,因此只是一个临时系统状态。

  1. 重启(可能需要一些时间)
sudo reboot
  1. 验证您确实正在运行openSUSE leap
grep -ci leap /etc/os-release

在成功升级到openSUSE的Leap版本后,应返回一个>= 1的数字。

  1. 确保没有剩余的推荐软件包待安装
sudo zypper inr
  1. 移除可能残留的SLES组件
rpm -qa | grep -i sle
## Updated as of Sep 2, 2025
sudo zypper remove gtk2-branding-SLE-15.0-150400.13.7.noarch

zypper remove命令中提到的软件包仅为示例——您的软件包名称可能有所不同。)

  1. baseproduct符号链接更改为Leapsudo zypper inr所需,警告明确指出)
hbarsles15sp4:/etc/products.d # rm baseproduct
hbarsles15sp4:/etc/products.d # ln -s Leap.prod baseproduct

(更改符号链接也很重要,以防止某些SLES特定的仓库被zypper inr(再次)拉入,例如)

repo-sle-debug-update.repo
repo-sle-update.repo
  1. 删除Leap特有的和可能重新出现的sle更新仓库
sudo rm /etc/zypp/repos.d/repo-backports-*
sudo rm /etc/zypp/repos.d/repo-sle*

重新运行sudo zypper inr

(这次应该不会显示警告)

升级到openSUSE Tumbleweed

  1. 移除Leap/SLES仓库(仅当它们仍在/etc/zypp/repos.d中时)
sudo zypper rr 2
sudo zypper rr 1
  1. 有一个新的服务用于维护特定 (open)SUSE 版本的仓库。为了安装它,临时获取Tumbleweed仓库以便方便地安装所有openSUSE仓库
sudo zypper ar -f http://download.opensuse.org/ports/zsystems/tumbleweed/repo/oss/ "temp"
sudo zypper in openSUSE-repos-Tumbleweed
sudo zypper rr temp 

=> 这应该会自动获取“Tumbleweed”所需的所有开源仓库。


  1. 手动添加NonOSS仓库(因为该服务只在zypper refs刷新后添加OSS仓库)

zypper refs刷新)

sudo zypper ar -f http://download.opensuse.org/ports/zsystems/tumbleweed/repo/non-oss/ "Tumbleweed-NonOSS"
sudo zypper ar -f http://download.opensuse.org/ports/zsystems/source/tumbleweed/repo/non-oss/ "Tumbleweed-Source-NonOSS"


  1. 验证您的存储库
sudo zypper repos --uri
  1. 刷新以更新密钥
sudo zypper refresh
  1. 执行升级
sudo zypper dup --allow-vendor-change --force-resolution
  1. 重启(可能需要一些时间)
sudo reboot
  1. 验证您确实正在运行openSUSE Tumbleweed
uname -r

至少在本文撰写时,应该返回内核版本6.6.x,并且

grep -ci tumbleweed /etc/os-release

应返回一个大于等于1的数字

  1. 确保没有剩余的推荐软件包待安装
sudo zypper inr

升级到Tumbleweed后使用某些osc(子)命令可能出现的问题

注意:防止上述错误,请按如下方式安装osc

sudo zypper in --recommends osc

然后osc vc命令应该可用。

运行osc vc时出现错误消息

/usr/lib/build/vc not found

原因:默认情况下,osc在安装时安装推荐的软件包。特别是,缺少一个名为build--.noarch的软件包——该软件包提供了osc vc(子)命令的插件。

# check which pkg provides /usr/lib/build/vc
rpm -qf /usr/lib/build/vc

解决方案:从Tumbleweed中移除osc,然后从openSUSE:Tools仓库安装osc包括推荐的软件包(好处:您可以获得osc及其依赖项的“最新和最好”(TM)稳定版本)

sudo zypper remove osc
sudo zypper ar -f https://download.opensuse.org/repositories/openSUSE:/Tools/openSUSE_Tumbleweed/openSUSE:Tools.repo
sudo zypper dup --allow-vendor-change
sudo zypper in --recommends osc