Sadece belirli bir havuzdaki güncellemeleri nasıl kurarım?


39

Belirli bir havuz kümesinde bulunanlara yüklenen güncellemeleri nasıl sınırlandırırım? Bu mümkün mü?


Çalışma zamanı sırasında repo belirleyebilmeyi mi istiyorsunuz yoksa daha statik bir şey mi olmalı? Aşağıdaki iki cevap , ikinci seçeneği kabul eder.
tshepang

İdeal olarak çalışma zamanı olur. Statik seçenek olsa yeterli.
Ton van den Heuvel

2
Sen gidiyorsun ve istediğin asıl yardım farklı.
sundar

Yanıtlar:


29

Sabitlemeyi Kullan

Sabitleme, paketleri daha yeni bir sürümden alırken Ubuntu'nun (veya başka bir debian sisteminin) kararlı bir sürümünde kalmanıza izin veren bir işlemdir. - help.ubuntu.com

Belirli depolardaki otomatik güncellemeleri, aptpolitikalar yoluyla tamamen kaldırmadan devre dışı bırakabilirsiniz :

Otomatik güncelleştirmeleri depodan devre dışı bırakmak için aşağıdaki içeriğe sahip repobir dosya ekleyin
/etc/apt/preferences.d/repo:

Package: *
Pin: release n=repo
Pin-Priority: 50

Bu, bu havuzdaki tüm paketleri halihazırda kurulu olan paketlerden (100 olan) daha düşük bir öncelik sağlayacak.

Daha fazla bilgi için man apt_preferencesveya Ubuntu Topluluğu Wiki'sini kontrol edin .


3
Sadece apt_preferences cevabının son cevabı utanç verici ...
Robert

hangi sürümün hangi repodan olduğunu nasıl öğrenebilirim?
Max N

2
@MaxN genellikle bu bilgiyi çalıştırarak bulabilirsinizapt-cache policy package-name
Anwar

Bu, güncelleme sırasında değerlendirilmemesi için bir depoyu zorlamaz. çünkü release n=repokimseyi önbelleğe almayacak
Anwar

35

-tSeçenekli bir sürüm belirleyebilirsiniz . Örnek olarak, /etc/apt/sources.listIceweasel'in son sürümünü yüklemek için aşağıdaki depoyu ekledim :

deb http://mozilla.debian.net/ squeeze-backports iceweasel-release

Bildiğiniz gibi iceweaselresmi Debian deposunda aynı paket var . Bu özel sürümden Iceweasel'i kurmak istersem çalıştırıyorum:

apt-get install -t squeeze-backports iceweasel

apt-get manual sayfasından:

-t, --target-release, --default-release
           This option controls the default input to the policy engine, it creates a default pin at priority 990 using the specified
           release string. This overrides the general settings in /etc/apt/preferences. Specifically pinned packages are not affected by
           the value of this option. In short, this option lets you have simple control over which distribution packages will be retrieved
           from. Some common examples might be -t '2.1*', -t unstable or -t sid. Configuration Item: APT::Default-Release; see also the
           apt_preferences(5) manual page.

Bunun daha iyi bir çözüm olduğunu düşünüyorum.

GÜNCELLEME : @SuB'nin yorumunda belirtildiği gibi, " sürümün depo adı değil sürümünü belirtir. Ubuntu'da depo adı yoktur (RHEL, Fedora, CentOS, ... gibi RedHat tabanlı linux'un aksine)".-t


4
apt-getKılavuzda gördüğünüz gibi, -tdepo adını değil yayın adını belirtin. Ubuntu'da depo adı yoktur (RHEL, Fedora, CentOS, ... gibi RedHat tabanlı linux'un aksine)
SuB

1
@SuB Evet, haklısın! Depo ismini yayınla karıştırdım!
karikatürist,

-t xenialtek bir paket için çalışır. ama bütün bağımlılıkları hala daha yüksek paketlerden alınacak
Anwar

