
Ubuntu日本語フォーラム
ログインしていません。
アップデートマネージャを起動してアップデートしている最中に固まってしまい、やむなく強制終了しました。
もう一度ubuntuを起動してアップデートマネージャでアップデートさせようとしたのですが、
E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem.
E: _cache->open() failed, please report.
というエラーメッセージが出てアップデートできなくなりました。
別の方投稿を参考にして、端末で
sudo dpkg --configure -a
と入力してみたのですが、
dpkg: 解析エラー, ファイル `/var/lib/dpkg/updates/0000' の 1 行目付近:フィールド名 `auto' に改行
というメッセージが表示されました。
なかなか解決方法がみつかりません。アドバイスを頂けたら幸いです。
オフライン
http://ubuntuforums.org/showthread.php?t=385886 (英語)
と同じ現象か思います。
端末から
sudo rm /var/lib/dpkg/updates/0000
で直るはずです。
update中に使われる一時ファイルか何かが残留してしまっているのかと思われます。
最後の編集者: STGSAGWAN (2009-01-16 22:08:02)
アドバイスありがとうございます。
0000以外にもあったのですべて同じように削除したのですが、すると次にこのようなエラーメッセージが表示されました。
E: /var/cache/apt/archives/libperl5.8_5.8.8-12ubuntu0.4_i386.deb: files list file for package `xserver-xorg-video-amd' is missing final newline
そこでもう一度端末で
sudo dpkg --configure -a
と入力すると、
perl (5.8.8-12ubuntu0.3) を設定しています ...
Can't find string terminator "AString" anywhere before EOF at /usr/lib/perl/5.8/auto/POSIX/autosplit.ix line 20.
Compilation failed in require at /usr/share/perl/5.8/AutoLoader.pm line 160.
at /usr/lib/perl/5.8/POSIX.pm line 7
Can't load '/usr/lib/perl/5.8/auto/POSIX/POSIX.so' for module POSIX: /usr/lib/perl/5.8/auto/POSIX/POSIX.so: invalid ELF header at /usr/lib/perl/5.8/XSLoader.pm line 70.
at /usr/lib/perl/5.8/POSIX.pm line 26
Compilation failed in require at /usr/sbin/update-alternatives line 6.
BEGIN failed--compilation aborted at /usr/sbin/update-alternatives line 6.
dpkg: perl の処理中にエラーが発生しました (--configure):
サブプロセス post-installation script はエラー終了ステータス 255 を返しました
以下のパッケージの処理中にエラーが発生しました:
perl
というのが表示されました。すみませんがこのエラーについて教えて頂けないでしょうか。
オフライン
こういう場合、私はエラーメッセージの一部でWeb検索して調べてます。
例えば
http://www.google.co.jp/search?q=" … line"
で調べると、
http://ubuntuforums.org/showthread.php?t=821235 (英語)
http://ubuntuforums.org/showthread.php?t=949436 (英語)
https://answers.launchpad.net/ubuntu/+question/2591 (英語)
これら事例は皆、/var/lib/dpkg/info/にある該当の.listファイルを削除することで解決しているようです。
(一応、消す前にそのファイルのバックアップは残しておいたほうがよいでしょう)
今回のケースでいうと、
E: /var/cache/apt/archives/libperl5.8_5.8.8-12ubuntu0.4_i386.deb: files list file for package `xserver-xorg-video-amd' is missing final newline
というメッセージからして、パッケージ xserver-xorg-video-amd に対する .listのファイルかも?
ちなみに「これこれのパッケージに対するファイルリストファイルには最後の改行コードがない!」というエラーメッセージです。
なおご質問内容とは直接関係ないですが、
アップデート中に強制終了したと#1の書き込みにありますが、「もう一度ubuntuを起動して」という事から想像すると、PC電源をいきなりOFFにしたのでしょうか?
最後の編集者: STGSAGWAN (2009-01-17 19:14:03)
時間差で書き込みが前後してしまいました。
的外れの意見だったらすみません。
すべて同じように削除したのですが
何を削除したか分かれば少しは手掛かりが有ると思うんですが、、、
STGSAGWANさんの提案は間違っていませんよ。 その後の問題ですね。
私の提案なんですが、Synapticパッケージマネージャーでエラーの表示される物を順に削除して再導入してみてはどうでしょうか?(今回はperl 検索窓にperl と記載して確答ソフトを右クリック、完全削除を選択)
理由は必要なファイルを削除してしまったため、アップデートマネージャーがそれを検知して設定、変更を試みるが必要ファイルが無いためエラーを出して止まる。と言った動作を繰り替えしているのではと考えたからです。
進展がありましたら報告を下さい、他の方からも情報が寄せられやすいかも。
今後の対策の一つとしてrmは削除されてしまいますので、mv 移動で処理をしたほうが元に戻すことやそのファイルを確認、変更が出きるのでオススメです。
最後の編集者: hir0 (2009-01-17 19:34:16)
オフライン
無事アップデートが正常に行われるようになりました。
本当にありがとうございました。
STGSAGWANさんのおっしゃるとおりに、エラーの表示されたものを全て削除したら直りました。
また、hir0さんのおっしゃる通り、念のためrmではなく、mvで行ったのですが、この移動させたものは削除してしまってよろしいのでしょうか?
あと、STGSAGWANさん、電源ボタンを押しっぱなしにしてPC電源をOFFしてしまいました。どうしても動かなかったもので・・・。
オフライン
dtakashiさん
ちょっと間が空いてしまいました。
dtakashi による投稿:
あと、STGSAGWANさん、電源ボタンを押しっぱなしにしてPC電源をOFFしてしまいました。どうしても動かなかったもので・・・。
普段デスクトップのUbuntuを家庭用で使っていて、プログラムがフリーズしてどうしようもない場合は、状況で以下1〜3を使い分けると良いと思います。
# 今回はまだ知らなかったので仕方がないですが、今後から電源ブチッはなるべく避けるとよいですよ。
以下、私の独断でまとめてみました。
1. 特定プログラムだけがフリーズしているなら、そのプログラムだけ終了
1.1. [システム・モニタ]を使う方法
1.2. kill, pkill, killallコマンドを使う方法 (その際 ps, pgrep, pidofコマンドなども併用)
1.3. xkillコマンドを使う方法
(Alt + F2 を押し xkillと入力しEnterして、マウスポインタ[X]を問題のウィンドウに当てる)
2. デスクトップ全体がフリーズしているなら、Xセッション再起動
2.1. Ctrl + Alt + BackSpaceキーを押す方法
2.2. Ctrl + Alt + F1〜F6キーを押してコンソールから $ sudo /etc/init.d/gdm restart する方法
3. 上記の全てが出来ない -> PC再起動
3.1. マジックSysRqキーを使う方法
最後の編集者: STGSAGWAN (2009-01-19 21:50:19)
1年前のトピックですが、付け足しします。
付け足す理由は、#2と#4には重要な事が1つ欠けているからです。
実はこのトピックが他のトピックで参照されていて、偶然今日気づいたのですが、
「パッケージ名.list」のファイルを削除または別名に名前を変えて解決した後は、将来の為にも、そのパッケージを「再インストール指定」で再インストールしておいた方がよいでしょう。
なぜなら、将来仮にそのパッケージが削除される際に、「パッケージ名.list」のファイルが存在しない状態だと、aptは「このパッケージにはファイルが一切含まれない」と判断してしまい、パッケージは削除された後でもファイルが削除されずに残留してしまいます。
(アップデートの場合はどうなるのか試していません)
更に、「パッケージ名.list」が無いと、パッケージ内のファイル一覧をSynapticやdpkg -Sで表示することができない、という不便も生じます。
「再インストール指定」を行うには:
Synapticなら、該当パッケージを選び「再インストール指定」
端末なら、sudo apt-get --reinstall install パッケージ名
です。
「再インストール指定」を行うと、「パッケージ.list」のファイルが復活します。(もちろん、他にも紛失ファイルがあれば復活したりもします)
なお、「パッケージ.list」のファイルを復活すればいいのなら、最初から sudo apt-get --reinstall install パッケージ名 を実行すれば一発エラーを解消できるのではないか?と思いがちですが、実際にはエラーを正さない限り、パッケージのインストールや削除さえできない為、それでは全く上手く行きません。
また、「・・・パッケージ名 is missing final newline」というエラーの有無については、$ sudo dpkg --configure -a や $ sudo apt-get -f install で検知することができないです。
検知できないのは、このエラーが、パッケージ再設定(dpkg --configure)やパッケージ依存関係の修復(apt-get -f install)の問題とは関係がないからです。
私が知る限りでは、そのエラー有無を検知するには、実際に適当なパッケージに対してインストールまたは削除を試みてみるか、後述のコマンドによる補助的な方法しかなさそうです。
そもそもどういう事情でこのようなエラーになるのか私にはよく分かりませんが、本来'ASCII text'や'UTF-8 Unicode text'であるはずの「パッケージ.list」が、妙なファイル(バイナリファイル?)になってしまっているのが、問題のようです。
なので、下記のコマンドを実行すれば、妙な「パッケージ.list」を列挙できないことはないです。
$ file /var/lib/dpkg/info/*.list | egrep -v '(ASCII text|UTF-8 Unicode text)$'