例えば、
----------------------
$ dpkg -l
バスエラー
----------------------
こんな感じで、何をやってもエラーとなってしまいます。同じくapt-getコマンドも失敗するようになりました。
オリジナルのパッケージをダウンロードして、直接展開、インストールすることは可能でしょうか?
また、その場合の手順はどのような感じになるでしょうか?
ブログを拝見するに、
apt-get update
でエラーが出て、その後
dpkg --configure -a
やったらバスエラーに、ということですがこの辺のエラーメッセージ細かく覚えていらっしゃいませんか?あれば何かのヒントになると思うのですが。
う〜ん…とにかくバスエラーの原因・発生箇所を特定するしかないとして……一つ確認ですが、dpkgは全てのオプションが使用できない状態でしょうか、それとも特定のオプションだけでしょうか。例えば
dpkg -X dpkg_1.13.22_i386.deb ./
のように個々のdebファイルに対する操作は通るが dpkg -l などシステム全体に関する情報が必要なものは通らない、という状況であれば、上記の事も合わせて察っするに /var/lib/dpkg/ 以下のファイルあたりが壊れている可能性が考えられます。私が以前 sid を使っていたときは /var/lib/dpkg/status がパッケージのバグで壊されてしまい apt-get などが動かなくなることを何度か経験しましたが、これと同じ状況ならば http://lists.debian.or.jp/debian-users/200404/msg00132.html あたりが参考になるかもしれません。
どうしてもあたりが付かなければ、私だったら最終的には dpkg のソース取ってきてデバッガの中で走らせるでしょうか。状況を整理してから debian-users-ML あたりで聞いた方がよいアドバイスを受けられるかもしれませんね。(少なくとも私は数年Debianから離れていて手元にDebian環境もないのでピンポイントのアドバイスはできそうにありません。お力になれず申し訳ない。)
あと、いっそシステム全体を再インストールした方が楽という可能性もありますね(^_^;)
APTはdpkgのフロントエンドなので、dpkgが異常終了してしまう以上apt-getも使えません。バスエラーだけではどこで問題が起っているのはっきりしませんが、 とりあえずdpkg(だけ)が壊れていると仮定して回答します。
方法は少なくとも二つあって、一つはdpkgを使うことのできる1 CD Linux (Knoppixあたり?)を使ってレスキューすることで、これが楽な方法だと思います。
% dpkg -X dpkg_1.13.22_i386.deb ./
とすることで、カレントディレクトリにファイルを展開することができます。
もう一つは、どうしてもdpkgを使うことができない場合に、debファイルを手動で展開する方法です。ただ、そのためには dd tar gzip などが正常に動く必要があり、またできればバイナリエディタが欲しい(emacsかviが動けば十分)のですが、これらのコマンドは正常に動きますか?動くようであれば以下の方法でdpkgを強引に上書きインストールすることができます。(これがベストなのかどうかはわかりません。あと、しばらくDebianから離れているのでどこか見落しがあったらすみません。)
debパッケージを手動で展開するための鍵は
の2つです。マニュアルによれば、インストールされるファイルは data.tar.gz に格納されているので、これをdebバイナリから抽出してやれば、あとはこれを解凍して必要なファイルを手動でコピーするだけです。
具体的な抽出方法ですが、例えば以下のようにします。ここでは、先程ミラーサーバーからダウンロードしてきた dpkg_1.13.22_i386.deb を例に説明してみます。(なおdebファイルの場所はミラーサーバーのpool/main/d/dpkg/以下です。)これを emacs の hexl-mode で開くと先頭部分は次のようになっています。
00000000: 213c 6172 6368 3e0a 6465 6269 616e 2d62 !<arch>.debian-b 00000010: 696e 6172 7920 2020 3131 3530 3930 3235 inary 11509025 00000020: 3930 2020 3020 2020 2020 3020 2020 2020 90 0 0 00000030: 3130 3036 3434 2020 3420 2020 2020 2020 100644 4 00000040: 2020 600a 322e 300a 636f 6e74 726f 6c2e `.2.0.control. 00000050: 7461 722e 677a 2020 3131 3530 3930 3235 tar.gz 11509025 00000060: 3930 2020 3020 2020 2020 3020 2020 2020 90 0 0 00000070: 3130 3036 3434 2020 3731 3030 2020 2020 100644 7100 00000080: 2020 600a 1f8b 0800 0000 0000 0003 ed5c `............\
00000084 からの 1f8b08 の部分が control.tar.gz の開始部なので、さらに後方をサーチして、data.tar.gz の開始部を探すと、
00001c40: 6461 7461 2e74 6172 2e67 7a20 2020 2020 data.tar.gz 00001c50: 3131 3530 3930 3235 3930 2020 3020 2020 1150902590 0 00001c60: 2020 3020 2020 2020 3130 3036 3434 2020 0 100644 00001c70: 3136 3237 3236 3120 2020 600a 1f8b 0800 1627261 `..... 00001c80: 0000 0000 0003 ecbd 095c 5555 f737 7eee .........\UU.7~.
となっていて 00001c7c からが data.tar.gz なので、ここからファイルの終わりまでを dd で抜き出します。
% dd if=dpkg_1.13.22_i386.deb of=data.tar.gz bs=2 skip=3646
あとは出来上がった data.tar.gz を解凍するだけです。
回答、詳しい手順ありがとうございます。
この手順を参考にdpkgコマンドを抽出して、既存のファイルに上書きしてみたのですが、やはり実行すると「バスエラー」となります。
その他のコマンドは普通に使えていますが、やっぱりdpkgだけが不調です。この先どのあたりから調べていけばいいのか悩んでいます。
ブログを拝見するに、
apt-get update
でエラーが出て、その後
dpkg --configure -a
やったらバスエラーに、ということですがこの辺のエラーメッセージ細かく覚えていらっしゃいませんか?あれば何かのヒントになると思うのですが。
う〜ん…とにかくバスエラーの原因・発生箇所を特定するしかないとして……一つ確認ですが、dpkgは全てのオプションが使用できない状態でしょうか、それとも特定のオプションだけでしょうか。例えば
dpkg -X dpkg_1.13.22_i386.deb ./
のように個々のdebファイルに対する操作は通るが dpkg -l などシステム全体に関する情報が必要なものは通らない、という状況であれば、上記の事も合わせて察っするに /var/lib/dpkg/ 以下のファイルあたりが壊れている可能性が考えられます。私が以前 sid を使っていたときは /var/lib/dpkg/status がパッケージのバグで壊されてしまい apt-get などが動かなくなることを何度か経験しましたが、これと同じ状況ならば http://lists.debian.or.jp/debian-users/200404/msg00132.html あたりが参考になるかもしれません。
どうしてもあたりが付かなければ、私だったら最終的には dpkg のソース取ってきてデバッガの中で走らせるでしょうか。状況を整理してから debian-users-ML あたりで聞いた方がよいアドバイスを受けられるかもしれませんね。(少なくとも私は数年Debianから離れていて手元にDebian環境もないのでピンポイントのアドバイスはできそうにありません。お力になれず申し訳ない。)
あと、いっそシステム全体を再インストールした方が楽という可能性もありますね(^_^;)
いろいろと役立つ情報をありがとうございます。
今試してみましたが、dpkg -X は正常に動作しました。dpkg -l はやっぱりダメですが。
/var/lib/dpkg/status を以前のものに置き換えたりもしてみましたが、こちらもダメでした。
何気なく/var/log/syslogを見てみると、そこには大量のエラーメッセージが出力されていました。(こんな感じのものが何度も繰り返し出力されています。)
Sep 11 01:14:32 kuro-box kernel: end_request: I/O error, dev 03:01 (hda), sector 3589984 Sep 11 01:14:33 kuro-box kernel: hda: dma_intr: status=0x51 { DriveReady SeekComplete Error } Sep 11 01:14:33 kuro-box kernel: hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=106431, h igh=0, low=106431, sector=106368
これはもう、素直にハードディスクを交換して、システム全体の再インストールを下法が良さそうですね。
いろいろとアドバイスいただきましたが、時間を作ってもう一度1からやり直してみることにします。ありがとうございました。
いろいろと役立つ情報をありがとうございます。
今試してみましたが、dpkg -X は正常に動作しました。dpkg -l はやっぱりダメですが。
/var/lib/dpkg/status を以前のものに置き換えたりもしてみましたが、こちらもダメでした。
何気なく/var/log/syslogを見てみると、そこには大量のエラーメッセージが出力されていました。(こんな感じのものが何度も繰り返し出力されています。)
これはもう、素直にハードディスクを交換して、システム全体の再インストールを下法が良さそうですね。
いろいろとアドバイスいただきましたが、時間を作ってもう一度1からやり直してみることにします。ありがとうございました。