Debian Gnu/Linux Üzerinde Apt-Pinning İşlemleri

Yazan : Serdar Aytekin - serdar~aytekin.web.tr
Versiyon : 1.0.0
Son Güncellenme Tarihi : 06-09-2004

Giriş :

Belgede yazılanların uygulanıp uygulanmaması tamamen uygulayan kişinin sorumluluğundadır. Belgede bahsedilenlerin uygulanması sonucu ortaya çıkabilecek hertürlü zarardan yazar sorumlu tutulamaz. Belge GNU Özgür Belgeleme Lisansının http://www.gnu.org/copyleft/fdl.html adresinde yer alan -son sürümdeki- lisans içeriğine bağlı kalmak koşulu ile aynen yada kısmen dağıtılabilir, yayınlanabilir.

Bu belgenin son sürümüne;

http://www.serdaraytekin.com/docs/os/debian/debian-apt-pinning.html adresinden ulaşabilirsiniz.

Apt-Pinning Nedir ?

Apt-pinning sisteminizde aynı anda stable/testing/unstable/experimental depolarına ulaşarak, karışık (melez) sistem kurulabilmesine, sistemin herhangibir sürümden var olan başka bir üst sürümüne upgrade edilebilmesini (stable'dan testing'e veya testing'den unstable'a geçiş gibi) veya tam tersi olarak sistemin downgrade edilebilmesinden tutunda herhangi bir yazılımın belli bir versiyonunun sürekli olarak sistemde kalabilmesine olanak veren gelişmiş bir özellikdir.

Şimdi bu ifadeleri örneklerle pekiştirelim;

Apt-pinning için kullanacağımız konfigürasyon dosyaları, /etc/apt/sources.list, /etc/apt/preferences ve /etc/apt/apt.conf dur.

Karışık (Melez) Sistem Kurulumu :

/etc/apt/preferences dosyasına aşağıdaki tanımları ekliyoruz. (Bu dosya daha önce sistemimizde oluşturulmamışsa oluşturuyoruz)

  • pico /etc/apt/preferences

Package: *
Pin: release o=Debian,a=stable
Pin-Priority: 1000

Package: *
Pin: release o=Debian,a=testing
Pin-Priority: 750

Package: *
Pin: release o=Debian,a=unstable
Pin-Priority: 500

Package: *
Pin: release o=Debian,a=experimental
Pin-Priority: 250

  • chmod 644 /etc/apt/preferences

Şimdi /etc/apt/apt.conf dosyamızı düzenleyelim;

  • pico /etc/apt/apt.conf

APT::Default-Release "stable";
APT::Cache-Limit "134217728";

  • chmod 644 /etc/apt/apt.conf

APT::Cache-Limit "134217728";

Satırı 128 Mb'lık cache bellek limitini işaret eder. Şayet sistemimizde yeterli cache bellek değerini ayarlamaz isek, /etc/apt/sources.list dosyamızda stable/testing/unstable/experimental depolarını belirtip, apt-get update ile index oluşturmaya çalıştığımızda;

Reading Package Lists... Error!
E: Dynamic MMap ran out of room

şeklinde bir hata mesajı alabiliriz. Bu durumda cache limiti yetersiz demektir. Bunu artırmak gerekir. Biz yukarıda bunun için 128 Mb'lık bir tanım belirttik bu yeterli olacaktır. Yinede yukarıdaki hata mesajını alıyorsanız, bu değeri artırabilirsiniz. Bu ilişkin hesaplama;

128 Mb = 128 * 1024 * 1024 = 134217728 şeklindedir.

APT::Default-Release "stable";

Satırı ise, ön tanımlı sürümün stable olarak belirlendiğini ifade eder. Siz testing'i ön tanımlı kullanacaksanız bu kısımda stable yerine testing yazabilirsiniz. Bu durumda dikkat etmeniz gereken bir diğer nokta ise, /etc/apt/preferences dosyasındaki priority (öncelik) değerleri olacaktır. /etc/apt/preferecences dosyasında yine testing ile stable sürümün priority (öncelik) değerlerini yer değiştirebilirsiniz. Biz yukarıdaki örnekte, 1. önceliği stable depoya , 2. önceliği testing deposuna, 3. önceliği unstable deposuna ve 4. önceliği experimental deposuna verdik. Yeri gelmişken priortiy değerleri ile ilgili biraz daha detaya girebiliriz sanırım.

Priority (Öncelik) Değerleri :

