मैं उनके आश्रितों को हटाए बिना पैकेजों को कैसे डाउनग्रेड कर सकता हूं?


17

मेरे पास कई मीसा पैकेज हैं जिन्हें मैंने पीपीए को शुद्ध करने से पहले पीपीए संस्करण में अपग्रेड किया था ताकि मैं अपने सिस्टम को अपग्रेड कर सकूं। संस्करणों में अंतर मामूली है (वे तकनीकी रूप से समान हैं, पुस्तकालयों का सिर्फ एक सेट गिट से था और अन्य अंतिम चरण हैं)।

यदि मैं Synaptic, apt-get, या aptitude के माध्यम से डाउनग्रेड करने की कोशिश करता हूं, तो मुझे निर्भरता नरक में डाल दी जाती है।

क्या मैन्युअल रूप से संकुल को डाउनग्रेड करने का एक तरीका है (शायद एक-एक करके) और अपने आश्रित पैकेजों को अचल के रूप में चिह्नित करें (यदि यह समझ में आता है) जब तक मैं नहीं किया जाता?

पुनश्च इस सवाल: apt-get के माध्यम से एक पैकेज को डाउनग्रेड कैसे करें? थोड़ा अलग है और इस स्थिति में मदद नहीं करता है।


आप ppa-purgeपहले क्यों नहीं ?
लैंडरोनी

आप पैकेज को फिर से स्थापित कर सकते हैं। उदाहरण के लिए, यदि आप उपयोग करते हैं synaptic, जब आप xyz पैकेज का चयन करते हैं, तो सभी निर्भरता डिफ़ॉल्ट रूप से चुनी जाएगी। लेकिन आप हमेशा सभी निर्भरता को रद्द कर सकते हैं और मुख्य पैकेज को स्थापित कर सकते हैं। यदि आप सभी निर्भरताएँ स्थापित कर सकते हैं। फिर से। यह तभी काम करता है जब आप पुनः स्थापित करने के लिए तैयार हों।
पंजीकृत उपयोगकर्ता

@landroni अगर मैं पर्ज करता हूं, तो यह उन पैकेजों को हटा देगा जिन्हें मैं हटाना नहीं चाहता।
RolandiXor

जवाबों:


13

मैंने पहले कभी इसके साथ नहीं खेला, लेकिन मैं आपको सुझाव दूंगा कि आप hold(या lock) उन निर्भरताओं के संस्करण हैं जो आपको परेशान करते हैं। इस तरह aptसंभव समाधानों की संख्या अधिक सीमित है, और जब आप अन्य पैकेजों को डाउनग्रेड करने का प्रयास करते हैं तो शायद भ्रमित नहीं होते हैं।


यदि कुछ और काम नहीं करता है, तो आप इस उत्तर में सुझाए गए मैनुअल दृष्टिकोण को ले सकते हैं: apt-get के माध्यम से पैकेज को डाउनग्रेड कैसे करें? । मूल रूप से, आवश्यक डाउनलोड .debसंकुल मैन्युअल, फिर उन्हें एक निचले स्तर का उपयोग करके एक स्थापित dpkgऔर उसके सशक्त तर्क: --ignore-depends, --force-depends, --force-depends-version, या यहाँ तक --force-all

ऊपर के रूप में एक ही भावना में, आपके पास --force-downgradeतर्क है:

          downgrade(*): Install a package, even if newer version of
          it is already installed.

          Warning:  At  present  dpkg  does  not  do any dependency
          checking on downgrades and therefore will not warn you if
          the  downgrade  breaks the dependency of some other pack‐
          age. This can  have  serious  side  effects,  downgrading
          essential system components can even make your whole sys‐
          tem unusable. Use with care.

लेकिन यह माना जाता है कि आपने पढ़ा है man dpkg, और यह कि आप समझते हैं कि आप क्या करते हैं:

          Warning: These options are mostly intended to be used  by
          experts  only.  Using  them  without  fully understanding
          their effects may break your whole system.

त्रुटि देखें : संस्करण संख्या अंकों से शुरू नहीं होती है और जावा के पुराने संस्करण को कैसे स्थापित करें और तरल 2.2.2 जैसे पुराने संस्करण को कैसे स्थापित करें? के उदाहरण के लिए:

sudo dpkg --force-downgrade -i your_mesa_package.deb

और देखें कि मैं कुछ निर्भरता स्थापित किए बिना पैकेज कैसे स्थापित कर सकता हूं? एक उदाहरण के लिए (उपयुक्त चेतावनी के साथ):

sudo dpkg --force-all -i your_mesa_package.deb

फिर भी एक और तरीका यह होगा कि .debपैकेज का उपयोग करके डमी equivsपैकेज बनाया जाए (और शायद थोड़ा अलग नाम)। फिर डमी पैकेज को स्थापित करने से आपको संबंधित डिपों को रखते हुए "सही" पैकेज को हटाने की अनुमति मिलनी चाहिए, और फिर पुराने संस्करण को स्थापित करना चाहिए। मुझे यकीन नहीं है कि यह वास्तव में कैसे काम करेगा, लेकिन विवरण के लिए इस प्रासंगिक थ्रेड की जांच करें: अपनी निर्भरता को हटाए बिना किसी डिबेट को कैसे हटाएं


4

