今回は、Linux(ubuntu)上でのちょっとしたworkaroundです。
先日、16.04LTS(64bit)上にAndroid Studioをインストールする機会がありまして。そのインストール自体には問題なかったんですけれども、その後使い始めた後に問題が発生してしまったんです。何かというと、OSが64bit版の場合は、エミュレータ作成・管理の際、AVDのsdカード領域作成モジュール(mksdcard)を実行する際に32bit版のライブラリが必要になるんですが、当該PCは、何故かこのライブラリのインストールに失敗するようになってしまっていまして。その対処をしたのでメモ。
具体的には、下記のようにライブラリをインストールしようとすると、
$ sudo apt-get install lib64stdc++6:i386 zlib1g:i386 libncurses5:i386
こんな感じのメッセージがズラズラと出るのです。(一部抜粋)
libstdc++6:i386 : 依存: gcc-5-base:i386 (= 5.3.1-14ubuntu2) しかし、インストールされようとしていません
zlib1g : 依存: libc6 (>= 2.14) しかし、インストールされようとしていません
普通ならこの辺の依存関係はaptの側で自動的に解釈して、必要なものはまとめてインストールするなりアップデートするなりしてくれるんですが、何故かそれをしてくれません。"しかし、インストールされようとしていません"って、何他人事みたいな言い方してるの?どうしろっていうの?と途方に暮れざるを得ない状況になってしまったわけです。
なお、apt-get(もしくはapt)ではなくaptitudeだともう少し親切で、一時的にバージョンを固定すれば大丈夫云々、等と解決策らしきものを呈示してくれるんですが、それを実行(yesを選択)しても何も起こらず解決しません。馬鹿にしてんのかと。
他にも色々と試行錯誤して理解したところは、結局、aptのキャッシュやらが壊れてしまっていて、aptの側では対処不能になってしまっている、という事でした。このままだと、必要なライブラリをインストールする事が出来ませんから、エミュレータを作成・起動する事が出来ず、従ってセットアップを完了する事が出来ません。困りました。しかし諦めるわけにもいきません。
というわけで、色々と対処方法を探す羽目になったのです。で、結論から言えば、キャッシュをリセットする事で、一旦依存関係等を初期化すれば良いのです。その手順は以下の通りです。
[aptのリセット手順]
・ソースリストの削除(バックアップ作成)
$ sudo mv /etc/apt/sources.list /etc/apt/sources.list_backup
・再設定
$ sudo -i software-properties-gtk
で起動されるaptのソース設定画面から、取得対象範囲等を再設定します。
[Ubuntuのソフトウェア]
main,universe,restricted,multiverseから選択
ダウンロード元を[日本のサーバー]等に設定
[アップデート]
重要なセキュリティアップデート、推奨アップデート等を選択
・アップデート等実行
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
$ sudo apt-get autoremove
これで完了。しかるのちに、上記のi386関連ライブラリのインストールコマンドを実行すると、今度は問題なくインストールすることが出来たのでした。その後は特に問題なし。やれやれです。
しかしこの手の管理情報が壊れた場合の対処法って、往々にしてシステムの再インストールとかそういう乱暴というか無茶な話になりがちなのは、どうにかならないものでしょうか。本件で対処法を探している時にも、とあるフォーラムに寄せられていた同様の事例を見かけたんですが、色々と試行錯誤をした挙句、結局相談者からOSを再インストールしたら直った、との報告があり、それで終わっていました。そんな手段を取り得るのは、殆どシステムを使っていないような特殊なケースに限られるし、大半の場合は解決方法になり得ず、要するに対処を諦めるに等しいものだと思うんですが、普通に多いんですよね。困ったものです。ともあれ、そんな事にならずに済んで一安心です。やれやれ。というわけで、今回はこれでおしまい。