Bu dokümanda debian için depo oluşturma ve depoyu güncelleme konusu anlatılmıştır.
Gerekli paketlerin kurulması
Aşağıdaki komut ile index almamız için gereken paketi kurabilirsiniz:
Depoyu ağda paylaşmak için web server gerekmektedir.
Nginx veya Apache kurmalısınız.
Nginx kurmak için:
Apache kurmak için:
Depo ile ilgili temel kavramlar
Deponun 2 temel dizini bulunmaktadır: pool ve dists
Deponun bilgilerini Release dosyası içinde bulunur.
Deponun temel dizin yapısı şu şekilde özetlenebilir:
Depoya pool ve dists dizinleri içinde olmamak şartı ile istediğiniz dosyaları yerleştirebilirsiniz. (örneğin: index.html)
Dists
dists içerisinde depo indexi depo imzası ve hangi ortama uyumlu çalıştığına dair bilgiler bulnur.
dists dizini içerisinde dağıtım adına göre dizinler bulunur. ve bu dizinler içerisinde de kısımlara dair dizinler ve Release dosyası bulunur.
Örnek depo dists dizin yapısı (imzalanmamış depo):
Pool
pool içerisinde de pakekler uygun hiyerarşiye göre dizilmiştir.
pool dizininde bulunan paketler genel bir kural olmaması ile birlikte şu kurallara uygun şekilde dizilmeleri tavsiye edilmektedir:
Alfabetik kural:
Paket isminin ilk harfi ile başlayar dizin içerisinde paket adını taşıyan bir dizin olmalı ve paket bu dizinde yer almalı.
test adındaki bir paket için pool/t/test/test_1.0_amd64.deb
Paket adının başında lib varsa ve kütüphane dosyası ise ilk harf yerine lib kısmından sonraki ilk harf ile beraber alınmalı.
libncurses paketi için pool/libn/libncurses/libncurses_6.2-1_amd64.deb
Bölümsel kural:
Bölümler belirlenmeli.
system, util, network, optional, appications gibi.
Alt bölümler oluşturulabilir.
bash paketi için pool/system/shell/bash/bash_5.0_amd64.deb
Küçük depolar için tüm paketleri tek bir dizine yığabilirsiniz.
Alfabetik kurala göre dizilmiş örnek pool dizini:
Paketler paket_version_mimari.deb şeklinde isimlendirilmelidir.
amd64 mimaride ve 1.0 sürümünde olan test adındaki bir paket için test_1.0_amd64.deb
Release
Release dosyasında depoya dair bilgiler yer almaktadır. Bu bilgilerden sonra da dists içerisindeki indexlerin hash değerleri yer alır. Örneğin:
İndex alınması
pool dizini içerisine yukarıda anlatılan hiyerarşilere uygun şekilde paketlerimizi yerleştirmeliyiz. pool içerisinde main, contrib, non-free adında dizinler olmalıdır. Bu isimler ile dists dizini içerisindeki isimler aynı olmalıdır.
pool içerisindeki paket yerleştirme işlemi bittikten sonra şu komutu kullanarak index almalıyız:
İlk komut ile pool/main içerisindeki paketlerin indexlerini dists içerisindeki main bölümüne yerleştiriyoruz. Bu işlem contrib ve non-free için benzer şekilde yapılmalıdır. ayrıca eğer i386 veya arm64 veya armhf için de paketler varsa onlar için de tekrarlamanız gerekmektedir.
İkinci ve üçüncü komut ise aldığımız indexi gzip formatta sıkıştırmaktadır. Depolarda daha az ağ trafiği yaparak index indirmek için gzip, bz2 veya xz formatında sıkıtşıtma yapılabilir.
Release dosyasının yazılması
Release dosyasını elle yazmak hem uğraştırıcıdır. Başlık kısmındaki değerler değişmeyeceği için onları ayrı bir dosyaya yazıp md5sum değerlerini de komut kullanarak üstüne ekleyebilirsiniz. sed komutu ile de biçimlendirseniz güzel olur :D
Başlık dosyamızdaki tarihi sonradan güncelleyebilmek için tarih yerine XdateX yazdık. Başlık dosyası içeriği şu şekilde olamalı:
Release dosyamızı oluşturmadan önce yardımcı fonksionumuzu tanımlamamız gerekmektedir. Bashrc içerisine aşağıdaki fonksionu tanımlayalım. (veya betik yazıyorsanız betik içine) Bu fonksion Release dosyasındaki hash değerlerinin formatına uygun çıktı üzetebilmemizi sağlar.
}
Başlık ile md5sum birleştirmek için aşağıdakine benzer bir komut dizisi kullanabilirsiniz:
Deponun imzalanması
Depoyu eğer imzalamazsak depoyu güncellerken ve depodan paket kurarken uyarı verirler. Eğer gpg anahtarınız mevcutsa şu komutu kullanabilirsiniz:
Eğer gpg anahtarınız yoksa oluşturmak için:
Oluşturduğumuz gpg anahtarını listelemek için:
Bu listede gpg anahtarını id değerleri bulunur. Bu değeri kullanarak gpg anahtarımızı dışarı aktarabiliriz. Aktarılan bu anahtar depoyu kullanmak isteyen kullanıcılar tarafından anahtar deposuna eklenmelidir.
Elimizdeki gpg anahtarını dışarı aktarmak için:
Deponun ağda paylaşılması
Apache veya nginx tavsiye etmekle birlikte busybox httpd ve python3 http.server kullanılabilir.
Eğer sunucunuz yoksa bir hostingde yada github.io gibi static site üzerinde de barındırabilirsiniz. (Eğer kullanım şartlarına ihlal durum oluşturmuyorsa.)
Eğer http(s) yerine ftp kullanmak istiyorsanız vsftpd veya busybox ftpd kullanabilirsiniz.
Deponun kullanıcılar tarafından sisteme eklenmesi
Depomuz tamamlandı ve internet ağının bir parçası haline geldikten sonra kullanıcılar bu depoyu kullanmak istediklerinde şu adımları uygulamalılar.