मैं एक निश्चित भंडार से सभी पैकेजों को कैसे निकालूँ?


30

10.04 से 10.10 तक के सुगम उन्नयन के लिए, मैं उन सभी पैकेजों को हटाना चाहूंगा जो डिफ़ॉल्ट रिपॉजिटरी (उदाहरण के लिए क्रोमियम पीपीए और थर्ड-पार्टी रिपॉजिटरी) में नहीं हैं। इन पैकेजों को खोजने और निकालने का सबसे आसान तरीका (अधिमानतः सीएलआई) क्या है?

संपादित करें: यह प्रश्न केवल PPA के लिए ही सीमित नहीं है, मेरे पास एक x2go रिपॉजिटरी भी है, इसलिए मैं एक निश्चित रिपॉजिटरी से संबंधित पैकेज को हटाने के लिए एक सामान्य कमांड की तलाश कर रहा हूं। PPA के लिए, यह सवाल कि PPA को कैसे हटाया जा सकता है, के शानदार उत्तर हैं।


जो लोग, सभी बाहरी पैकेज निकालना सभी PPAs और उपयोग को अक्षम के लिए code.google.com/p/apt-downgrade
Lekensteyn

जवाबों:


12

यह स्क्रिप्ट किसी विशेष सर्वर / शाखा से सभी पैकेजों को सूचीबद्ध कर सकती है (दो घोषित चर को संशोधित कर सकती है):

#!/bin/bash

server="http://it.archive.ubuntu.com/ubuntu/"
branch="maverick-updates/main"

apt-cache policy $(dpkg -l | awk 'NR >= 6 { print $2 }') |
  awk -v server="$server" -v branch="$branch" \
    '/^[^ ]/      { split($1, a, ":"); pkg = a[1] }
    nextline == 1 { nextline = 0; if ($2 == server && $3 == branch) print pkg }
    /\*\*\*/      { nextline = 1 }'

अगर आपको शाखा से स्वतंत्र रूप से किसी विशेष सर्वर से नहीं आने वाले सभी पैकेजों को सूचीबद्ध करने की आवश्यकता है, तो अगली-से-अंतिम पंक्ति को इसके साथ बदलें:

nextline == 1 { nextline = 0; if ($2 != server) print pkg }

1
नहीं, जो मैं ठीक से देख रहा हूं, यह स्क्रिप्ट सिर्फ एक विशिष्ट रिपॉजिटरी प्रविष्टि से सभी पैकेजों को प्रदर्शित करती है। द्वारा प्रतिस्थापित $2 == server && $3 == branchकरके $2 != server, मेरे प्रश्न का उत्तर दिया गया है। कृपया इसे अपने उत्तर में रखें :) ( branch=लाइन को हटाया जा सकता है) ध्यान दें: यह माना जाता है कि सभी पैकेज एक एकल रिपॉजिटरी सर्वर से आते हैं।
लेकेनस्टेयॉन

1
यह स्क्रिप्ट (मेरी पिछली टिप्पणी के अनुसार थोड़ा संशोधित) उम्मीद के मुताबिक काम करती है। libvpx0पैकेज क्रोमियम-दैनिक पीपीए में दोनों के रूप में मुख्य रेपो में ही अस्तित्व में। रिपॉजिटरी को हटाने के बाद /etc/apt/sources.list.d, मेरे पास अभी भी एक लेफ्ट-ओवर पैकेज था libvpx0:। मैंने इसे इस तरह "रिपेयर" किया: निर्भरता को अनदेखा करते हुए, dpkg के साथ लाइब्रेरी को हटा दें sudo dpkg --ignore-depends=libvpx0 --remove libvpx0:। अगला, इसे मुख्य रेपो से फिर से स्थापित करें sudo apt-get install libvpx0:।
लेकेनस्टाइन

1
@Lekensteyn: शायद आप अपने काम को छोटा कर सकते हैं sudo apt-get install libvpx0=$version_string, दो उपलब्ध पैकेजों को अलग-अलग संस्करण में जोड़ सकते हैं ।
enzotib

वास्तव में, यह संभव भी था और शायद बेहतर भी।
लेकेनस्टेयॉन

