Ubuntu 10.10 でアパッチが入らない

Ubuntu Maverickで古いlibaprutil1が居座っていたためにapache2が入らなかった。
libaprutil1 1.3.9+dfsg-3ubuntu0.10.10.1を削除したらインストールできるようになった。

血みどろの詳細

apt-getは「無茶の状況を要求してきたからかも」とか言い訳する。いや、全然無茶じゃないよ。それから「unstable distribution」だからかもとくる。Mavrickはunstableじゃない。そして「次の情報で何かわかるかも」として「必要なんだけどもインストールしないよ」という依存パッケージを陳列する。そして最後に「壊れたパッケージ」と一言。壊れているのはお前の方じゃないか! ふざけるな。


$ sudo apt-get install apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
apache2 : Depends: apache2-mpm-worker (= 2.2.16-1ubuntu3) but it is not going to be installed or
apache2-mpm-prefork (= 2.2.16-1ubuntu3) but it is not going to be installed or
apache2-mpm-event (= 2.2.16-1ubuntu3) but it is not going to be installed or
apache2-mpm-itk (= 2.2.16-1ubuntu3) but it is not going to be installed
Depends: apache2.2-common (= 2.2.16-1ubuntu3) but it is not going to be installed
E: Broken packages

問題のね本まで掘り下げる

依存パッケージを芋蔓しきにインストールを試みる:


sudo apt-get install -m apache2.2-common
# エラー
sudo apt-get install -m apache2.2-bin
# エラー
そしてここまでくると

$ sudo apt-get install -m libaprutil1-dbd-sqlite3
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
libaprutil1-dbd-sqlite3 : Depends: libaprutil1 (= 1.3.9+dfsg-3build1) but 1.3.9+dfsg-3ubuntu0.10.10.1 is to be installed
E: Broken packages

これか Depends: libaprutil1 (= 1.3.9+dfsg-3build1) but 1.3.9+dfsg-3ubuntu0.10.10.1 is to be installed

問題除去

うーむ。よく意味わからんが、なんかlibaprutil1がいけないみたい。
そこで、削除の試みをしながら依存treeを登ってみる。
sudo dpkg -r libaprutil1 # 依存するパッケーじがあるため失敗
sudo dpkg -r libsvn1 # 依存するパッケーじがあるため失敗
sudo dpkg -r subversion # 成功
sudo dpkg -r libsvn1 # 成功
sudo dpkg -r libaprutil1 # 成功
問題のパッケージが削除できた。

成功

sudo aptitude install apache2
これで難なく入った。apt-getのかわりにaptitudeを使ったのは特に意味ない。だいたい何で似たようなコマンドが二つあるんだ?

問題のlibaprutil1はというと:
libaprutil1 1.3.9+dfsg-3build1
となっていた。以前のは:
libaprutil1 1.3.9+dfsg-3ubuntu0.10.10.1
build1とubuntu0.10.10.1の違いが問題だったようだ。

dpkgしっかりしろよ

こういう依存を管理するのがパッケージマネジャの仕事だろ?debianパッケージには本当に苦労させられる。FreeBSDports/packagesが懐しい。

これがグーグルに発見され、次の方がapache2のようなありきたりなパッケージを入れるためにdpkgと何時間も格闘することが防げることを願う。