11

Kısa cevap

Kurmak istemediğiniz havuzları 100'den daha az öncelikli bir şekilde tutturmanız gerekir. Bu, ( apt_preferenceman sayfasından) anlamına gelir.

100 <= P <500
, başka bir dağıtıma ait bir sürüm yoksa veya yüklü sürüm daha yeni ise, bir sürümün yüklenmesine neden olur.

Sabitlemek için bir havuz seçmek için depo Releasedosyasındaki alanları kullanırsınız . Mesela archive, label, release, versionvb bu alanların değerlerini belirleyerek, tam bir depo seçebilir ve buna tercih öncelik. Daha fazla bilgi için apt_preference sayfasını kontrol edin .


Uzun cevap

Devam etmeden önce, çivileme hakkında önemli bir şey bilmemiz gerekir. Bu içerir

  1. Arasında Fields'in Releaseiçin dosya ve It adlı haritalama apt-cache policyçıkışı

  2. Apt tercih dosyalarının formatı

  3. ReleaseÖnceliği belirlemek için dosya alanlarını kullanma

1. ReleaseDosya ve apt-cache policyçıktı alanları

Gönderen Debian Wiki makalesinde

  • Açıklama
  • Etiket
  • Menşei
  • versiyon
  • süit
  • Kod adı
  • Bileşenler
  • Mimarileri

apt-cache policyBunlardan çıktı göreceksiniz

 500 http://mirrors.ircam.fr/pub/ubuntu/archive xenial/main amd64 Packages
 release v=16.04,o=Ubuntu,a=xenial,n=xenial,l=Ubuntu,c=main,b=amd64

Bu satırlardaki değerler Releasedosyalardan gelir .

  • Açıklama , bir havuz için açıklamayı ayarlar. Bu apt-cache policyçıktıda gösterilmez

  • Etiket , havuzun etiketidir. Birçok havuzda boş etiketler bulunur. l=<label>Çıkışta gösterilir .

  • Köken , havuzun kökeni hakkında bilgi verir. Resmi Ubuntu deposunun Ubuntudeğeri vardır. o=Çıktıdaki gibi gösterilir

  • Sürüm , dağıtımın sürümüdür. Xenial için 16.04. v=Çıktıdaki gibi gösterilir

  • Süit , Arşivle aynıdır . Debian wiki'den bu , Debian'ın dağıtımının adı, bu dizindeki paketler, yani kararlı, test veya kararsız olan gruba aittir (veya bunun için tasarlanmıştır). . Ubuntu için, bunlar release-updates, release-securityvb Örneğin, xenial-updates, xenial-security. Sanki çıktıda gösterilen a=xenial, a=xenial-security. PPA'lar bunun için yalnızca sürüm adını kullanır, bu yüzden Pinning'de pek yardımcı olmaz.

  • Bileşen lisanslama şeyini anlatır. Bu var main, multiverse, restricted, universeUbuntu. Çıktısında o kadar gösterilen c=mainveya c=restrictedvs. Çoğu PPA'lar kullanmak mainböylece çok ya iğneleme yardım etmez, bu alan için.

  • Mimari , işletim sistemi mimarisiyle ilgilidir. Çıktıdaki gibi b=i386veya gösterilenb=amd64

  • Kod adı, dağıtımın yayın adıdır. 16.04 için öyle xenial. 14.04 için öyle trusty. apt-cache policyÇıktıda n=xenialveya ile gösterilir n=trusty. Genellikle tek bir dağıtım için tüm depolarda aynıdır. Bu yüzden çok sıkışmada yardımcı olmuyor.

apt-cache policyÇıktıdaki diğer satır, originhavuzun İnternet kaynağını belirtir. Ayrıca sabitlemede kullanılabilir. Ancak Releasedosyalar Originalanı ile karıştırılmamalıdır . Bunlar farklı.

Bir havuzu sabitlemek için bu değerleri kullanacağız.