Priority değeri belirtilmediği zaman ön tanımlı değeri olan 989 olarak ayarlanır.

  • priority < 0 : Siz paketi özellikle bu depodan kur demedikçe, bu depodan "apt-get upgrade" veya "apt-get dist-upgrade" ile bir paket kurulmaz (Örn: Pin-Priority: -1)
  • 100 > priority > 0 : Yine aynı şekilde, paketi özellikle bu depodan kur demedikçe, bu depodan "apt-get upgrade" veya "apt-get dist-upgrade" ile paket kurulmaz.
  • 1001 > priority > 99 : Bir depodan "apt-get upgrade" veya "apt-get dist-upgrade" ile paket kurulabilmesi için öncelik değerinin ez az 100 olarak belirtilmesi gerekir.
  • priority > 1000 : Bu kısımdaki değerler özellikle downgrade veya upgrade işlemleri için kullanılır. Öncelik değeri 1001 olarak ayarlanmış bir depo, paketlerin o depodan kurulmaya zorlanmasına işaret eder.

NOT : Bu kısımlarla ilgili olarak, halen muallakta kalan kısımlar varsa, dokümanın sonundaki senoryo örneklerinde belirtilen tanımlamara göz atabilirsiniz. Ayrıca apt-pinning dökümanında ilgili kısma (http://www.debian.org/doc/manuals/apt-howto/ch-apt-get.tr.html#s-pin) bakmanızı öneririm.

Şimdi /etc/apt/sources.list dosyamıza kullanacağımız depolarımızın adreslerini belirtelim.

  • pico /etc/apt/sources.list

#Stable Depolar

deb http://ftp.tr.debian.org/debian stable main contrib non-free
deb http://ftp.tr.debian.org/debian-non-US stable/non-US main contrib non-free

deb-src http://ftp.tr.debian.org/debian stable main contrib non-free
deb-src http://ftp.tr.debian.org/debian-non-US stable/non-US main contrib non-free

deb http://ftp.tr.debian.org/debian-security stable/updates main contrib non-free


#Testing Depoları

deb http://ftp.tr.debian.org/debian testing main contrib non-free
deb http://ftp.tr.debian.org/debian-non-US testing/non-US main contrib non-free

deb-src http://ftp.tr.debian.org/debian testing main contrib non-free
deb-src http://ftp.tr.debian.org/debian-non-US testing/non-US main contrib non-free

deb http://ftp.tr.debian.org/debian-security testing/updates main contrib non-free

#Unstable Depoları

deb http://ftp.tr.debian.org/debian unstable main contrib non-free
deb http://ftp.tr.debian.org/debian-non-US unstable/non-US main contrib non-free

deb-src http://ftp.tr.debian.org/debian unstable main contrib non-free
deb-src http://ftp.tr.debian.org/debian-non-US unstable/non-US main contrib non-free

#Experimental Depoları

deb http://ftp.tr.debian.org/debian experimental main contrib non-free
deb-src http://ftp.tr.debian.org/debian/ experimental main contrib non-free

  • apt-get update

ile index'imizi oluşturalım. Evet artık öncelik değerlerimizi, cache miktarımızı ve depo adreslerimizi belirtip index güncellemimizde yaptığımıza göre karışık sistem kurmaya başlayabiliriz :)

Paketlerin Yüklenmesi :

Yukarıda ön tanımlı olarak stable bir sistemi işaret ettiğimiz için, apt-get install <paket_ismi> ile herhangi bir paket kurmak istediğimiz zaman paket stable depodan indirip, kurulacaktır. Şayet biz başka bir depodan paket kurmak istiyorsak,

  • apt-get install <paket_ismi>/depo_ismi (Örn : apt-get install hdparm/unstable)

veya

  • apt-get -t install <depo_ismi> <paket_ismi> (Örn : apt-get -t install unstable hdparm)

ifadelerinden herhangi biri ile paketimizi kurmayı deneyebiliriz.

Peki Paket Her Zaman Sorunsuzca Kurulur mu?

Kurmak istediğimiz paket sistemimize hemen kurulmayabilir, aşağıdaki örnekteki gibi, kurmak istediğimizde bağımlılık sorunlarından dolayı kurulmayıp, işlemi kesebilir.

Stable bir sistemde aşağıdaki şekilde hdparm dosyasını testing deposundan alıp kurmasını isteyelim,

NOT: /etc/apt/preferecences dosyamızın içeriği yukarıdaki şekilde ayarlı. Yani stable:1000, testing:750, unstable:500, experimental:250 öncelik değerlerine haiz)

  • apt-get install hdparm/testing


Reading Package Lists... Done
Building Dependency Tree... Done
Selected version 5.6-0.1 (Debian:testing) for hdparm
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.

Since you only requested a single operation it is extremely likely that
the package is simply not installable and a bug report against
that package should be filed.
The following information may help to resolve the situation:

Sorry, but the following packages have unmet dependencies:
hdparm: Depends: libc6 (>= 2.3.2.ds1-4) but 2.2.5-11.5 is to be installed
E: Sorry, broken packages

Şeklinde libc6 bağımlılığı hatası aldık. Bu durumda sistemimizdeki libc6'yıda testing sürümden güncelleyip yeniden hdparm'ı kurmamız icap eder.

