ZSystems/将SLES升级到openSUSE
LinuxONE社区云仅提供SLES、RHEL和Ubuntu作为开发/测试的可能Linux发行版,更准确地说,是RHEL、ubuntu和SLES15 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的升级更“顺畅”)。
- 验证您的存储库
sudo zypper repos --uri
注意:对于当前的LinuxONE实例,/etc/zypp/repos.d包含大约50个(!)仓库条目——尽管并非所有都已启用,但数量仍然很多...
- 一次禁用大量存储库
sudo mv /etc/zypp/repos.d /etc/zypp/repos.d.old sudo mkdir /etc/zypp/repos.d
- 添加所有必需的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"
- 验证您的存储库
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(之后)不显示任何条目。
- 刷新以更新密钥
sudo zypper refresh
- 执行升级
sudo zypper dup --allow-vendor-change --force-resolution
目前(SLES15 SP4 => openSUSE Leap 15.6 升级)会抱怨一个冲突的密钥文件——只需回答y,因为这只是2个升级步骤中的第1步,因此只是一个临时系统状态。
- 重启(可能需要一些时间)
sudo reboot
- 验证您确实正在运行openSUSE leap
grep -ci leap /etc/os-release
在成功升级到openSUSE的Leap版本后,应返回一个>= 1的数字。
- 确保没有剩余的推荐软件包待安装
sudo zypper inr
- 移除可能残留的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命令中提到的软件包仅为示例——您的软件包名称可能有所不同。)
- 将
baseproduct符号链接更改为Leap(sudo 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
- 删除Leap特有的和可能重新出现的sle更新仓库
sudo rm /etc/zypp/repos.d/repo-backports-* sudo rm /etc/zypp/repos.d/repo-sle*
重新运行sudo zypper inr
(这次应该不会显示警告)
升级到openSUSE Tumbleweed
- 移除Leap/SLES仓库(仅当它们仍在
/etc/zypp/repos.d中时)
sudo zypper rr 2 sudo zypper rr 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”所需的所有开源仓库。
- 手动添加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"
- 验证您的存储库
sudo zypper repos --uri
- 刷新以更新密钥
sudo zypper refresh
- 执行升级
sudo zypper dup --allow-vendor-change --force-resolution
- 重启(可能需要一些时间)
sudo reboot
- 验证您确实正在运行openSUSE Tumbleweed
uname -r
至少在本文撰写时,应该返回内核版本6.6.x,并且
grep -ci tumbleweed /etc/os-release
应返回一个大于等于1的数字
- 确保没有剩余的推荐软件包待安装
sudo zypper inr
升级到Tumbleweed后使用某些osc(子)命令可能出现的问题
注意:为防止上述错误,请按如下方式安装osc
sudo zypper in --recommends osc
然后osc vc命令应该可用。
运行osc vc时出现错误消息
/usr/lib/build/vc not found
原因:默认情况下,osc在安装时未安装推荐的软件包。特别是,缺少一个名为build-的软件包——该软件包提供了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