クリーンでないシャットダウンとカラフルなfsckに続いて、一連のファイル全体が失われました。 'rpm -Va'の出力は数百行です(ほとんどがファイルが欠落していますが、チェックサムやその他の不一致もいくつかあります)。ファイルが見つからないか破損しているパッケージを再インストールする簡単な方法はありますか?
問題のOSはFedora 22です。
参照と完全を期すために、最初に要求されたものを達成できるコマンドの1つは、次のようなものです(すばやくいじくりますが、機能しています)。
_rpm -qf $(rpm -Va 2>&1 | grep -vE '^$|prelink:' | sed 's|.* /|/|') | sort -u
_
以下は、さまざまな部分の簡単な説明です。
_rpm -Va 2>&1
_
Rpmデータベースに現在インストール/リストされているすべてのパッケージに対して完全な検証を実行します。また、ここではstderrをstdoutにリダイレクトします。これは、私のボックスでは、プレリンクが有効になっているために発生するいくつかのエラーがエラーとして報告されますが、stdoutでそれらを必要とするためです。
注意:すべてのファイル、権限、所有者/グループをチェックできるようにするには、rootとして実行する必要があります。
_grep -vE '^$|prelink:'
_
空行などのプリリンクエラーの表示を抑制します(このようなエラーの例:
_prelink: /tmp/#prelink#.B14JBi: Recorded 10 dependencies, now seeing -1
_)
_sed 's|.* /|/|')
_
_rpm -Va
_出力をフィルタリングしてファイル名のみを表示します
_rpm -qf $()
_
パッケージが含まれている取得したすべてのファイル名を照会し、パッケージ名とバージョンを出力します
_| sort -u
_
重複するパッケージ名/バージョンの組み合わせを抑制します。
全体として、検証に失敗したパッケージのリストを受け取ります。
_rpm -Va
_はパッケージ間の依存関係もチェックするため、_--nodeps
_を追加して抑制する必要がある場合があるため、関連のない問題が引き続き表示される場合があります。
最近、openSUSE 13.2でファイルが見つからないという同様の問題があり、次のように修正しました:
rpm -Va --nodeps --nodigest --noscripts --nosignature --nofiledigest --nosize --nomode --nordev --nouser --nogroup --nomtime\
| awk -e '($1=="missing") && ($2=="d") {system("rpm -qf "$3);}; ($1=="missing") && ($2!="d") && ($2!="c") {system("rpm -qf "$2);}'\
| sort -u | xargs zypper in -f
Rpmのオプションとawkの呼び出しは、破損が発生しなかったため、私の場合は時間を節約することを目的としています。