From Fedora Project Wiki
Warning.png
安全考虑
当您通过网络升级时,FedUp 还不能保证从网络获取的内容是受 Fedora 信任的。具体请查看 Bugzilla: #877623。如果出于安全考虑,您可以通过下载 ISO 镜像验证并升级来解决该问题。注意,Anaconda 和 Preupgrade 也不验证。

什么是 FedUp?

FedUp (FEDora UPgrader) 是一个升级 Fedora 的新工具。它替换了在之前 Fedora 版本上推荐的更新方式(例如通过 PreUpgrade 升级和 DVD 升级)。Anaconda,Fedora 的安装器,从 Fedora 18 后将不会自带更新功能,所有将全部交给 FedUp 来完成。

目前,FedUp 可以通过网络安装源完美升级 Fedora 17 至 Fedora 18,就像之前 PreUpgrade 的升级一样。更多升级的方法目前已经处于计划之中,当它们可行后本页也会继续更新。

Warning.png
针对 Fedora 16 和更老的版本
FedUp 客户端尚未在任何早于 Fedora 17 的系统上构建或运行。如果您想更新,请首先 更新 至 Fedora 17。

FedUp 做了些什么?

FedUp 系统有两个组成部分 - 程序本身被用作下载软件包并准备升级过程和预启动环境,实际更新工作则由 systemd 和 yum 完成。详细信息请访问 FedUp 主作者对它的介绍 页面。

FedUp 客户端

FedUp 运行于准备升级的系统上。它获取所有需要升级的软件包和内核。目前只有命令行版本,不过图形界面版本已经在准备了。

升级过程

从运行 FedUp 客户端之后重启才开始实际上的升级。文件系统会在启动时被挂载,已下载的软件包会被安装并且一些有关升级的任务也会开始执行。在升级过程中,将会使用一个特别的包含升级进度条显示的 plymouth 主题作为屏幕显示。

常见问题解答

我能使用 FedUp 更新我的 Fedora 16 吗?

不行。目前不可用。FedUp 客户端目前尚未在 Fedora 16 上构建或运行,所以您至少需要 Feora 17。请首先使用 Preupgrade 升级至 Fedora 17。

我该如何汇报升级出现的问题?

请首先查看 Common F18 bugs#Upgrade_issues,也许这些问题不是受我们严重关注的问题。如果不在这个页面里面,请根据出问题的组件反馈问题。

升级准备时的问题

如果您在重启前使用 FedUp 客户端遇到问题(Package-x-generic-16.pngfedup),请 搜索有关 fedup 的 Bug,或者针对您升级前系统的版本提交关于 fedup 的 Bug 报告。

升级过程中的问题

如果您在准备过程结束后重启时遇到问题,请 搜索有关 fedup-dracut 的 Bug,或者针对您升级前系统的版本提交关于 fedup-dracut 的 Bug 报告。

升级后的问题

如果升级某个软件包后出现问题,请针对相关软件提交 Bug 报告。

我该如何在升级过程中调试出现的问题?

稍后完善

FedUp 验证升级过程中安装或运行的软件吗?

这是一个正在计划中的新特性。查看 Bug 877623 以了解更多。

哪里可以问我的问题?

最好的位置是参与 IRC 交流 #fedora-qa[?] 或者发邮件至 test 邮件列表。

如何通过 FedUp 升级我的系统?

使用 FedUp 升级您的系统有3个阶段 - 升级准备、执行升级和清理

在您更新之前,确保您已经阅读了 Common F18 bugs#Upgrade_issues

升级准备

Important.png
最新版的 fedup
确保您已安装最新的 fedup客户端。本页撰写于2013-01-08,目前是 fedup-0.7.2-1.fc17
  1. 运行系统更新并重启以确保内核更新生效
  2. 安装 Package-x-generic-16.pngfedup
    • 确保已获取最新版,您可以通过启用 updates-testing 源(命令行执行 yum --enablerepo=updates-testing install fedup)

3种方式可获得需要更新的软件包 - 使用网络安装源、本地 ISO 镜像或本地设备(例如硬盘或者光盘)。

