hotch-potch, Note to self

いろいろ作業記録

dpkg: unrecoverable fatal error, aborting の処置

はじめに

現場で半年ほど使用していたRaspberryPiで、久しぶりにアップデートしてみたところ、
下記のようなエラーが出てしまいました。
単体のパッケージを入れようとしても、入れられない状態になってしまいました。

pi@raspibp:~ $ sudo apt upgrade -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  tzdata
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/273 kB of archives.
After this operation, 2048 B of additional disk space will be used.
apt-listchanges: Reading changelogs...
Preconfiguring packages ...
dpkg: warning: files list file for package 'openssh-sftp-server' missing; assuming package has no files currently installed
dpkg: unrecoverable fatal error, aborting:
 files list file for package 'iputils-ping' is missing final newline
E: Sub-process /usr/bin/dpkg returned an error code (2)

結論

iputils-pingは、aptのパッケージ情報が壊れていて、
openssh-sftp-serverは、インストール済のはずのファイルが一致してないようです

横着して、swapの無効化や、/varへのログ出力の抑制をしていなかったので、
SDカードが壊れ始めているのかもしれません。

iputils-pingのパッケージ情報ファイルを一旦避けて、
それぞれのパッケージを改めてインストールしました。

復旧までの流れ

まずは「iputils-ping」の処置

pi@raspibp:~ $ cd /var/lib/dpkg/info
pi@raspibp:/var/lib/dpkg/info $ sudo mv iputils-ping.* /var/lib/dpkg/info/old

多分壊れているファイルを逃がしてから、iputils-pingを強制再インストール。

pi@raspibp:/var/lib/dpkg/info $ sudo apt-get install iputils-ping --reinstall
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded.
Need to get 0 B/54.1 kB of archives.
After this operation, 0 B of additional disk space will be used.
dpkg: warning: files list file for package 'iputils-ping' missing; assuming package has no files currently installed
dpkg: warning: files list file for package 'openssh-sftp-server' missing; assuming package has no files currently installed
dpkg: unrecoverable fatal error, aborting:
 files list file for package 'iptables' is missing final newline
E: Sub-process /usr/bin/dpkg returned an error code (2)

こんどは、「iptables」もダメだ・・・

続いて「iptables」の処置

pi@raspibp:/var/lib/dpkg/info $ sudo mv iptables.* /var/lib/dpkg/info/old

多分壊れているファイルを逃がしてから、iputils-pingと、iptablesを強制再インストール。

pi@raspibp:/var/lib/dpkg/info $ sudo apt-get install iputils-ping --reinstall
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded.
Need to get 0 B/54.1 kB of archives.
After this operation, 0 B of additional disk space will be used.
dpkg: warning: files list file for package 'iputils-ping' missing; assuming package has no files currently installed
dpkg: warning: files list file for package 'openssh-sftp-server' missing; assuming package has no files currently installed
dpkg: warning: files list file for package 'iptables' missing; assuming package has no files currently installed
(Reading database ... 38376 files and directories currently installed.)
Preparing to unpack .../iputils-ping_3%3a20161105-1_armhf.deb ...
Unpacking iputils-ping (3:20161105-1) over (3:20161105-1) ...
Setting up iputils-ping (3:20161105-1) ...
Processing triggers for man-db (2.7.6.1-2) ...

pi@raspibp:/var/lib/dpkg/info $ sudo apt-get install iptables --reinstall
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded.
Need to get 259 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 http://ftp.jaist.ac.jp/raspbian stretch/main armhf iptables armhf 1.6.0+snapshot20161117-6 [259 kB]
Fetched 259 kB in 0s (878 kB/s)
dpkg: warning: files list file for package 'openssh-sftp-server' missing; assuming package has no files currently installed
dpkg: warning: files list file for package 'iptables' missing; assuming package has no files currently installed
(Reading database ... 38388 files and directories currently installed.)
Preparing to unpack .../iptables_1.6.0+snapshot20161117-6_armhf.deb ...
Unpacking iptables (1.6.0+snapshot20161117-6) over (1.6.0+snapshot20161117-6) ...
Setting up iptables (1.6.0+snapshot20161117-6) ...
Processing triggers for man-db (2.7.6.1-2) ...
pi@raspibp:/var/lib/dpkg/info $

最後に「openssh-sftp-server」の処置

pi@raspibp:/var/lib/dpkg/info $ sudo apt-get install openssh-sftp-server --reinstall
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded.
Need to get 0 B/32.9 kB of archives.
After this operation, 0 B of additional disk space will be used.
dpkg: warning: files list file for package 'openssh-sftp-server' missing; assuming package has no files currently installed
(Reading database ... 38529 files and directories currently installed.)
Preparing to unpack .../openssh-sftp-server_1%3a7.4p1-10+deb9u6_armhf.deb ...
Unpacking openssh-sftp-server (1:7.4p1-10+deb9u6) over (1:7.4p1-10+deb9u6) ...
Setting up openssh-sftp-server (1:7.4p1-10+deb9u6) ...
Processing triggers for man-db (2.7.6.1-2) ...
pi@raspibp:/var/lib/dpkg/info $

まとめ

ひとまずこれで、apt install他が正常に動くようになりました。

参考

こちらをもとに作業しました。
qiita.com