Ubuntuの「ソフトウェアの更新」が起動できない問題への対処
概要
2019年の初めにUbuntuを18.04に更新して,半年ほどしてからUbuntuでのソフトウェアの更新に失敗するようになっていた。1年以上この問題の原因と対処方法がわからず,放置していた。
先日Ubuntu 20.04に更新した際に,この問題が理由で,更新できなかったため,重い腰を上げて原因を調査し,解決できたので情報を記す。
問題
Ubuntuでのソフトウェアの更新を管理している「ソフトウェアの更新」([Software & Updates]) を起動すると,画面が表示される前に起動が終了してしまっていた。なお,アイコンは/usr/share/icons/Yaru/24x24/apps/update-manager.png
などに格納されている。
コマンドラインから [Software & Updates] の実体のコマンドを直接実行すると,以下のようにエラーでクラッシュしていた。
update-manager
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings Segmentation fault (core dumped)
ただ,エラーの内容も少なく,原因の特定が難しかった。
原因
同じ問題の報告もなかなかみつからなかったのだが,「Can’t update&upgrade anymore @ UM 18.04 v2 LTS – Support & Help Requests – Ubuntu MATE Community」のスレッドで同じ問題が報告されていた。
こちらを眺めるかぎり,どうやらOpenSSLの問題らしい。こちらのレスにある通り,OpenSSLの実体を以下の手順で確認した。
type openssl
openssl is hashed (/usr/local/bin/openssl)
/usr/local/bin/openssl version -a
OpenSSL 1.1.0f 25 May 2017 built on: reproducible build, date unspecified platform: linux-x86_64 compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/usr/local/ssl\"" -DENGINESDIR="\"/usr/local/lib/engines-1.1\"" -Wa,--noexecstack OPENSSLDIR: "/usr/local/ssl" ENGINESDIR: "/usr/local/lib/engines-1.1"
レスに書かれている通りのバージョンであり,システムのOpenSSLにユーザーがインストールした/usr/local/bin/openssl
を何故か使っていた。
解決策
/usr/local/
はユーザーが自分でシステム全体にインストールする場合のインストール先となっている。そのため,/usr/local
はAPTなどのパッケージマネージャーは一切使用しない。Autotoolsなどでインストールする場合,configure
のデフォルトのインストール先となっている。
普段であれば,/usr/local/
にソフトをインストールすることはない。よく思い出してみると,2017年に動作確認で自分でこちらにOpenSSLをインストールしたのを思い出した。その後,アンインストールせず,そのまま放置していた。
端末からローカル環境で使う場合は,~/.local/
にインストールしたOpenSSLを使っていたので,気にしていなかったのだが,システム全体は/usr/local
が優先されて気づかずに使っていた。
そもそも,自分で/usr/local/
にソフトをインストールすることはないので,以下のコマンドで/usr/local
配下をきれいに削除することで,update-manager
も無事に起動できるようになった。
rm -rf /usr/local/*
万が一,/usr/local
に必要なソフトがあるならば,以下のコマンドなどでopensslだけ削除する。
find /usr/local -name "openssl" -delete
これで解決する。
結論
Ubuntu 18.04でupdate-manager
が起動できず,ソフトウェアをアップデートできない問題の対処方法を記した。
do-release-upgrade
も同じ原因でクラッシュしていたため,この問題への対応がUbuntu 20.04へのアップグレードでも必須だった。うまく解決できてよかった。
システム全体で使用するパッケージはどこに影響があるかわからないので,やはり/usr/local
へのインストールは一切しないほうがいい。代わりに,~/.local
にインストールして,ユーザー権限の範疇で好きなソフトを使うのがよく思った。今後も,GNU Stowを使ってできるだけ徹底したい。