Milis Linux Talimatname Bilgi

Talimat dosyası nedir ?
Milis Linux’ta paket üretmek oldukça kolaylaştırılmıştır. Milis Linux’ta paketler talimat dosyaları sayesinde üretilir. Talimat dosyası bir paketin nasıl derleneceğini,paketleneceği, gerekli olan bağımlılıkları, paketçinin adı, paketin adı açıklaması ve versiyon numarası gibi bilgileri barındırır. Mps paket yöneticisi de bu talimat dosyasını kullanarak paketi oluşturur.

Talimat dosyası nasıl oluşturulur?
/root dizini altında “talimatname” adında bir dizin vardır. (Derleme ortamında ortamın /root dizini altına bakılmalıdır.) Bu dizin içerisinde ise genel, onsistem, temel adında dizinler vardır. Genel olarak sonradan oluşturacağımız talimat dosyaları, genel dizininin içindeki paket adı yazılı olan dizinlerin içinde yer almaktadır. Bu talimat dosyalarını örnek alarak kendi istediğiniz bir paketin talimat dosyasını oluşturabilirsiniz. Sıfırdan bir talimat oluşturmadan önce mevcut dağıtımlarda nasıl oluşturulmuş olmasına bakılması sağlıklı bir yoldur. Milis Linux talimat yapısına benzer dağıtımların üretimleri incelenerek talimat oluşturalabilinir. Ancak burada dikkat edilmesi gereken hususlar vardır. Örneğin diğer dağıtımlardaki bağımlılıklar Milis Linux deposunda farklı bir isimde oluşturulmuş olabilir veya bağımlılıklar depoda olmayabilir. Bu durumda olmayan bağımlılıkların da talimat oluşturularak paketlenmesi gerekir. Talimat dosyası oluşturulurken hangi paketi üreteceksek ilgili paketin web sitesinde yada indirdiğimiz kaynak kodunda genelde gerekli olan bağımlılıklar, paketin nasıl derleneceği vs. bilgiler çoğu zaman verilmektedir. Bunlardan yararlanarak da sıfırdan talimat dosyası oluşturabiliriz.

Milis Linux Derleme Ortamı Kurulumu

Milis Linux'ta paketleme yapmak ve paket deposuna katkıda bulunmak için öncelikle paketleri derleyebileceğiniz derleme ortamını oluşturmanız gerekmektedir. Derleme ortamını paketlerin yalıtılmış bir ortamda derlendiği chroot ortamı olarak düşünebiliriz. Daha önceki ortam kurulumlarımız elle adımlara dayanmakta iken artık tek komutla ortamı indirip kurabiliriz.

$ mps guncelle 
$ sudo mpsdo

Bu adımdan sonraki işlemler ortam içinde olacaktır.

Paketleme ortamından çıkıldığında tüm dosyalar sıfırlandığından dolayı ortama girdiğimizde /opt dizini altında işlemlerimizi gerçekleştiririz. Bu dizinde üretilen paketler ana sistem de /mnt/paketler altında kalıcı olmaktadır.

# cd /opt
Ortama her girişimizde ortam sıfırlanacağı için ortamı güncellemek zorundayız.
# mps guncelle
Ortamda paket derlemek için konak bilgisayarın /mnt/lfs/root/talimatname/genel altındaki dizinleri kullanırız. Gerekli değişiklikleri yaptıktan sonra tekil derleme için
# mps -d paket_ismi
Sıralı derle-kur-paketle işlemleri için
# mps odkp paket_ismi
komutlarını veriririz. Ortamdan çıkmak için
# exit

Talimat Dosyası Standartları ve Talimat Hazırlama

Talimat hazırlamak Milis içerisinde kullanılacak uygulamayı veya dosyaları paketlemek için gerekli komutları yazmak / hazırlamak demektir. Talimatta işlem sırası şu şekildedir:
  1. Kaynak kodları içeren dosyaların $SRC (/tmp/work/src/) klasörüne indirilmesi ve açılması
  2. Derleme yapılacak ise kaynak kodun derlenmesi
  3. İşlemleri tamamlanan ve/veya derlenen uygulamanın $PKG klasörüne hiyerarşisi bozulmadan alınması
  4. Son olarak da $PKG (/tmp/work/pkg/) klasörünün sıkıştırılarak paketin oluşturulması (xxx.mps.lz)
