index.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <html >
  2. <meta name="viewport" content="width=device-width, initial-scale=1">
  3. <link rel="stylesheet" href="gitlike-markdown.css">
  4. <meta http-equiv="content-type" contentType="text/html; charset=UTF-8">
  5. <meta charset="UTF-8">
  6. <style>
  7. .markdown-body {
  8. box-sizing: border-box;
  9. min-width: 200px;
  10. max-width: 980px;
  11. margin: 0 auto;
  12. padding: 45px;
  13. }
  14. @media (max-width: 767px) {
  15. .markdown-body {
  16. padding: 15px;
  17. }
  18. }
  19. </style>
  20. <article class="markdown-body">
  21. <h2 class="title">Milis Linux Talimatname Bilgi</h2>
  22. <b>Talimat dosyası nedir ?</b><br>
  23. Milis Linux’ta paket üretmek oldukça kolaylaştırılmıştır.
  24. Milis Linux’ta paketler talimat dosyaları sayesinde üretilir.
  25. Talimat dosyası bir paketin nasıl derleneceğini,paketleneceği, gerekli olan bağımlılıkları,
  26. paketçinin adı, paketin adı açıklaması ve versiyon numarası gibi bilgileri barındırır.
  27. Mps paket yöneticisi de bu talimat dosyasını kullanarak paketi oluşturur.
  28. <br><br>
  29. <b>Talimat dosyası nasıl oluşturulur?</b><br>
  30. /root dizini altında “talimatname” adında bir dizin vardır. (Derleme ortamında ortamın /root dizini altına bakılmalıdır.)
  31. Bu dizin içerisinde ise genel, onsistem, temel adında dizinler vardır.
  32. Genel olarak sonradan oluşturacağımız talimat dosyaları, genel dizininin içindeki paket adı yazılı olan
  33. dizinlerin içinde yer almaktadır.
  34. Bu talimat dosyalarını örnek alarak kendi istediğiniz bir paketin talimat dosyasını oluşturabilirsiniz.
  35. 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.
  36. Milis Linux talimat yapısına benzer dağıtımların üretimleri incelenerek talimat oluşturalabilinir.
  37. Ancak burada dikkat edilmesi gereken hususlar vardır.
  38. Örneğin diğer dağıtımlardaki bağımlılıklar Milis Linux deposunda farklı bir isimde oluşturulmuş olabilir
  39. veya bağımlılıklar depoda olmayabilir. Bu durumda olmayan bağımlılıkların da talimat oluşturularak paketlenmesi gerekir.
  40. Talimat dosyası oluşturulurken hangi paketi üreteceksek ilgili paketin web sitesinde yada indirdiğimiz
  41. kaynak kodunda genelde gerekli olan bağımlılıklar, paketin nasıl derleneceği vs. bilgiler çoğu zaman verilmektedir.
  42. Bunlardan yararlanarak da sıfırdan talimat dosyası oluşturabiliriz.
  43. <h2 class="title">Milis Linux Derleme Ortamı Kurulumu</h2>
  44. Milis Linux'ta paketleme yapmak ve paket deposuna katkıda bulunmak için öncelikle paketleri derleyebileceğiniz derleme ortamını oluşturmanız gerekmektedir.
  45. Derleme ortamını paketlerin yalıtılmış bir ortamda derlendiği <u>chroot</u> ortamı olarak düşünebiliriz.
  46. Daha önceki ortam kurulumlarımız elle adımlara dayanmakta iken artık tek komutla ortamı indirip kurabiliriz.
  47. <p>
  48. <pre>$ mps guncelle </pre>
  49. <pre>$ sudo mpsdo</pre>
  50. <p>
  51. Bu adımdan sonraki işlemler ortam içinde olacaktır.
  52. <p>
  53. 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.
  54. Bu dizinde üretilen paketler ana sistem de /mnt/paketler altında kalıcı olmaktadır.
  55. <pre># cd /opt</pre>
  56. Ortama her girişimizde ortam sıfırlanacağı için ortamı güncellemek zorundayız.
  57. <pre># mps guncelle</pre>
  58. Ortamda paket derlemek için konak bilgisayarın <b>/mnt/lfs/root/talimatname/genel</b> altındaki dizinleri kullanırız.
  59. Gerekli değişiklikleri yaptıktan sonra tekil derleme için
  60. <pre># mps -d paket_ismi</pre>
  61. Sıralı derle-kur-paketle işlemleri için
  62. <pre># mps odkp paket_ismi</pre>
  63. komutlarını veriririz.
  64. Ortamdan çıkmak için
  65. <pre># exit</pre>
  66. <br><h2 class="title">Talimat Dosyası Standartları ve Talimat Hazırlama</h2>
  67. Talimat hazırlamak Milis içerisinde kullanılacak uygulamayı veya dosyaları paketlemek için gerekli komutları yazmak / hazırlamak demektir.
  68. Talimatta işlem sırası şu şekildedir:<br>
  69. <ol>
  70. <li>Kaynak kodları içeren dosyaların $SRC (/tmp/work/src/) klasörüne indirilmesi ve açılması</li>
  71. <li>Derleme yapılacak ise kaynak kodun derlenmesi</li>
  72. <li>İşlemleri tamamlanan ve/veya derlenen uygulamanın $PKG klasörüne hiyerarşisi bozulmadan alınması</li>
  73. <li>Son olarak da $PKG (/tmp/work/pkg/) klasörünün sıkıştırılarak paketin oluşturulması (xxx.mps.lz)</li>
  74. </ol>
  75. Talimatlar https://notabug.org/milislinux/milis/src/master/talimatname/ adresinde 3 ana kategoride tutulmaktadır. Kullanıcılar tarafından hazırlanan
  76. talimatlar "genel" kategorisinde yer alır. Mevcut tüm uygulamaların nasıl paketlendiğini yani talimat dosyalarını bu adresten inceleyebilirsiniz.
  77. <br><br>
  78. Örnek talimat dosyası:
  79. <pre>
  80. # Tanım: Ses dosyalarını düzenlemek için gelişmiş bir araç.
  81. # URL: http://web.audacityteam.org/
  82. # Paketçi: milisarge
  83. # Gerekler: libvorbis libmad libid3tag wxgtk28 lame hicolor-icon-theme ffmpeg shared-mime-info desktop-file-utils redland jack soundtouch cmake zip python
  84. # Grup: medya
  85. isim=audacity
  86. surum=2.1.1
  87. devir=1
  88. kaynak=("https://github.com/audacity/audacity/archive/Audacity-${surum}.tar.gz"
  89. "ffmpeg.patch")
  90. derle() {
  91. cd "${SRC}/${isim}-Audacity-${surum}"
  92. patch -p1 -i "${SRC}/ffmpeg.patch"
  93. WX_CONFIG=/usr/bin/wx-config-2.8 \
  94. ./configure --prefix=/usr --enable-unicode --with-wx-config=$WX_CONFIG
  95. make
  96. make DESTDIR="${PKG}" install
  97. }
  98. </pre>
  99. Linux dağıtımlarda popüler bir uygulama olan ses düzenleme uygulaması <b>Audacity</b>'nin paketlenmesi işlemlerini adım adım inceleyelim.
  100. <br><br>
  101. Talimat dosyaları birer bash script dosyalarıdır fakat belirli standartları bulunmaktadır.
  102. 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 <u>Gerekler</u> ve <u>Grup</u> kısımları
  103. 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
  104. ö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.
  105. <br><br>
  106. Talimat içerisinde <b>$isim</b>, <b>$surum</b>, <b>$devir</b> ve <b>$kaynak</b> değişkenleri de ilgili paketin bilgilerini içermektedir.
  107. $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)
  108. ffmpeg için ihtiyaç duyulan bir yama (patch) dosyası görülüyor.
  109. <br><br>
  110. 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
  111. dosyası da $SRC kopyalanacak ve <b>derle()</b> 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
  112. edilmesi gereken 2 sabit değişken <b>$SRC</b> ve <b>$PKG</b>'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
  113. (sıkıştırılıp mps.lz haline gelecek) klasörü işaret eden değişkendir.
  114. <br><br>
  115. 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.
  116. <br><br>
  117. 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
  118. $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.
  119. <br><br>
  120. Hata durumunda veya yeni paket için <code>mps odkp {paket}</code> uyguladığımız da $SRC ve $PKG klasörleri boşaltılmaktadır.
  121. <br><h2 class="title">Talimat'ın Detaylı İncelenmesi</h2>
  122. <b>Gerekler:</b><br>
  123. 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.
  124. Örneğin <code>Gerekler:</code> kısmına gireceğiniz uygulamaların ya daha önce paketlenmiş olması ya da talimat dosyasının hazırlanmış olması gerekir.
  125. 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
  126. 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
  127. paketlenmiş olması gerekir. Gereklerinde python gibi çok temel uygulamalar da bulunmakta. Python uygulamasının nasıl paketlendiğini incelemek için
  128. <a href="https://www.notabug.org/milislinux/milis/src/master/talimatname/genel/p/python/talimat" target="_blank">https://www.notabug.org/milislinux/milis/src/master/talimatname/genel/p/python/talimat</a> adresini inceleyebilirsiniz.
  129. <br><br>
  130. <b>kaynak:</b><br>
  131. 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
  132. isterseniz <code>https://dosya.kaynagi.adresi/abc-uygulamasi.tar.gz::abc.tar.gz</code> şeklinde belirtebilirsiniz. Eğer birden fazla dosya var ise yukarıdaki örnekteki gibi alt satıra
  133. tanımlamanız gerekmektedir. Belirtilen dosyalar lokalde ise direkt dosya adı, indirilecek ise adresini yazabilirsiniz.
  134. Kaynak kod git sürüm takip sistemi ile edinilecek ise <a href="https://www.notabug.org/milislinux/milis/src/master/talimatname/genel/m/myrddin/talimat" target="_blank">myrddin</a> talimat örneğindeki
  135. <b>git_indir</b> fonksiyonunu ve kullanımını incelemelisiniz.
  136. <br><br>
  137. Kaynak ile ilgili bir diğer önemli konu ise belirtilen dosya <b>/sources</b> klasörüne indirilir. Eğer dosya orada duruyor ise bu durumda sunucudaki dosyada değişiklik olsa bile indirilmez.
  138. 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.
  139. <br><br>
  140. <b>Grup:</b><br>
  141. Mevcut kullanılabilir grupları <code>mps gruplar</code> komutu ile listeleyebilirsiniz. Yazdığınız talimatın hangi
  142. grupta yer alması gerektiğine emin olamadığınız durumlar da mevcut yayınlanmış paketlerin talimat dosyalarını
  143. inceleyerek karar verebilirsiniz.
  144. <br><br>
  145. <b>Paketleme İşlemi öncesi veya sonrasında yapılacak işlemler:</b><br>
  146. 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:
  147. <ol>
  148. <li>paket-adi.<b>kur-kos</b>: Paket kurulduktan sonra çalıştırılacak olan bash işlemleri</li>
  149. <li>paket-adi.<b>kos-kur</b>: Paket kurulmadan <u>önce</u> çalıştırılacak olan bash işlemleri</li>
  150. <li>paket-adi.<b>sil-kos</b>: Paket silindikten sonra çalıştırılacak olan bash işlemleri</li>
  151. <li>paket-adi.<b>kos-sil</b>: Paket silmeden <u>önce</u> çalıştırılacak olan bash işlemleri</li>
  152. </ol>
  153. <b>NOT:</b>Arch Linux (-a) ve KaOSx Linux (-k) paket talimatlarının Milis Linux talimatına hızlıca çevrilebilmesi için:
  154. <br>
  155. ```
  156. talimat.py -a <paket-adi> #Arch talimatları için
  157. talimat.py -k <paket-adi> #KaOSx talimatları için
  158. ```
  159. şeklinde kullanabilirsiniz. Paket adları ilgili depolardan öncelikle kontrol edilmelidir.
  160. <br><br>
  161. <b>NOT2:</b> 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 <b>mpsd -d</b> komutu ile talimat dosyasını ve bağımlılıklarını kontrol ederek paketi oluşturur.
  162. <b>mpsd</b> 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.
  163. <br><h2 class="title">Talimat ve Güvenlik</h2>
  164. Talimat dosyalarında kaynak kısımda belirtilen dosyanın değiştirilmediğinden emin olmak için <b>paket-adi.hash</b> 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.
  165. Böylelikle kaynak kodu indirilen dosya öncelikle hash kontrolünden geçirilecek ve daha sonra paketleme işlemine tabi tutulacaktır.
  166. <a href="https://www.notabug.org/milislinux/milis/src/master/talimatname/genel/w/wireguard-kernel/" target="_blank">wireguard-kernel</a> paketindeki hash örneği incelenebilir.
  167. <br><br><br><br>
  168. Son güncelleme: 25 Ekim 2018 / 15:57
  169. </article>
  170. </html>