ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

ラズパイでdpkgのリストファイルが壊れたときの対処方法

(2021-04-29 初稿 - 2022-01-16 追記)

Raspberry Pi4で、rubyライブラリを利用したくて、ruby-devをインストールしようとしたところ、以下のメッセージが出て、インストールできなかった。
同じトラブルに巻き込まれる可能性はかなり低いと思うが、自分の備忘録として記す。

(2022-01-16 追記)

上記以外にも、エラーが起きて対処したので、その対処方法も併せて追記する。

具体的には、対処方法2を追記した。

(追記終了)

対処方法1:他のラズパイからコピーする方法

実際のエラーメッセージ

pi@raspberry:~ $ sudo apt install ruby ruby-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています 
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
libgmp-dev libgmpxx4ldbl ruby2.5-dev ruby2.5-doc
提案パッケージ:
gmp-doc libgmp10-doc libmpfr-dev
以下のパッケージが新たにインストールされます:
libgmp-dev libgmpxx4ldbl ruby-dev ruby2.5-dev ruby2.5-doc
アップグレード: 0 個、新規インストール: 5 個、再インストール: 1 個、削除: 0 個、保留: 0 個。
3,179 kB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 20.8 MB のディスク容量が消費されます。
続行しますか? [Y/n] 
以前に未選択のパッケージ libgmpxx4ldbl:armhf を選択しています。
dpkg: unrecoverable fatal error, aborting:
パッケージ 'liblapack3:armhf' のファイル一覧ファイルに最後の改行がありません
E: Sub-process /usr/bin/dpkg returned an error code (2)

 対処方法

エラーメッセージは、「liblapack3:arohfのファイル一覧ファイルのエラー」、このファイルは、liblapack2:armhf.listのことで、/var/lib/dpkg/infoフォルダ内にある。
liblapack3のVersion 3.8.0-2のタイムスタンプは、2018年12月2日であるはずが、2019年9月26日になっており、かつ、バイナリファイルで読み込めない。
そこで、他のRaspberry Pi4のBusterからliblapack2:armhf.listをコピーすることによって、ruby-devが正常にインストールできるようになった。

対処方法2:設定ファイルをバックアップし、再インストールする方法

実際のエラーメッセージ

pi@raspberry:~ $ sudo apt update ; sudo apt upgrade 
以下のパッケージはアップグレードされます:
  libhttp-parser2.8 python3-lxml
アップグレード: 2 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
1,053 kB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 8,192 B のディスク容量が消費されます。
続行しますか? [Y/n] 
changelog を読み込んでいます... 完了
dpkg: unrecoverable fatal error, aborting:
 パッケージ 'python3-phatbeat' のファイル一覧ファイルに最後の改行がありません
E: Sub-process /usr/bin/dpkg returned an error code (2)

今回は前回と異なり、手元に同じバージョンのラズパイがなかったので、Web検索して以下のページにヒット。多謝m(__)m

上記サイトだと、いきなり設定ファイルを削除してしまうので、念のためにバックアップ。

$ mkdir backup
$ sudo mv /var/lib/dpkg/info/python3-phatbeat.* ~/backup/
$ sudo apt-get install python3-phatbeat --reinstall

正常にaptでアップグレードできることを確認して、backupディレクトリを削除。

$ sudo rm -rf ~/backup

おわりに

対処方法として、2つの方法を示したが、対処方法2の方が手元に同じバージョンのラズパイが無くても対応できるのでおすすめ。

しかし、本質的には、なぜlistファイルが書き換えられてしまったのか、原因を調査すべきだが、とりあえずの応急措置として良しとした。

相変わらずの役に立たないページ。^^;

関連ページ