Home Wiki > SDB:系统升级
Sign up | Login

SDB:系统升级

tagline: 来自openSUSE

这篇指南告诉您如何使用 Zypper 对 openSUSE 发行版进行在线升级。
测试版本 推荐条目 相关条目
Icon-checked.png

Icon-manual.png Icon-help.png
版本:11.2+从 openSUSE 11.2 开始,对老版本进行在线升级已被 官方支持

摘要

这个页面教你如何使用一个工具或一些命令来将您的系统升级为最新版本的 openSUSE。

在线升级有许多优点,但相对的也有一些缺点。

优点是:

  • 您只需要下载需要升级的软件包,这样可以减少网络的使用。
  • 在升级的过程中,您仍可以使用您的工作站(即使我们并不建议您这样做);只有升级完成之后的重启才会使您的工作站离线。
  • 您不需要浪费一张 DVD,也不需要 DVD 刻录机。(您也可以从网络或 U 盘启动,并从网络上安装剩余的部分……)

缺点是:

  • 任何原因导致升级程序中断(例如: 停电,断网),都可能使您得到一个损坏的系统(这取决于您在哪个步骤中断)。
  • 如果您有很多个系统需要升级,您还是下载 ISO 镜像比较好。
  • 它不像使用离线 DVD 升级一样执行所有的清理与维护工作。

警告: 请不要跨版本升级!例如:不要从 13.1 直接升级到 42.1。而应该先从 13.1 升到 13.2,接着再从 13.2 升到 42.1。

其他升级方式:

离线升级,也就是传统的 DVD 升级。详情请参阅离线升级。除非你有好的理由再去这样做。


支持的版本

32 位的 openSUSE 无法升级到 Leap 版本,因为 Leap 只有 64 位版本。如果你的设备支持 x86_64 架构,你可以先将 13.2 升级到 64 位版本。

在 AArch64 架构上(64位 ARM),Leap 42.1 是无法升级到 Leap 42.2 的,请重新刷写您的系统。

请注意:原则上更新程序只是“尽力而为”,也就是说一些第三方包和参数可能无法正确配置,在一些特定的组合上也可能导致升级失败。

并且请记住下列重要原则:

  • 所有重要资料必须在升级开始前先行备份。
  • 您必须先更新您的系统(zypper up),再执行在线升级(zypper dup)。
  • 您只能够执行 zypper dup 升级到下一个版本。跨版本升级(如从 13.2 到 Leap 42.2)是不支持的。

确保您已更新

支持的起始点是上一个 openSUSE 版本并获得了全部的更新。这不包含您自行加入的 openSUSE 编译服务(OBS)软件源。我们建议您在升级之前禁用所有的 OBS 软件源,升级之后再重新启用它们。下列步骤将教您在升级之前将现行的发行版获得全部的更新。


发行说明

你可以在发行说明中找到升级的关键步骤和软件包的更新列表。


命令行

1. 检查更新软件源是否存在并已启用

zypper repos --uri

检查 http://download.opensuse.org/update/13.2/(对于早于 openSUSE 13.2 的版本,请将 13.2 替换为你的版本)或是http://download.opensuse.org/update/leap/42.1/oss/(对于 openSUSE Leap 42.1 之后的版本,请将 42.1 替换为你的版本)存在于 URI 列,并且 Enabled 列显示为 Yes,就像下面显示的一样:

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

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

zypper modifyrepo --enable repo-update
‘repo-update’ 是你更新源的名称。

如果它已经存在并且已被启用,请跳转到步骤 3

2. 添加更新源

对于早于 openSUSE 13.2 的版本:

zypper addrepo --check --refresh --name 'openSUSE-13.2-Update' http://download.opensuse.org/update/13.2/ repo-update
替换 13.2 为你目前的 openSUSE 版本。

对于 openSUSE Leap 42.1 之后的版本:

zypper addrepo --check --refresh --name 'openSUSE-Leap-42.1-Update' http://download.opensuse.org/update/leap/42.1/oss/ repo-update
替换 42.1 为你目前的 openSUSE 版本。

3. 移动 /var/cache 到一个单独的子卷

注意:如果你的根文件分区不是 Btrfs 格式,请跳过这一步骤并查看步骤 4。

/var/cache 包含了大量易失数据,例如 Zypper 缓存和每次更新的 RPM 包。作为存储大量冗余且易失数据的结果,快照占用的空间会快速的增加。为了解决这个问题,请移动 /var/cache 到一个单独的子卷。

  • 找到根文件分区的设备名:
df /
  • 找出 / 子卷的所有其他子卷。在 openSUSE 13.2 上,这些子卷以 @ 开头:
