Fedora 20 を Fedora 23 にアップグレードする
Linux
clang 3.6 以上を使いたくなって、Fedora 20 を Fedora 23 にアップデートしてみることにしました。
自力で 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 にアップグレードすることができました。