Fakat kritik öneme haiz makinelerde, libc6 gibi özellikle sistemin kararlılığını etkileyebilecek öneme sahip paketlerin kurulmasında ısrar edilmemesinin gerektiğini düşünüyorum :)

Hangi Depoda Hangi Versiyon Var :

Diyelimki /etc/apt/sources.list dosyamızda stable/unstable/testing için gerekli depo kaynaklarını belirtip apt-get update ile index güncellememizi yaptık. /etc/apt/apt.conf ve /etc/apt/preferences dosyalarınıda yukarıdaki tanımlara uygun şekilde karışık kurulum için ayarladık. Şimdi A paketini kuracaz ama hangi depoda hangi versiyon var, ona bakmak istiyoruz.

Örnek olarak ssh paketinin hangi depoda hangi versiyonu var diye bakalım,

  • apt-show-versions -a | grep ssh


ssh 1:3.4p1-1.woody.3 install ok installed
ssh 1:3.4p1-1.woody.3 stable
ssh 1:3.8.1p1-8 testing
ssh 1:3.8.1p1-8 unstable
ssh/stable uptodate 1:3.4p1-1.woody.3

Görüldüğü gibi bizim sistemimizde şu an stable depodaki 3.4p1-1.woody.3 sürümü kurulu durumda. Testing deposunda 3.8.1p1-8 sürümü, unstable depolarında ise yine 3.8.1p1-8 sürümünün mevcut olduğunu görüyoruz.

Experimental depoya ait bir bilgi neden yok diye akıllara gelebilir, experimental depo belli amaçlara yönelik kullanımı olan bir depo, bu deponun durumu biraz farklı, o açıdan buradaki listeden bu depoda ssh varmı, varsa sürümü nedir şeklinde bir bilgiye ulaşamıyoruz.

Belirli Bir Versiyona Sahip Paketlerin Kurulu Kalmasını Sağlama :

Bu konu ile ilgili olarak http://www.debian.org/doc/manuals/apt-howto/ch-apt-get.tr.html#s-pin adresindeki Türkçeye çevirisi Sayın Murat Demirten tarafından yapılan, APT NASIL dökümanındaki ilgili bölümü (3.10) okumanızı öneririm. Konu çok net ve güzel bir şekilde ifade edilmiş zaten. Aynı ifadeleri tekrar yenilemenin israf olacağını düşünüyorum :)

Çeşitli Senaryolar :

1. Testing sistemimizi Stable'a Downgrade Edelim ( Kullanım riski size ait : ) ).

  • /etc/apt/sources.list dosyamızda sadece stable sürüm için gerekli depo adreslerini bırakalım.
  • /etc/apt/preferences dosyamızda sadece aşağıdaki tanımın olması yeterlidir.

    Package: *
    Pin: release o=Debian,a=stable
    Pin-Priority: 1001

  • /etc/apt/apt.conf içerisinde sadece aşağıdaki tanım yer alsın.

    DPkg
    {
    Options {"--force-overwrite";"--force-downgrade";}
    }

  • apt-get update && apt-get -s dist-upgrade

komutu ile önce nelerin downgrad edileceğini hangi işlemlerin yapılacağını görebilirsiniz. Herşey normal, downgrade yapabilirim artık diyorsanız;

  • apt-get dist-upgrade

ile işlemi başlatabilirsiniz.

2. Unstable olan sistemimizde Experimental Deposundan Paket Kuralım :

  • /etc/apt/sources.list dosyamızda experimental deposuna ait kaynakların yer aldığına emin olalım
  • /etc/apt/apt.conf' da cache değerini yeterli miktarda ayarlayalım.
  • /etc/apt/preferences dosyamız aşağıdaki gibi olabilir.

    Package: *
    Pin: release o=Debian,a=unstable
    Pin-Priority: 1000

    Package: *
    Pin: release o=Debian,a=experimental
    Pin-Priority: 500

  • apt-get update

Şimdi kurmak istediğimiz paketi kurabiliriz.

NOT : Experimental depoda her paket yer almayabilir. Daha kısıtlı sayıda paketi ihtiva eder (Paket listesi için : http://ftp.tr.debian.org/debian/dists/experimental/main/binary-i386/Packages). Experimental depoyu, bazı kritik paketlerin veya bağımlılık sorunları oluşabilecek paketlerin, unstable depoya girmeden önce denendiği bir alan. Bu depodan paket kurmak ne kadar doğrudur, paketler ne kadar güvenlidir buda sizin takdirinize kalmış bir durum tabiki. Günceller versiyonlarla çeşitli denemeler yapmak istiyor, test etmek istiyorsanız tercih edebilirsiniz.

  • apt-get install ssh/experimental (ssh paketini experimental depodan kurabilmek için)

Referanslar :