Arch Linux:システムのアップグレード中に停電後に破損したすべてのパッケージを再インストールする

Arch Linux:システムのアップグレード中に停電後に破損したすべてのパッケージを再インストールする

システムのアップグレード中に停電が発生しました(pacman -Suy)。だから、破損したパッケージがたくさんあります。再インストール時に強制的に上書きすると問題が解決するようです(例pacman -S systemd-sysvcompat--overwrite "*":)。

だから私の質問は、破損したすべてのパッケージに再インストールを適用する方法です。

ベストアンサー1

破損したパッケージが見つからないファイルとして報告されていると仮定すると、Qk(で)を使用してパッケージを確認できますman pacman

-k、--確認

そのパッケージが所有するすべてのファイルがシステムに存在することを確認してください。パッケージが指定されていない場合、またはフィルタフラグが指定されていない場合は、インストールされているすべてのパッケージを確認してください。このオプションを2回指定すると、必要なmtreeファイルを含むパッケージに対してより詳細なファイルチェック(権限、ファイルサイズ、および変更時間を含む)が実行されます。

したがって、このコマンドはシステムで破損したパッケージの完全なリストを提供する必要があります(以下の例は私のArchの結果です)。

$ pacman -Qk 2>/dev/null | grep -v ' 0 missing files' 
at: 45 total files, 1 missing file
audit: 196 total files, 4 missing files
bind: 413 total files, 3 missing files
blueman: 791 total files, 1 missing file
gdm: 501 total files, 6 missing files
gnome-perl: 71 total files, 18 missing files
gnome-vfs-perl: 61 total files, 27 missing files
gnomecanvas-perl: 39 total files, 17 missing files
gvfs: 324 total files, 1 missing file
hplip: 2294 total files, 72 missing files
mariadb: 354 total files, 1 missing file
nfs-utils: 111 total files, 3 missing files
perl-goo-canvas: 59 total files, 18 missing files
perl-gtk2-imageview: 36 total files, 19 missing files
perl-term-shellui: 21 total files, 6 missing files
polkit: 201 total files, 1 missing file
samba: 976 total files, 1 missing file
syslinux: 237 total files, 2 missing files
systemd: 1891 total files, 1 missing file

これにより、このコマンドはパッケージ名のみを印刷します。

$ pacman -Qk 2>/dev/null | grep -v ' 0 missing files' | cut -d: -f1
at
audit
bind
blueman
gdm
gnome-perl
gnome-vfs-perl
gnomecanvas-perl
gvfs
hplip
mariadb
nfs-utils
perl-goo-canvas
perl-gtk2-imageview
perl-term-shellui
polkit
samba
syslinux
systemd

リストを繰り返して再インストールできます。

pacman -Qk 2>/dev/null | grep -v ' 0 missing files' | cut -d: -f1 |
    while read -r package; do
        pacman -S "$package" --overwrite "*" --noconfirm
    done

または、リストが長すぎない場合は、次のようにすることもできます。

pacman -S "$(pacman -Qk 2>/dev/null | grep -v ' 0 missing files' | cut -d: -f1)" \
 --overwrite "*" --noconfirm

私が持っているので参考にしてくださいいいえこれをテストしましたが、このコマンドがパッケージを変更していることをあなたの言葉を受け入れます。sudo pacman -Qkk 1>/dev/null 2>&1 | grep checksum提案どおりに実行して、誤って変更されたファイルを確認することもできます。タンジェンコメントに。

最後に、Archドキュメントではこの--overwriteオプションを使用しないように警告しています。ベンモールド犬コメントでこの点を指摘してください):

通常、pacmanで--overwriteオプションを使用しないでください。 --overwrite オプションは glob を含む引数を使用します。パックマンを使用すると、globと一致するファイルのファイル競合チェックをバイパスします。適切に管理されているシステムでは、Arch開発者が明示的に推奨する場合にのみ使用してください。より#システムアップグレード前に必ずお読みください部分。

もちろん、お客様の場合、アップグレード中に停電が発生したため、システムを適切に保守できないため、これは良いユースケースになる可能性があります。

おすすめ記事