सभी डेबियन पैकेजों को पुनर्स्थापित करना


19

मैंने गलती से पृष्ठभूमि में चल रहे dpkg प्रक्रिया को मार दिया और मैं सभी पैकेजों को पुन: स्थापित करना चाहूंगा ताकि यह सुनिश्चित हो सके कि सब कुछ ठीक है।

सबसे पहले, मैंने सभी पैकेजों की एक सूची प्राप्त करने और उन्हें पुनर्स्थापित करने का प्रयास किया

dpkg --get-selections | grep -v deinstall | awk '{print $1}' > list.log
apt-get install --reinstall $(cat list.log)

लेकिन ऐसे संदेश हैं:

E: Couldn't configure pre-depend debconf:i386 for console-setup:i386, probably a dependency cycle.

मैंने कोशिश की apt-get -f install, बिना सफलता के।

अंतिम उपाय के रूप में, मैंने उन सभी कार्यक्रमों को पुनः स्थापित किया जो चेकसमों में विफल रहे:

dpkg -l | grep ^ii | awk '{ print $2 }' | xargs debsums -s -a

मुझे सब कुछ पुनर्स्थापित करने के लिए क्या करना चाहिए?

संपादित करें: समस्या हल हुई। मुद्दा कुछ और था (टिप्पणियों को देखें)। मैं समझता हूं कि यह डेबियन से बचने के लिए कुछ है।


1
हाल ही में एक पैकेज को स्थापित करने का प्रयास करते समय मेरे साथ दुर्घटना हुई। जब मैंने रिबूट किया और उस पैकेज को फिर से स्थापित करने का प्रयास किया, तो मुझे संदेश मिला, "E: dpkg बाधित हो गया था, आपको समस्या को ठीक करने के लिए मैन्युअल रूप से 'dpkg --configure -a' चलाना होगा।" उस आदेश को हटाते हुए कहा गया पैकेज और यह विन्यास फाइल करता है। मैं तब स्क्रैच से पैकेज को स्थापित करने में सक्षम था। उस आदेश को जाने देने का प्रयास करें।
एम्बेडेड।

यह कुछ नहीं करता था, इसलिए मुझे लगता है कि कुछ भी नहीं टूटा है। मैं बाद में यह जांचने की कोशिश करूंगा कि क्या मेरे ड्राइवर की समस्या हल हो गई है।
एलेक्स_डर

1
सभी संकुल को पुनः स्थापित करना == वास्तव में बुरा विचार है। (ए) यह लगभग हमेशा अनावश्यक है (बी) यह शायद विफल हो जाएगा (सी) यदि आपका सिस्टम वास्तव में इतनी बुरी तरह से गड़बड़ है, तो बस इसे पुनर्स्थापित करें। बस उन समस्याओं को ठीक करें जिन्हें आप वास्तव में देखते हैं।
फहीम मिष्ठ

जवाबों:


9

यह कोशिश करते हुए, याद रखें कि मैंने इसका परीक्षण नहीं किया है:

dpkg --get-selections > selections
sudo dpkg --clear-selections
sudo dpkg --set-selections < selections
sudo apt-get --reinstall dselect-upgrade

सूत्रों का कहना है:


मेरी समस्या पूरी तरह से अलग थी: मैं सही कर्नेल (!) को बूट नहीं कर रहा था। मैं आपके उत्तर को स्वीकार कर लूंगा क्योंकि ऐसा लगता है कि मैं वही चाहता था (लेकिन अनकहा भी)।
एलेक्स_डर

यह काम नहीं करेगा, और सिस्टम को पूरी तरह से तोड़ देगा। पंक्ति 3 उपयुक्त की स्थापना रद्द कर देगी, इसलिए बाद में सब कुछ पुनर्स्थापित करना संभव नहीं होगा।
rkjnsn

@rkjnsn: मैंने उत्तर को अपडेट किया है, जांचें कि क्या यह काम करता है।
मार्को सुल

1
ऐसा कुछ भी नहीं करने की कोशिश की जा रही है, हालांकि चयन फ़ाइल पॉपुलेटेड है: pi @ prodpi ~ $ sudo apt-get --reinstall dselect-upgrade पठन पैकेज सूचियाँ ... पूर्ण निर्माण निर्भरता ट्री पठन स्थिति की जानकारी पढ़ रही है ... D0 0 नवीनीकृत , 0 नव स्थापित, 0 हटाने के लिए और 0 अपग्रेड नहीं किया गया। कोई उपाय?
आयुगं

एक कारण मुझे लगता है कि आपका कोड काम नहीं करेगा, क्योंकि कमांड dpkg --get-selectionsसूची भी संकुल को हटाती है।
ऑर्टोमला लोकनी

2

बस मामले में, प्रत्येक पैकेज को पुन : स्थापित करने का प्रयास करें :

for i in $(cat list.log); do apt-get install --reinstall "$i"; done

आप सभी सवालों के जवाब के लिए हां भी जोड़ना चाह सकते हैं।


cat: list.log: ऐसी कोई फ़ाइल या निर्देशिका नहीं
IgGanapolsky

2
@IgorGanapolsky dpkg --get-selections > list.logपहले दौड़ें ।
QwertyChouskie

2
list.logप्रश्न से लिया गया है।
स्टीफन किट

2

लुकास मालोर द्वारा उद्धृत संसाधनों में से एक में मुझे एक स्क्रिप्ट मिली जिसे पॉपुलेटर कहा जाता है जो समाधान के पास लगती है। यदि आप अपने सभी पैकेजों की सूची में संकुल चयन चर सेट करते हैं

