3 准备升级 #
在开始升级过程之前,请确保您的系统已准备妥当。除了其他工作以外,准备工作还包括备份数据和查看发行说明。下一章将指导您完成这些步骤。
3.1 确保系统是最新的 #
   
   仅支持从最新的修补级别升级系统。运行 zypper
   patch 或启动 YaST 模块 ,以确保已安装最新的系统更新。
  
2023 年年中,SUSE Linux Enterprise 15 产品系列使用的签名密钥从 RSA 2048 位密钥改为新的 RSA 4096 位密钥。更改范围涵盖 RPM 软件包、软件包储存库和 ISO 签名。不再更新的旧储存库和改换之日前发布的 RPM 将继续使用旧的 2048 位密钥签名。
在 SLE 15 SP4 / SP5 以及 SLE 15 SP1、SP2 和 SP3 的 LTSS 版本上,如果您更新系统,新密钥将自动从 suse-build-key 软件包导入到 RPM 密钥环中。
如果密钥尚未导入,您可以使用以下命令手动导入:
>sudorpm --import /usr/lib/rpm/gnupg/keys/gpg-pubkey-3fa1d6ce-63c9481c.asc
如果您运行的是旧版 SLE 或者您之前未导入新密钥,升级期间系统会要求您确认该密钥可信。确保指纹匹配:
pub rsa4096/0xF74F09BC3FA1D6CE 2023-01-19 [SC] [expires: 2027-01-18] Key fingerprint = 7F00 9157 B127 B994 D5CF BE76 F74F 09BC 3FA1 D6CE uid SUSE Package Signing Key <build@suse.de>
并且已导入为了灾难恢复目的保留的 4096 位 RSA 密钥:
pub rsa4096/0xA1BFC02BD588DC46 2023-01-19 [SC] [expires: 2033-01-16] Key fingerprint = B56E 5601 41D8 F654 2DFF 3BF9 A1BF C02B D588 DC46 uid SUSE Package Signing Key (reserve key) <build@suse.de>
可以使用以下命令手动导入此密钥:
>sudorpm --import /usr/lib/rpm/gnupg/keys/gpg-pubkey-d588dc46-63c939db.asc
您可在安装媒体和 SUSE 网站 (https://www.suse.com/support/security/keys/) 中找到这两个密钥。
3.2 阅读发行说明 #
   有关所有更改、新功能和已知问题的列表,请参见release notes。安装媒体上的 docu 目录中也提供了发行说明。
  
发行说明通常只包含两个连续的版本之间的更改。如果您跳过了一个或多个服务包,另请检查所跳过服务包的发行说明。
查看发行说明以确定:
- 您的硬件是否有特殊注意事项 
- 当前所使用的任何软件包是否发生了重大更改 
- 您的安装是否需要特殊预防措施 
3.3 创建备份 #
   升级前,将现有配置文件复制到另一个媒体(例如磁带设备、可卸硬盘等)以备份数据。这主要适用于储存在 /etc 中的文件,以及 /var 和 /opt 中的一些目录和文件。最好将 /home(HOME 目录)中的用户数据也写入备份媒体。
  
   以 root 身份备份所有数据。只有 root 对所有本地文件具有足够的权限。
  
   
   如果您已在 YaST 中选择作为安装模式,则可以选择在以后的某个时间执行(系统)备份。您可以选择包含所有已修改的文件以及 /etc/sysconfig 目录中的文件。但是,此备份尚不完整,因为缺少了上述所有其他重要目录。在 /var/adm/backup 目录中查找备份。
  
3.4 检查可用磁盘空间 #
从旧版本到新版本,软件的大小有增长的趋势。因此,在进行更新之前,请查看可用分区空间。如果您怀疑磁盘空间不足,请先备份数据,再通过调整分区大小等方法来增大可用空间。对于每个分区应该具有多少空间,没有一般的经验可以借鉴。空间要求取决于特定的分区配置文件和选定的软件。
在更新过程中,YaST 会检查可用磁盘空间的容量,并在安装大小可能超出可用空间时向用户显示警告。在该情况下,执行更新会导致系统不可用!只有在您完全了解自己要进行的操作的情况下(通过事先测试),才能跳过警告继续更新。
3.4.1 检查非 Btrfs 文件系统上的磁盘空间 #
    使用 df 命令可列出可用磁盘空间。例如,在例 3.1 “使用 df -h 列出”中,根分区为 /dev/sda3(作为 / 挂载)。
   
df -h 列出 #Filesystem     Size  Used Avail Use% Mounted on
     /dev/sda3       74G   22G   53G  29% /
     tmpfs          506M     0  506M   0% /dev/shm
     /dev/sda5      116G  5.8G  111G   5% /home
     /dev/sda1       44G    4G   40G   9% /data3.4.2 检查 Btrfs 根文件系统上的磁盘空间 #
    在 Btrfs 文件系统上,df 的输出可能有误导性,因为除了原始数据分配的空间以外,Btrfs 文件系统还会为元数据分配并使用空间。
   
    因此,即使看上去仍有大量的可用空间,Btrfs 文件系统也可能会报告空间不足。发生这种情况时,为元数据分配的全部空间都已用尽。有关如何检查 Btrfs 文件系统上已用和可用空间的细节,请参见第 1.2.2.3 节 “检查可用空间”。有关详细信息,请参见 man 8
     btrfs-filesystem 和 https://btrfs.wiki.kernel.org/index.php/FAQ。
   
    如果在计算机上使用 Btrfs 作为根文件系统,请确保有足够的可用空间。检查所有挂载分区上的可用空间。在最坏的情况下,升级过程需要将当前根文件系统的所有磁盘空间(不含 /.snapshot)用于存放新快照。
   
下列建议已证实值得采纳:
- 包括 Btrfs 在内的所有文件系统都需要有足够的可用磁盘空间来下载和安装大型 RPM。只有在安装新 RPM 之后,旧 RPM 的空间才会释放。 
- 对于包含快照的 Btrfs,至少需要有当前安装所需的可用空间。建议提供两倍于当前安装大小的可用空间。 - 如果没有足够的可用空间,您可以尝试使用 - snapper删除旧快照:- #- snapperlist- #- snapperdelete NUMBER- 但这种做法并不总是有用。在迁移之前,大多数快照只会占用极少的空间。 
3.5 列出已安装的软件包和储存库 #
可以保存已安装软件包的列表;例如,在全新安装某个新的主要 SLE 版本或还原到旧版本时就是如此。
请注意,并非所有已安装的软件包或使用的储存库在 SUSE Linux Enterprise 的较新版本中都可用。有些软件包或储存库可能已被重命名,有些可能已被取代。还有可能提供的一些软件包只是用于旧版,而默认会使用另一个替代它的软件包。因此,可能需要对文件进行一些手动编辑。您可使用任何文本编辑器进行编辑。
- 创建包含全部所用储存库列表的文件 - repositories.bak.repo:- #- zypperlr -e repositories.bak
- 另外,创建包含所有已安装软件包的列表的文件 - installed-software.bak:- #- rpm-qa --queryformat '%{NAME}\n' > installed-software.bak
- 备份这两个文件。使用以下命令可恢复储存库和已安装的软件包: - #- zypperar repositories.bak.repo- #- zypperinstall $(cat installed-software.bak)注意:更新到新的主要版本后,软件包数量会相应增加- 升级到新主要版本的系统 (SLE X+1) 包含的软件包可能会比初始系统 (SLE X) 的多,也会比选择相同软件集执行的 SLE X+1 全新安装所包含的软件包多。原因如下: - 软件包经过拆分,以便用户能以更高的粒度选择软件包。例如,SLE 11 上的 37 个 texlive 软件包已拆分成 SLE 15 上的 3000 多个软件包。 
- 拆分某个软件包后,在升级过程中会安装所有新软件包,以与旧版本保持相同的功能。但是,SLE X+1 全新安装的新默认设置可能不会安装所有软件包。 
- 出于兼容原因,可能会保留 SLE X 中的旧软件包。 
- 软件包依赖项和软件集范围可能已发生变化。 
 
3.6 禁用 LTSS 扩展 #
   如果您将附带长期服务包支持 (LTSS) 的 SUSE Linux Enterprise Server 系统升级到只提供标准支持的版本,升级将会失败,并显示错误No migration available。之所以发生此情况,是因为 zypper migration 会尝试迁移所有储存库,但新版本尚无 LTSS 储存库。
  
要解决该问题,请在升级前先禁用 LTSS 扩展。
- 检查是否启用了 LTSS 扩展: - >- sudoSUSEConnect --list-extensions | grep LTSS SUSE Linux Enterprise Server LTSS 12 SP4 x86_64 (Installed) Deactivate with: SUSEConnect -d -p SLES-LTSS/12.4/x86_64
- 运行上方 - SUSEConnect输出中显示的命令禁用 LTSS 扩展:- >- sudoSUSEConnect -d -p SLES-LTSS/12.4/x86_64 Deregistered SUSE Linux Enterprise Server LTSS 12 SP4 x86_64 To server: https://scc.suse.com/
- 使用 - zypper lr校验 LTSS 储存库已不存在。
3.7 迁移 PostgreSQL 数据库 #
SUSE Linux Enterprise Server 15 SP6 随附 PostgreSQL 数据库版本 14 和 15。虽然默认版本是 15,但我们仍会通过 Legacy 模块提供版本 14,以便您可以从 SUSE Linux Enterprise Server 的早期版本升级。
  
由于需要完成数据库的迁移工作,因此无法使用自动升级过程。您需要手动执行从一个版本到另一个版本的迁移。
   迁移过程通过使用 pg_upgrade 命令执行,这种方法可替代传统的转储和重新装载。与“转储和重新装载”方法相比,pg_upgrade 可缩短迁移所需的时间。
  
   每个 PostgreSQL 版本的程序文件储存在不同版本的相关目录中。例如,版本 9.6、版本 10 和版本 13 的程序文件分别储存在 /usr/lib/postgresql96/、/usr/lib/postgresql10/ 和 /usr/lib/postgres13/ 中。请注意,PostgreSQL 主要版本 9.6 与 10 的版本控制策略有所不同。有关详细信息,请参见https://www.postgresql.org/support/versioning/。
  
    从 SLE 11 升级时,postgresql94 将被卸装,不可用于将数据库迁移到更高的 PostgreSQL 版本。因此,在这种情况下,请确保先迁移 PostgreSQL 数据库,然后再升级系统。
   
以下过程描述如何将数据库从版本 12 迁移到版本 13。使用不同的版本作为起始或目标时,请相应地替换版本号。
要进行数据库迁移,请执行以下操作:
- 确保满足以下先决条件: - 如果尚未通过维护更新将旧 PostgreSQL 版本的任何软件包升级到最新版本,请执行该操作。 
- 创建现有数据库的备份。 
- 安装新 PostgreSQL 主要版本的软件包。对于 SLE 15 SP6,这意味着需要安装 postgresql13-server 及其依赖的所有软件包。 
- 安装包含 - pg_upgrade命令的 postgresql13-contrib 软件包。
- 确保 PostgreSQL 数据区域(默认为 - /var/lib/pgsql/data)中有足够的可用空间。如果空间不足,请对每个数据库使用以下 SQL 命令,以尝试减少大小(这可能需要花费很长时间!):- VACUUM FULL 
 
- 使用以下任一命令停止 PostgreSQL 服务器: - #- /usr/sbin/rcpostgresqlstop- 或 - #systemctl stop postgresql.service- (取决于要用作升级起始版本的 SLE 版本)。 
- 重命名旧数据目录: - #- mv/var/lib/pgsql/data /var/lib/pgsql/data.old
- 使用 - initdb手动初始化新的数据库实例,或者启动再停止 PostgreSQL 让数据库实例自动初始化:- #- /usr/sbin/rcpostgresqlstart- #- /usr/sbin/rcpostgresqlstop- 或 - #systemctl start postgresql.service- #systemctl stop postgresql.service- (取决于要用作升级起始版本的 SLE 版本)。 
- 如果您在旧版本中更改了配置文件,请考虑将这些更改转移到新配置文件。可能受影响的文件包括 - postgresql.auto.conf、- postgresql.conf、- pg_hba.conf和- pg_ident.conf。这些文件的旧版本位于- /var/lib/pgsql/data.old/中,新版本可在- /var/lib/pgsql/data中找到。- 请注意,不建议复制旧配置文件,因为这可能会重写新选项、新默认值和更改的注释。 
- 以 - postgres用户身份启动迁移过程:- #su - postgres postgres >- pg_upgrade\ --old-datadir "/var/lib/pgsql/data.old" \ --new-datadir "/var/lib/pgsql/data" \ --old-bindir "/usr/lib/postgresql12/bin/" \ --new-bindir "/usr/lib/postgresql13/bin/"
- 使用以下任一命令启动新数据库实例: - #- /usr/sbin/rcpostgresqlstart- 或 - #systemctl start postgresql.service- (取决于要用作升级起始版本的 SLE 版本)。 
- 检查迁移是否成功。测试范围取决于用例,没有任何普通的工具可以自动完成此步骤。 
- 去除所有旧 PostgreSQL 软件包和旧数据目录: - #- zyppersearch -s postgresql12| xargs zypper rm -u- #- rm-rf /var/lib/pgsql/data.old
有关升级数据库或使用逻辑复制等替代方法的详细信息,请参见 https://www.postgresql.org/docs/13/upgrading.html 上的官方 PostgreSQL 文档。
3.8 迁移 MySQL 或 MariaDB 数据库 #
从 SUSE Linux Enterprise 12 开始,SUSE 已从 MySQL 转移到 MariaDB。在开始任何升级操作之前,强烈建议您备份数据库。
要进行数据库迁移,请执行以下操作:
- 创建转储文件: - #- mysqldump-u root -p --all-databases --add-drop-database > mysql_backup.sql- 默认情况下, - mysqldump不会转储- INFORMATION_SCHEMA或- performance_schema数据库。有关详细信息,请参见 https://mariadb.com/kb/en/mariadb-dumpmysqldump/。
- 将您的转储文件、配置文件 - /etc/my.cnf以及- /etc/mysql/目录储存在安全位置,以供日后调查(不要用于安装!)。
- 执行 SUSE Linux Enterprise Server 升级。升级后,以前的配置文件 - /etc/my.cnf将保持不变。可以在- /etc/my.cnf.rpmnew文件中找到新配置。
- 根据需要配置 MariaDB 数据库。不要使用以前的配置文件和目录,只是将其用作提醒,并对其进行改编。 
- 确保启动 MariaDB 服务器: - #- systemctlstart mariadb- 如果您希望每次引导时都启动 MariaDB 服务器,请启用以下服务: - #- systemctlenable mariadb
- 通过连接数据库来校验 MariaDB 是否正常运行: - #- mariadb-u root -p
3.9 创建用于 Java 应用程序的非 MD5 服务器证书 #
作为安全措施,Java 中不再支持基于 MD5 的证书。如果您之前创建的证书是 MD5 证书,请执行以下步骤重新创建证书:
- 打开终端窗口并以 - root身份登录。
- 创建一个私用密钥: - #- opensslgenrsa -out server.key 1024- 如果需要强度更高的密钥,请将 - 1024替换为更大的数字,例如- 4096。
- 创建证书签名请求 (CSR): - #- opensslreq -new -key server.key -out server.csr
- 对证书自我签名: - #- opensslx509 -req -days 365 -in server.csr -signkey server.key -out server.crt
- 创建 PEM 文件: - #- catserver.key server.crt > server.pem
- 将 - server.crt、- server.csr、- server.key和- server.pem文件放在可在其中找到密钥的相应目录中。例如,对于 Tomcat,此目录为- /etc/tomcat/ssl/。
3.10 关闭虚拟机 Guest #
如果您的计算机充当 KVM 或 Xen 的 VM 主机服务器,请确保在更新前正常关闭所有正在运行的 VM Guest。否则,更新后您可能无法访问 guest。
3.11 调整 SMT 客户端设置 #
如果您要升级的计算机已注册为 SMT 服务器的客户端,请注意以下事项:
   检查主机上的 clientSetup4SMT.sh 脚本版本是否是最新的。较旧版 SMT 的 clientSetup4SMT.sh 无法管理 SMT 12 客户端。如果您在 SMT 服务器上定期应用软件补丁,您始终可以在 <SMT_HOSTNAME>/repo/tools/clientSetup4SMT.sh 处找到 clientSetup4SMT.sh 的最新版本。
  
如果将计算机升级到更高版本的 SUSE Linux Enterprise Server 失败,请按过程 3.1中所述从 SMT 服务器中取消注册该计算机。然后重启动升级过程。
- 登录客户端计算机。 
- 以下步骤根据客户端的当前操作系统而异: - 对于 SUSE Linux Enterprise 11,请执行以下命令: - >- sudosuse_register -E- >- sudorm -f /etc/SUSEConnect- >- sudorm -rf /etc/zypp/credentials.d/*- >- sudorm -rf /etc/zypp/repos.d/*- >- sudorm -f /etc/zypp/services.d/*- >- sudorm -f /var/cache/SuseRegister/*- >- sudorm -f /etc/suseRegister*- >- sudorm -f /var/cache/SuseRegister/lastzmdconfig.cache- >- sudorm -f /etc/zmd/deviceid- >- sudorm -f /etc/zmd/secret
- 对于 SUSE Linux Enterprise 12,请执行以下命令: - >- sudoSUSEConnect --de-register- >- sudoSUSEConnect --cleanup- >- sudorm -f /etc/SUSEConnect- >- sudorm -rf /etc/zypp/credentials.d/*- >- sudorm -rf /etc/zypp/repos.d/*- >- sudorm -f /etc/zypp/services.d/*
 
- 登录 SMT 服务器。 
- 列出所有客户端注册,以检查是否已成功取消注册该客户端: - >- sudosmt-list-registrations
- 如果该客户端的主机名仍旧列在此命令的输出中,请从第一列获取该客户端的 - Unique ID。(可能列出了该客户端的多个 ID。)
- 删除此客户端的注册: - >- sudosmt-delete-registration -g UNIQUE_ID
- 如果列出了该客户端的多个 ID,请针对每个唯一 ID 重复上述步骤。 
- 重新运行以下命令,以检查现在是否已成功取消注册该客户端: - >- sudosmt-list-registrations
3.12 AutoYaST 配置文件中的更改(从 SLE 12 到 15) #
要了解如何迁移 AutoYaST 配置文件,请参见附录 D “SLE 12 与 15 中的 AutoYaST 配置文件之间的差异”。
3.13 升级订阅管理工具 (SMT) 服务器 #
对于运行 SMT 的服务器,需要执行特殊的升级过程。请参见《Repository Mirroring Tool 指南》中的第 3 章 “从 SMT 迁移到 RMT”。
3.14 暂时禁用内核多版本支持 #
SUSE Linux Enterprise Server 允许您在 /etc/zypp/zypp.conf 中启用相应设置来安装多个内核版本。为了升级到某个服务包,需要暂时禁用对此功能的支持。当更新成功完成后,可以重新启用多版本支持。要禁用多版本支持,请对 /etc/zypp/zypp.conf 中的相应行加上注释。结果应类似如下内容:
  
#multiversion = provides:multiversion(kernel) #multiversion.kernels = latest,running
要在成功更新后重新激活此功能,请去除注释符号。有关多版本支持的详细信息,请参见第 27.1 节 “启用和配置多版本支持”。
3.15 调整 resume 引导参数 #
   在已安装 SUSE Linux Enterprise Server 12 或更早版本的系统上,/etc/default/grub 中的默认内核命令行中可能包含 resume 参数,该参数使用设备节点名称(例如 /dev/sda1)来表示休眠(暂停到磁盘)设备。由于设备节点名称不会永久存在,可能会在重引导后更改,因此强烈建议指定固定的名称。否则,升级后的系统可能会在重引导时挂起。
  
- 查找休眠设备: - >- sudo- grep resume /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/sda1 splash=silent quiet showopts"- 休眠设备为 - /dev/sda1。如果该命令未返回任何结果,则表示未配置休眠。
- 获取 - /dev/sda1的 UUID:- >- sudo- blkid /dev/vda1/dev/vda1: UUID="a1d1f2e0-b0ee-4be2-83d5-78a98c585827" TYPE="swap" PARTUUID="000134b5-01"- /dev/sda1的 UUID 为- a1d1f2e0-b0ee-4be2-83d5-78a98c585827。
- 编辑 - /etc/default/grub并调整 resume 参数。将- /dev/sda1替换为- UUID=a1d1f2e0-b0ee-4be2-83d5-78a98c585827。结果将如下所示:- GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=a1d1f2e0-b0ee-4be2-83d5-78a98c585827 splash=silent quiet showopts" 
- 更新 grub 引导管理器的配置: - >- sudo- grub2-mkconfig -o /boot/grub2/grub.cfg
如果系统不使用休眠,您只需去除 resume 参数并更新引导配置。
3.16 在 IBM Z 上升级 #
   在 IBM Z 上升级 SUSE Linux Enterprise 安装需要设置 Upgrade=1 内核参数(例如,通过 parmfile)。请参见第 5.5 节 “parmfile — 自动进行系统配置”。
  
3.17 IBM POWER:启动 X 服务器 #
在 SLES 12 for IBM POWER 上,显示管理器配置为默认不启动本地 X 服务器。SLES 12 SP1 上的设置则相反,显示管理器现在会启动 X 服务器。
   为了避免升级期间出现问题,SUSE Linux Enterprise Server 设置不会自动更改。如果您想要在升级后让显示管理器启动 X 服务器,请如下所示在 /etc/sysconfig/displaymanager 中更改 DISPLAYMANAGER_STARTS_XSERVER 的设置:
  
DISPLAYMANAGER_STARTS_XSERVER="yes"