# Talimat Sistemi

talimat dosyaları mps’in paketleri kurması için gerekli bilgileri içeren bir .ini dosyasıdır.

## Talimat dizini

Talimat dizinleri paket ile ilişkili talimat dosyasını ve kurulum aşamasında gerekebilecek bir çok ayrı dosyayı barındırır.

    gcc#9.1.0-1/
    ├── derle.sh
    ├── kurkos.sh
    ├── pakur.sh
    └── talimat

### *.sh dosyaları

Talimat işlemleri için ayrı script dosyları hazırlanıp bunlar talimat dosyası içinden ‘dosya’ anahtar kelimesi ile çağırılabilir.

    [derle]
    dosya = derle.sh

    [pakur]
    dosya = pakur.sh

Bu dosyların ‘derle’ ve ‘pakur’ altında kullanılması halinde önerilen isimlendirme ‘derle’ için ‘derle.sh’, ‘pakur’ için ise ‘pakur.sh’ şeklindedir.

### Koşuk betikleri

Koşuk betikleri talimat dizininde saklanabilir. Bunlar mps tarafından otomatik olarak algılanır ve kullanılır.

kurkos.sh
Paket kurulduktan sonra çalışacak betik.
koskur.sh
Paket kurulmadan önce çalışacak betik.
silkos.sh
Paket silindikten sonra çalışacak betik.
kossil.sh
Paket silinmeden önce çalışacak betik.

### Yama dosyaları

Yama dosyaları talimat dizininde saklanabilir. Bu durumda yapılması gereken ‘dosya’ anahtarı ile dosyayı talimat’taki kaynak bölümüne eklemek ve ‘yama’ anahtarı ile ilişkili yamayı belirtmektir. Daha fazla bilgi için dosya formatını inceleyin.

    lua#5.3.5-1/
    ├── derle.sh
    ├── liblua.so.patch
    ├── lua.pc
    ├── pakur.sh
    └── talimat

    [kaynak]
    gz      = https://www.lua.org/ftp
    dosya   = liblua.so.patch
    dosya   = lua.pc

    [derle]
    yama    = 2
    ...

Eklenen dosya için aşağıdaki komut çalıştırılıcaktır:

    patch -Np1 -i $SRC/dosya_ismi

### libgerekler ve pktlibler

libgerekler dosyası, paketin hangi kütüphanelere ihtiyacı olduğunu belirtir.

Örneğin aşağıda python paketinin 3.7.3’üncü sürümü için gereken kütüphaneler listelenmiştir. Bunlar libgerekler dosyasında saklanır.

    libdl.so.2
    libpython3.7m.so.1.0
    libpthread.so.0
    libc.so.6
    libuuid.so.1
    libm.so.6
    libexpat.so.1
    liblzma.so.5
    libbz2.so.1.0
    libz.so.1
    libpanelw.so.6
    libncursesw.so.6
    libgdbm.so.6
    libgdbm_compat.so.4
    libsqlite3.so.0
    libssl.so.1.1
    libcrypto.so.1.1
    libcrypt.so.1
    libreadline.so.8
    libutil.so.1

pktlibler ise paketin sisteme sunduguğu kütüphaneleri belirtir.

Aşağıda ise aynı paketinin sisteme sunduğu kütüphanler listelenmiştir. Bunlar da pktlibler dosyasında saklanır.

    libpython3.so
    libpython3.7m.so.1.0
    libpython3.7m.so

## Dosya formatı

> Talimat dosyası, paketin kullanılabilmesi ve işlenebilmesi için gerekli bilgileri içeren bölümlerden oluşur. Bunlardan dördü; paket, kaynak, derle ve pakur bu dosyada bulunmak zorundadır. Bunlara ek olarak bir çok bölüm belirli amaçları karşılamak amacıyla kullanılabilir.

### [paket]

tanim
Paketin açıklaması.
paketci
Paketçilerin isimleri.
grup
Paketin grubu.
Gruplarlar belirlenirken sistemde önceden tanımlanan gruplar kullanılmalıdır, bunlar ‘mps gruplar’ komutu ile öğrenilebilir.
url
Paketin web sayfası