मुझे केवल यह जांचने की आवश्यकता है कि कौन से पैकेज डिफ़ॉल्ट रिपॉजिट से संस्थापित नहीं हैं। कमांड apt-cache policy $(dpkg -l | awk '/^ii/{print $2}') > policy.txt; awk '!/^ /{pkg=$1}check{print pkg, $2;check=0}/\*\*\*/{check=1} ' policy.txt | grep -v archive.ubuntuएक अच्छी शुरुआत है ( grep -vकुछ PPA को बाहर करने के लिए और अधिक जोड़ें )। पैकेज संस्करण जो किसी भी रेपो में ज्ञात नहीं हैं, जैसा कि दिखाते हैं /var/lib/dpkg/status
लेकेनस्टाइन

22

की जाँच करें पीपीए-पर्जPpa-purge स्थापित करें

उपयोग:

ppa-purge -purge <nameofppa> [-s hostserver]

होस्ट करने वाला डिफॉल्ट करता है ppa.launchpad.net

यहाँ संदर्भ के लिए कमांड के लिए मैनपेजppa-purgeमैनपेज आइकन का लिंक दिया गया है ।


या आप ppa-purge की मेरी शाखा का उपयोग कर सकते हैं जिसमें ब्रह्मांड रिपॉजिटरी में ppa-purge पर कई बग फिक्स और सुधार हैं। अधिक जानकारी के लिए यहाँ देखें ।
जर्नो

18

के aptitudeलिए मल्टीकार बग पर काबू पानेppa-purge

आम तौर पर, जैसा कि वादिम रुटकोवस्की और टककट ने समझाया है , ppa-purgeडिफ़ॉल्ट सिंटैक्स के साथ चलना एक पीपीए द्वारा प्रदान किए गए सभी पैकेजों को हटाने का एक प्रभावी तरीका है, जब भी संभव हो अन्य कॉन्फ़िगर किए गए सॉफ़्टवेयर स्रोतों में प्रदान किए गए संस्करणों के लिए उन्हें ठीक से डाउनग्रेड करना।

हालाँकि, जैसा कि तक्कत ने बताया है, बग 831768 मल्टीकार पैकेज ppa-purgeको हटाने के लिए ठीक से काम करने से रोकता है (जैसे 32-बिट पैकेज 64-बिट सिस्टम पर स्थापित)। ऐसा इसलिए है क्योंकि मल्टीकार पैकेज में परस्पर विरोधी निर्भरताएं नहीं हो सकती हैं (जो कि बग के बारे में है), और डाउनग्रेड पैकेज का उपयोग करने के लिए डिफ़ॉल्ट व्यवहार है।aptitudeppa-purgeaptitude

सौभाग्य से, ppa-purgeस्वीकार करता है -iझंडा जो इसे पसंद करते हैं का कारण बनता है apt-getके लिए aptitudeअपने बैकएंड के रूप में। जैसा कि बग रिपोर्ट में प्रलेखित किया गया है, का उपयोग apt-getकरना मैन्युअल रूप से आह्वान करने का एक प्रभावी विकल्प है aptitude, इसलिए ध्वज के ppa-purgeसाथ चलना एक पीपीए द्वारा प्रदान किए गए सभी पैकेजों को हटाने / डाउनग्रेड करने के लिए एक प्रभावी समाधान होना चाहिए , जिसमें मल्टीरार्क पैकेज शामिल हैं-i

इसे कैसे करना है

यहाँ वाक्यविन्यास है:

sudo ppa-purge -i ppa:ppaowner/ppaname

हमेशा की तरह (जब -iध्वज का उपयोग नहीं किया जाता है):

  • ppaowner PPA के स्वामी के साथ बदल दिया गया है।
  • /ppanameवैकल्पिक है। यदि मौजूद है, ppanameतो PPA के नाम से बदल दिया जाता है। यदि नहीं, तो यह चूक करता है ppa

उदाहरण के लिए , मान लें कि मेरे पास qBittorrent के अस्थिर बिल्ड के लिए PPA था , और मैं इसे पूरी तरह से हटा देना चाहता था, स्वचालित रूप से qBittorrent को अपग्रेड करना, जो कि इसके बजाय पर्दे के पीछे का उपयोग करकेapt-getaptitude मेरे अन्य सॉफ़्टवेयर स्रोतों के माध्यम से जो भी संस्करण उपलब्ध है । तब मैं भाग जाता:

sudo ppa-purge -i ppa:hydr0g3n/qbittorrent-unstable

जहाँ यह प्रलेखित है

किसी कारण से, इसके मैनुअल पेजppa-purge में कुछ उपयोगी विकल्पों का दस्तावेजीकरण नहीं किया गया है , जिसमें शामिल हैं । लेकिन आप उनके बारे में जानकारी चला सकते हैं (या बिना किसी तर्क के):-ippa-purge -hppa-purge