Talimatlar https://notabug.org/milislinux/milis/src/master/talimatname/ adresinde 3 ana kategoride tutulmaktadır. Kullanıcılar tarafından hazırlanan talimatlar "genel" kategorisinde yer alır. Mevcut tüm uygulamaların nasıl paketlendiğini yani talimat dosyalarını bu adresten inceleyebilirsiniz.

Örnek talimat dosyası:
# Tanım: Ses dosyalarını düzenlemek için gelişmiş bir araç.
# URL: http://web.audacityteam.org/
# Paketçi: milisarge
# Gerekler: libvorbis libmad libid3tag wxgtk28 lame hicolor-icon-theme ffmpeg shared-mime-info desktop-file-utils redland jack soundtouch cmake zip python
# Grup: medya

isim=audacity
surum=2.1.1
devir=1
kaynak=("https://github.com/audacity/audacity/archive/Audacity-${surum}.tar.gz"
        "ffmpeg.patch")

derle() {
  cd "${SRC}/${isim}-Audacity-${surum}"
  patch -p1 -i "${SRC}/ffmpeg.patch"
  WX_CONFIG=/usr/bin/wx-config-2.8 \
  ./configure --prefix=/usr --enable-unicode --with-wx-config=$WX_CONFIG
  make
 
  make DESTDIR="${PKG}" install
}
Linux dağıtımlarda popüler bir uygulama olan ses düzenleme uygulaması Audacity'nin paketlenmesi işlemlerini adım adım inceleyelim.

Talimat dosyaları birer bash script dosyalarıdır fakat belirli standartları bulunmaktadır. Talimat dosyasının # ile başlayan ve bash scriptte yorum kabul edilen kısımları talimatın bilgi kısmıdır. Bu bilgilerden Gerekler ve Grup kısımları ilgili paketin ihtiyaç duyduğu yani bağımlısı olduğu diğer paketlerin adını ve paketin kategorisini içermelidir. Örneğimiz de gereklerin büyük kısmı ses düzenleme özelliğinden dolayı müzik formatlarının dönüştürülmesi ile ilgili fakat paketin derlenmesi için gerekli diğer paketler de yine gerekler de yer almıştır.

Talimat içerisinde $isim, $surum, $devir ve $kaynak değişkenleri de ilgili paketin bilgilerini içermektedir. $kaynak kısmında görüleceği gibi paketin kaynak kodlarının indirileceği adres ve alt satırda da (bkz: bash dizi değişken) ffmpeg için ihtiyaç duyulan bir yama (patch) dosyası görülüyor.

Yukarıdaki talimat paketlenmek istendiğinde sırasıyla önce $kaynak adresinden kaynak kodları indirilecek ve $SRC ile belirtilen klasöre açılacak (extract), ffmpeg.patch dosyası da $SRC kopyalanacak ve derle() fonksiyonu çalıştırılacaktır. Fonksiyon çalıştırıldığında içerisinde cd, patch vb. bash komutları çalıştırılacaktır. Burada dikkat edilmesi gereken 2 sabit değişken $SRC ve $PKG'dir. $SRC yukarıda bahsedildiği gibi sıkıştırılmış dosya ve ek yan dosyaların taşındığı klasörü, $PKG ise paketlenecek (sıkıştırılıp mps.lz haline gelecek) klasörü işaret eden değişkendir.

xx.mps.lz dosyaları birer sıkıştırılmış dosyasıdır. Derleme sonrası tüm dosyalar kurulduğu sistemde kopyalanacağı klasör hiyerarşisine göre düzenlenir ve sıkıştırılır.

Talimat hazırlarken unutulmaması gerken en önemli konu paketin hazırlanması için kullanılan $PKG dizininin tamamen boş olduğudur. Örneğin siz paketinizdeki yani $SRC/usr/share/icons/logo.png dosyasını $PKG/usr/share/icons/ altına kopyalamak isterseniz önce mkdir -p $PKG/usr/share/icons/ klasör yapısını oluşturmak zorundasınız.

Hata durumunda veya yeni paket için mps odkp {paket} uyguladığımız da $SRC ve $PKG klasörleri boşaltılmaktadır.

Talimat'ın Detaylı İncelenmesi

