Eksik / bozuk dosyaları olan paketleri yeniden yükleme


17

Temiz olmayan bir kapanışın ve renkli bir fsck'in ardından bir sürü dosya kayboldu. 'Rpm -Va' çıktısı birkaç yüz satır uzunluğundadır (çoğunlukla eksik dosyalar, ancak bazı sağlama toplamı ve diğer uyumsuzluklar). Eksik ve / veya bozuk dosyaları olan paketleri yeniden yüklemenin kolay bir yolu var mı?

Söz konusu işletim sistemi Fedora 22'dir.


4
Kesinlikle mümkün, ama aynı zamanda çıktıyı ayrıştırmak oldukça sıkıcı ve her dosya sorgusu için o dosyayı içeren paket ve muhtemelen biraz zaman alır. Neden tüm paketleri yeniden kurmuyorsunuz? yum reinstall $(rpm -qa --qf="%{N}-%{V}\n" | sort)
doktor5000


Gerçekten her şeyi yeniden yükleme sona erdi - sorun ben dnf için keep-cache etkinleştirmeyi unutmuştu, 2gb paketleri üzerinden indirme sona erdi (ve ben internet kapaklı)
jaymmer - Reinstate Monica

Yanıtlar:


16

Referans ve bütünlük uğruna, başlangıçta istenen şeyi başarabilecek bir komut böyle bir şey olacaktır (hızlı bir şekilde birlikte hareket ediyor, ama çalışıyor)

rpm -qf $(rpm -Va 2>&1 | grep -vE '^$|prelink:' | sed 's|.* /|/|') | sort -u

İşte çeşitli parçaların kısa bir açıklaması:

rpm -Va 2>&1

Şu anda kurulu / rpm veritabanında listelenen tüm paketler üzerinde tam bir doğrulama çalışacaktır. Ayrıca stderr'ı stdout'a yönlendirecektir, burada kutumda, ön bağlantının etkinleştirilmesinden kaynaklanan bazı hatalar hata olarak rapor edilir, ancak stdout'ta olmasını isteriz.
Dikkat: Tüm dosyaları, izinleri ve sahip / grubu kontrol edebilmek için root olarak çalıştırılması gerekir.

grep -vE '^$|prelink:'

bastırır Emtpy hatları ve prelink hataları gibi göstergesine (örneğin, bir hata, örneğin:
prelink: /tmp/#prelink#.B14JBi: Recorded 10 dependencies, now seeing -1)

sed 's|.* /|/|')

rpm -Vaçıktıyı yalnızca dosya adlarını gösterecek şekilde filtreleyecek

rpm -qf $()

paketin içinde bulunduğu tüm elde edilen dosya adlarını sorgular ve paket adını ve sürümünü çıkarır

| sort -u

yinelenen paket adı / sürüm kombinasyonlarını bastıracaktır.

Tamamen, doğrulamada başarısız olan paketlerin bir listesini alacaksınız.

rpm -Vapaketler arasındaki bağımlılıkları da ekleyerek bastırılması gereken bağımlılıkları da kontrol ettiği için ilgisiz bazı sorunlar göstermeye devam edebilir --nodeps.


2

Son zamanlarda openSUSE 13.2 eksik dosyaları ile benzer bir sorun vardı ve ile sabit:

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 seçenekleri ve awk çağrısı benim durumumda zaman kazanmak için tasarlanmıştır, çünkü hiçbir bozulma meydana geldi.


1
Herhangi bir dosya bozulması --nofilesyoksa, yum check dependenciesbağımlılık sorunları için yalnızca kurulu tüm rpm paketlerini kontrol edeceği gibi ekleyebilir ve temel olarak aynı şeyi yapabilirsiniz . --nofilesSSD olmayan kuruluşlar için çok zaman kazanırsınız, ancak eksik dosyalar için denetimi de atlarsınız. ... sadece iyilik uğruna. Ve lütfen aklınızda bulundurun, eğer ingilizce dizeleri için grep, ile ön ek yapmak isteyebilirsiniz LC_ALL=C;)
doktor5000
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.