Peki depoyu sınırlamak için iğneleme 1'i nasıl kullanırız ?

Sabitlemeyi kontrol etmenin birkaç yolu vardır ve Ubuntu için yalnızca küçük bir altküme etkilidir. Ayrıntılı bir açıklama, cevabın kapsamı dışındadır. Lütfen bunun için apt_preferenceman sayfasına bakınız .

2. Pin dosyası formatı

Pin veya apt tercih dosyaları /etc/apt/preferences.dklasörde bulunur. Her bir iğneleme üç satır içerir.

  • İlk satır ile başlar Package:ve virgülle ayrılmış paket adları izler. Düzenli ifadelere ve globlara izin verilir

  • İkinci satır ile başlar Pin:ve bir paket kümesini hedeflemek için kullanılır.

    Biz paketleri pin istiyorsanız xenialdaha yüksek xenial-updates, biz kullanacağız release a=xenial.

    Sürüm 5.0'ı tespit etmek istiyorsak, version 5.0burada kullanacağız . Glob pattene izin verilir.

    Ya da paketleri kökenlerden sabitlemek istiyorsak http://archive.ubuntu.comkullanırız origin "archive.ubuntu.com". Not, http://orada protokol yazmıyoruz .

  • Üçüncü satır ile başlar Pin-Priority:ve değeri bir sayıdır. Yukarıda hedeflenen öğelerin önceliğini gösterir.

3. ReleaseÖncelik belirlemek için dosya alanlarını kullanma

İşte bir örnek

Package: *
Pin: release a=xenial
Pin-Priority: 1001

Bu örnekte, gelen paketleri xenialarşivleri daha yüksek öncelik verilir xenial-updatesve xenial-security.

Sabitledikten sonra, apt-cache policy nautilusgösterinin çalıştırılması , xenialarşivden daha yüksek sürüme arşivden daha yüksek bir sürüme gerçekten öncelik verildiğini gösterir xenial-updates. Çizgiye dikkat et Candidate:.

nautilus:
  Installed: 1:3.18.5-0ubuntu1~xenial1
  Candidate: 1:3.18.4.is.3.14.3-0ubuntu4
  Version table:
 *** 1:3.18.5-0ubuntu1~xenial1 100
        100 /var/lib/dpkg/status
     1:3.18.4.is.3.14.3-0ubuntu5 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     1:3.18.4.is.3.14.3-0ubuntu4 1001
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

Ancak, PPA tarafından sağlanan paketlere de öncelik vermek istiyorsak, bu işe yaramaz. Çünkü PPA'lar xenialvarsayılan olarak aynı arşiv adını kullanıyor . Bu nedenle, öncelik atamak a=xenialbu paketler için de geçerli olacaktır. Örneğin (etkin PPA'dan sonra),

13:31 $ apt-cache policy nautilus
nautilus:
  Installed: 1:3.18.5-0ubuntu1~xenial1
  Candidate: 1:3.18.5-0ubuntu1~xenial1
  Version table:
 *** 1:3.18.5-0ubuntu1~xenial1 1001
        500 http://ppa.launchpad.net/budgie-remix/ppa/ubuntu xenial/main amd64 Packages
        500 http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu xenial/main amd64 Packages
        100 /var/lib/dpkg/status
     1:3.18.4.is.3.14.3-0ubuntu5 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     1:3.18.4.is.3.14.3-0ubuntu4 1001
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

Şimdi aday versiyonu bir PPA'dan. xenialResmi Ubuntu repo arşivindeki her iki paket ve PPA aynı önceliğe sahiptir 1001, çünkü ikisi de ArchiveSürüm dosyasında aynı değeri kullanır . Başarılı bir şekilde sabitlemek için, Pin dosyasında daha fazla alanı birleştirmemiz gerekir.


Bazı örnekler

Bir PPA deposunu sabitleyin

