Tìm thấy một cách để làm điều đó.
Bí quyết là sử dụng hai mệnh đề ghim. Gói đầu tiên không cho phép TẤT CẢ các gói từ PPA và gói thứ hai để chọn gói bạn muốn.
Vì vậy, với ví dụ trên, trước tiên tôi thêm ppa như bình thường:
$ sudo add-apt-repository ppa:webapps/preview
...
$ sudo apt-get update
...
Bây giờ nếu tôi chạy chính sách apt-cache, nó sẽ cho tôi thấy rằng có sẵn phiên bản trình duyệt crom mới hơn và nó sẽ cài đặt bản nâng cấp vì nó có cùng mức độ ưu tiên (500) như trình duyệt crom hiện tại của tôi.
$ 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)
$
Điều đó thật tuyệt vời đối với gói đó nhưng tôi không muốn những người khác trong ppa này (cũng có ưu tiên 500) để cài đặt. Ngay bây giờ nếu tôi cố gắng nâng cấp, tôi sẽ nhận được nhiều hơn là các gói crom tôi muốn từ kho lưu trữ đó:
$ 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]?
Vì vậy, những gì tôi có thể làm là nói với apt rằng tôi muốn tất cả các gói trong ppa, webapps-preview trong trường hợp này, có mức độ ưu tiên thấp hơn ngoại trừ những gói có "chromium" trong tên của chúng. Cơ chế này là ghim một gói
Tôi tạo một tệp trong /etc/apt/preferences.d/ với hai mệnh đề. Cái đầu tiên nói rằng hãy ưu tiên tất cả các gói trong webapps-preview ppa với mức ưu tiên thấp hơn so với gói thông thường (để chúng không được ưu tiên ngay cả khi chúng có số phiên bản cao hơn. ppa với "chromium" trong tên của chúng có cùng mức độ ưu tiên như các gói khác để nó sẽ được cài đặt (bởi nó có số phiên bản cao hơn).
$ 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
Để xác định chuỗi chính xác cho tùy chọn "Pin: phát hành", chúng ta có thể sử dụng lại chính sách 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
...
Đối với các phiên bản apt <0.8,14 gói được ghim phải được chỉ định rõ ràng vì các ký tự đại diện không hoạt động:
$ 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
Và bây giờ, khi tôi cố gắng nâng cấp, tôi chỉ nhận được các gói tôi muốn từ ppa đó chứ không phải các gói khác. Tất cả anh đào độc đáo chọn cho tôi:
$ 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]?