Fedora 20 を Fedora 23 にアップグレードする

Linux

clang 3.6 以上を使いたくなって、Fedora 20 を Fedora 23 にアップデートしてみることにしました。

Fedora で clang 3.6 以上を使いたくなったのですけど、標準のパッケージマネージャーからインストールできるバージョンが、使用していた Fedora 20 では 3.4.2 までみたいな様子でした。

自力で clang 3.6 をインストールする手もあったんじゃないかとは思うのですけど、試してみても上手くいかなかったので、標準のパッケージマネージャーで clang 3.6 以上をインストールできる Fedora 23 までアップグレードしてみることにしました。

まずは失敗談から

今回のアップグレード作業をする中でけっこう手間取ることが多かったので、まずは苦労した点を整理して紹介したいと思います。これらの手間さえ乗り越えられれば、あとはそんなに難しくはない印象でした。

Fedora 20 から 23 へのアップグレードを試みたとき

パッケージマネージャーが Fedora 23 では yum から dnf に変わる都合らしいのですけど Fedora 20 は 22 までアップグレードしてからでないと 23 へのアップグレードができないようです。

そして、少なくとも自分が試した限りでは、いったん Fedora 20 をいきなり Fedora 23 にアップグレードしようとしてしまうと、その時にダウンロードした情報がキャッシュに残って、その後の 20 から 22 へのアップグレードに失敗する様子でした。

具体的には Fedora 22 へのアップグレードの最中の Fedora 23 (fc23) に関係しそうなパッケージあたりで、次のようなエラーが表示されました。

warning: /var/cache/system-upgrade/fedora/packages/authconfig-6.2.10-10.fc23.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 34ec9cba: NOKEY

Downloading failed: The GPG keys listed for the "Fedora 22 - x86_64" repository are already installed but they are not correct for this package.

Check that the correct key URLs are configured for this repository.

Failing package is: authconfig-6.2.10-10.fc23.x86_64

GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-22-x86_64

このようなときには、アップグレード時にダウンロードされたファイルのキャッシュを消去してあげる必要がある様子です。

rm -rf /var/cache/system-upgrade

こうすることで、再び Fedora 20 から 22 へのアップグレードを行えるようになりました。

Fedora 20 → 21 → 22 と段階を踏んでアップグレードを試みたとき

最初はなかなか Fedora のアップグレードがうまく進んでくれなくて、これはもしかして1段階ずつアップグレードしないとダメなのかな?とも思ったんですけど、実際そうしてみると、逆に上手くいかずにやり直すことになりました。

Fedora 20 から 21 へのアップグレード自体は fedup --network 21 --product=cloud で出来たんですけど、そこからいざ fedup --network 22 を実行すると、今度は次のようなエラーで先に進めなくなりました。

Failed loading plugin: system_upgrade

Traceback (most recent call last):

File "/usr/bin/dnf", line 36, in <module>

main.user_main(sys.argv[1:], exit_code=True)

File "/usr/lib/python2.7/site-packages/dnf/cli/main.py", line 185, in user_main

errcode = main(args)

File "/usr/lib/python2.7/site-packages/dnf/cli/main.py", line 84, in main

return _main(base, args)

File "/usr/lib/python2.7/site-packages/dnf/cli/main.py", line 115, in _main

cli.configure(map(ucd, args))

File "/usr/lib/python2.7/site-packages/dnf/cli/cli.py", line 976, in configure

self.base.plugins.run_init(self.base, self)

File "/usr/lib/python2.7/site-packages/dnf/plugin.py", line 104, in run_init

plugin = p_cls(base, cli)

File "/usr/lib/python2.7/site-packages/dnf-plugins/system_upgrade.py", line 344, in __init__

super(SystemUpgradePlugin, self).__init__(base, cli)

TypeError: must be type, not None

もしかして fedup が壊れているのかなと思って yum で入れ直そうとしてみると パッケージ fedup-0.9.2-1.fc21.noarch は既にインストール済みの dnf-plugin-system-upgrade-0.5.0-1.fc21.noarch によって不要扱いになりました。 と表示され、それならと思って dnf を使ってみようとすると、こちらも先ほどみたいな main.py 周りで実行エラーになりました。