ek@Del:~$ ppa-purge -h
Usage: sudo ppa-purge [options] <ppa:ppaowner>[/ppaname]

ppa-purge will reset all packages from a PPA to the standard
versions released for your distribution.

Options:
    -p [ppaname]        PPA name to be disabled (default: ppa)
    -s [host]       Repository server (default: ppa.launchpad.net)
    -d [distribution]   Override the default distribution choice.
    -y          Pass -y --force-yes to apt-get or -y to aptitude
    -i          Reverse preference of apt-get upon aptitude.
    -h          Display this help text

Example usage commands:
    sudo ppa-purge xorg-edgers
    will remove https://launchpad.net/~xorg-edgers/+archive/ppa

    sudo ppa-purge -p xorg-testing sarvatt
    will remove https://launchpad.net/~sarvatt/+archive/xorg-testing

    sudo ppa-purge ppa:ubuntu-x-swat/x-updates
    will remove https://launchpad.net/~ubuntu-x-swat/+archive/x-updates

Notice: If ppa-purge fails for some reason and you wish to try again,
(For example: you left synaptic open while attempting to run it) simply
uncomment the PPA from your sources, run apt-get update and try again.

"एप्टीट्यूड पर रिवर्स-गेट की प्राथमिकता" थोड़ा गुप्त है। स्रोत कोड के प्रासंगिक टुकड़े को देखकर ( ppa-purgeयह सिर्फ एक शेल स्क्रिप्ट है, सभी के बाद), हम देख सकते हैं कि इसका मतलब है कि डिफ़ॉल्ट व्यवहार को प्राथमिकता aptitudeदेना है apt-get, और -iध्वज इस प्राथमिकता को उलट देता है।


पिछली बार जब मैंने ppa-purge की कोशिश की थी, तो उसने PPA से हटाए गए पैकेजों को नहीं हटाया था। क्या ये अब भी एक मामला है?
लेकेनस्टेयन

@Lekensteyn हाँ, मेरा मानना है कि यह अभी भी ऐसा मामला है जो पीपीए द्वारा प्रदान किए गए पैकेज को हटा या डाउनग्रेड नहींppa-purge करेगा जो "शुद्ध" किया जा रहा है। हालाँकि, आप इस बारे में एक अलग प्रश्न पोस्ट कर सकते हैं, ताकि अधिक आधिकारिक या अच्छी तरह से प्रलेखित उत्तर मिल सके।
एलियाह कगन

यदि लॉन्चपैड में रिपॉजिटरी एक पीपीए होस्ट नहीं है, लेकिन अन्य गैर-मानक रिपॉजिटरी, क्या पीएपी-पर्ज काम करेगी?
अनवर

1
@Anwar मैं सकारात्मक नहीं हूँ अगर यह काम करेगा, लेकिन आपको इसके बजाय पूर्ण रिपॉजिटरी URL निर्दिष्ट करके प्रयास करने में सक्षम होना चाहिए ppa:username/path। इससे पहले कि आप इसे शुद्ध करने का प्रयास करें, भले ही स्क्रिप्ट को हटाने के लिए पैकेजों की सूची को अपडेट करने के तुरंत बाद निष्क्रिय हो जाए, यह PPA को ENABLED होना चाहिए, यह पहले से ही अक्षम PPA को "नहीं" मिलेगा।
ड्रैगन 788

1
@Lekensteyn आप किसी aptitude search ~oभी संस्थापन स्रोत के साथ अनाथ संकुल को खोजने के लिए प्रयोग कर सकते हैं यदि आपको किसी ऐसी चीज को शुद्ध करने की आवश्यकता है जिसे पीपीए से हटा दिया गया था (या एक के माध्यम से एक के रूप में स्थापित किया गया था dpkg -i)।
ड्रैगन 788

6

