Bir PPA'dan yalnızca belirli paket güncellemelerine izin vermek mümkün mü


19

Diyelim ki istediğim X paketi olan bir PPA ekledim, ancak güncellemeleri kullanmak veya almak istemediğim Y paketi de var. Aynı PPA'dan belirli bir paket için nasıl güncelleme alabilirim, ancak diğer paketler için aynı PPA'dan nasıl güncelleme reddedebilirim.

Adım adım örnek iyi olurdu, çünkü bu bana istediğim belirli bir pakete sahip birkaç PPA'da oldu, ancak henüz güncellemek istemediğim bir sürü başkalarını da ekledi.

Yanıtlar:


16

"İğneleme" denilen şeyi kullanırsınız

PPA'dan paket foo yüklediğinizi varsayarsak, neredeyse kesinlikle ppa'dan herhangi bir bağımlılık yüklemeniz gerekir.

Ancak başka programlar varsa, sabitleme ile hangi havuzun kullanılacağını belirtebilirsiniz.

Ubuntu wiki sabitlemesine bakın

Bu sayfaya bir ppa sabitleme örneği var

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

Wiki sayfasından:

Apt-get yükseltmesini mümkün olduğunca ağrısız hale getirmek için PPA'da daha düşük bir Pin-Priority ayarlayın, bu istenmeyen paket sürümlerinin yüklenmesini durduracaktır. Bir kez ayarlandığında, ubuntu-mozilla-günlük PPA'dan gelen paketler, daha yüksek bir sürümleri olsa bile, diğer havuzlardaki paketlerle her zaman yarışmada kaybedilir.

Dosyayı oluşturun /etc/apt/preferences.d/ubuntu-mozilla-daily-pin-400

Dosyaya aşağıdakileri ekleyin:

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

Pin-Priority'nin güncellendiğini kontrol etmek için önce ve sonra aşağıdaki komutları kullanın.

apt-cache policy

apt-cache policy firefox-3.5

7

Her şeyden önce, yanlışlıkla bir PPA'dan paketleri yükselttiyseniz, şu cevaba bakın: /ubuntu//a/142808/103117 özellikle ppa-purge kullanma bölümüne. Zaten paketleri yükseltmiş olduğumdan ve apt-get, önceliklerden bağımsız olarak eski sürümüne geçmeyeceğinden, önce tüm yükseltilmiş paketleri temizlemek, ardından öncelikleri düzeltmek, daha sonra PPA'yı yeniden eklemek ve yalnızca istediğiniz paketleri yükseltmek en kolay yoldur.

Öncelikli / iğneleme sisteminin tam açıklaması için bkz man apt_preferences.

Bir paket birden fazla kaynaktan kullanılabiliyorsa, her birine bir öncelik atanır ve bunu ile görebilirsiniz apt-cache policy <package name>. Örneğin, nathan-renniewaldock / ppa / ubuntu adlı bir PPA kullanıyorum ve oradan mysql-server-5.5 (benim "paket Y") kurmak istemiyorum. Mevcut durumumu şu şekilde kontrol edebilirim:

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

Yani her şey öncelik 500 olduğundan, man sayfasına göre en yüksek sürüm numarasına sahip olan seçilir.

Örneğin, yalnızca ddclient ("paket X") yüklemek, ancak başka bir paket yüklemek istemiyorsanız, ddclient dışındaki PPA'daki tüm paketlerin önceliğini azaltmak istiyorsunuz. Adlı bir dosya oluşturun /etc/apt/preferences.d/nathan-preferences. Bu dizindeki tüm dosyaların okunduğunu ve dosya adıyla ilgili bazı kurallar olduğunu unutmayın (yalnızca alfasayısal karakterler, hiperler, tire içermeli ve .pref ile bitmemelidir).

Öncelikle PPA'mızı nasıl tanımlayacağımızı bilmemiz gerekir. apt-cache policyTüm kaynakları hakkında kendi dispays bilgilere komut. PPA'mın adında "nathan" olduğunu biliyorum, bu yüzden yapıyorum:

$ 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

İlginç olan, /etc/apt/preferences.d/nathan-prefs dosyasında şu şekilde kullandığımız "o = LP-PPA-nathan-renniewaldock":

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

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

Bu, PPA'daki her şeyi öncelikli 400'e ayarlar, sonra ddclient'i varsayılan 500'e geri döndürür. Şimdi, çalışıp çalışmadığını kontrol edebilirim:

$ 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

Yani ddclient, orijinal Ubuntu paketiyle aynı olan 500 önceliğine sahiptir, ancak daha yüksek bir sürüm olduğu için nathan PPA'dan yüklenecektir. Şimdi diğer paketlerin yüklenmeyeceğinden emin olalım:

$ 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

Bu durumda nathan PPA'nın paketi Ubuntu'dan daha düşük olan önceliğe 400 sahiptir, bu nedenle daha yüksek bir versiyona sahip olmasına rağmen yükseltilmeyecektir. Şunları kontrol edebiliriz:

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

Sadece istediğim paket yükseltilecek olduğundan, evet demekten mutluyum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.