libapt-pkg4.12がUbuntuのアップグレードを妨害する

Ubuntuでいつもやるパッケージの更新をしようとしたらエラーがでて更新できなくなった。症状は以下のリンクのとおり

環境は、Ubuntu 12.04 LTS (precise) 64bit版

状況確認

ダウンロードされているパッケージの確認

% cd /var/cache/apt/archives/
% ls  libapt-pkg4.12_0.*
libapt-pkg4.12_0.8.16~exp12ubuntu10.12_amd64.deb
libapt-pkg4.12_0.8.16~exp12ubuntu10.12_i386.deb
libapt-pkg4.12_0.8.16~exp12ubuntu10.14_amd64.deb
libapt-pkg4.12_0.8.16~exp12ubuntu10.14_i386.deb

インストール状況

% dpkg -l | grep libapt-pkg4.12

私の場合は、libapt-pkg4.12 と libapt-pkg4.12:i386 がインストールされており、libapt-pkg4.12としてlibapt-pkg4.12_0.8.16~exp12ubuntu10.14_amd64.deb、libapt-pkg4.12:i386としてlibapt-pkg4.12_0.8.16~exp12ubuntu10.12_i386.debがインストールされていた。そして、libapt-pkg4.12_0.8.16~exp12ubuntu10.12_i386.deb を libapt-pkg4.12_0.8.16~exp12ubuntu10.14_i386.deb にアップグレードしようとするとエラーがでしまう状態だった。

解決法

最新の libapt-pkg4.12 パッケージをダウンロードしてきて、手動でインストールする。
http://security.ubuntu.com/ubuntu/pool/main/a/apt/から、apt_XXXXXX~ubuntu3_amd64.deb と libapt-pkg4.12_XXXXX~ubuntu3_amd64.deb をダウンロード。二つのパッケージの「XXXXX」のバージョンを揃えること。今回は 0.9.9.1 を使用した。

% cd /tmp
% wget http://security.ubuntu.com/ubuntu/pool/main/a/apt/apt_0.9.9.1~ubuntu3_amd64.deb
% wget http://security.ubuntu.com/ubuntu/pool/main/a/apt/libapt-pkg4.12_0.9.9.1~ubuntu3_amd64.deb

既存のものを強制削除

% sudo dpkg --force-depends -r libapt-pkg4.12
% sudo dpkg --force-depends -r libapt-pkg4.12:i386

ダウンロードしたものをインストール。二つのパッケージを同時に指定しないとエラーがでて怒られる。

% sudo dpkg -i libapt-pkg4.12_0.9.9.1~ubuntu3_amd64.deb apt_0.9.9.1~ubuntu3_amd64.deb

他のアップグレード。私の場合は、依存関係の解消法としてlibapt-pkg4.12:i386の削除が求められた。

% sudo aptitude upgrade
% sudo aptitude upgrade --full-resolver (aptitude upgradeでうまくいかない場合)

以上の方法でうまくアップグレードできた。