web-dev-qa-db-ja.com

欠落/破損したファイルを含むパッケージの再インストール

クリーンでないシャットダウンとカラフルな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_を追加して抑制する必要がある場合があるため、関連のない問題が引き続き表示される場合があります。

16
doktor5000

最近、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の呼び出しは、破損が発生しなかったため、私の場合は時間を節約することを目的としています。

2
auxsvr