आप पहले सिस्टम में स्थापित apt-markसभी लक्ष्य पैकेज की निर्भरता (और शायद अनुशंसित / सुझाए गए भी) को मैन्युअल इंस्टॉल के रूप में चिह्नित करने के लिए उपयोग कर सकते हैं । ऐसा करने के बाद, apt-getस्पष्ट रूप से संस्करण का उल्लेख करने के साथ सॉफ़्टवेयर के पूर्ववर्ती संस्करण स्थापित करें ।

  • लक्ष्य-पैकेज के लिए निर्भरता, अनुशंसित और सुझाए गए पैकेजों को सूचीबद्ध करने के लिए:

    apt-cache show <target-package-name>
    
  • मैन्युअल रूप से स्थापित पैकेजों को चिह्नित करना :

    sudo apt-mark manual <package-name(s)>
    

    (सभी निर्भरता के लिए इसका उपयोग करें, अनुशंसा और सुझाव दिया गया है।)

  • लक्ष्य-पैकेज निकालें:

    sudo apt-get remove <target-package-name>
    
  • पैकेज संस्करणों की एक सूची देखने के लिए जिसे आप डाउनग्रेड / अपग्रेड कर सकते हैं, उपयोग कर सकते हैं:

    apt-cache policy <target-package-name>
    
  • आवश्यक पैकेज का लक्ष्य संस्करण स्थापित करें:

    sudo apt-get install <target-package-name>=<target-package-version-number> 
    

    या

    sudo apt-get -t=<target release> install <target-package-name>
    

पुनश्च। यदि निर्भरता / अनुशंसित / सुझाए गए पैकेजों की सूची , जिनके साथ चिह्नित किया जाना apt-markहै, बड़ी है, apt-cache show <target-package-name>किसी भी फ़ाइल के द्वारा पैक किए गए आउटपुट की इच्छित सूची को इस तरह से कॉम्बो में /path/to/fooउपयोग apt-markकरें:

cat /path/to/foo | xargs -imarkthese sudo apt-mark manual markthese

यह विधि काम कर सकती है, लेकिन 100 से अधिक पैकेजों को चिह्नित करने के बजाय, मैं सिर्फ दूसरे उत्तर के साथ गया।
RolandiXor

@RolandiXor, आप उन apt-cache policy <target-package-name>पैकेज संस्करणों की सूची का उपयोग कर सकते हैं जिन्हें आप डाउनग्रेड / अपग्रेड कर सकते हैं ..
सटीक

.. कृपया पोस्ट में किए गए संपादन को देखें; यदि बड़ी संख्या में फाइलों को चिह्नित किया जाना है, तो आप कमांड कॉम्बो का उपयोग कर सकते हैं ...
सटीक

मुझे नहीं लगता कि आप मुझे समझ रहे हैं। वैसे भी, मुझे यह अब ठीक हो गया है और मैंने इनाम दिया है (इसे स्विच नहीं किया जा सकता)।
RolandiXor

1

मैं एक पैकेज के अपस्ट्रीम संस्करण में अपग्रेड करने और फिर डाउनग्रेड करने का निर्णय लेने की गेंद के दर्द से गुजरा हूं। यह एक अनुरक्षक निजी भंडार के माध्यम से था। मेरे मामले में यह सब नवीनतम सिस्टमड 233 संस्करण (अभी तक अप्रकाशित) को आज़माने के बारे में था।

कुंजी यह समझना है कि आपको उन सभी पैकेजों को निर्दिष्ट करने की आवश्यकता है जिन्हें डाउनग्रेड किया जाना चाहिए। यदि आपको यह सही लगता है, तो संभावना है कि आप जो चाहते हैं वह करेंगे। यदि आप कुछ याद करते हैं, तो एप आपको बताएगा कि कार्रवाई के कारण बहुत सारे पैकेज निकल जाएंगे। यह सुनिश्चित करने के लिए कि वास्तव में करने से पहले हम डाउनग्रेड को आज़माने के लिए '-s' ध्वज का उपयोग करते हैं।

इस प्रकार आपके लिए आवश्यक कदम इस प्रकार हैं:

1) उन सभी निर्भरताओं को सूचीबद्ध करें जो अपस्ट्रीम में अपग्रेड किए गए थे (यदि आपकी स्थिति अलग है तो कुछ अन्य कीवर्ड का उपयोग करें):

dpkg -l|grep upstream

यह आपको अपस्ट्रीम संस्करण संख्या के साथ संकुल की सूची देता है।

2) सूचीबद्ध करें कि प्रत्येक पैकेज के लिए सही स्थिर संस्करण क्या है:

for i in libnss-resolve:amd64 libsystemd0:amd64 libpam-systemd:amd64 libsystemd0:i386 libudev1:amd64 libudev1:i386 systemd systemd-sysv udev; do apt-cache show $i; done|grep Version

3) डबल चेक सब अच्छा है:

apt -s --allow-downgrades --no-remove --reinstall install libnss-resolve:amd64=232-21ubuntu5 libsystemd0:amd64=232-21ubuntu5 libpam-systemd:amd64=232-21ubuntu5 libsystemd0:i386=232-21ubuntu5 libudev1:amd64=232-21ubuntu5 libudev1:i386=232-21ubuntu5 systemd=232-21ubuntu5 systemd-sysv=232-21ubuntu5 udev=232-21ubuntu5

0 to upgrade, 0 to newly install, 9 to downgrade, 0 to remove and 0 not to upgrade.

(निश्चित नहीं है कि --reinstall को btw की आवश्यकता थी, लेकिन यह वही है जो मैंने किया था)

4) -s निकालें और इसे करें।

apt --allow-downgrades --no-remove --reinstall install libnss-resolve:amd64=232-21ubuntu5 libsystemd0:amd64=232-21ubuntu5 libpam-systemd:amd64=232-21ubuntu5 libsystemd0:i386=232-21ubuntu5 libudev1:amd64=232-21ubuntu5 libudev1:i386=232-21ubuntu5 systemd=232-21ubuntu5 systemd-sysv=232-21ubuntu5 udev=232-21ubuntu5
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.