Important.png
强烈推荐通过网络进行升级
我们强烈建议您通过网络安装更新的方式完成系统升级,而不是通过本地安装源进行更新。网络更新将确保您获得最新的 Fedora 18 软件包。如果您的本地安装源不是最新的 Fedora 18 组件,您可能会发现系统是一个由 Fedora 17 和 Fedora 18 两个版本的软件包组成的混合体。直到您升级所有软件至最新版系统并重启才可能正常工作 (如果还启动的话)。

网络

使用网络进行升级是最省事的办法 - 如果您当前的系统有一个比您要升级到的 Fedora 版本自带内核还要新的内核,这种方式可以消除潜在的问题。

  1. 执行下列命令准备升级
    • sudo fedup-cli --network 18
  2. 一旦准备完毕,检查 /var/log/fedup.log 文件查看是否有来自 fedup-cli 的错误输出

ISO 文件

为了使用 ISO 镜像,您需要把它放置于文件系统上。本文假设其位于 /home/user/fedora-18.iso,您可以任意指定位置。如果这台机器联网,更新的升级将会联网获取。

  1. 下载适合您正运行的架构的 Fedora 39 的 ISO 文件。
    • 为了便于说明,我们假设 ISO 位于 /home/user/fedora-18.iso,不过您可以任意指定您的实际 ISO 文件位置,替换下面的 /home/user/fedora-18.iso 即可
  2. 执行下列命令准备升级
    • sudo fedup-cli --iso /home/user/fedora-18.iso --debuglog=fedupdebug.log
  3. 一旦准备完毕,检查 fedupdebug.log 文件查看是否有来自 fedup-cli 的错误输出

其他设备

光盘和其他可被挂载的设备均可被用作升级准备过程中使用的软件包安装源。

  1. 挂载源介质
    • 为了便于说明,我们假设设备挂载于 /mnt/fedora,不过您可以任意指定挂载位置。替换下面的 /mnt/fedora 即可
  2. 执行下列命令准备升级
    • sudo fedup-cli --device /mnt/fedora --debuglog=fedupdebug.log
  3. 一旦准备完毕,检查 fedupdebug.log 文件查看是否有来自 fedup-cli 的错误输出

执行升级

Warning.png
需要参考
本部分仍然需要一些有关 'esc 键杀死 plymouth 进程'的 Bug 的参考
  1. 如果 fedup 已完成工作且没有错误发生,则重启系统。
  2. 一旦系统重启,GRUB 菜单将会有一个新的条目,叫做 System Upgrade
    • 如果您在启动参数里面添加 rd.upgrade.debugshell,您会看到一个 shell 窗口,允许您在系统出现某些情况时进行修复
  3. 选择 System Upgrade 条目继续
  4. 系统将会启动至升级环境,一个 plymouth 启动屏幕会显示出来
    • 如果您按下 'esc' 键,一个更详细的进度日志会显示出来,但是如果您切换至之前的图形显示进度条界面,进度条会一直停留在 0%,不过您不必担心因为升级实际上在运行。这是一个 Bug。
  5. 一旦更新完成,系统将会重启,grub 菜单会多出一个启动 Fedora 39 的选项

GRUB 更新

Note.png
这是可选的操作!
在已更新完毕的系统上升级 GRUB 严格意义上讲并不是必须的,但是对于 BIOS 类系统我们还是十分建议您做一下升级。而对于 UEFI 类系统我们强烈建议 升级 grub-efi 到 grub2-efi

更新 GRUB2 (BIOS 系统)

  • 升级完成后,之前安装的 grub2 仍然会启动 F17 版本,您需要手工升级
  • 按照 本页的说明 重新安装并升级 grub

更新 GRUB (UEFI 系统)

Grub2 不会作为升级的一部分而被安装,需要手工安装:

sudo yum install grub2-efi

迁移 Grub 设定

很不幸,除非您手工迁移,否则大多数启动设置在更新后将不会保留。您需要自己查看您之前设定的配置文件,在这里:/boot/efi/EFI/redhat/grub.conf 并找到最近的启动条目。无需跟下面的示例一模一样,您只需要找到最近的即可。