もしかして Python コンパイラのバージョンがズレてるのかと思って、現行の 2.7.8 から 3.4.1 に切り替えてから fedup を実行してみたら Python ファイルでの実行エラーはなくなったものの、今度は dnf 周りのエラーで先に進めません。

Traceback (most recent call last):

File "/usr/bin/dnf", line 35, in <module>

from dnf.cli import main

ImportError: No module named 'dnf'

そして yum update も動かなくなって、とりあえずここで試行錯誤するのは止めにして、幸い仮想 PC 上の Fedora だったので、撮っておいたスナップショットから、アップグレード作業前の Fedora 20 に戻すことにしました。

ちなみに Fedora 20 から 22 へとアップグレードすれば、このような問題には遭遇しない様子でした。

Fedora を 20 から 23 までアップグレードする

以上の失敗談を考慮しながら、実際に Fedora 20 を 23 までアップグレードする方法を記載しておくことにします。流れとしては、まずは Fedora 20 から 22 へアップグレードし、それから 23 へアップグレードするという2段階で行います。

Fedora 20 から 22 へのアップグレード

まずは Fedora 20 から 22 へのアップグレードです。アップグレードには fedup というコマンドを使うそうなので、まずはそれを yum でインストールする必要があります。

yum install fedup

そして、この fedup を使ってアップグレードを行います。

Fedora 20 からそれ以上へアップグレードするときには --product オプションを使って server , workstation , cloud の3つのうちのどれかを選ぶ必要があるようでした。

とりあえず、仮想 PC 上の Fedora の場合は cloud が適切という噂を聞いたので、今回はそれを指定してみることにします。

また、今回はネットワークから直接アップグレードを行うので、オプションに --network を指定して、それに『どのバージョンへアップグレードするか』を指定します。

fedup --network 22 --product=cloud

こうしたところ、アップグレードに必要なパッケージ群がダウンロードされた後、再起動を促すメッセージが表示されました。

setting up system for upgrade
Finished. Reboot to start upgrade.

そうしたら、次のコマンドを実行して Fedora 20 を再起動します。

shutdown -r now

その後は、アップグレード用の Fedora 環境が起動してアップグレード処理が行われた後、自動的に再起動して、何事もなかったかのように Fedora 22 が起動してくれました。

パッケージ周りのアップデート

アップグレードが完了しても、インストールされているパッケージは Fedora 20 の頃のものが多く残っている様子だったので、次のように yum を使ってアップデートしておきます。

yum update

ちなみにこの時、yum が廃止されて dnf に移行したことを知らせるメッセージが表示されました。

Yum command has been deprecated, redirecting to '/usr/bin/dnf update'.

See 'man dnf' and 'man yum2dnf' for more information.

To transfer transaction metadata from yum to DNF, run:

'dnf install python-dnf-plugins-extras-migrate && dnf-2 migrate'

dnf に移行したといっても、基本的には dnf update みたいに、コマンド名だけ変える感じで、これまでの yum と同じ感覚で扱えそうな印象でした。

それと、上記の移行したことを知らせるメッセージの中に『メタデータのマイグレーション方法』が記されていたので、それもとりあえず実行しておくことにします。

dnf install python-dnf-plugins-extras-migrate && dnf-2 migrate

Fedora 22 から 23 へのアップグレード

Fedora 22 から 23 へのアップグレードは、これまでの手順とはずいぶん変わるものの、少なくとも自分の環境では、難しいことなくできました。

まずはアップグレードのための準備操作から始めます。ちなみに自分の環境では dnf-plugin-system-upgrade は既にインストールされていたので不要でした。

dnf update --refresh
dnf install dnf-plugin-system-upgrade

そして、アップグレード作業を行います。流れとしては Fedora 23 のアップグレードパッケージのダウンロードを行い、それが終わったらアップグレード実施のために Fedora の再起動を行う流れです。

dnf system-upgrade download --releasever 23
dnf system-upgrade reboot

こうして Fedora が再起動するとアップグレード環境が起動して、数十分ほどして Fedora が再び再起動して、無事に Fedora 23 にアップグレードすることができました。