お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2008-11-21 07:10:18

Alice
新しいメンバ
登録日: 2008-11-21

「パッケージが非常に矛盾し(ry」削除できない

OS:Ubuntu 8.10

説明が難しいので流れで説明します。

1. http://solutions.brother.co.jp/support/os/linux/lpr_printer/driver.html からBrother - MFC8820Jのドライバをインストール(ダウンロードではなく最初から「GDebi Package インストーラー」でファイルを開いた)
2. 途中でエラー発生してインストールに失敗。
3. デスクトップにダウンロードしてダブルクリックで起動→「このパッケージは壊れているか〜〜パーミッションを確認してください」と表示されインストールが開始もされない
4. Brotherのページを見ると「dpkgの場合:dpkg -i --force-all xxxxxxx.deb」としてインストールしろと書いてあったので、実行したが、以下引用
-------------------------------------------------------------------------------------------------------
(データベースを読み込んでいます ... 現在 135260 個のファイルとディレクトリがインストールされています。)
mfc8820jlpr 1.1.2-1 を (mfc8820jlpr.deb で) 置換するための準備をしています ...
mfc8820jlpr を展開し、置換しています...
/var/lib/dpkg/info/mfc8820jlpr.postrm: 3: /etc/init.d/lpd: not found
dpkg: 警告 - 古い post-removal スクリプト がエラーステータス 127 を返しました
dpkg - 代わりに新規パッケージからスクリプトを実行してみます ...
/var/lib/dpkg/tmp.ci/postrm: 3: /etc/init.d/lpd: not found
dpkg: mfc8820jlpr.deb の処理中にエラーが発生しました (--install):
サブプロセス 新 post-removal スクリプト はエラー終了ステータス 127 を返しました
/var/lib/dpkg/tmp.ci/postrm: 3: /etc/init.d/lpd: not found
dpkg: クリーンアップ中にエラーが発生しました:
サブプロセス post-removal script はエラー終了ステータス 127 を返しました
以下のパッケージの処理中にエラーが発生しました:
mfc8820jlpr.deb
-------------------------------------------------------------------------------------------------------
となりインストールできない。
5. おそらく前回のキャッシュ見たいなものが残っているのだろうと判断して 'sudo apt-get autoremove'や'sudo apt-get clean'を試してみたが、ダメ。
6. パッケージを削除しようと'sudo apt-get remove mfc8820jlpr.deb'を実行するが、以下引用
--------------------------------------------------------------------------------------------------------
パッケージ mfc8820jlpr を再インストールする必要がありますが、そのためのアーカイブを見つけることができませんでした。
--------------------------------------------------------------------------------------------------------
となり不可。
7. apt-getじゃダメなのかとaptitudeで試すが、以下引用
--------------------------------------------------------------------------------------------------------
dpkg: mfc8820jlpr の処理中にエラーが発生しました (--purge):
パッケージが非常に矛盾した状態に陥りました。
削除を行う前にこのパッケージを再インストールすべきです。
以下のパッケージの処理中にエラーが発生しました:
mfc8820jlpr
E: Sub-process /usr/bin/dpkg returned an error code (1)
パッケージをインストールできませんでした。復旧を試みています:
先に進む場合は Return を押してください。
--------------------------------------------------------------------------------------------------------
となり不可能。いまここ。


プリンタは諦めたからもういいのですが、この子が存在しているせいで他のアップデート等ができません(汗。以下のようなエラーでSyn〜パッケージマネージャーは起動すらできません、アップデートマネージャーも似たようなエラーでアップデートできません(涙
--------------------------------------------------------------------------------------------------------
E: パッケージ mfc8820jlpr を再インストールする必要がありますが、そのためのアーカイブを見つけることができませんでした。
E: キャッシュ (1) をオープン時に内部エラーが発生しました。報告してください。
--------------------------------------------------------------------------------------------------------


解決策をご存知のお方がいらっしゃいましたらご享受よろしくお願いします。可能ならばOSの再インストールは避けたいです(再構築が少し大変なので…)

オフライン

 

#2 2008-11-21 10:13:04

のんき
メンバ
登録日: 2007-03-04

Re: 「パッケージが非常に矛盾し(ry」削除できない

sudo apt-get -f install

やってみてください。

オフライン

 

#3 2008-11-21 14:03:51

Alice
新しいメンバ
登録日: 2008-11-21

Re: 「パッケージが非常に矛盾し(ry」削除できない

おっしゃるとおり"sudo apt-get -f install"を実行してみましたが
----------------------------------------------------------------
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています               
状態情報を読み取っています... 完了
E: パッケージ mfc8820jlpr を再インストールする必要がありますが、そのためのアーカイブを見つけることができませんでした。
----------------------------------------------------------------

となります(汗。

オフライン

 

#4 2008-11-22 06:57:23

STGSAGWAN
ゲスト

Re: 「パッケージが非常に矛盾し(ry」削除できない

※長いので、時間がなければ、最終的な解決方法についてを読んでくださいね。
時間があれば全部読んでもらうといいかも。
※以下は全て8.04の仮想環境で試しましたが、8.10と大差ないだろうという前提で書いてます。
※ここは初心者サポートですが、質問者の方はLinuxの基礎スキルが十分あると思うので、それに合わせた説明になっています。

LPDについて
Brotherのサイトに、
http://solutions.brother.co.jp/support/ … stall.html

LPD プリンタドライバが使用できる設定になっているか、Linux アプリケーションから確かめてください。

という記述があります。

最初の投稿のログをみても、
/var/lib/dpkg/info/mfc8820jlpr.postrm: 3: /etc/init.d/lpd: not found
といったように、/etc/init/lpd つまりLPDはインストールされた状態ではないのでしょう。

debパッケージ内の制御ファイル(controlファイル)も見てみましたが、lpdがシステムにインストールされていることが大前提となってますね。

制御ファイルは、
$ dpkg -e mfc8820jlpr-1.1.2-1.i386.deb
で抽出できるので、一度見てみると良いと思いますよ。(あとで、「これだからダメだったか」と納得できる材料となります。)


パッケージのステータスについて
「パッケージが非常に矛盾した状態に陥りました。」となっていますが、
該当パッケージの現在のスタータスは、
$ dpkg -s mfc8820jlpr
で詳しく見ることができます。

私の環境でやってみた出力はというと、
Status: install reinstreq half-installed
というステータスでした。

意味は、
install(インストールされている)
reinstreq(壊れているので、要再インストール)
half-installed(インストールされているが、何らかの理由で完了していない)

ステータスについては、man dpkgで見ると分かります。
ちなみに、Synapticで状態を見ようとしても、起動直後に「mfc8820jlprにエラーがあるよ」という趣旨のダイアログが出て、すぐに強制終了してしまいます。


強制削除について
man dpkgのreinstreqの項目で気になる記述がありました。

reinst-required
パ ッケージは reinst-required されている。これは、壊れている状態でインストールされていて、再インストールが要求されているということである。このパッケージは --force-reinstreq で強制しない限り、削除することができない。

と書いてあります。

$ dpkg --force-help でforceオプションの説明を見ると、
--force-remove-reinstreq をつけるらしいので、
$ sudo dpkg -P --force-remove-reinstreq mfc8820jlpr
とやってみたが、最初の投稿と同じように「パッケージが非常に矛盾した状態に陥りました。」でエラー終了。
$ sudo dpkg -P --force-all mfc8820jlpr でもエラー終了。


最終的な解決方法について
結局のところ、
/var/lib/dpkg/info/mfc8820jlpr.postrm: 3: /etc/init.d/lpd: not found
が指し示すように、またパッケージの制御ファイルを見ても分かるように、このパッケージのアンインストール過程の最後に自動実行されるスクリプト(postrm)で、/etc/init.d/lpd restart を実行しようとしているので、/etc/init.d/lpdがないと、パッケージもアンインストールできないようですね。

そこで、/etc/init.d/lpd というダミーのシェルスクリプトファイル(必ず正常終了するスクリプト)を作成しましょう。

$ sudo sh -c "echo 'exit 0' > /etc/init.d/lpd"
$ sudo chmod +x /etc/init.d/lpd
この後、
$ sudo dpkg -P --force-all mfc8820jlpr
で削除正常終了です。
最後に、ダミーのシェルスクリプトファイルは削除しておきましょう。
$ sudo rm /etc/init.d/lpd

なお、削除し終えた後の最後に
dpkg - 警告: mfc8820jlpr の削除中、ディレクトリ `/usr/local' が空でないため削除できませんでした。
ってメッセージがでますが、このケースでは気にすることはないと思います。

$ dpkg -c mfc8820jlpr-1.1.2-1.i386.deb
でファイル一覧を見て、アンインストール後に残留ファイルが無いか見てみましたが、全部削除されているようです。

あとがき
sudo dpkg -i --force-allを使ったインストール方法は一般的には危険だと思います。(何をやっているのか分かった人だけがやる最終手段ではないでしょうか?)
それがBrotherのページで正規インストール方法として紹介されているのは驚きを隠せません。

Alice 様
実施した操作が全て書かれているので、非常に回答しやすかったですよ。

# debパッケージやdpkgの良い復習となりました。

最後の編集者: STGSAGWAN (2008-11-22 07:31:44)

 

#5 2008-11-22 14:38:04

Alice
新しいメンバ
登録日: 2008-11-21

Re: 「パッケージが非常に矛盾し(ry」削除できない

>STGSAGWANさま
こまかい解説本当にありがとうございます:) 無事状態を元に戻すことができました:)

以下、STGSAGWANさまの投稿より以後のためにピックアップ

各コマンド
○  制御ファイルの抽出:$ dpkg -e ##########.deb
○  パッケージのステータス状態:$ dpkg -s ##########
○  各ステータス状態の説明:man dpkg

「パッケージが非常に矛盾した状態に陥りました。」の場合の対処法
1.  エラーメッセージから原因の推測
2.  制御ファイルを抽出し原因を確認する
3.  今回のように特定ファイルが存在しないことによってインストール・アンインストール共にできない状態に陥ることがある。その場合はダミーファイルを作成(内容は'exit 0'等)

# かなり詳しく説明していただいたおかげで自分のスキルアップにもなりました

オフライン

 

#6 2009-09-07 14:31:41

ApprenticeR
新しいメンバ
登録日: 2009-09-07

Re: 「パッケージが非常に矛盾し(ry」削除できない

STGSAGWAN 様


あとがき
sudo dpkg -i --force-allを使ったインストール方法は一般的には危険だと思います。(何をやっているのか分かった人だけがやる最終手段ではないでしょうか?)
それがBrotherのページで正規インストール方法として紹介されているのは驚きを隠せません。

Linux超初心者です。brotherのドライバーをインストール後プリンターを買い換えたので削除しようとして失敗しました。
なぜaptitudeではないの・・・? という事すら解らずにbrotherのページを参照して処理した次第です。
で、色々調べてこちらにたどり着いたのですが、エラーメッセージがAliceさんとほぼ同じでしたのでご助言ほんに助かりました。

オフライン

 

Board footer

Powered by FluxBB