Belirli bir havuz kümesinde bulunanlara yüklenen güncellemeleri nasıl sınırlandırırım? Bu mümkün mü?
Belirli bir havuz kümesinde bulunanlara yüklenen güncellemeleri nasıl sınırlandırırım? Bu mümkün mü?
Yanıtlar:
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 .
apt-cache policy package-name
release n=repokimseyi önbelleğe almayacak
-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
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)
-t xenialtek bir paket için çalışır. ama bütün bağımlılıkları hala daha yüksek paketlerden alınacak
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 .
Devam etmeden önce, çivileme hakkında önemli bir şey bilmemiz gerekir. Bu içerir
Arasında Fields'in Releaseiçin dosya ve It adlı haritalama apt-cache policyçıkışı
Apt tercih dosyalarının formatı
ReleaseÖnceliği belirlemek için dosya alanlarını kullanma
ReleaseDosya ve apt-cache policyçıktı alanlarıGönderen Debian Wiki makalesinde
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 .
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.
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.
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
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 .
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).