Ubuntu 18.04(LTS)→20.04(LTS)アップグレードでハマったこと
以前Python3周りの環境構築でやらかして以降、放置していたUbuntuのアップグレード問題をようやく解決したお話。
前提
UbuntuはOS自体がpythonで動いているので、これを弄ると色々まずいことに。
なので、基本は別途に複数のバージョンをインストールしていくことになります。
Ubuntuを18.04(LTS)→20.04(LTS)にしたい
Ubuntuの最新バージョンへのアップグレードを行うには、以下の手順でやっていくことになります。
sudo apt update
sudo apt install update-manager
sudo apt dist-upgrade
sudo do-release-upgrade -d
ところがパッケージマネージャの処理でエラーが発生。
Your python3 install is corrupted. Please fix the '/usr/bin/python3' symlink
/usr/bin/python3はUbuntuで使用されているデフォルトのPython3バージョンを指すシンボリックリンク(ショートカットのようなもの)であり、
ここのpython3のバージョンがubuntuバージョンの標準のものでないとこのようなエラーが発生するケースがある、とのこと。
Ubuntu18.04で規定のバージョンはpython3.6.8ですが、自分の環境では手動でpython3.8としていました。
update-alternatives --config pythonでpythonのバージョンを変更します。
sudo update-alternatives --config python
とすることで、実行可能ファイルを確認することができる
以下のコマンドにより
$sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
$sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
python2、python3の指定した任意のバージョンをそれぞれ登録することができます。(この場合はpython2.7と3.6を実行可能ファイルとして登録できます)
ここで3.6を規定バージョンに変更。
python3 --version
のコマンドでバージョンが3.6.8になっていることを確認します。
sudo ln -s /usr/bin/python3.6 /usr/bin/python3
でpython3.6のシンボリックリンクを再作成
が、うまくいかない。
バージョン依存の原因ではないらしい。
もっとシンプル(かつ厄介)で、python3のパッケージが破損しているということでした。
sudo apt-get install python3
を実行したところ、
dpkg: パッケージ libjna-java の処理中にエラーが発生しました (--configure):
パッケージが非常に矛盾した状態に陥りました。設定を試みる
前に再インストールすべきです。
処理中にエラーが発生しました:
python3
パッケージが非常に矛盾しているようです。怖いですね。
ステータスを調べてみる
dpkg -s cacti-spine
とすると、
Status: install reinstreq half-installed
インストールが中断されて、半分インストールされた状態になっていた模様。
こういったケースでは-reinstallのコマンドが使えるとのことで、sudo apt-get install --reinstall python3
で再度python3をインストール。
インストールが成功していた場合
Status: install ok installed
となります。
ここでもう一度 sudo do-release-upgrade -d
をして確認。
upgrade開始の確認が表示され、yNとすることで成功。
無事20.04にアップグレードできました。
まとめ
python3のデフォルトバージョンはうかつに弄らない方がいい(あさはかでした)
参考