मैं सभी पैकेजों को उनके आधिकारिक संस्करणों में वापस कैसे लाऊँ?


10

मैंने PPA से कई पैकेज स्थापित किए हैं, और मैं अब आधिकारिक संस्करणों पर वापस लौटना चाहूंगा। बहुत से पीपीए अब अस्तित्व में नहीं हैं /etc/apt/sources.list.d, इसलिए ppa-purgeउन पर काम नहीं होगा।

उसके लिए सबसे सीधा रास्ता क्या है?

जवाबों:


11

वैसे आप संकुल को हटा और पुनः स्थापित कर सकते हैं

ppa-purgeएक साफ बच के लिए शायद अभी भी आपका सबसे अच्छा दांव है। बस पीपीए को फिर से जोड़ना पैकेज से आया और फिर ppa-purgeइसे मारने के लिए उपयोग करना। मुझे यकीन नहीं है कि आपने कितने पीपीए लगाए हैं, लेकिन अगर यह 10 से कम है, तो मैं यह करना चाहूंगा

अगर आपको लगता है कि यह तरीका बहुत नरम है, तो मैंने bashपैकेज संस्करणों की पहचान करने में मदद करने के लिए अभी-कुछ लिखा है जिनके इंस्टॉलेशन स्रोत अब केवल स्थानीय रूप से मौजूद हैं /var/lib/dpkg/status। यह "अनाथ" पैकेज के समान नहीं है।

for p in `dpkg-query --showformat='${Package} ' -W`; do
    if [[ $(apt-cache policy $p | grep -Pzo "\*\*\* [^\n]+\s+100") ]]; then
        echo $p;
    fi;
done

मुझे यकीन नहीं है कि यह अभी तक सही है, लेकिन इसे छोड़ दो। ध्यान दें कि यह केवल पैकेजों के नाम का प्रिंट आउट लेने वाला है। आप प्रत्येक पैकेज को मैन्युअल रूप से अनइंस्टॉल / पुनः इंस्टॉल करने जा रहे हैं।

ऐसा करने के लिए, पहले उस पैकेज के लिए जो उपलब्ध है उसे चलाकर apt-cache policy <package>देखें और आपको पैकेज संस्करण ( /var/lib/dpkg/statusसंस्करण सहित ) की एक सूची दिखाई देगी । निकटतम बाहरी खोजें और चलाएं:

sudo apt-get install <package>=<version>

आपको इसके --reinstallबाद जोड़ने की आवश्यकता हो सकती है installलेकिन देखें कि यह कैसे जाता है।


1
@ जोकरडिनो जो क्रमशः (लेकिन महत्वपूर्ण रूप से) अलग है। यह केवल अनाथ पैकेजों को खोजता है, अर्थात, ऐसे पैकेज जिनमें कोई वर्तमान व्यवहार्य संस्थापन रिपॉजिटरी नहीं है, इसलिए यह केवल उन चीजों को दिखाएगा जिन्हें आपने पीपीए से स्थापित किया है जो कहीं और मौजूद नहीं हैं। उन चीज़ों के लिए जहाँ आप वर्तमान पैकेजों को अपग्रेड करते हैं (जैसे कि यदि आपने पूरे X सिस्टम को अपग्रेड करने के लिए xorg-edgers का उपयोग किया है) तो उन पैकेजों की गणना नहीं की जाती है।
ओली

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

आधिकारिक बयान के अनुसार, ppa-purge को ubuntu से हटा दिया गया था, क्योंकि इसकी सभी कार्यक्षमता apt-get द्वारा की जा सकती है। मैं इसे कैसे प्राप्त कर सकता हूं।
रफ़ी

@rafee आपको क्यों लगता है ppa-purgeकि हटा दिया गया था? यह भरोसेमंद के साथ-साथ हर दूसरे समर्थित रिलीज़ के लिए भी है
ओली

इसकी स्थापना डिफ़ॉल्ट रूप से हटा दी गई है और इसे निर्भरता के रूप में योग्यता की आवश्यकता है।
रफ़ी

1

मैंने एक और पूर्ण स्क्रिप्ट लिखी है जो उन पैकेजों को पहचान लेगी जिनका वर्तमान संस्करण पीपीए से नहीं है, और उनके पास एक वैकल्पिक पीपीए-उपलब्ध संस्करण है। इसके चलने के बाद, यह एक रेडी-टू-रन कमांड को प्रिंट करता है जो ऐसे पैकेजों को उनके पीपीए संस्करणों में डाउनग्रेड करेगा।

https://gist.github.com/peci1/2d7859857fdad73ee8443f5ecd5ee5a3

#!/usr/bin/env bash

# BSD 3-clause license, copyright Martin Pecka @ 2019

# This script outputs a command that will revert all packages from non-PPA versions to their latest PPA version.
# This may be handy i.e. for finding packages for which you installed a newer version from a .deb file, or after
# incompletely removing a PPA.

export LC_ALL=C

command=""

for p in `dpkg-query --showformat='${Package} ' -W`; do
    if [[ $(apt-cache policy $p | grep -Pzo "\*\*\* [^\n]+\s+100") ]]; then
        versions=$(apt-cache policy $p | tr "\n" "\r" | grep -Po '(?<=\r )[ *]{3} [^\r]+ [0-9]+\r\s+[0-9]+' | sed 's/ [0-9]\+\r\s\+\([0-9]\+\)/ \1/g' | tr "\r" "\n")
        installable_versions=$(echo "${versions}" | grep -v " 100$")
        version_to_install=$(echo "${installable_versions}" | head -n1 | grep -Po "\s+\K.*(?= [0-9]+$)")
        if [[ ! -z "${version_to_install}" ]]; then
            echo "${p}=${version_to_install}"
            command="${command} ${p}=${version_to_install}"
        else
            echo "${p}: no PPA version"
        fi
    fi;
done

echo "To revert packages to their latest PPA version, call the following command as root. Please, carefully go through the list of changes apt-get will present to you!"
echo "apt-get install ${command}"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.