Depo Nasıl Kurulur

Depolar daha basit ve karmaşık olanlar olarak ikiye ayrılırlar. Karmaşık olanlarda kullanıcı sadece deponun adresini, kullandığı debian sürümü ve istediği bileşenleri belirtmesi (apt eğer varsa, uygun mimari için paketi otomatik olarak getirecektir) yeterli olur. Daha basit olanlarda ise (apt hangi paketin uygun olacağını bilemeyeceği için) kullanıcının tam yolu belirtmesi zorunludur. Karmaşık olanların kurulumu biraz fazla adımdan oluşsa da kullanımları daha kolaydır ve karmaşık ve/veya birden fazla platformda çalışılacaksa mutlaka bu tip depolar kullanılmalıdır. Basit olanlar kolay kurulurlar ama sadece küçük veya tek mimarili depolarda kullanılmalıdır.

Tam olarak doğru olmasa da bu depoları Otomatik Depolar ve Sıradan Depolar olarak isimlendireceğim.

Otomatik Depolar

Standart Debian mimarilerini ve bileşenlerini içeren bir otomatik deponun dizin yapısı aşağıdaki gibidir:

Örnek 11.15. Standart Debian Deposu

(deponuzun kök dizini) 
| 
+-dists
  | 
  |-stable
  | |-main
  | | |-binary-alpha 
  | | |-binary-arm
  | | |-binary-...
  | | +-source 
  | |-contrib
  | | |-binary-alpha 
  | | |-binary-arm
  | | |-binary-...
  | | +-source 
  | +-non-free
  |   |-binary-alpha
  |   |-binary-arm
  |   |-binary-...
  |   +-source
  |
  |-testing 
  | |-main
  | | |-binary-alpha 
  | | |-binary-arm
  | | |-binary-...
  | | +-source 
  | |-contrib
  | | |-binary-alpha 
  | | |-binary-arm
  | | |-binary-...
  | | +-source 
  | +-non-free
  |   |-binary-alpha
  |   |-binary-arm
  |   |-binary-...
  |   +-source
  |
  +-unstable 
    |-main
    | |-binary-alpha 
    | |-binary-arm
    | |-binary-...
    | +-source 
    |-contrib
    | |-binary-alpha 
    | |-binary-arm
    | |-binary-...
    | +-source 
    +-non-free
      |-binary-alpha
      |-binary-arm
      |-binary-...
      +-source

Özgür (free) paketler main; özgür olmayanlar (non-free) non-free ve özgür olmayan paketlere bağlı olan özgür paketler de contrib dizinlerinde bulunurlar. Debian'ın 11 farklı mimariyi desteklemesine rağmen sadelik olması için bu mimarilerin çoğu yukarıdaki örnekte atlanmıştır.

Her binary-* dizini bir Packages.gz dosyası ve isteğe bağlı olarak Release dosyasını; her source dizini bir Sources.gz dosyası ve isteğe bağlı olarak Release dosyasını içerir. packages dosyasının index dosyalarıyla aynı dizinde olması gerekmediğine dikkat edin, çünkü index dosyaları bütün paketlerin yollarını içerir. Aslında herhangi-bir-dizinde bulunabilirler. Bu sayede havuz oluşturulması mümkün olmaktadır.

İstediğiniz kadar dağıtım sürümü ve bileşen yaratabilir ve onları istediğiniz gibi isimlendirebilirsiniz. Benim örnekte kullandıklarım Debian tarafından kullanılan isimlerdir. İsterseniz sürüm isimleri olarak (stable, testing ve unstable yerine) current ve beta kullanabilirsiniz. Veya bileşenleri ( main, contrib ve non-free yerine) foo, bar, baz ve qux olarak isimlendirebilirsiniz.

Bileşenleri isimlendirmede özgür olsanız da sürüm isimleri olarak Debian kullanıcılarının görmeyi bekledikleri standart Debian sürümlerinin adlarını kullanmanız iyi bir fikir olacaktır.

Sıradan Depolar

Sıradan depolar bir kök dizini ve istediğiniz kadar alt dizinden oluşurlar. Kullanıcıların deponun kök dizininin yolunu ve index dosyalarını içeren dizinle kök dizini arasındaki yolu belirtmeleri gerektiğinden istediğiniz her şeyi yapabilirsiniz (isterseniz her şeyi deponun kök dizinine bile koyabilirsiniz, bu durumda göreli yol kısaca ←/→ olacaktır).

Örnek 11.16. İki alt dizini olan Sıradan bir Depo

(deponuzun kök dizini)
|
|-binary
+-source

Index Dosyalarını Oluşturmak

Packages dosyası dpkg-scanpackages komutu ile, Sources dosyası ise dpkg-scansources komuyu ile oluşturulur.

