Milis'te Paket Üretimi
===================================

.. toctree::
   :maxdepth: 2
   :caption: Contents:

Milis Linux'ta paketler talimat dizininde belirtilen verilere göre derlenir, yüklenir ve paketlenir.
Bu belge sıfırdan bir paketin nasıl oluşturulduğunu göstermek için hazırlanmıştır.

Talimat'ın hazırlanması
-------------------------
Bir paketin talimatının hazırlanması için yapılacak şey gerekli bilgilerin doğru bir şekilde
doldurulmasıdır. Talimat dosyasının yapısı için lütfen `Talimat Sistemi <http://mls.akdeniz.edu.tr/belgeler/docs/tr/talimat.html>`_ 
belgesini inceleyin.
Bu belgede talimatını hazırlayacağımız paket 'htop' adı verilen bir işlem monitorü.

Paket bilgileri
^^^^^^^^^^^^^^^^
Paket için gerekli bilgiler toplandıktan sonra, talimatın ilk formu aşağıdaki gibi
olacaktır:

::

    [paket]
    tanim 	= Interaktif işlem izleyici
    paketci     = milispaketci
    grup 	= sistem
    url 	= https://hisham.hm/htop


Gerekler
^^^^^^^^^^^^^^^^
Sırada paketin derlenmesi ve çalışması için gerekliliklerin bulunması var. Bunlar belirli kaynaklardan
araştırılarak veya manuel olarak bulunabilir.
Paketlenecek olan 'htop'ın derlenmesi için 'python'a, çalışması için ise 'ncurses'e ihtiyacı
var.

Burada bilinmesi gereken nokta, temel sistemde bulunan paketler talimatlara gereklilik olarak
eklenmez. Bizim durumumuzda 'ncurses' temel sistemde bulunan bir program olduğundan bu gerekliliği
eklemeyceğiz.

::

    [gerek]
    derleme = python
    calisma = 

Kaynaklar
^^^^^^^^^^^^^^^^
Paketin derlenmesi veya paketlenmesi için kaynak kodlara ve yamalara ihtiyacı var. Bunun yanında
eğer büyüyen bir derleme veya paketleme betiğiniz varsa bunu derle.sh veya pakur.sh adı altında 
talimat dizininde tutmak istiyebilirsiniz. Bunları talimat dosyanızda kullanırken kaynak altında
**mutlaka** belirtmelisiniz.

::

    [kaynak]
    gz 		= $url/releases/$surum

Dosya hashleri
^^^^^^^^^^^^^^^^
İndirilen kaynak dosyalarının bozulma ihtimaline karşın talimatınızda dosyaların hashlerini bulundurmak her zaman için 
iyi bir fikirdir. Bunlar mps tarafından otomatik olarak algılanır ve kontrol edilir. Hashlerinizin hangi 
dosyaya ait oluduğunu belirtmek için dosyanın kaynak altındaki sırasını kullanınız. Paketlediğimiz 'htop'
uygulamasında kullandığımız kaynak için gerekli hashi ekleyelim.

::

    [sha256]
    1 		= d9d6826f10ce3887950d709b53ee1d8c1849a70fa38e91d5896ad8cbc6ba3c57


Derleme bilgileri
^^^^^^^^^^^^^^^^^^
Şimdi paketin nasıl derleneceğini belirtmemiz gerekiyor, 'htop' standart bir C programı gibi derlendiğinden
talimat sisteminde önceden tanımlı tipleri kullanacağız.

::

    [derle]
    tip 	= gnu

Bazen programlar derlenmeye gerek duyamayabilir, böyle durumlarda şablanu boş bırakmamak ve durumu belirtmek
adına derle bölümünü şu şekilde doldurabiliriz:

::

    [derle]
    betik 	= echo "Derleme yapılmayacak!"

Paketleme bilgileri
^^^^^^^^^^^^^^^^^^^^^
Programımızın kurulumu da standart bir C programı kurulumuna eşdeğer, burada tekrar hazır tipleri kullanarak
işimizi hızlandıracağız.

::

    [pakur]
    tip 	= gnu

Her ne kadar bu örnekte tipleri kullanmış olsak da, yapılan her işlem için muhtemelen bir tip bulunmayacaktır.
Eğer yapılcak işlemler bir kaç satır betiği aşmıyorsa, bunları betik anahtarları ile talimat 
içinde, diğer durumlarda ise derle.sh ve pakur.sh dosyları ile yapılır.