Gerekler:
Talimat dosyaları bash script gibi yazılmalı fakat bahsedildiği gibi standartlar işleri kolaylaştırmak ve hızlandırmak için kullanılmaktadır. Örneğin Gerekler: kısmına gireceğiniz uygulamaların ya daha önce paketlenmiş olması ya da talimat dosyasının hazırlanmış olması gerekir. Eğer gerekleri yani bağımlılıkları fazla bir uygulamayı (örn: kde) paketlemeyi düşünüyorsanız en bağımlılıksız paketinden başlayarak yukarı doğru yani bağımlılığı fazla kısma doğru ilerlemelisiniz. Örneği daha da detaylandırmak için Audacity ele alalım. 15 adet gerekliliği mevcut, dolayısı ile Audacity'nin paketlenebilmesi için bu 15 uygulamanın paketlenmiş olması gerekir. Gereklerinde python gibi çok temel uygulamalar da bulunmakta. Python uygulamasının nasıl paketlendiğini incelemek için https://www.notabug.org/milislinux/milis/src/master/talimatname/genel/p/python/talimat adresini inceleyebilirsiniz.

kaynak:
Kaynak değişkeni bash scripting de dizi değişkendir. Belirtilen dosyanın $SRC klasörüne indirilmesini ve açılmasını (extract) sağlar. Eğer indirilecek dosyanın farklı bir isimle kaydedilmesini isterseniz https://dosya.kaynagi.adresi/abc-uygulamasi.tar.gz::abc.tar.gz şeklinde belirtebilirsiniz. Eğer birden fazla dosya var ise yukarıdaki örnekteki gibi alt satıra tanımlamanız gerekmektedir. Belirtilen dosyalar lokalde ise direkt dosya adı, indirilecek ise adresini yazabilirsiniz. Kaynak kod git sürüm takip sistemi ile edinilecek ise myrddin talimat örneğindeki git_indir fonksiyonunu ve kullanımını incelemelisiniz.

Kaynak ile ilgili bir diğer önemli konu ise belirtilen dosya /sources klasörüne indirilir. Eğer dosya orada duruyor ise bu durumda sunucudaki dosyada değişiklik olsa bile indirilmez. Bu yüzden dosya adının farklı olması gerektiğine (::dosya-$surum.tar.gz) dikkat edilmelidir veya paketleme sırasında /sources klasöründeki dosya silinmelidir.

Grup:
Mevcut kullanılabilir grupları mps gruplar komutu ile listeleyebilirsiniz. Yazdığınız talimatın hangi grupta yer alması gerektiğine emin olamadığınız durumlar da mevcut yayınlanmış paketlerin talimat dosyalarını inceleyerek karar verebilirsiniz.

Paketleme İşlemi öncesi veya sonrasında yapılacak işlemler:
Talimat dosyasının bulunduğu klasöre aşağıdaki gibi dosyalar oluşturularak paketin kurulmasından önce ve sonra, paket silinmeden önce ve sonra yapılması gereken işlemleri tanımlayabilirsiniz:
  1. paket-adi.kur-kos: Paket kurulduktan sonra çalıştırılacak olan bash işlemleri
  2. paket-adi.kos-kur: Paket kurulmadan önce çalıştırılacak olan bash işlemleri
  3. paket-adi.sil-kos: Paket silindikten sonra çalıştırılacak olan bash işlemleri
  4. paket-adi.kos-sil: Paket silmeden önce çalıştırılacak olan bash işlemleri
NOT:Arch Linux (-a) ve KaOSx Linux (-k) paket talimatlarının Milis Linux talimatına hızlıca çevrilebilmesi için:
``` talimat.py -a #Arch talimatları için talimat.py -k #KaOSx talimatları için ``` şeklinde kullanabilirsiniz. Paket adları ilgili depolardan öncelikle kontrol edilmelidir.

NOT2: Talimat dosyasının bulunduğu klasör de talimatı test etmek veya basit paketlerin hızlıca oluşturulmasını sağlamak isteyebilirsiniz. Bunun için mpsd -d komutu ile talimat dosyasını ve bağımlılıklarını kontrol ederek paketi oluşturur. mpsd tek başına talimatın olduğu klasörde çalıştırılır ise bağımlılıklarını kontrol etmeden paketi derleyip oluşturur.

Talimat ve Güvenlik

Talimat dosyalarında kaynak kısımda belirtilen dosyanın değiştirilmediğinden emin olmak için paket-adi.hash dosyasına dosyanın hash değerini (sha256 / sha512 vb.) yanında dosya adı formatıyla (shasum dosya-adi.tar.gz çıktısında olduğu gibi) ve her satıra bir dosya gelecek şekilde belirtilmelidir. Böylelikle kaynak kodu indirilen dosya öncelikle hash kontrolünden geçirilecek ve daha sonra paketleme işlemine tabi tutulacaktır. wireguard-kernel paketindeki hash örneği incelenebilir.



Son güncelleme: 25 Ekim 2018 / 15:57