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, apt
politikalar 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 repo
bir 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_preferences
veya Ubuntu Topluluğu Wiki'sini kontrol edin .
apt-cache policy package-name
release n=repo
kimseyi önbelleğe almayacak
-t
Seçenekli bir sürüm belirleyebilirsiniz . Örnek olarak, /etc/apt/sources.list
Iceweasel'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 iceweasel
resmi 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-get
Kılavuzda gördüğünüz gibi, -t
depo adını değil yayın adını belirtin. Ubuntu'da depo adı yoktur (RHEL, Fedora, CentOS, ... gibi RedHat tabanlı linux'un aksine)
-t xenial
tek 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_preference
man 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 Release
dosyasındaki alanları kullanırsınız . Mesela archive
, label
, release
, version
vb 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 Release
iç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
Release
Dosya ve apt-cache policy
çıktı alanlarıGönderen Debian Wiki makalesinde
apt-cache policy
Bunlardan çı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 Release
dosyalardan 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 Ubuntu
değ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-security
vb Ö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
, universe
Ubuntu. Çıktısında o kadar gösterilen c=main
veya c=restricted
vs. Çoğu PPA'lar kullanmak main
böylece çok ya iğneleme yardım etmez, bu alan için.
Mimari , işletim sistemi mimarisiyle ilgilidir. Çıktıdaki gibi b=i386
veya 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=xenial
veya 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, origin
havuzun İnternet kaynağını belirtir. Ayrıca sabitlemede kullanılabilir. Ancak Release
dosyalar Origin
alanı 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_preference
man sayfasına bakınız .
Pin veya apt tercih dosyaları /etc/apt/preferences.d
klasö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 xenial
daha yüksek xenial-updates
, biz kullanacağız release a=xenial
.
Sürüm 5.0'ı tespit etmek istiyorsak, version 5.0
burada kullanacağız . Glob pattene izin verilir.
Ya da paketleri kökenlerden sabitlemek istiyorsak http://archive.ubuntu.com
kullanı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 xenial
arşivleri daha yüksek öncelik verilir xenial-updates
ve xenial-security
.
Sabitledikten sonra, apt-cache policy nautilus
gösterinin çalıştırılması , xenial
arş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 xenial
varsayılan olarak aynı arşiv adını kullanıyor . Bu nedenle, öncelik atamak a=xenial
bu 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. xenial
Resmi Ubuntu repo arşivindeki her iki paket ve PPA aynı önceliğe sahiptir 1001
, çünkü ikisi de Archive
Sü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 policy
komutta bulunan bilgileri kullanarak hedeflememiz gerekir . Az önce a=xenial
bir 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 Origin
PPA 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-glx
iş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.04
baş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_preference
manuel sayfayı kontrol edin .
Açık bir seçim, /etc/apt/sources.list
tü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-get
man 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).