เป็นไปได้หรือไม่ที่จะอนุญาตเฉพาะการอัปเดตแพคเกจเฉพาะจาก PPA


19

ให้เราบอกว่าฉันได้เพิ่ม PPA ที่มี X package ที่ฉันต้องการ แต่มันยังมี Y package ที่ฉันไม่ต้องการใช้หรือรับการปรับปรุงจาก ฉันจะได้รับการอัปเดตสำหรับแพ็คเกจเฉพาะจากฉันได้ PPA เดียวกัน แต่ปฏิเสธการอัปเดตจาก PPA เดียวกันสำหรับแพ็คเกจอื่น ๆ

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

คำตอบ:


16

คุณจะใช้สิ่งที่เรียกว่า "การตรึง"

สมมติว่าคุณกำลังติดตั้งแพ็กเกจ foo จาก PPA คุณจะต้องติดตั้งการพึ่งพาใด ๆ จาก ppa ด้วยเช่นกัน

แต่ถ้ามีโปรแกรมอื่นคุณสามารถระบุที่เก็บที่จะใช้กับการปักหมุด

ดูการปักหมุดบน Ubuntu wiki

มีตัวอย่างของการตรึง ppa ในหน้านั้น

https://help.ubuntu.com/community/PinningHowto#Pinning_the_ubuntu-mozilla-daily_PPA

จากหน้า wiki:

เพื่อให้การอัปเกรด apt-get ไม่เจ็บปวดเท่าที่เป็นไปได้ให้ตั้งค่าลำดับความสำคัญลดลงใน PPA สิ่งนี้จะหยุดการติดตั้งเวอร์ชันแพ็คเกจที่ไม่ต้องการ เมื่อตั้งค่าแล้วแพคเกจจาก PPA ubuntu-mozilla รายวันจะแพ้ในการแข่งขันใด ๆ กับแพ็คเกจจากที่เก็บอื่น ๆ แม้ว่าจะมีเวอร์ชั่นที่สูงกว่าก็ตาม

สร้างไฟล์ /etc/apt/preferences.d/ubuntu-mozilla-daily-pin-400

เพิ่มสิ่งต่อไปนี้ในไฟล์:

Package: *
Pin: release o=LP-PPA-ubuntu-mozilla-daily
Pin-Priority: 400

ใช้คำสั่งต่อไปนี้ก่อนและหลังเพื่อตรวจสอบว่ามีการปรับปรุง Pin-Priority

apt-cache policy

apt-cache policy firefox-3.5

7

ก่อนอื่นถ้าคุณอัปเกรดแพ็กเกจจาก PPA โดยไม่ได้ตั้งใจแล้วให้ดูคำตอบนี้: /ubuntu//a/142808/103117โดยเฉพาะอย่างยิ่งส่วนที่ใช้ ppa-purge เนื่องจากฉันได้อัปเกรดแพ็กเกจและ apt-get แล้วจะไม่ลดระดับโดยไม่คำนึงถึงลำดับความสำคัญมันง่ายที่สุดในการล้างแพ็คเกจที่อัปเกรดทั้งหมดก่อนจากนั้นแก้ไขลำดับความสำคัญจากนั้นเพิ่ม PPA ใหม่และอัปเกรดแพ็คเกจที่คุณต้องการเท่านั้น

สำหรับคำอธิบายเต็มรูปแบบของความสำคัญของระบบ / man apt_preferencesปักหมุดให้ดู

apt-cache policy <package name>ถ้าแพคเกจที่มีอยู่จากหลายแหล่งที่แต่ละคนจะได้รับมอบหมายมีความสำคัญและคุณสามารถเห็นได้ว่ามี ตัวอย่างเช่นฉันใช้ PPA ที่เรียกว่า nathan-renniewaldock / ppa / ubuntu และฉันไม่ต้องการติดตั้ง mysql-server-5.5 (แพ็คเกจ "Y ของฉัน") จากที่นั่น ดังนั้นฉันสามารถตรวจสอบสถานการณ์ปัจจุบันของฉันด้วย:

rob@frodo:~$ apt-cache policy mysql-server-5.5
mysql-server-5.5:
  Installed: 5.5.27-1~ppa1~precise
  Candidate: 5.5.27-1~ppa1~precise
  Version table:
 *** 5.5.27-1~ppa1~precise 0
        500 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

ดังนั้นเนื่องจากทุกอย่างมีความสำคัญ 500 ตามหน้าเพจคนที่มีหมายเลขเวอร์ชันสูงสุดจึงถูกเลือก

ตัวอย่างเช่นถ้าคุณต้องการติดตั้งเฉพาะ ddclient ("package X") แต่ไม่ใช่แพ็คเกจอื่นคุณต้องการลดระดับความสำคัญสำหรับแพ็คเกจทั้งหมดใน PPA ยกเว้น ddclient /etc/apt/preferences.d/nathan-preferencesสร้างไฟล์ที่เรียกว่า โปรดทราบว่าไฟล์ทั้งหมดในไดเรกทอรีนั้นถูกอ่านและมีกฎบางอย่างเกี่ยวกับชื่อไฟล์ (ต้องมีอักขระตัวอักษรและตัวเลขไฮเปอร์ขีดกลางและไม่มีส่วนขยายหรือสิ้นสุดใน. pref)

ก่อนอื่นเราต้องรู้วิธีระบุ PPA ของเรา apt-cache policyคำสั่งเกี่ยวกับข้อมูล dispays ของตัวเองเกี่ยวกับแหล่งที่มาทั้งหมด ฉันรู้ PPA ของฉันมี "นาธาน" ในชื่อดังนั้นฉัน:

$ apt-cache policy | grep nathan
400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main i386 Packages
     release v=12.04,o=LP-PPA-nathan-renniewaldock,a=precise,n=precise,l=PPA,c=main

ส่วนที่น่าสนใจคือ "o = LP-PPA-nathan-renniewaldock" ซึ่งเราใช้ในไฟล์ /etc/apt/preferences.d/nathan-prefs ดังนี้:

Package: *
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 400

Package: ddclient
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 500

สิ่งนี้ตั้งค่าทุกอย่างใน PPA เป็นระดับความสำคัญ 400 จากนั้นเปลี่ยน ddclient กลับไปเป็นค่าเริ่มต้น 500 ตอนนี้ฉันสามารถตรวจสอบว่ามันทำงานได้หรือไม่:

$ apt-cache policy ddclient
ddclient:
  Installed: 3.8.0-11.4ubuntu1
  Candidate: 3.8.1-0~ppa1~precise
  Package pin: 3.8.1-0~ppa1~precise
  Version table:
     3.8.1-0~ppa1~precise 500
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 3.8.0-11.4ubuntu1 500
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
        100 /var/lib/dpkg/status

ดังนั้น ddclient มีความสำคัญ 500 ซึ่งเหมือนกับแพ็คเกจ Ubuntu เดิม แต่จะถูกติดตั้งจาก nathan PPA เพราะอันนั้นเป็นรุ่นที่สูงกว่า ตอนนี้ขอให้แน่ใจว่าจะไม่ได้ติดตั้งแพ็คเกจอื่น ๆ :

$ apt-cache policy mysql-server
mysql-server:
  Installed: 5.5.24-0ubuntu0.12.04.1
  Candidate: 5.5.24-0ubuntu0.12.04.1
  Version table:
     5.5.27-1~ppa1~precise 0
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

ในกรณีนี้แพคเกจจาก nathan PPA มีลำดับความสำคัญ 400 ซึ่งต่ำกว่า Ubuntu หนึ่งดังนั้นแม้ว่าจะเป็นรุ่นที่สูงกว่าก็จะไม่ได้รับการอัพเกรด เราสามารถตรวจสอบกับ:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  ddclient
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 77.7 kB of archives.
After this operation, 11.3 kB of additional disk space will be used.
Do you want to continue [Y/n]?

เนื่องจากแพ็คเกจที่ฉันต้องการเท่านั้นที่จะได้รับการอัพเกรดฉันมีความสุขที่จะพูดว่าใช่

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