### [gerek]

derleme
Paketin derlenmesi için gerekenler
calisma
Paketin çalışması için gerekenler

### [kaynak]

github
Verilen kaynak GitHub için ‘kullanıcıadı/repoismi’ olmalıdır. Bu durumda mps’nin kullandığı tam url ise ‘github.com/kullanıcıadı/repoismi’ olacaktır.
gz,xz,bz2
Verilen kaynağın sonuna paket ismini belirli bir formata çevirerek ekler ve kullanır.
Kullanılan tam format, girdi ‘url’ ise ‘$url/$isim-$surum.tar.[gz|xz|bz2]’ olacaktır.
tgz
Verilen kaynağın sonuna paket ismini belirli bir formata çevirerek ekler ve kullanır.
Kullanılan tam format, girdi ‘url’ ise ‘$url/$isim-$surum.tgz’ olacaktır.
dosya
Paketin talimat dizinindeki bir betik dosyası.
Bunların dışında normal http indirmelerine anahtar olarak herhangi bir alfanumerik kelime kullanılabilir. Ancak önerilen kullanım herhangi bir pozitif sayı veya ‘url’ anahtar kelimesidir.

#### Dosya isimlendirme

İndirilen dosya için kaynak belirtirken ‘::’ postfixi ile yeni bir isim belirtilebilir. Yeni isimde değişkenler de kullanılabilir.

    1       = https://github.com/pallets/markupsafe/archive/$surum.tar.gz::$isim-$surum.tar.gz

### [sha256] ve [sha512]

1,2,3,4…
Kaynak dosyaları için sha anahtarlarını belirtir.
Numara, kaynağın [kaynak] altındaki sırasını belirtir.

### [derle]

dosya
Paketin talimat dizinindeki bir betik dosyası.
tip
Paketin derlenme tipi.
betik
Çalıştırılacak betik komutu.
yama
Yama dosyasının [kaynak] altındaki sırası veya ismi.

### [pakur]

dosya
Paketin talimat dizinindeki bir betik dosyası.
tip
Paketin kurulma tipi.
betik
Çalıştırılacak betik komutu.
yama
Yama dosyasının [kaynak] altındaki sırası veya ismi.
servis
Paketin içine kurulacak servis.
Bu dosya /usr/milis/ayarlar altında bulunmak zorundadır.

Not

[derle] ve [pakur] altında hazırlanan anahtarlar yukarıdan aşağıya doğru olacak şekilde kullanılır/çalıştırılır.

## Değişkenler

Talimat dizininde paketler belirli bir formata göre isimlendirilir, bu format
‘isim#sürüm-devir’
şeklindedir ve buradaki değerler değişkenler olarak kullanılabilir.
$isim
Paketin ismi.
$surum
Paketin sürümü.
$devir
Paketin devri.

[paket] bloğunun altındaki her anahtar değişken olarak kullanılabilir.

## Tipler

Tipler, betik yazmak yerine daha sade bir talimat için kullanılabilir.

Ek konfigürasyon yapmak için ‘tip’ anahtarından önce ‘ekconf’ anahtarı kullanılabilir. Anahtarın değeri gerekli komutlar çağrılımadan önce $extopt değerine atanacaktır.

### Derleme tipleri

Derleme tipleri, derleme anında çalıstırılacak hazır komutlar içerir.

#### gnu

    ./configure $confopt $extopt && make

#### cmake

    cmake ./ && make

#### py3 ve py2

    python3 setup.py build

    python2 setup.py build

#### meson

    cd $SRC && milis-meson $isim-$surum build $extopt

#### ninja

    mkdir -p build && ninja -C build

### Paket kurma tipleri

Paket kurma tipleri, kurulum sırasında çalıstırılacak hazır komutlar içerir.

#### gnu

    make DESTDIR=$PKG install

#### py3 ve py2

    python3 setup.py install --root=${PKG} --optimize=1 --skip-build

    python2 setup.py install --root=${PKG} --optimize=1 --skip-build

#### ninja

    DESTDIR=$PKG ninja -C build install

#### meson

    cd $SRC && DESTDIR=$PKG ninja -C build install