यहाँ GUI ऐसा करने के तरीके हैं। आशा है कि यह उन लोगों के लिए मदद करेगा जो CLI पसंद नहीं करते हैं। चरणों का पालन करना सरल और आसान है।

  1. सिनैप्टिक पैकेज मैनेजर खोलें । यदि स्थापित नहीं है, तो इसे स्थापित करें:

    sudo apt-get install synaptic
    
  2. खोले जाने पर नीचे-बाएँ मूल बटन पर क्लिक करें । यह शीर्ष-बाईं ओर सभी रिपॉजिटरी को सूचीबद्ध करेगा। उन विशेष रिपॉजिटरी का चयन करें जिनके लिए पैकेज निकाले जाने हैं। यह उस रिपॉजिटरी के तहत सभी पैकेजों को सूचीबद्ध करेगा। पहले स्थापित पैकेज दिखाने के लिए पहले फ़ील्ड i, e S या इंस्टॉल किए गए संस्करण फ़ील्ड पर क्लिक करें ।

  3. अब निकालने के लिए सभी पैकेज चुनें।

    हटाने के लिए चिह्नित करने के लिए सुझाव:

    1. पहले पैकेज का चयन करें Shiftऔर फिर कुंजी दबाए रखें और फिर सभी का चयन करने के लिए अंतिम पैकेज चुनें। फिर स्क्वायर बॉक्स पर राइट क्लिक करें और रिमूव के लिए मार्क चुनें या पूरी तरह हटाने के लिए मार्क करें

    2. या किसी भी पैकेज का चयन करें और सभी का चयन करने के लिए Ctrl+ दबाएँ A। इसके बाद स्क्वेयर बॉक्स पर राइट क्लिक करें और रिमूव के लिए मार्क चुने या पूरी रिमूवल के लिए मार्क करें।

बस। यह बिना किसी समस्या के दूर हो जाएगा। मैंने इसे और अधिक स्पष्ट करने के लिए छवि को संलग्न किया है। आशा है कि यह मदद करेगा। :)

छवि


5

कम से कम उन्हें खोजने के लिए, पीपीए को अक्षम करने और चलाने से शुरू करें apt-get update। फिर इंस्टॉल करें apt-show-versionsapt-show-versions | grep 'No available'फिर रनिंग आपको आपके सभी स्थापित पैकेजों की एक सूची देगा जो आपके कॉन्फ़िगर किए गए रिपॉजिटरी में नहीं मिल सकते हैं। कुछ कमांड-लाइन मैजिक के साथ आप शायद पैकेज के नाम ही निकाल सकते हैं और उन्हें पास कर सकते हैं apt-get remove:

 for i in `apt-show-versions | grep 'No available' | cut -d' ' -f 1` ; do  sudo apt-get remove -y $i ; done

ध्यान दें कि यह सूची से लौटेगा apt-show-versionsऔर उन्हें एक-एक करके हटा देगा। यह क्या पाता है पर निर्भर करता है, यह निर्भरता के कारण अनपेक्षित कुछ की स्थापना रद्द कर सकता है, इसलिए इसे पहले जांचें।


अच्छा लगता है, मैं इसे एक कोशिश करूँगा।
लेकेन्स्टाइन 13

3
अपग्रेड प्रक्रिया खुद भी पीपीए को ऑटोडिजेबल करेगी, हालांकि मुझे पूरा यकीन है कि यह नहीं जाएगा और सभी बचे हुए पैकेज को हटा देगा।
जॉर्ज कास्त्रो

@ जॉर्ज: मैंने वास्तव में देखा है कि पीपीए अक्षम हैं (टिप्पणी की गई है), लेकिन यह संकुल को नहीं हटाता है। मुझे लगता है कि उबंटू रिपॉजिटरी से एक नए संस्करण से पहले फाइलों को ओवरराइट करने से पहले पैकेज को निकालना बेहतर होगा।
लीकेनस्टाइन

मैंने अभी इसका परीक्षण किया है और यह मुख्य रेपो और पीपीए के पैकेजों में अंतर नहीं करता है। मेरे मामले में, यह libvpx0क्रोमियम-दैनिक पीपीए से पैकेज था । @ enzotib के जवाब ने यह पैकेज दिखाया।
लीकेनस्टाइन

यदि आप apt-show-versionsगैर-रूट के रूप में चलाते हैं , तो sudo apt-show-versions -iउसे कैश अपडेट करने के लिए इसकी आवश्यकता है और नए हटाए गए रिपॉजिटरी / पीपीए से परिवर्तन देखें (अन्यथा यह केवल cron.daily नौकरी के माध्यम से अपडेट किया गया है)
Xen2050

0

मुझे मुश्किल में ppa-purge का उपयोग मिला।

सिस्टम के अंतर्गत Synaptic Package Manager खोलें, फिर सेटिंग्स, रिपॉजिटरी चुनें।

जिन्हें आप नहीं चाहते हैं उन्हें हटा दें।

किया हुआ!


4
यह केवल पैकेज स्रोतों को निकालता है, यह उन स्रोतों से पैकेज को नहीं हटाता है।
लेकेनस्टाइन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.