मैं पीपीए से पैकेज कैसे चुन सकता हूं?


45

क्या आपके द्वारा जोड़े गए ppa रिपॉजिटरी से पैकेज लेने के लिए एक तरीका है? यही है, जबकि कुछ को दूसरों को शामिल करने से अपडेट करने से बाहर करने के लिए?

उदाहरण के लिए, मैं इस रिपॉजिटरी से केवल क्रोमियम-ब्राउज़र पैकेज चाहता हूं, लेकिन अन्य नहीं। इसलिए मैं नहीं चाहता कि मेरे पास उस ppa के अन्य (क्रोमियम-ब्राउज़र के अलावा) पैकेज मेरे मौजूदा वाले पर स्थापित हों, बस एक।sudo apt-get upgrade

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

क्या ये संभव भी है? शायद वहाँ कुछ श्वेतसूची / ब्लैकलिस्ट फ़ाइल या कुछ है?


मैं तीन कारणों से सिनैप्टिक पर गुजरता हूं: उबंटू ने इसे उबंटू सॉफ्टवेयर सेंटर के पक्ष में सॉफ्टवेयर अपडेटर के रूप में छोड़ दिया, मैंने सिनाप्टिक के लिए एक ppa से स्थापित फ़ाइलों (जो कि मेरी समस्या थी) पर उन्नयन को रोकने का कोई रास्ता नहीं देखा, और मैं एक GUI एक के लिए एक कमांड लाइन समाधान पसंद करते हैं। कुछ ऐसा काम किया जो समाप्त हो गया (नीचे मेरा उत्तर देखें)।
युविलियो

2
सॉफ़्टवेयर सेंटर का उपयोग सॉफ़्टवेयर को स्थापित करने और निकालने के लिए किया जाता है, अपडेट मैनेजर का उपयोग अपडेट करने के लिए किया जाता है, आप Synaptic में पिनिंग का उपयोग कर सकते थे, इसलिए अन्य पैकेज उन्नत नहीं होंगे, एक नए उपयोगकर्ता के लिए भी जो टर्मिनल के साथ गड़बड़ नहीं करना चाहेगा। जीयूआई पसंद किया जाएगा, निश्चित रूप से तुम्हारा बहुत सही जवाब है।
उड़ी हरेरा

कुछ चीजें हैं जो आप सॉफ्टवेयर सेंटर के माध्यम से नहीं कर सकते हैं (जो कि सिनैप्टिक के साथ आसान हैं)। और हर कोई (विशेष रूप से newbies) कमांडलाइन के साथ सहज नहीं है।
मिरोकी

@ मिरोकी मैं मानता हूं कि मेरा दृष्टिकोण शुरुआती लोगों के लिए नहीं है। आपके द्वारा लिखा गया सिनैप्टिक उत्तर और उरी हरेरा ने संकेत दिया है, जो मुझे लगता है कि इस संबंध में बेहतर है। मैं दूसरों को इसे आजमाता हूँ जो इसे रेट करते हैं।
युविलियो

जवाबों:


61

इसे करने का एक तरीका मिला।

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

तो ऊपर दिए गए उदाहरण के लिए, मैं पहले सामान्य रूप से ppa जोड़ता हूं:

$ sudo add-apt-repository ppa:webapps/preview
...
$ sudo apt-get update
...

अब अगर मैं apt-cache पॉलिसी चलाता हूं, तो यह मुझे दिखाएगा कि क्रोमियम-ब्राउज़र का एक नया संस्करण उपलब्ध है और यह एक अपग्रेड के साथ इंस्टॉल होगा क्योंकि यह उसी प्राथमिकता (500) में मेरे वर्तमान क्रोमियम-ब्राउज़र के रूप में है।

$ sudo apt-cache policy chromium-browser
chromium-browser:
  Installed: 18.0.1025.168~r134367-0ubuntu0.12.04.1
  Candidate: 20.0.1132.47~r144678-0precise1+webapps3
  Version table:
     20.0.1132.47~r144678-0precise1+webapps3 0
        500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main amd64 Packages
 *** 18.0.1025.168~r134367-0ubuntu0.12.04.1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise-updates/universe amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/universe amd64 Packages
        500 http://ppa.launchpad.net/chromium-daily/beta/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     18.0.1025.151~r130497-0ubuntu1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
E: Unable to parse package file /etc/apt/preferences.d/webapps-preview-pin-400 (1)
$ 

उस पैकेज के रूप में यह बहुत अच्छा है, लेकिन मैं नहीं चाहता कि इस ppa (जिसमें 500 प्राथमिकताएं भी हों) में अन्य लोगों को स्थापित करना है। अभी अगर मैं अपग्रेड करने की कोशिश करता हूं, तो मुझे उस रिपॉजिटरी से केवल क्रोमियम पैकेजों से ज्यादा मिलेगा।

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages have been kept back:
  bamfdaemon gwibber gwibber-service gwibber-service-facebook gwibber-service-twitter indicator-appmenu libbamf0 libbamf3-0 shotwell
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg gwibber-service-identica indicator-messages indicator-status-provider-mc5
  indicator-status-provider-pidgin libindicator-messages-status-provider1
