建設予定地

当面はやったことの備忘録

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/python3Ubuntuで使用されているデフォルトのPython3バージョンを指すシンボリックリンク(ショートカットのようなもの)であり、
ここのpython3のバージョンがubuntuバージョンの標準のものでないとこのようなエラーが発生するケースがある、とのこと。

Ubuntu18.04で規定のバージョンはpython3.6.8ですが、自分の環境では手動でpython3.8としていました。

update-alternatives --config pythonpythonのバージョンを変更します。

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とすることで成功。

f:id:denham:20201019010820p:plain 無事20.04にアップグレードできました。

まとめ

python3のデフォルトバージョンはうかつに弄らない方がいい(あさはかでした)

参考

codechacha.com qiita.com serverlog.jp qastack.jp