PKGLIST=$(dpkg --get-selections | grep -v deinstall| cut -f1)

फिर आप स्क्रिप्ट को चला सकते हैं और सभी पैकेजों को पुन: स्थापित कर सकते हैं लेकिन सिस्टम में शायद कुछ समस्याएं होंगी। बेहतर होगा कि पहले इसे किसी वर्चुअल मशीन में टेस्ट किया जाए।

यहाँ ऊपर लिंक से स्क्रिप्ट का एक प्रकार है:

#!/bin/bash
#
# Script to pre-populate apt-get proxy for faster later downloads.
# It uses apt-get and wget to pull all the specified packages.
#

# Make sure only root can run our script
if [[ $EUID -ne 0 ]]; then
   echo "You're not root, are you?" 1>&2
   exit 1
fi

# Specify wanted packages
PKGLIST="exaile" 

# Clears out the local repository of retrieved package files
apt-get clean

# Resynchronize the package index files from their sources
apt-get update

# Re-install specified packages at the newest version. 
apt-get install --reinstall $PKGLIST

यदि त्रुटि दिखाई गई है कि फिर से कोशिश करने के लिए विशिष्ट संकुल को पुनः स्थापित नहीं किया जा सकता है:

sudo apt-get -y autoremove

1

इसके बजाय इसे आज़माएं क्योंकि यह आपके आउटपुट को ले जाएगा और इसे एक विशाल रेखा बना देगा जिसमें रिक्त स्थान अलग हो जाएंगे।

dpkg --get-selections | grep -v deinstall | awk '{print $1}' > list.log awk '$1=$1' ORS=' ' list.log > newlist.log apt-get install --reinstall $(cat newlist.log)

आपके मूल पोस्ट में एकमात्र बदलाव दूसरे awk स्टेटमेंट में जोड़ा जा रहा है, जो संभवत: पहले से इनलाइन आपके द्वारा बनाई गई फ़ाइल बनाने के लिए किया जा सकता है।

यह परिवर्तन apt-get को सही ढंग से संकुल और किसी भी अनुपलब्ध निर्भरता को फिर से डाउनलोड करने के लिए बाध्य करेगा, जो पहली बार स्थापित नहीं हुए थे और उन्हें क्रम में पुनर्स्थापित करें।

अगर हम इसे इनलाइन करते हैं, मेरा मानना ​​है कि यह इस तरह दिखेगा:

dpkg --get-selections | grep -v deinstall | awk '{print $1}' | awk '$1=$1' ORS=' ' > list.log

और फिर सुनिश्चित करें कि आपने वास्तव में सिस्टम को सही पैकेज (या नवीनतम) बनाया है, apt कैश को साफ़ करें, इसे अपडेट करें और फिर सभी फाइलों को फिर से डाउनलोड करें (यदि आप कैश में केवल वही चाहते हैं जो आप चाहते हैं तो पहले दो चरणों को छोड़ सकते हैं पुनर्स्थापित):

apt-get clean && apt-get update && apt-get install --reinstall $(cat list.log)

मेरे पास 2k से अधिक पैकेज थे जिन्हें मैंने एक सिस्टम पर अपग्रेड किया था जिसमें हैंगअप था। Dpkg --configure -a का उपयोग करके इंस्टॉलेशन समाप्त हो गया (यह अंतिम चरण में था)। मैं तो सब कुछ ठीक से पुनर्स्थापित करने के लिए यह भाग गया।

या जैसा कि /superuser/298912/reinstall-debian-ORE-keeping-installed-packages-and-data पर बताया गया है :

sudo apt-get install --reinstall $(dpkg --get-selections | grep -w 'install$' | cut -f1)

बस सुनिश्चित करें कि आप किसी भी पुनर्स्थापना से पहले एक "init 2" पहले चलाएं, क्योंकि एक्स या आपके पसंदीदा विंडो प्रबंधक के कुछ घटकों को पुनः इंस्टॉल किया जाना पसंद नहीं हो सकता है।


जब तक आपने IFS को संशोधित नहीं किया है, तब तक $(cat file)किसी भी व्हाट्सएप पर अनअकाउंटेड टोकेनाइज नहीं किए जाते हैं और बिल्कुल वही परिणाम देते हैं, चाहे वह फाइल नईलाइन्स या स्पेस द्वारा सीमांकित की गई हो। --reinstallमदद कर सकता है, लेकिन इससे पहले भी दो बार दिया गया था।
dave_thompson_085

1

एप्टीट्यूड का उपयोग करते समय ऐसा करने का एक आसान और तेज़ तरीका है:

sudo aptitude reinstall '~i'

जो वर्तमान में स्थापित सभी संकुल को पुनः स्थापित करेगा।


-1

RPM का उपयोग करते समय, उस स्थिति में जब आप पैकेज डेटाबेस में भ्रष्टाचार का कारण बनते हैं, तो इस डेटाबेस को फिर से बनाने का एक विकल्प होता है, इस प्रकार आपको मूल रूप से पुनर्स्थापना से गुजरने से रोकता है। जैसा कि एक उपयोगकर्ता ने बताया कि यह डेबियन द्वारा किया गया है dpkg --configure -a


1
की भूमिका dpkg --configure -aसभी अनपैक्ड और अनकंफर्ड संकुल को कॉन्फ़िगर करना है। के पेजों को dpkgऔर dpkg-reconfigureभी देखें debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html
Ortomala Lokni
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.