Debian(Ubuntu) apt-get upgrade の「E: 未解決の依存関係です。」ではまったら
Debian(Ubuntu) では、パッケージのアップグレードを簡単に行う apt があります。
その代表的なコマンドが、apt-get です。
$ apt-get update
...
$ apt-get upgrade
...
|
と、投入することでパッケージのアップグレードができます。
ただ、これでアップグレードをやったときに、エラーが発生することがあります。
よくあるのが、アップグレードの順番によって、依存関係が壊れてしまって、にっちもさっちも行かなくなることがあります。
$ apt-get upgrade
...
...の処理中にエラーが発生しました
...
$ apt-get remove XXXXX
...
E: 未解決の依存関係です。'apt-get -f install' を実行してみてください (または解法を明示してください)。
|
このパターンです。とりあえず、最初にエラーが発生した依存関係のあるパッケージを削除しようと
apt-get remove を実施しても、「E: 未解決の依存関係です。」ではじかれて、何もできなくなるパターンです。
apt-get upgrade の「E: 未解決の依存関係です。」ではまったら
apt-get upgrade の「E: 未解決の依存関係です。」ではまったら
aptitude を使ってみることです。
そもそも、 apt-get を いつまでも使っているのが問題なんですよね。
はまった例をあげて簡単に解説してみます
ここでは、個人的にmysql 5.5 のアップグレードでエラーが出た例を簡単に解説してみます。
apt-get を使ってパッケージをアップグレードしてみる
$ apt-get update
...
$ apt-get upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージはアップグレードされます:
...
mysql-server-5.5 mysql-server-core-5.5 openssh-client openssh-server openssl
...
アップグレード: 34 個、新規インストール: 0 個、削除: 0 個、保留: 1 個。
66.9 MB のアーカイブを取得する必要があります。
この操作後に追加で 6,017 kB のディスク容量が消費されます。
続行しますか [Y/n]? Y
...
mysql-server-5.5 5.5.24-1~dotdeb.1 を (.../mysql-server-5.5_5.5.25-1~dotdeb.0_a d64.deb で) 置換するための準備をしています ...
Stopping MySQL database server: mysqld.
Stopping MySQL database server: mysqld.
mysql-server-5.5 を展開し、置換しています...
dpkg: /var/cache/apt/archives/mysql-server-5.5_5.5.25-1~dotdeb.0_amd64.deb の処 理中にエラーが発生しました (--unpack):
'/usr/lib/mysql/plugin/ha_example.so' を上書きしようとしています。これはパッケ ージ libmysqlclient-dev 5.5.24-1~dotdeb.1 にも存在します
...
以下のパッケージの処理中にエラーが発生しました:
/var/cache/apt/archives/mysql-server-5.5_5.5.25-1~dotdeb.0_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
$ apt-get upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
これらを直すためには 'apt-get -f install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
mysql-server-5.5 : 依存: mysql-server-core-5.5 (= 5.5.24-1~dotdeb.1) しかし、5 5.25-1~dotdeb.0 はインストールされています
E: 未解決の依存関係があります。-f オプションを試してください。
|
apt-get upgrade を再投入してみる
$ apt-get upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
これらを直すためには 'apt-get -f install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
mysql-server-5.5 : 依存: mysql-server-core-5.5 (= 5.5.24-1~dotdeb.1) しかし、5 5.25-1~dotdeb.0 はインストールされています
E: 未解決の依存関係があります。-f オプションを試してください。
|
ここで、 ‘apt-get -f install’ を実行してみては?と言われるので、言われるがままに投入してみます。
apt-get -f install を投入してみる
$ apt-get -f install
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
依存関係を解決しています ... 完了
以下の特別パッケージがインストールされます:
mysql-server-5.5
以下のパッケージはアップグレードされます:
mysql-server-5.5
アップグレード: 1 個、新規インストール: 0 個、削除: 0 個、保留: 25 個。
...
mysql-server-5.5 5.5.24-1~dotdeb.1 を (.../mysql-server-5.5_5.5.25-1~dotdeb.0_a d64.deb で) 置換するための準備をしています ...
Stopping MySQL database server: mysqld.
Stopping MySQL database server: mysqld.
mysql-server-5.5 を展開し、置換しています...
dpkg: /var/cache/apt/archives/mysql-server-5.5_5.5.25-1~dotdeb.0_amd64.deb の処 理中にエラーが発生しました (--unpack):
'/usr/lib/mysql/plugin/ha_example.so' を上書きしようとしています。これはパッケ ージ libmysqlclient-dev 5.5.24-1~dotdeb.1 にも存在します
...
以下のパッケージの処理中にエラーが発生しました:
/var/cache/apt/archives/mysql-server-5.5_5.5.25-1~dotdeb.0_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
|
と、最初にapt-get upgrade を投入したときと同じ結果になりました。
それで、よく調べてみると、libmysqlclient-dev これがちゃんと先にアップグレードできていないのが原因っぽい。
また、よくよく調べてみれば、libmysqlclient-dev で ha_example.so を使っているのでアップグレードできないよ・・という感じのエラーみたいなので、
とりあえず、このパッケージを削除してみます。
libmysqlclient-dev を削除してみる
$ apt-get remove libmysqlclient-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の問題を解決するために 'apt-get -f install' を実行する必要があるかもしれません:
以下のパッケージには満たせない依存関係があります:
mysql-server-5.5 : 依存: mysql-server-core-5.5 (= 5.5.24-1~dotdeb.1) しかし、5.5.25-1~dotdeb.0 はインストールされようとしています
E: 未解決の依存関係です。'apt-get -f install' を実行してみてください (または解法を明示してください)。
|
と、先のにapt-get upgrade を再投入したときと同じように
‘apt-get -f install’ を実行してみては?と言われるので、言われるがままに投入してみます。
apt-get upgrade を再再投入してみる
$ apt-get upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
これらを直すためには 'apt-get -f install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
mysql-server-5.5 : 依存: mysql-server-core-5.5 (= 5.5.24-1~dotdeb.1) しかし、5 5.25-1~dotdeb.0 はインストールされています
E: 未解決の依存関係があります。-f オプションを試してください。
|
と、完全に堂々巡りです。
いよいよ aptitude を使ってパッケージのアップグレードを行ってみる
aptitude safe-upgradeを再投入してみる
$ aptitude safe-upgrade
以下のパッケージが更新されます:
libmysqlclient-dev libmysqlclient18 mysql-server-5.5
....
更新: 23 個、新規インストール: 0 個、削除: 0 個、保留: 1 個。
アーカイブ 20.4 MB 中 0 B を取得する必要があります。展開後に 2,296 kB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] y
....
mysql-server-5.5 を展開し、置換しています...
dpkg: /var/cache/apt/archives/mysql-server-5.5_5.5.25-1~dotdeb.0_amd64.deb の処 理中にエラーが発生しました (--unpack):
'/usr/lib/mysql/plugin/ha_example.so' を上書きしようとしています。これはパッケ ージ libmysqlclient-dev 5.5.24-1~dotdeb.1 にも存在します
....
現在の状態: 更新が 2 個 [-22]。
|
とエラーが同じエラーが発生しますが、インストール(アップグレード)できるものもあり、更新作業は進んでいる点に注意してください。
続けて、再度、aptitude safe-upgrade を投入します。
aptitude safe-upgradeを再再投入してみる
$ aptitude safe-upgrade
以下のパッケージが更新されます:
mysql-server-5.5
更新: 1 個、新規インストール: 0 個、削除: 0 個、保留: 1 個。
アーカイブ 8,860 kB 中 0 B を取得する必要があります。展開後に 841 kB のディスク 領域が新たに消費されます。
先に進みますか? [Y/n/?] y
changelog を読んでいます... 完了
パッケージを事前設定しています ...
(データベースを読み込んでいます ... 現在 41075 個のファイルとディレクトリがイン ストールされています。)
mysql-server-5.5 5.5.24-1~dotdeb.1 を (.../mysql-server-5.5_5.5.25-1~dotdeb.0_amd64.deb で) 置換するための準備をしています ...
Stopping MySQL database server: mysqld.
Stopping MySQL database server: mysqld.
mysql-server-5.5 を展開し、置換しています...
man-db のトリガを処理しています ...
mysql-server-5.5 (5.5.25-1~dotdeb.0) を設定しています ...
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld ..
Checking for tables which need an upgrade, are corrupt or were
not closed cleanly..
現在の状態: 依存関係破損が 0 個 [-1], 更新が 1 個 [-1]。
|
とエラーがなくなりました。
一応、確認のため、再度、aptitude safe-upgrade を投入します。
$ aptitude safe-upgrade
インストール・削除・更新されるパッケージがありません。
更新: 0 個、新規インストール: 0 個、削除: 0 個、保留: 1 個。
0 B のアーカイブを取得する必要があります。展開後に 0 B のディスク領域が新たに消 費されます。
|
とアップグレード対象パッケージがないのがわかります。
最後に、確認のため、mysqlのバージョンを確認してみます。
$ mysql --version
mysql Ver 14.14 Distrib 5.5.25, for debian-linux-gnu (x86_64) using readline 6.1
|
と正しくアップグレードできたようです。
この記事は、
ただ、apt-get じゃなくって、aptitude を使いなさい!!というだけの記事です。
それを 長々と実例で解説しています。 個人的な備忘録も兼ねてますので、わかりにくかったらゴメンなさい。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
関連記事 :
コメントを投稿 :