Trước hết, nếu bạn đã nâng cấp các gói từ PPA do nhầm lẫn, hãy xem câu trả lời sau: https://askubfox.com/a/142808/103117 cụ thể là phần sử dụng ppa-purge. Vì tôi đã nâng cấp các gói và apt-get sẽ không hạ cấp bất kể mức độ ưu tiên nào, nên dễ dàng thanh lọc tất cả các gói đã nâng cấp trước, sau đó sửa các ưu tiên, sau đó thêm lại PPA và chỉ nâng cấp các gói bạn muốn.
Để biết giải thích đầy đủ về hệ thống ưu tiên / ghim, xem man apt_preferences
.
Nếu một gói có sẵn từ nhiều nguồn, mỗi nguồn sẽ được chỉ định mức độ ưu tiên và bạn có thể thấy điều đó với apt-cache policy <package name>
. Ví dụ: tôi sử dụng một PPA có tên nathan-renniewaldock / ppa / ubfox và tôi không muốn cài đặt mysql-server-5.5 ("gói Y" của tôi từ đó. Vì vậy, tôi có thể kiểm tra tình hình hiện tại của mình với:
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
Vì vậy, vì mọi thứ đều được ưu tiên 500, theo trang man, người có số phiên bản cao nhất được chọn.
Ví dụ: nếu bạn chỉ muốn cài đặt ddclient ("gói X") chứ không phải bất kỳ gói nào khác, bạn muốn giảm mức ưu tiên cho tất cả các gói trong PPA ngoại trừ ddclient. Tạo một tập tin gọi là /etc/apt/preferences.d/nathan-preferences
. Lưu ý rằng tất cả các tệp trong thư mục đó đều được đọc và có một số quy tắc về tên tệp (nó phải chỉ chứa các ký tự chữ và số, dấu gạch ngang, dấu gạch ngang và không có phần mở rộng hoặc kết thúc bằng .pref).
Đầu tiên chúng ta cần biết cách xác định PPA của mình. Các apt-cache policy
lệnh trên dispays thông tin riêng của mình về tất cả các nguồn. Tôi biết PPA của tôi có "nathan" trong tên nên tôi làm:
$ 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
Phần thú vị là "o = LP-PPA-nathan-renniewaldock", mà chúng tôi sử dụng trong tệp /etc/apt/preferences.d/nathan-prefs như thế này:
Package: *
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 400
Package: ddclient
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 500
Điều này đặt mọi thứ trong PPA thành mức ưu tiên 400, sau đó biến ddclient trở lại mức mặc định 500. Bây giờ, tôi có thể kiểm tra xem nó đã hoạt động chưa:
$ 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
Vì vậy, ddclient có mức ưu tiên là 500, giống như gói Ubuntu gốc, nhưng nó sẽ được cài đặt từ nathan PPA vì đây là phiên bản cao hơn. Bây giờ hãy đảm bảo các gói khác sẽ không được cài đặt:
$ 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
Trong trường hợp này, gói từ nathan PPA có mức ưu tiên 400 thấp hơn so với Ubuntu, do đó, mặc dù là phiên bản cao hơn nhưng nó sẽ không được nâng cấp. Chúng tôi có thể kiểm tra với:
$ 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]?
Vì chỉ có gói tôi muốn được nâng cấp, tôi rất vui khi được đồng ý.