はじめに
現場で半年ほど使用していた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