title Fedora (3.6.11-1.fc17.x86_64)
        root (hd0,2)
        kernel /vmlinuz-3.6.11-1.fc17.x86_64 rd.luks.uuid=luks-f664c3a9-e939-410e-8478-891f48b80f12
                rd.md=0 rd.dm=0  KEYTABLE=us SYSFONT=True rd.lvm.lv=vg_test/lv_root
                root=/dev/mapper/vg_test-lv_root ro rd.lvm.lv=vg_test/lv_swap
                LANG=en_US.UTF-8 rhgb quiet
        initrd /initramfs-3.6.11-1.fc17.x86_64.img

不要kernel 的版本号感兴趣,绝大多数通过 rd. 启动,而剩下的部分就是我们需要关注的重点,也就是这些:

rd.luks.uuid=luks-f664c3a9-e939-410e-8478-891f48b80f12
rd.md=0
rd.dm=0
rd.lvm.lv=vg_test/lv_root
root=/dev/mapper/vg_test-lv_root
ro
rd.lvm.lv=vg_test/lv_swap
rhgb
quiet


欲开始迁移,请用 sudo 或者以 root 身份打开 /etc/default/grub并粘贴下面这一部分文字:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_CMDLINE_LINUX=""
GRUB_DISABLE_RECOVERY="true"
GRUB_THEME="/boot/grub2/themes/system/theme.txt"
Note.png
非美式键盘和语言的问题
今后会更新有关 vconsole 语言和 keymap 参数配置的内容

把刚才的那一部分参数复制并替换 GRUB_CMDLINE_LINUX 的值。例如,根据上文提到的,替换后就是这样:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_CMDLINE_LINUX="rd.luks.uuid=luks-f664c3a9-e939-410e-8478-891f48b80f12
rd.md=0 rd.dm=0 rd.lvm.lv=vg_test/lv_root root=/dev/mapper/vg_test-lv_root
ro rd.lvm.lv=vg_test/lv_swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_THEME="/boot/grub2/themes/system/theme.txt"

现在操作完成,您只需要重新生成新的 grub 配置文件并做一个链接至 /etc/grub2-efi.cfg 的软链接即可:

grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
ln -s /boot/efi/EFI/fedora/grub.cfg /etc/grub2-efi.cfg

更新 EFI 启动条目

一旦安装 Package-x-generic-16.pnggrub2-efi,您需要添加新的 EFI 启动条目。最简单的方法就是刚安装完使用命令修改请根据实际情况修改,注意 X 是所在分区数字:

efibootmgr -c -w -L Fedora -d /dev/sdX -p Y -l \EFI\redhat\grub.efi

使用 efibootmgr 找到启动数字:

efibootmgr -v

您需要找一行类似于下面的文字:

Boot0004* Fedora  HD(1,800,34800,6733749f-b42a-4b8c-a0de-5a1d3505f8af)File(\EFI\redhat\grub.efi)

可以看出启动数字是 0004。

使用下列命令移除旧的启动条目,<boot number> 就是您刚才找到的启动数字,比如:

efibootmgr -b <0004> -B
Warning.png
使用事项
确保 '\EFI\fedora\grubx64.efi' 有引号,否则命令行会把 \E、\f 和 \g 转换为控制命令,导致启动失败

输入下列命令开始使用 grub2-efi 吧:

sudo efibootmgr -c -w -L Fedora -d /dev/sdX -p Y -l '\EFI\fedora\grubx64.efi' -b <boot number>

现在您的系统应该有 grub2-efi 引导程序,重启后应该就能工作了。

清理

Warning.png
稍等
本部分正在撰写。

相关的 Bug: Bug 888085

您在升级完成后可能遇到问题,不过这可以通过 yum 解决:

yum distribution-synchronization --disablepresto

如果您之前使用来自 google 软件源的 google-chrome,您必须重装。这是因为 Google 在打包的时候一个不正确的问题造成的。

命令就像您当初安装时那样:

yum remove google-chrome-\* && yum install google-chrome-[beta,stable,unstable]

注意方框内 beta stable unstable版本由您自己决定。