sudo btrfs subvolume list / | grep '@'
  • 如果这个命令的输出是空的,那么你并没有 @ 开头的子卷。对于这种情况,你也许需要在旧版本的 openSUSE 中挂载 ID 为 5 的子卷。
  • 挂载一个特殊的子卷到一个暂时的挂载点:
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
  • Add an entry to /etc/fstab for the new /var/cache subvolume. Use an existing subvolume as a template to copy from. Make sure to leave the UUID untouched (this is the root file system's UUID) and change the subvolume name and its mount point consistently to /var/cache.
  • Mount the new subvolume as specified in /etc/fstab:
mount /var/cache

4. 升级系统到最新的软件包

zypper refresh
zypper update

了解更多,请见 Zypper 使用方法

图新工具

请见 YaST 在线更新

执行升级

下列步骤将告诉您如何升级您的 openSUSE 到下一个版本(比如:13.2 -> 42.1)。再次强调,任何的第三方或是 OBS 软件源都可能会引起不必要的麻烦,建议您在进行升级前停用或移除它们。

在开始之前

请确认您已阅读过您将要安装的新版本已知问题。有些问题可能会影响升级程序。一般来说,这些问题都会列有解决方法或暂时性方案,请您对即将遇到的问题做好心理准备。

命令行

我们将以 Leap 42.1 升级到 42.2 为例:

  • 查看所有软件源
zypper lr

并移除所有你不需要的第三方/OBS软件源

# zypper rr <alias>
  • 将所有的软件源地址变成新版本的地址
    # cp -Rv /etc/zypp/repos.d /etc/zypp/repos.d.Old

    (作为备份),然后运行:

    # sed -i 's,openSUSE_Leap_42\.1,openSUSE_Leap_42.2,g' /etc/zypp/repos.d/*
    # sed -i 's,leap/42\.1,leap/42.2,g' /etc/zypp/repos.d/*
    注意 - 虽然通过 sed 可以对大多数软件源进行修改,但它不会修改 Leap 42.1 的 update 软件源。为了解决这个问题,复制一下内容(所有一行)并在控制台中运行,这样可以手动添加 update 软件源使用正确的 URI
# zypper rr repo-update repo-update-non-oss && zypper ar -f http://download.opensuse.org/update/leap/42.2/oss/ openSUSE-Leap-42.2-Update && zypper ar -f http://download.opensuse.org/update/leap/42.2/non-oss/ openSUSE-Leap-42.2-Update-Non-Oss
  • 如果你从 12.1 或更早的版本升级,添加 non-oss-update 软件源
# zypper ar -f http://download.opensuse.org/update/leap/42.2/non-oss/ repo-update-non-oss
  • 刷新软件源(你可能会被询问是否接收新的 gpg 密钥)
# zypper --gpg-auto-import-keys ref

如果你没有移除第三方/OBS软件源你也许会得到一些错误,因为他们并不存在。我们还是建议移除它们再进行升级。

  • 现在执行升级
注意

非常建议你不要在 runlevel 5 (图形界面)进行,而是在 runlevel 3 (字符 + 网络)中运行。 X 会在升级进行中崩溃,并会导致升级终止。 要改变 runlevel 请参阅en:SDB:Switch_runlevel

# zypper dup

使用上面的命令,zypper 将下载所有需要的软件包,并将它们安装。要提前下载所有软件包,请使用:

# zypper dup --download-in-advance
如果你在发行日期(比如 42.2 2016-11-16),你可能会安装一个发行预览版(RC)或一个里程碑版本,并将需要再次执行 zypper dup 直到获取最终版本。
 deleted providers: libyui-ncurses-pkg5-2.44.4-2.1.5.x86_64                                                                  
Solution 1: Following actions will be done:                                                                                  
 deinstallation of PackageKit-backend-zypp-0.8.11-2.3.1.x86_64
 deinstallation of PackageKit-0.8.11-2.3.1.x86_64
 deinstallation of PackageKit-branding-openSUSE-13.1-2.2.1.noarch
 deinstallation of apper-lang-0.8.1-11.7.1.noarch
Solution 2: deinstallation of patterns-openSUSE-yast2_basis-13.1-13.6.1.x86_64
Solution 3: deinstallation of sysvinit-2.88+-89.1.2.x86_64
Solution 4: install PackageKit-0.8.17-3.1.3.i586 despite the inferior architecture
Solution 5: keep libyui-ncurses-pkg5-2.44.4-2.1.5.x86_64
Solution 6: keep libyui-ncurses-pkg5-2.44.4-2.1.5.x86_64
Solution 7: break patterns-openSUSE-yast2_basis-13.1-13.6.1.x86_64 by ignoring some of its dependencies

Choose from above solutions by number or skip, retry or cancel [1/2/3/4/5/6/7/s/r/c] (c): 

请选择将 sysvinit 移除。

  • 如果你仍然需要你曾经使用第三方软件源,查找与 openSUSE leap 42.2 适配的第三方软件源并添加。
注意 请注意,一些第三方软件可能会导致你的系统不稳定
zypper addrepo --name <name> <url> <alias>

或者你有一个 .repo 文件的 URL:

# zypper ar <url.repo>
  • 升级之后建议你重新启动,以使用新的内核和新的一切。
此外,可以不时运行 zypper up 以确保您拥有来自已启用的各个软件源的最新可用软件包。YOU(Yast 在线更新)只处理来自官方软件源的安全更新。