Bir depodan paketleri sabitlemek için, apt-cache policykomutta bulunan bilgileri kullanarak hedeflememiz gerekir . Az önce a=xenialbir havuzu işaretlemeye yardımcı olmayacağını gördük . Bir depoyu tam olarak hedeflemek için tercih dosyasında virgül kullanarak birden çok alan kullanmamız gerekir.

Örneğin, tüm paketleri http://ppa.launchpad.net/oibaf/graphics-drivers/ppa'dan korumak için kullanabiliriz.

Package: *
Pin: release n=xenial,o=LP-PPA-oibaf-graphics-drivers
Pin-Priority: 10

Burada kod adı değerini ve ayrıca OriginPPA değerini kullanıyoruz . (Gerçekte kod adı değeri aslında gerekli olmasa da). Bazen depo bu değeri kaçırabilir. Bu durumlarda, başka bazı teknikler kullanılmalıdır. Çıktısı apt-cache policy libgl1-mesa-glxişe yaradığını söylüyor. Bu PPA'nın tüm paketlerinin önceliğini düşürdü.

libgl1-mesa-glx:
  Installed: 12.1~git1608200730.16ef7a~gd~x
  Candidate: 12.1~git1608200730.16ef7a~gd~x
  Version table:
 *** 12.1~git1608200730.16ef7a~gd~x 100
        -10 http://ppa.launchpad.net/oibaf/graphics-drivers/ubuntu xenial/main amd64 Packages
        100 /var/lib/dpkg/status
     11.2.0-1ubuntu2.1 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     11.2.0-1ubuntu2 500
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

Aday olduğu gerçeğini görmezden gelin. Bu oldu çünkü sistemime zaten kurulu . Sağdaki önceliği kontrol et

Yayın bilgisi eksik olduğunda bir havuzu pin

Eğer yayınlanma bilgisi eksik olan bir havuzu tespit etmek istiyorsak, bunun gibi http://download.opensuse.org/repositories/home:/sarimkhan/xUbuntu_14.04başka bir yöntem kullanmalıyız. Bu kökeni başka hiçbir depo kullanmadığından origin, bu depoyu sabitlemek için güvenle kullanabiliriz .

Package: *
Pin: origin download.opensuse.org
Pin-Priority: 10

Not 1: Bu kökeni, Internet'teki kaynaktır, Sürüm dosyasındaki Satıcı'yı belirten değil.

Not 2: Pin-Priority Sayının özel bir anlamı vardır. Detaylar için apt_preferencemanuel sayfayı kontrol edin .


7

Bir gui tabanlı alternatif, yazılım merkezini açmak ve düzenle> yazılım kaynaklarını seçmek ... olacaktır.

Ubuntu yazılım sekmesi seçili Yazılım Kaynakları

Seçilen diğer yazılım sekmesiyle birlikte Yazılım Kaynakları

Yapmanız gereken tek şey, güncellemelerini istemediğiniz depoların işaretini kaldırmak.

Bu yardımcı olur umarım


5

Açık bir seçim, /etc/apt/sources.listtüm diğer depoları değiştirmek ve yorumlamak ve sonra çalıştırmaktır.

apt-get update && apt-get upgrade && apt-get autoclean

Ve sonra yorumlarınızı kaldırın sources.list. Belki de en iyi yol değil, ama en azından apt-getman sayfaları bunu yapmanın bir yolunu belirtmiyor.

İlgili bir notta, örneğin Ubuntu dağıtım yükseltme işlemi, yükseltme sırasındaki tüm 3. taraf depolarını devre dışı bırakır (ve geçici olarak hariç tutmak için yalnızca bazı seçenekleri çalıştırmayın).


1

Diğer bir GUI seçeneği sadece Synaptic paket yöneticisinde orijini seçmektir.

  1. Kurmak istediğiniz paket adını arayın
  2. Origin butonuna tıklayın
  3. Yüklemek istediğiniz depoyu seçin
  4. Paketleri seçin
  5. Uygulamak
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.