8 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
Need to get 25.3 MB of archives.
After this operation, 5,034 kB of additional disk space will be used.
Do you want to continue [Y/n]? 

तो मैं जो कर सकता हूं, वह यह है कि मैं चाहता हूं कि मुझे इस मामले में उस वेब साइट के सभी पैकेज चाहिए, जिसमें उनके नाम में "क्रोमियम" को छोड़कर कम प्राथमिकता हो । इसके लिए तंत्र एक पैकेज को पिन कर रहा है

मैं दो खंडों के साथ /etc/apt/preferences.d/ में एक फ़ाइल बनाता हूं। पहले वाले का कहना है कि वेबैप्स-प्रीव्यू ppa में सभी पैकेज रेगुलर वाले की तुलना में कम प्राथमिकता देते हैं (ताकि वे उच्च संस्करण संख्या होने पर भी पसंद न करें । दूसरा क्लॉज पैकेज देने के लिए आंशिक रूप से ओवरराइड करता है। उनके नाम में "क्रोमियम" वाला ppa अन्य पैकेजों की तरह ही प्राथमिकता रखता है ताकि वह स्थापित हो जाए (उच्चतर संस्करण संख्या होने पर)।

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  *chromium*
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

"पिन: रिलीज़" विकल्प के लिए सही स्ट्रिंग की पहचान करने के लिए हम apt-cache पॉलिसी का फिर से उपयोग कर सकते हैं।

$ apt-cache policy
...
500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main i386 Packages
    release v=12.04,o=LP-PPA-webapps-preview,a=precise,n=precise,l=preview,c=main
    origin ppa.launchpad.net
...

उपयुक्त संस्करणों के लिए <0.8.14 पिन किए गए पैकेजों को स्पष्ट रूप से निर्दिष्ट करना होगा क्योंकि वाइल्डकार्ड काम नहीं करते हैं:

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  chromium-browser chromium-codecs-ffmpeg chromium-browser-l10n chromium-codecs-ffmpeg-extra
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

और अब, जब मैं अपग्रेड करने की कोशिश करता हूं तो मुझे केवल वे पैकेज मिलते हैं जो मैं उस पीपा से चाहता हूं, दूसरे लोगों से नहीं। सभी अच्छी तरह से चेरी मेरे लिए चुना:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 25.1 MB of archives.
After this operation, 5,026 kB of additional disk space will be used.
Do you want to continue [Y/n]?

5
बहुत जटिल, imho।
मारोकी

5
मैं असहमत हूं, किसी को जो पसंद है उसके लिए यह बहुत सीधा है। और ppa के पिन नाम की पहचान करने के लिए सभी निर्देशों के लिए अच्छा है।
निकोली

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

8

आप उस रिलीज़ को भी चुन सकते हैं जिसे आप ?originचयनकर्ता से इंस्टॉल करना चाहते हैं :

ऐसे पैकेज संस्करण मेल खाते हैं जिनकी उत्पत्ति नियमित अभिव्यक्ति उत्पत्ति से मेल खाती है। उदाहरण के लिए, "मूल! (डेबियन)" आपके सिस्टम पर किसी भी अनौपचारिक पैकेज (पैकेज डेबियन संग्रह से नहीं) मिलेगा।

तो, अपने विशिष्ट मामले में आप उपयोग कर सकते हैं:

sudo aptitude install !?origin(LP-PPA-webapps-preview) chromium

या आप संस्करण का उपयोग करके निर्दिष्ट कर सकते हैं <packagename>=<version>:

sudo apt-get install chromium=20.0.1132.47~r144678-0precise1+webapps3

5

आप वास्तव में Synaptic के माध्यम से कुछ पैकेज "चेरी पिक" कर सकते हैं और यह बहुत आसान है। यह इस तरह काम करता है:

  • यदि आप ऐसा कुछ PPA के लिए ही करना चाहते हैं, तो Synaptic- विंडो में "ओरिजिन" (निचले बाएं कोने) को चुना और फिर उस PPA को चुनें जिसे आप बदलना चाहते हैं

  • उन सभी पैकेजों को चुनें जिन्हें आप और अधिक स्वचालित रूप से अपग्रेड नहीं करना चाहते हैं।

  • मेनू "पैकेज / लॉक संस्करण" चुनें। आपके द्वारा चुने गए सभी पैकेज तब तक स्वचालित रूप से अपग्रेड नहीं किए जाएंगे जब तक आप उन्हें फिर से अनलॉक नहीं करते।

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