ฉันจะเลือกแพ็คเกจจาก PPA ได้อย่างไร


45

มีวิธีในการเลือกแพ็คเกจจากที่เก็บ ppa ที่คุณเพิ่มหรือไม่? นั่นคือการแยกบางส่วนออกจากการอัปเดตในขณะที่รวมถึงคนอื่น ๆ ?

ตัวอย่างเช่นฉันต้องการเพียงแพ็คเกจโครเมียมเบราว์เซอร์จากที่เก็บนี้แต่ไม่ใช่แพ็คเกจอื่น ดังนั้นฉันไม่ต้องการsudo apt-get upgradeให้แพคเกจอื่น ๆ ของ ppa (นอกเหนือจากโครเมียมเบราว์เซอร์) ติดตั้งอยู่เหนือแพ็คเกจที่มีอยู่ของฉัน

ฉันรู้ว่านี่เป็นใบอนุญาตในการถ่ายภาพตัวเองถ้าฉันอ่านผิดอ้างอิงและยกเว้นสิ่งที่จำเป็นสำหรับคนที่ฉันรวมไว้ แต่ฉันรู้ว่าในกรณีนี้แพคเกจอื่น ๆ นั้นไม่ได้ขึ้นอยู่กับสิ่งนั้น

เป็นไปได้ไหม? อาจมีไฟล์บัญชีขาว / บัญชีดำหรืออะไรบางอย่าง


ฉันจะส่งต่อ synaptic ด้วยเหตุผลสามประการ: Ubuntu ปล่อยมันเป็นเครื่องมืออัปเดตซอฟต์แวร์ให้แก่ Ubuntu Software Center ฉันไม่เห็นหนทางใดที่ Synaptic จะหยุดการอัพเกรดจาก ppa ผ่านไฟล์ที่ติดตั้ง (ซึ่งเป็นปัญหาของฉัน) และฉัน ชอบโซลูชันบรรทัดคำสั่งกับ GUI หนึ่ง จบลงด้วยการหาสิ่งที่ใช้งานได้ (ดูคำตอบของฉันด้านล่าง)
yuvilio

2
Software Center ใช้สำหรับการติดตั้งและลบซอฟต์แวร์, Update Manager ใช้สำหรับการอัปเดตคุณสามารถใช้การปักหมุดใน Synaptic ดังนั้นแพ็คเกจอื่นจะไม่อัปเกรดสำหรับผู้ใช้ใหม่ที่ไม่ต้องการยุ่งกับเทอร์มินัล GUI เป็นที่ต้องการแน่นอนว่าคุณตอบถูกมาก
Uri Herrera

มีบางสิ่งที่คุณไม่สามารถทำได้ผ่าน Software-Center (ซึ่งง่ายต่อ Synaptic) และไม่ใช่ทุกคน (โดยเฉพาะมือใหม่) สะดวกสบายกับ commandline
Mrokii

@ Morkii ฉันยอมรับว่าวิธีการของฉันไม่ใช่สำหรับผู้เริ่มต้น คำตอบที่คุณเขียน Synaptic และ Uri Herrera พูดเป็นนัยที่ฉันคิดว่าผลงานดีกว่าในเรื่องนั้น ฉันจะให้คนอื่นที่ลองให้คะแนน
yuvilio

คำตอบ:


61

พบวิธีหนึ่งที่จะทำ

เคล็ดลับคือการใช้สองประโยคที่ตรึง คนแรกที่ไม่อนุญาตให้ใช้แพ็คเกจทั้งหมดจาก PPA และแพคเกจที่สองเพื่อเลือกแพ็คเกจที่คุณต้องการ

ดังนั้นสำหรับตัวอย่างข้างต้นฉันเพิ่ม ppa ตามปกติก่อน:

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

ตอนนี้ถ้าฉันใช้นโยบาย apt-cache มันจะแสดงให้ฉันเห็นว่ามี Chromium-browser รุ่นใหม่กว่าและมันจะติดตั้งพร้อมกับการอัพเกรดเพราะมันมีลำดับความสำคัญเท่ากัน (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]? 

ดังนั้นสิ่งที่ฉันทำได้คือบอกว่าฉันต้องการแพ็คเกจทั้งหมดใน ppa, webapps-preview ในกรณีนี้มีลำดับความสำคัญต่ำกว่ายกเว้นที่มี "chromium" ในชื่อของพวกเขา กลไกสำหรับสิ่งนี้กำลังตรึงแพคเกจ

ฉันสร้างไฟล์ใน /etc/apt/preferences.d/ โดยมีสองส่วน คนแรกบอกว่าให้แพคเกจทั้งหมดใน webapps-preview 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

ในการระบุสตริงที่ถูกต้องสำหรับตัวเลือก "Pin: release" เราสามารถใช้นโยบาย 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
...

สำหรับเวอร์ชัน apt <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

และตอนนี้เมื่อฉันพยายามอัพเกรดฉันจะได้รับเฉพาะแพ็คเกจที่ฉันต้องการจาก ppa นั้นและไม่ใช่แพ็คเกจอื่น เชอร์รี่ทั้งหมดที่คัดสรรมาอย่างดีสำหรับฉัน:

$ 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
ค่อนข้างซับซ้อนอิโมะ
Mrokii

5
ฉันไม่เห็นด้วยนี่เป็นสิ่งที่ตรงไปตรงมาสำหรับสิ่งที่คนต้องการ และยินดีที่ได้รับคำแนะนำทั้งหมดในการระบุชื่อ Pin ของ ppa
Nicholi

คำตอบเฉพาะนี้สำหรับผู้ที่ต้องการให้แน่ใจว่า apt จะชอบแพ็คเกจของที่เก็บเฉพาะเสมอ หากคุณต้องการวิธีแก้ปัญหาแบบหนึ่งลองคำตอบนี้
Braiam

7

คุณยังสามารถเลือกรุ่นที่คุณต้องการติดตั้งด้วย?originตัวเลือก:

จับคู่เวอร์ชันของแพ็กเกจที่มีต้นกำเนิดตรงกับต้นกำเนิดนิพจน์ทั่วไป ตัวอย่างเช่น“!? origin (debian)” จะค้นหาแพ็คเกจที่ไม่เป็นทางการในระบบของคุณ (แพ็กเกจไม่ได้มาจากไฟล์เก็บถาวร Debian)

ดังนั้นในกรณีเฉพาะของคุณคุณสามารถใช้:

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 บางอย่างเท่านั้นเลือก "Origin" (มุมซ้ายล่าง) ในหน้าต่าง Synaptic จากนั้นเลือก PPA ที่คุณต้องการเปลี่ยน

  • เลือกแพ็คเกจทั้งหมดที่คุณไม่ต้องการอัพเกรดโดยอัตโนมัติอีกต่อไป

  • เลือกเมนู "แพ็คเกจ / ล็อคเวอร์ชั่น" แพ็คเกจทั้งหมดที่คุณเลือกจะไม่ได้รับการอัพเกรดโดยอัตโนมัติอีกต่อไปจนกว่าคุณจะปลดล็อคอีกครั้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.