Her iki komutta çıktılarını standart çıktıya verdiklerinden sıkıştırılmış dosyalar oluşturabilmek için şöyle kullanabilirsiniz: dpkg-scanpackages arguments | gzip -9c > Packages.gz.

İki araç da aynı şekilde çalışır; ikisi de ikişer değişken alır (aslında ikiden fazla da alabilirler ama bunun üzerine gitmeyeceğim, isterseniz man dosyalarına bakabilirsiniz). İlk değişken paketlerin bulunduğu dizin, ikincisi ise geçersiz kılan dosyalar (override file). Sıradan depolar için geçersiz kılan dosyalara ihtiyacımız olmamasına rağmen bir parametre olarak gerektiğinden değerini /dev/null olarak alacağız.

dpkg-scanpackages komutu .deb paketlerini; dpkg-scansources komutu ise .dsc dosyalarını tarar. Bu nedenle .orig.gz, .diff.gz ve .dsc dosyalarını birarada bulundurmak gereklidir. .changes dosyalarına ihtiyaç yoktur.

Eğer Örnek 11.16'deki gibi sıradan bir deponuz varsa iki index dosyasını da aşağıdaki gibi oluşturabilirsiniz:

$ cd my-repository
$ dpkg-scanpackages binary /dev/null | gzip -9c > binary/Packages.gz
$ dpkg-scansources source /dev/null | gzip -9c > source/Sources.gz

Örnek 11.15'deki gibi karmaşık bir deponuz varsa bu süreçleri otomatik hale getirmek için bazı betikler yazmanız gerekir.

Sözdizimini biraz daha basitleştirmek için pathprefix değişkenini kullanabilirsiniz. Bunun kullanımını okuyucuya pratik yapması için bırakıyorum (man sayfasında nasıl kullanılacağı belgelendirilmiştir).

Release Dosyalarını Oluşturmak

Deponuzun kullanıcılarının iğneleme yapabilmelerine izin vermek isterseniz index dosyası içeren her dizine bir de Release dosyası koymanız gerekir. (İğneleme hakkında ayrıntılı bilgiyi APT NASIL belgesinde bulabilirsiniz).

Release dosyaları aşağıdakine benzer basit ve kısa metin dosyalarıdır:

Archive: archive
Component: component
Origin: YourCompany
Label: YourCompany Debian repository
Architecture: architecture
Archive
Paketlerin ait olduğu (veya hazırlanmış oldukları) Debian sürümü; stable, testing veya unstable gibi.

Component
Dizindeki paketlerin ait olduğu bileşen; main, non-free veya contrib gibi.

Origin
Paketleri hazırlayanın ismi.

Label
Deponuz veya paketleriniz için uygun bir etiket. Hayal gücünüzü kullanın.

Architecture
Dizinde bulunan paketlerin hazırlandıkları mimari; i386, sparc veya source gibi.

İğneleme için kullanıldıklarından Archive ve Architecture değerlerinin doğru olması çok önemlidir. Diğerleri daha az öneme sahiptirler.

Havuz Yaratılması

Otomatik depoları kullanarak paketlerin farklı dizinlerde dağıtılması hızlıca yönetilmesi zor bir hal alır. Bütün mimariler için geçerli (belgelendirme paketleri gibi) çokça paket olması durumunda disk alanının ve bant genişliğinin de boşa harcanmasına neden olur.

Bu durumlar için olası çözümlerden biri havuz kullanmaktır. Bir havuz deponuzun kök dizininin altında bulunan ve tüm paketleri (tüm mimariler, sürümler ve bileşenler için ikilik paketleri ve tüm kaynak paketleri) içeren bir dizindir. Geçersiz kılan dosyaların akıllıca kombinasyonları ve betiklerin yardımıyla bir çok problemin önüne geçilebilir. Havuzlanmış depoların güzel bir örneği Debian deposunun kendisidir.

Havuzlar sadece büyük depolar için faydalıdır; ben bugüne kadar hiçhavuz oluşturmadığım gibi yakın gelecekte de bir havuza ihtiyacım olacağını düşünmediğimden burada nasıl yapılacağını anlatmıyorum. Eğer böyle bir bölümün olması gerekitiğine inanıyorsanız yazıp bana göndermekten çekinmeyin.

Araçlar

Debian arşivlerini yaratmayı otomatik hale getiren ve kolaylaştıran bir çok araç vardır. Aşağıda bunların en kayda değer olanlarını listeledim.

apt-ftparchive komutu Debian paket dosyalarının bir koleksiyonunu resmi Debian arşivindeki hiyerarşiye uygun hale getirmek için kullanılır. apt-utils paketinin bir parçasıdır.

apt-move komutu Debian paket dosyalarının bir koleksiyonunu resmi Debian arşivindeki hiyerarşiye uygun hale getirmek için kullanılır.