अनुपलब्ध / भ्रष्ट फ़ाइलों के साथ संकुल को पुनः स्थापित करना


17

एक अशुद्ध शटडाउन और एक रंगीन fsck के बाद, फ़ाइलों का एक पूरा गुच्छा गायब हो गया है। 'आरपीएम -वा' का आउटपुट कई सौ लंबी (ज्यादातर गायब फाइलें लेकिन कुछ चेकसम और अन्य बेमेल) हैं। क्या उन पैकेजों को फिर से स्थापित करने का एक आसान तरीका है जिनमें गायब और / या भ्रष्ट फाइलें हैं?

सवाल में ओएस Fedora 22 है।


4
निश्चित रूप से संभव है, लेकिन आउटपुट को पार्स करने के लिए भी बहुत थकाऊ है और प्रत्येक फ़ाइल के लिए पैकेज में वह फ़ाइल शामिल है जिसमें शायद कुछ समय लगता है। क्यों नहीं बस सभी संकुल को पुनर्स्थापित करें? yum reinstall $(rpm -qa --qf="%{N}-%{V}\n" | sort)
doktor5000

प्रीलिंक के कारण होने वाले सभी अतिरिक्त मुद्दों को फ़िल्टर करने के लिए यह बहुत बदसूरत हो सकता है, अगर मैं गलत नहीं हूँ जो अभी भी फेडोरा पर डिफ़ॉल्ट रूप से Fedorahosted.org/fesco/ticket/1183 के
doktor5000

मैंने वास्तव में सब कुछ फिर से स्थापित किया - समस्या यह थी कि मैं dnf के लिए कीप-कैश को सक्षम करना भूल गया था, यह 2gb से अधिक पैकेजों को डाउनलोड करना समाप्त कर दिया (और मैंने इंटरनेट को कैप किया है)
jaymmer - Reinstate Monica

जवाबों:


16

संदर्भ और पूर्णता के लिए, एक कमांड जो शुरू में प्राप्त करने में सक्षम होगा वह कुछ इस तरह होगा (जल्दी से एक साथ भरा हुआ है, लेकिन यह काम कर रहा है)

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

यहाँ विभिन्न भागों की संक्षिप्त व्याख्या दी गई है:

rpm -Va 2>&1

वर्तमान में स्थापित / rpm डेटाबेस में सूचीबद्ध सभी पैकेजों पर एक पूर्ण सत्यापन चलाएगा। यह stdout को stirectr भी रीडायरेक्ट करेगा, क्योंकि यहाँ मेरे बॉक्स में कुछ त्रुटियां जो कि प्रीलिंक के सक्षम होने के कारण होती हैं, त्रुटियों के रूप में रिपोर्ट की जाती हैं, लेकिन हम उन्हें stdout पर चाहते हैं।
ध्यान दें: सभी फ़ाइलों, अनुमतियों और स्वामी / समूह की जांच करने में सक्षम होने के लिए रूट के रूप में चलाने की आवश्यकता है।

grep -vE '^$|prelink:'

दबा emtpy लाइनों और prelink त्रुटियों की इस तरह की प्रदर्शित (जैसे किसी त्रुटि के उदाहरण:
prelink: /tmp/#prelink#.B14JBi: Recorded 10 dependencies, now seeing -1)

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

rpm -Vaकेवल फ़ाइल नाम दिखाने के लिए आउटपुट फ़िल्टर करेगा

rpm -qf $()

सभी प्राप्त फ़ाइलनामों के लिए क्वेरी करेगा जिसमें वे पैकेज शामिल हैं, और पैकेज का नाम और संस्करण आउटपुट करते हैं

| sort -u

डुप्लिकेट पैकेज नाम / संस्करण संयोजनों को दबाएगा।

कुल मिलाकर आपको उन पैकेजों की एक सूची प्राप्त होगी जो सत्यापन में विफल रहे।

rpm -Vaअभी भी कुछ असंबंधित मुद्दों को दिखा सकता है, क्योंकि यह संकुल के बीच निर्भरता की भी जाँच करता है, जिसे जोड़कर दबाया जा सकता है --nodeps


2

मुझे हाल ही में खुली हुई 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

आरपीएम के विकल्प और जागने की कॉल का उद्देश्य मेरे मामले में समय की बचत करना है, क्योंकि कोई भ्रष्टाचार नहीं हुआ।


1
यदि कोई फ़ाइल भ्रष्टाचार नहीं हुआ है, तो आप जोड़ भी सकते हैं --nofilesऔर इसलिए मूल रूप से भी ऐसा ही करते हैं yum check dependenciesक्योंकि यह केवल भरोसेमंद मुद्दों के लिए सभी स्थापित आरपीएम पैकेजों की जांच करेगा। --nofilesगैर-एसएसडी इंस्टॉलेशन के लिए बहुत समय बचाएगा, लेकिन आप उन फ़ाइलों की जांच को भी छोड़ देंगे जो गायब हैं। ... सिर्फ पूर्णता के लिए। और कृपया ध्यान रखें, यदि आप अंग्रेजी तार के लिए grep करते हैं, तो आप इसके साथ उपसर्ग करना चाहते हैं LC_ALL=C;)
doktor5000
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.