Talimat dizininin oluşturulması
--------------------------------
Talimat dosyası hazırlandıktan sonra yapılacak ilk iş, paket için gerekli talimat dizinin oluşturulmasıdır.
Talimat dizininin ismi belirli bir kural çerçevesinde verilir. Talimat dizini ismi paketin ismi ile başlar, 
'#' ile devam eder ve arkasından sürüm numarası gelir, hemen ardından '-' ve son olarak paketin devir numarası
ile biter.
Örneğin paketlenen 'htop' paketinin 2.2.0'ıncı sürümünü kullandık, ve bu paketi aynı sürümde ilk paketleyişimiz
olduğundan devir numaramız da 1.  Bu durumda talimat dizininin ismi 'htop#2.2.0-1' olacaktır.

Hazırladığımız talimat dosyasını bu dizine yerleştiriyoruz.


Talimat'ın repoya eklenmesi
----------------------------
Şimdi ise sıra hazırladığımız talimatı kullanmaya geldi. Bunun için talimat dizinini bir kaynağa yüklemeli ve
mps'yi bu kaynağı tanıyacak şekilde konfigüre etmeliyiz. Bunun için en etkili yol bir git reposu kullanmaktır.
Bu belgede hazırlanan 'htop' talimat dizinine `buradaki <https://notabug.org/gysddn/mpsrepo/src/master/talimatname/htop%232.2.0-1>`_
git reposundan ulaşılabilir.

Talimat dizinini bir kaynağa yükledikten sonra ise mps'in bunu görmesi için /usr/milis/mps/conf/conf.lua dosyasını
değiştirmemiz gerekiyor.
Dosyayı açtıktan sonra 'talimatdepo' altına kendi dizinimizi ekliyoruz:

::

    ...
    [3]={["https://notabug.org/gysddn/mpsrepo"]="talimatname"},
    ...

Burada ilk parametre repomuzun adresi, ikinci ise reponun altında talimat dizinlerinin bulunacağı yer.

Yaptığımız değişikliklerin mps'ye etki etmesi için git repolarını güncelliyoruz:

.. code:: bash

    mps gun -G


Talimat'ın test edilmesi (mpsdo)
---------------------------------

Talimatımız artık hazır ve sistem tarfından tanınıyor. Bu adımda çalışan bir Milis dağıtımında, talimatımızı
test edebiliriz. Ancak sağlıklı bir test için her zaman stabil bir ortam gerekir. Bunun için yalıtılmış bir
derleme ortamı olan mpsdo'yu kullanabilirsiniz.

Kurulum
^^^^^^^^^^^^^^
mpsdo'yu kurmak için mps'yi güncellemeniz gerekmektedir:

.. code:: bash
      
    mps gun -H


Kullanım
^^^^^^^^^^^^^^
mpsdo'nun ortamına giriş yapmak için:

.. code:: bash

    sudo mpsdo

Bu adımdan sonra yapacağınız işlemler yalıtılmış derleme ortamında
gerçekleşecektir.

.. note:: 
    mpsdo derlemeler için ana sisteme bağlanmış birkaç dizin hariç 
    ortamı her zaman sıfırlayacaktır. Bunlar /opt, /sources, /var/cache'tir.
    Aynı dizinler ana sitemde sırası ile /mnt/paketler, /sources, /mnt/milis2/pktdepo_onbellek'e 
    bağlanır. Bu dosyaların ana sisteme bağlanma amacı aynı işlemlerin sürekli
    yapılmasının önüne geçmektir.

.. note:: 
    Ortama her girişinizde sıfırlanacağı için mps'yi her girişinizde 
    güncellemeniz gerekmektedir.

Ortamda paket derlemek için konak bilgisayarın /mnt/milis/ortam/usr/milis/talimatname 
altındaki sayısal dizinler kullanılır. Bu aşamada 'conf.lua' dosyanızı kontrol edip herşeyin doğru 
oduğunundan emin olmakta fayda vardır. 

Paketi derlediğimizde mps o an bulunulan dizinde gerekli paketin '.mps.lz' uzantılı olan kurulma 
dosyasını oluşturacaktır. Dosyayı oluşturmak istediğiniz klasöre geçtikten sonra:

- Gerekli değişiklikleri yaptıktan sonra tekil (bağımlılıklar olmadan) derleme için:

.. code::  bash

    mps der -t htop

- Sıralı derle-kur-paketle işlemleri için:

.. code:: bash

    mps der htop

Paketi kurmak için:

.. code:: bash

    mps kur htop#2.2.0-1-x86_64.mps.lz

**Tebrikler!!!** Milis'te ilk paketinizi oluşturdunuz. Bu adımda sisteminizde htop'un kurulu ve çalışabilir 
bir durumda olması gerekiyor.

Daha fazlası için `dökümanları <https://mls.akdeniz.edu.tr/belgeler/>`_, `kaynak kodlarını <https://notabug.org/milislinux>`_ ve 
`talimat dosyalarını <https://notabug.org/milislinux/milis19/src/master/talimatname>`_ inceleyebilirsiniz.

Ortamdan çıkmak için:

.. code:: bash

    exit

