Làm thế nào để tôi chọn gói cherry từ PPA?


45

Có cách nào để chọn gói cherry từ kho ppa bạn thêm không? Đó là, để loại trừ một số cập nhật trong khi bao gồm những người khác?

Ví dụ, tôi chỉ muốn gói trình duyệt crom từ kho lưu trữ này chứ không phải các gói khác. Vì vậy, tôi không muốn sudo apt-get upgradecác gói khác của ppa (ngoài trình duyệt crom) cài đặt trên các gói hiện có của tôi, chỉ gói đó.

Tôi nhận ra đây là giấy phép tự bắn vào chân mình nếu tôi đọc sai các phụ thuộc và loại trừ những thứ cần thiết cho những thứ mà tôi đưa vào, nhưng tôi biết một thực tế trong trường hợp này là các gói khác không phụ thuộc vào gói đó.

Đây có phải là ở tất cả có thể? Có lẽ có một số danh sách trắng / danh sách đen hoặc một cái gì đó?


Tôi đã chuyển qua synap vì ba lý do: Ubuntu bỏ nó làm trình cập nhật phần mềm ủng hộ Trung tâm phần mềm Ubuntu, tôi không thấy cách nào để Synaptic dừng nâng cấp từ ppa qua các tệp đã cài đặt (đó là vấn đề của tôi) và tôi thích một giải pháp dòng lệnh cho một GUI. Đã kết thúc việc tìm kiếm một cái gì đó hoạt động (xem câu trả lời của tôi dưới đây).
yuvilio

2
Trung tâm phần mềm được sử dụng để cài đặt và xóa phần mềm, Trình quản lý cập nhật được sử dụng để cập nhật, bạn có thể đã sử dụng ghim trong Synaptic để các gói khác sẽ không nâng cấp, đối với người dùng mới không muốn gây rối với Terminal GUI sẽ được ưu tiên, tất nhiên câu trả lời của bạn là khá nhiều.
Uri Herrera

Có một vài điều bạn đơn giản không thể thực hiện thông qua Trung tâm phần mềm (dễ dàng với Synaptic). Và không phải tất cả mọi người (đặc biệt là người mới) đều cảm thấy thoải mái với dòng lệnh.
Mrokii

@Mrokii Tôi đồng ý rằng phương pháp của tôi không dành cho người mới bắt đầu. Câu trả lời Synaptic mà bạn đã viết và Uri Herrera gợi ý, mà tôi cho là có tác dụng, là tốt hơn trong vấn đề đó. Tôi sẽ cho những người khác thử nó.
yuvilio

Câu trả lời:


61

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]?

5
khá phức tạp, imho.
Mrokii

5
Tôi không đồng ý, điều này khá dễ dàng cho những gì ai đó muốn. Và thật tuyệt khi có tất cả các hướng dẫn về cách xác định tên Pin của ppa.
Nicholi

Câu trả lời cụ thể này dành cho những người muốn đảm bảo apt sẽ luôn thích các gói của một kho lưu trữ cụ thể. Nếu bạn muốn một giải pháp tắt, hãy thử câu trả lời này
Braiam

8

Bạn cũng có thể chọn bản phát hành bạn muốn cài đặt từ ?originbộ chọn:

Khớp các phiên bản gói có nguồn gốc khớp với nguồn gốc biểu thức chính quy. Chẳng hạn, nguồn!? (Xuất xứ) deb sẽ tìm thấy bất kỳ gói không chính thức nào trên hệ thống của bạn (các gói không phải từ kho lưu trữ Debian).

Vì vậy, trong trường hợp cụ thể của bạn, bạn có thể sử dụng:

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

Hoặc bạn có thể chỉ định phiên bản bằng cách sử dụng <packagename>=<version>:

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

5

Bạn thực sự có thể "chọn anh đào" một số gói nhất định thông qua Synaptic và nó rất dễ dàng. Nó hoạt động như thế này:

  • Nếu bạn muốn làm điều đó chỉ với một số PPA nhất định, hãy chọn "Xuất xứ" (góc dưới bên trái) trong cửa sổ Synaptic và sau đó chọn PPA bạn muốn thay đổi

  • chọn tất cả các gói bạn không muốn nâng cấp tự động nữa.

  • chọn menu "Gói / Phiên bản khóa". Tất cả các gói bạn chọn sẽ không được nâng cấp tự động nữa cho đến khi bạn mở khóa lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.