NASIL:Yeni başlayanlar için paket yapım rehberi
PardusWiki, özgür ansiklopedi
Burayı okuyan çoğu kişinin de bildiği gibi, ulusal dağıtımımız Pardus'un kararlı deposu, Kasım 2007 itibariyle 1800 kadar paket içermektedir. Kararlı deponun yanı sıra, katkı (contrib) deposundaki 800'ü aşkın paket bulunmakta. Depolarımızdaki paket sayısı, gönüllü paketçilerimizin çoğalması ve bu paketlerin bakım/güncelleme ve hatalarının çözülmesi ile daha da artacaktır.
Bu belgeyi hazırlamadaki amacımız, pisi paketi yapımını yeni Linux kullanıcılarının bile anlayacağı bir dilde anlatabilmektir. Okuduktan sonra kolayca PiSi paketi oluşturabiliyor olmanız amaçlanmıştır. Bunun için yer yer örneklerle ve ipuçlarıyla konu daha anlaşılır hale getirilecektir. Ayrıntılar ise asıl konunun sonunda verilecektir.
Konu başlıkları |
[değiştir] Linux ve paket sistemlerinin gelişimi
[değiştir] Kaynak Nedir?
Kaynak kodu (source code), bilgisayar programları oluşturmak için bir programlama dili (C, python, java...) kullanılarak yazılmış metin dosyalarıdır. Yazılan kaynak kodu derleyici ve bağlayıcı programları ile çalıştırılabilir program haline getirilir. Açık kaynak kodlu programlarda kullanıcıların kaynak kodları değiştirerek programın kendi istediği gibi çalışmasını sağlama imkanı vardır.
Açık kaynak (dolayısıyla Pardus) dünyasındaki kaynak kodların büyük çoğunluğu C programlama dilinde yazılmıştır. Bunları çalışır hale getirmek için derlememiz gerekmektedir. Derleme işlemini kolaylaştırmak için de çeşitli programlar geliştirilmiştir. Bunlardan en yaygın olanı make'dir. Aşağıdaki komutlarla kmess programının kaynak kodu paketini indirip derleyebilir ve programı kurup çalıştırabiliriz:
1| wget http://belnet.dl.sourceforge.net/sourceforge/kmess/kmess-1.4.3.tar.gz 2| tar -xzvf kmess-1.4.3.tar.gz 3| cd kmess-1.4.3 4| ./configure 5| make 6| make install 7| kmess Komut Açıklamaları: 1- wget programı ile program dosyası, local bilgisayara indiriliyor. 2- .tar.gz uzantılı sıkıştırılmış dosya tar programı ile klasör içine açılıyor. 3- sıkıştırılmış dosya içeriğini barındıran klasör içine giriliyor. 4- configure betiği çalıştırılıyor. 5- make ile kaynak kod derleniyor 6- make install ile .... 7- derleme işlemi sonrası oluşan çalıştırılabilir program, ismi çağırılarak çalıştırılıyor.
[değiştir] Paket Nedir?
[değiştir] Bağımlılık Nedir?
Bağımlılık o paketin çalışabilmesi/derlenebilmesi için gereken paketlerdir. İki çeşit bağımlılık vardır:
- Build Dependency (paketin derlenebilmesi için gereken paketler)
- Runtime Dependency (paketin çalışabilmesi için gereken paketler)
[değiştir] Modern Paketleme Sistemleri
[değiştir] RPM
Açılımı Redhat Package Management 'dır. Çevrildiği üzere, Redhat Paket Yöneticisidir.
[değiştir] DEB
Debian tabanlı dağıtımların (debian, ubuntu) kullandığı paket sistemidir.
- İkili (binary) paketler
- Kaynak (source) paketler
Olmak üzere 2'ye ayrılır.
İkili paketler: Debian paket sistemidir. Çalıştırılabilir dosyaları, konfigurasyon dosyalarını, man/info paketlerini, copyright ve diğer bilgileri içerir. Genellikle ".deb" uzantısına sahiptirler
Kaynak paketler: Adından da anlaşılacağı gibi kaynak (source) paketi içerir.
[değiştir] Ebuild
Gentoo paketlerini kurmak için yazılmış bash scriptlerdir. Portage ile çalışır. Portage Gentoo'nun paket yöneticisidir.
Programların nasıl kurulduğu ebuild dosyalarına bakılarak anlaşılabilir. www.gentoo-portage.com adresinden Gentoo depolarında bulunan paketleri arayıp, ebuild dosyalarına ulaşabilirsiniz.
[değiştir] Pisi Paket Sistemi ve Özellikleri
PiSi (açılımı Packages Installed Successfully as Intended), Pardus'un adı gibi ufak ama özellik dolu paket yöneticisidir. Bağımlılıkları takip ederek paket inşa etme, kurma, kaldırma, yükseltme ve benzeri işlevleri yerine getirir. Kullanıcı dostu bir grafiksel arayüz ve kapsamlı bir komut satırı arayüzü içerir. Geliştiriciler için tanıdık ve basit bir geliştirme ortamı sunar.
PiSi paketleri, 7zip programının da kullanıdğı LZMA algoritmasıyla sıkıştırılmış dosyalardır. Bu sıkıştırma sayesinde paketler %30'a varan oranlarda daha az yer kaplarlar. Paketlerin içinde derlenmiş program dosyaları ve bunların sisteme nasıl yerleştirileceğine dair bilgiler bulunur.
PiSi'nin başlıca yapısal özellikleri:
- PiSi Python'da yazılmıştır, bu sayede performans kaybetmeden taşınabilirlik ve küçük program boyutu sağlanmıştır.
- Hangi dosyanın hangi pakette olduğu ve bağımlılıklar gibi paket bilgilerinı takip etmek için veritabanı olarak olukça az yer kaplayan Berkeley DB'yi kullanır.
[değiştir] Paket Yapımı
PiSi'nin, öğrenmesi kolay bir paketleme sistemi vardır. Bir pisi paketi oluşturmak için iki adet dosyayı kwrite gibi bir metin düzenleyicisinde yazmamız gerekmektedir:
- pspec.xml
- actions.py
Daha sonra bu iki dosyayı, pisi build komutunu kullanarak bir pisi paketine çevirebiliriz. Yazının devamında bu dosyaları nasıl oluşturacağımız anlatılacaktır.
[değiştir] Ön Hazırlık
Önce pisi paketini yapacağımız programı seçmemiz gerekiyor. Bu yazı boyunca iki tane pisi paketi yapacağız. Birincisi bir KDE yazılımı olan Kmess (MSN messenger), ikincisi de 3 boyutlu güzel bir oyun olan Tuxracer.
Hedeflerimizi belirledikten sonra sitelerini biraz geziyoruz ve mümkün olduğunca çok bilgi edinmeye çalışıyoruz. Örneklerimizin siteleri şöyle:
- Kmess: http://kmess.sourceforge.net/ Buradan anladığımız kadarıyla
- Kmess, MSN messenger'ın özellikleri göz önüne alınarak hazırlanmış bir anında mesajlaşma uygulamasıymış.
- Ve Çalışması için KDE masaüstü ortamı gerekliymiş.
- Tuxracer: http://tuxracer.sourceforge.net/ Buradan edineceğimiz en önemli bilgiler ise:
- oyunun düzgün çalışması için 3B hızlandırıcılı ekran kartının (sürücüleri yüklenmiş haldeki nvidia, ati gibi kartlar) gerekli olduğu
- tcl, glut, libsdl ve sdl-mixer paketlerinin önceden yüklemiş olması gerektiğidir.
- Ayrıca oyunun baya eski olduğunu da görebiliyoruz (en son 2000 yılında 0.61 sürümü çıkmış).
- Eski olduğu için büyük ihtimalle yepyeni derleme araçlarımız bunu derlerken sorun çıkaracaktır :) . yazının devamında bu sorunların nasıl çözüleceği anlatılacak (yamalar)
Şimdi her iki programın en son çıkan kaynak paketinin adreslerini kaydediyoruz ve pspec.xml dosyamızı hazırlamaya başlıyoruz.
http://mesh.dl.sourceforge.net/sourceforge/kmess/kmess-1.4.3.tar.gz http://switch.dl.sourceforge.net/sourceforge/tuxracer/tuxracer-0.61.tar.gz
[değiştir] pspec.xml
Bu dosyaya paket hakkında topladığımız bilgileri belli bir sisteme göre yazmamız gerekiyor. Daha sonra pisi, bu yazdığımız dosyaya bakarak kaynak paketi indirip derleyecek ve istediğimiz şekilde bir pisi paketi oluşturacaktır.
Dosyanın içinde genel olarak 4 bölüm bulunacaktır:
- standart xml başlığı : burası bizi pek ilgilendirmeyen ve her pakette olması gereken sabit bir bölümdür.
- source : Programın internetteki yeri ve kaynak dosyasının adresi gibi bilgiler buraya yazılır.
- package : Oluşacak pisi paketi hakkındaki bilgiler de buraya yazılacaktır.
- history : Bu bölüm paketin zaman içindeki gelişimini tutar. Pakete sonradan bir şey eklenecekse ya da programın yeni sürümü çıkmışsa burada belirtilir.
Şimdi bu bölümleri nasıl dolduracağımıza gelelim
[değiştir] Standart Xml Başlığı
pspec.xml dosyasının en başına şu satırları olduğu gibi koymamız gerekiyor ve DOCTYPE tag'i ile PISI arasında boşluk olmaması gerekiyor:
<?xml version="1.0" ?> <!DOCTYPE PISI SYSTEM "http://www.pardus.org.tr/projeler/pisi/pisi-spec.dtd"> <PISI>
[değiştir] Source Bölümü
Bu bölümde birçok alt bölüm vardır, zorunlu olanları şunlardır:
- Name : Buraya kaynak paketin ismini yazıyoruz. Bu isim genellikle kaynak arşivinin ismiyle aynıdır (kmess-1.4.3.tar.gz).
| Kod: |
| <Name>kmess</Name> |
- Homepage : Buraya paketlenecek programın web sitesinin adresi yazılır.
| Kod: |
<Homepage>http://kmess.sourceforge.net/</Homepage> |
- Packager : Paketleyenin adı ve e-posta adresi örnekteki gibi yazılır.
| Kod: |
<Packager>
<Name>uğur Çetin</Name>
<Email>jnmbk@users.sourceforge.net</Email>
</Packager>
|
- License : Programın kullandığı lisans veya lisanslar yazılır. Bu kısım birden fazla olabilir.
| Kod: |
| <License>GPL</License> |
- IsA : Programın türü. Genelde şunlardan biridir: app:gui (grafik arayüzü olan uygulama) , app:console (konsolda çalışan uygulama) , library (diğer uygulamaların kullandığı kütüphaneler), daemon (artalanda çalışan servisler)
| Kod: |
| <IsA>app:gui</IsA> |
- PartOf : Programın hangi bileşenin parçası olduğunu belirler. Burası yazılmamışsa pisi bir alt dizine bakar ve component.xml dosyası arar. Tüm bileşenleri "pisi list-components" komutuyla listeleyebilirsiniz. (PartOf imini kullanmak zorunlu değildir. Bunun yerine lütfen bir üst dizine component.xml ekleyin)
| Kod: |
| <PartOf>applications.network</PartOf> |
- Summary : Programın tek cümleden veya birkaç kelimeden oluşan açıklaması (pisinin grafik arayüzünde başlık olarak görünür). Bu kısımın çok dil desteği vardır. En azından İngilizce ve Türkçe olarak doldurulması iyi olacaktır.
| Kod: |
<Summary>MSN Messenger clone for KDE</Summary> <Summary xml:lang="tr">KDE için MSN Messenger</Summary> |
- Description : Programın ayrıntılı açıklamasıdır. Burada programın genel özelliklerinden ve kullanım alanlarından kısaca bahsedilmelidir. Genelde bir paragraftan oluşur. Summary kısmında olduğu gibi çok dil desteği vardır.
| Kod: |
<Description>KMess is a MSN Messenger compatible chat client for Linux. It enables Linux users to chat with friends online who are using MSN Messenger in Windows or Mac OS. The strength of KMess is it's integration with the KDE desktop environment, focus on MSN Messenger specific features and an easy-to-use interface.</Description> <Description xml:lang="tr">KMess, Linux için MSN Messenger uyumlu bir sohbet istemcisidir. Linux kullanıcılarının Windows veya Mac OS kullanan arkadaşlarıyla sohbet etmesini mümkün kılar. KMess'in en güçlü yanları KDE ile uyum içinde çalışması, MSN Messenger'ın özellikleri üzerine yoğunlaşması ve kolay kullanımıdır.</Description> |
- Archive : Buraya paketin indirme adresi, sha1sum'ı ve türü yazılır.
| Kod: |
<Archive sha1sum="1613c65c7b9ffaa6a1f55396297d25ab7ee3103d" type="targz">http://mesh.dl.sourceforge.net/sourceforge/kmess/kmess-1.4.3.tar.gz</Archive> |
Pisi'ye paketi inşa et dediğimizde, bu bilgilere bakılarak programın kaynakları indirilir ve
/var/cache/pisi/archives
dizini içinde kaydedilir. Dosyanın sha1sum'ı doğruysa, dosyanın türüne göre açma işlemi yapılır ve
/var/pisi
dizini içinde paketinadı-sürümü-inşa şeklinde bir dizin oluşturulur. Derleme işlemi actions.py'ye bakılarak gerçekleştirilir.
Tür kısmına gelebilecek bazı sözcükler şunlardır: targz, tarbz2, zip, bin
Bir dosyanın sha1sum'ını almak için konsola
sha1sum dosyaadı
yazmanız yeterlidir.
Zorunlu olmayan bölümler
- BuildDependencies : Bu bölümde programın derlenirken hangi programlara ihtiyaç duyduğu belirtilir. Bu bilgi programın web sitesinde, readme ya da install dosyalarında bulunabilir. Bağımlılığın sürüm numarası gerekliyse şu sözcüklerle belirtilebilir: versionFrom, versionTo, version, releaseFrom, releaseTo, release (kullanımı için aşağıdaki tuxracer örneğine bakınız)
| Kod: |
<BuildDependencies>
<Dependency>kdelibs</Dependency>
</BuildDependencies>
|
- Patches : Bu bölümde program derlenirken uygulanacak yamalar ve bunların seviyeleri belirtilir. Burada yazılan yama dosyaları pspec.xml dosyasının bulunduğu dizindeki files adlı bir dizininin içinde bulunmalıdır. Yamalar, kabaca normalde derleyemediğimiz programları derleyebilmemiz için, ya da programa yeni yetenekler kazandırmak için kaynak kodunda yapılması gereken değişiklikleri tutan dosyalar olarak tanımlanabilir. Bir yama dosyasının içerisinde + ile başlayan satırlar eklenmesi gerekenleri, - ile başlayanlar ise çıkarılması gerekenleri belirtir. Yama dosyaları normalde elle yazılmaz, bunun için diff komutu kullanılır. Bir programı derleyemiyorsanız gerekli yamaları bulmak için gentoo-portage'de basit bir araştırma yapmanız yeterli olacaktır.
| Not: Yama örneği için tuxracer paketine bakabilirsiniz. Kmess gibi basit paketlerde yamaya ihtiyacımız olmayacaktır. |
Kmess'i dolduracak olursak şöyle olacaktır:
| Kod: |
<Source>
<Name>kmess</Name>
<Homepage>http://kmess.sourceforge.net/</Homepage>
<Packager>
<Name>Uğur Çetin</Name>
<Email>jnmbk@users.sourceforge.net</Email>
</Packager>
<License>GPL-2</License>
<IsA>app:gui</IsA>
<PartOf>applications.network</PartOf>
<Summary>MSN Messenger clone for KDE</Summary>
<Summary xml:lang="tr">KDE için MSN Messenger</Summary>
<Description>KMess is a MSN Messenger compatible chat client for Linux. It enables Linux users to chat with friends online who are using MSN Messenger in Windows or Mac OS. The strength of KMess is it's integration with the KDE desktop environment, focus on MSN Messenger specific features and an easy-to-use interface.</Description>
<Description xml:lang="tr">KMess, Linux için MSN Messenger uyumlu bir sohbet istemcisidir. Linux kullanıcılarının Windows veya Mac OS kullanan arkadaşlarıyla sohbet etmesini mümkün kılar. KMess'in en güçlü yanları KDE ile uyum içinde çalışması, MSN Messenger'ın özellikleri üzerine yoğunlaşması ve kolay kullanımıdır.</Description>
<Archive sha1sum="1613c65c7b9ffaa6a1f55396297d25ab7ee3103d" type="targz">http://mesh.dl.sourceforge.net/sourceforge/kmess/kmess-1.4.3.tar.gz</Archive>
<BuildDependencies>
<Dependency>kdelibs</Dependency>
</BuildDependencies>
</Source>
|
Bu da Tuxracer
| Kod: |
<Source>
<Name>tuxracer</Name>
<Homepage>http://tuxracer.sourceforge.net/</Homepage>
<Packager>
<Name>uğur Çetin</Name>
<Email>jnmbk@users.sourceforge.net</Email>
</Packager>
<License>GPL-2</License>
<IsA>app:gui</IsA>
<Summary>Race with Tux the Linux Penguin</Summary>
<Summary xml:lang="tr">Linux pengueni Tux ile yarış</Summary>
<Description>Tux Racer lets you take on the role of Tux the Linux Penguin as he races down steep, snow-covered mountains. Enter cups and compete to win the title! Tux Racer includes a variety of options for gameplay, including the ability to race courses in fog, at night, and under high winds.</Description>
<Description xml:lang="tr">Karla kaplı, yüce dağlardan aşağıya doğru kayan Tux'ı kontrol edin. Yarışları bitirin ve kupayı kazanın! Tux Racer oyuncuya bir çok seçenek sunar, örneğin yarışları sisli bir havada, geceleyin veya hızlı bir rüzgar eşliğinde yapabilirsiniz.</Description>
<Archive sha1sum="e1b98209f99400cd6aa660f6c1c8bd2ab17d5cea" type="targz">http://mesh.dl.sourceforge.net/sourceforge/tuxracer/tuxracer-0.61.tar.gz</Archive>
<BuildDependencies>
<Dependency versionFrom="8.0">tcl</Dependency>
<Dependency versionFrom="3.7">glut</Dependency>
<Dependency versionFrom="1.1.1">libsdl</Dependency>
<Dependency versionFrom="1.0">sdl-mixer</Dependency>
</BuildDependencies>
<Patches>
<Patch level="0">0.61-configure.in.patch</Patch>
<Patch level="1">0.61-gcc3.patch</Patch>
<Patch level="1">tuxracer-0.61.patch</Patch>
</Patches>
</Source>
|
[değiştir] Package Bölümü
Bu bölümde birkaç tane alt bölüm vardır, zorunlu olanları şunlardır:
- Name : Buraya oluşacak pisi paketinin ismini yazıyoruz. (kmess-1.4.3-1.pisi).
| Kod: <Name>kmess</Name> |
| {{{2}}} |
- Files : Buraya pisi paketinin içindeki dosyaların bulundukları dizinler ve dizinlerin içinde ne tür dosyalar olduğu yazılır.
Buraya yazılabilecek dosya türleri şunlardır: executable, library, data, config, doc, man, info, localedata, header, all
<Files>
<Path fileType="executable">/usr/kde/3.5/bin</Path>
<Path fileType="data">/usr/kde/3.5/share</Path>
</Files>
İpucu: Yeni bir paket yaparken bu bölümde şunu yazmanız mantıklı olacaktır:
<Files>
<Path fileType="all">/</Path>
</Files>
Paket oluştuktan sonra /var/pisi dizinini inceleyerek burayı ona göre düzenleyebilirisiniz. Zorunlu olmayan bölümler
- RuntimeDependencies : Bu bölümde programın çalışırken hangi programlara ihtiyaç duyduğu belirtilir. Çoğu zaman bu bağımlılıklar <source> bölümündeki BuildDependencies ile aynıdır. Bunları tam olarak bilebilmek için programı bir süre kullanmanız (ve builddependencies'deki paketleri kaldırıp öyle çalıştırmayı denemeniz) iyi olacaktır.
<RuntimeDependencies>
<Dependency>kdelibs</Dependency>
</RuntimeDependencies>
- AdditionalFiles : Bazen pisi paketine kaynağında bulunmayan bir dosya eklememiz gerekir(menüde çıkmasını sağlayan .desktop dosyası gibi). Bu gibi dosyaları <patches> bölümünde yaptığımız gibi files dizininin altına koyarız ve aşağıda görüldüğü şekilde AdditionalFile olarak pspec.xml'e yazarız.
<AdditionalFiles>
<AdditionalFile owner="root" permission="0644" target="/usr/share/applications/tuxracer.desktop">tuxracer.desktop</AdditionalFile>
<AdditionalFile owner="root" permission="0644" target="/usr/share/pixmaps/tuxracer.png">tuxracer.png</AdditionalFile>
</AdditionalFiles>
- Provides : Bu bölümde paketimize çomar betikleri ekleyebiliriz. Çomar betikleri sayesinde paketimizin kurulduğu ve kaldırıldığı zaman yapılması gereken işlemler yaptırılabilir. Çomar betikleri yazının devamında anlatılacaktır.
Kmess'i dolduracak olursak şöyle olacaktır:
<Package>
<Name>kmess</Name>
<RuntimeDependencies>
<Dependency>kdelibs</Dependency>
</RuntimeDependencies>
<Files>
<Path fileType="executable">/usr/kde/3.5/bin</Path>
<Path fileType="data">/usr/kde/3.5/share</Path>
</Files>
</Package>
Bu da Tuxracer:
<Package>
<Name>tuxracer</Name>
<RuntimeDependencies>
<Dependency versionFrom="8.0">tcl</Dependency>
<Dependency versionFrom="3.7">glut</Dependency>
<Dependency versionFrom="1.1.1">libsdl</Dependency>
<Dependency versionFrom="1.0">sdl-mixer</Dependency>
<Dependency version="0.61">tuxracer-data</Dependency>
</RuntimeDependencies>
<Files>
<Path fileType="executable">/usr/bin</Path>
<Path fileType="doc">/usr/share/doc</Path>
<Path fileType="data">/usr/share/applications</Path>
<Path fileType="data">/usr/share/pixmaps</Path>
</Files>
<AdditionalFiles>
<AdditionalFile owner="root" permission="0644" target="/usr/share/applications/tuxracer.desktop">tuxracer.desktop</AdditionalFile>
<AdditionalFile owner="root" permission="0644" target="/usr/share/pixmaps/tuxracer.png">tuxracer.png</AdditionalFile>
</AdditionalFiles>
</Package>
[değiştir] History Bölümü
Bu bölümde paketin gelişimi hakkında bilgiler bulunmaktadır. Bu bölümü kısaca anlatacağım çünkü çok kolay :)
- Update : Buraya paketi kaçıncı kez yenilediğimizi yazarız. Paketin isminin sonuna eklenen numaradır. (kmess-1.4.3-1.pisi)
- Date : Değişikliği yaptığımız tarih
- Version : Sürüm numarası, bu numara oluşacak pisi paketine eklenir. (kmess-1.4.3-1.pisi)
- Comment : Burada, yaptığımız değişkliği birkaç sözcükle anlatırız.
- Name : Değişikliği yapan kişinin gerçek adı
- Email : Değişikliği yapan kişinin e-posta adresi
Pakette bir değişiklik olduğunda en üste yeni bir <update> kısmı eklenir. Örnek olarak çokça güncellenen bir paketi inceleyebilirsiniz: http://svn.pardus.org.tr/pardus/devel/kernel/kernel/pspec.xml
Kmess:
<History>
<Update release="1">
<Date>2006-04-25</Date>
<Version>1.4.3</Version>
<Comment>First Release</Comment>
<Name>Uğur Çetin</Name>
<Email>jnmbk@users.sourceforge.net</Email>
</Update>
</History>
[değiştir] actions.py
pspec.xml dosyasını hazırladıktan sonra kaynak paketi nasıl derleyeceğimizi ve nerelere hangi dosyaları göndereceğimizi belirleyen bir actions.py dosyası hazırlamalıyız.
Bu dosyadaki asıl amacımız actions.api den ihtiyacımız olan fonksiyonları kullanarak programın /var/pisi/programınadı/install dizinin altına kurulmasını sağlamaktır. Daha sonra pisi, bizim için burada toplanan dosyalardan pspec.xml'in files bölümünde yerini belirttiklerimizi sıkıştırılarak pisi paketimizi oluşturur.
Bu dosya üç bölümden oluşur setup(ayarlama) build(inşa etme) install(kurma)
Paketleme işleminde ilk başlarda insana en zor gelen yer actions.py dosyasıdır. Takıldığınız bir yer olursa hemen irc.freenode.net sunucusundaki #pardus-devel ve #pisidepo kanallarında sorularınıza cevap bulmanızı öneririm. Aşağıdaki örneklere bakarak bu dosyaların genelde nasıl bir şeye benzediklerini görebilirsiniz:
kmess için actions.py dosyası:
#!/usr/bin/python # -*- coding: utf-8 -*- # # Licensed under the GNU General Public License, version 2. # See the file http://www.gnu.org/copyleft/gpl.txt. from pisi.actionsapi import kde def setup(): kde.configure() def build(): kde.make() def install(): kde.install()
tuxracer için actions.py dosyası:
#!/usr/bin/python # -*- coding: utf-8 -*- # # Licensed under the GNU General Public License, version 2. # See the file http://www.gnu.org/copyleft/gpl.txt. from pisi.actionsapi import autotools from pisi.actionsapi import shelltools from pisi.actionsapi import pisitools def setup(): shelltools.export("WANT_AUTOCONF", "2.5") autotools.configure("--with-tcl-inc=/usr/include \ --with-tcl-libs=/usr/lib \ --with-tcl-lib-name=tcl8.5 \ --with-data-dir=/usr/share/tuxracer \ --enable-stencil-buffer") def build(): autotools.make() def install(): autotools.install() pisitools.dodoc("AUTHORS","ChangeLog","README") pisitools.dohtml("html/*")
[değiştir] Diğer Dosyalar
Bazen paketlerimize, kısayol dosyası, programın simgesi, yama dosyaları gibi dosyalar eklememiz gerekebilir. Bunun için pspec.xml ve actions.py dosyalarımızın bulunduğu dizinde files adında bir dizin oluşturup ek dosyalarımızı buraya koyarız. Sonra, direkt pakete eklenmesi gereken bir dosyaysa pspec.xml'in içindeki AdditionalFiles bölümünde, yama dosyasıysa Patches bölümünde bu dosyayı ne yapacağını pisi'ye söylemeliyiz.
Başka bir diğer dosya da çomar betiğidir. Çomar betiği, paketimiz bir bilgisayara kurulurken ve kaldırılırken sisteme istediğimiz komutları verebilmemizi sağlar. Bu dosyayı, diğerlerinden farklı olarak comar dizininde tutarız. Dosyanın ismi package.py'dir.
Çomar dosyası örnekleri: Merhaba dünya programının package.py dosyası:
#!/usr/bin/python
import os
def postInstall():
os.system('wall "Merhaba PiSi paketi sisteme kuruldu!"')
def preRemove():
os.system('wall "Merhaba PiSi paketi sistemden kaldırılıyor!"')
[değiştir] Paketin Derlenmesi ve Denenmesi
pspec.xml, actions.py ve gerekliyse diğer dosyalarımızı da hazırladıktan sonra paketimizi derlemeye geçebiliriz. Bizim örneklerimizdeki dizin yapıları şu resimdeki gibi olmalıdır: Dizin yapıları
Örneklerimizden Kmess'in tamamlanmış dosyalarına (pspec.xml ve actions.py) şu adresten ulaşabilirsiniz: http://svn.pardus.org.tr/contrib/applications/network/kmess/
paketi derlemek için pspec.xml dosyamızı pisiye emanet ediyoruz. Şu şekilde:
sudo pisi build pspec.xml
Bu komutun ardından, herşey düzgünse, bulunduğumuz dizinde paketiadı-sürümü-inşası.pisi adlı bir dosya oluşacaktır. Hayırlı olsun!
Pisinin burada verebileceği bazı hatalar ve bunların çözümleri için tıklayınız
[değiştir] Paketçiler İçin Faydalı İpuçları
Yazının bu bölümünde paket yaparken sıkça ihtiyaç duyacağınız ve zamanla ezberleyeceğiniz bazı komutların kullanımından ve paketi hızlıca yapabilmek için kullanabileceğiniz birkaç hileden bahsedeceğim.
[değiştir] Hız kazandıran yöntemler
Eğer şu adımları izleyerek paket yaparsanız işinizi çok hızlı bir şekilde tamamlayabilirsiniz:
- Eğer daha önce yapılmamışsa bunun bir benzerini bulmaya çalışın. ör: kmess'e benzer bir paket olarak amsn paketini bulabiliriz: http://svn.pardus.org.tr/pardus/devel/applications/network/amsn/ Bulduğunuz benzer paketin pspec.xml ve actions.py dosyalarını yeni oluşturacağınız pakete uyarlamak sıfırdan yazmaktan çok daha kolay olacaktır.
- Paketimiz derlenirken hata veriyorsa ilk adresimiz http://www.gentoo-portage.com olmalıdır. Burada paketimizi aratırsak büyük ihtimalle faydalı birkaç yama bulabiliriz.
- gentoo-portage de işimize yaramazsa http://www.google.com son noktayı koyabilir. Burada aldığınız hata mesajını aratacak olursanız ya bir mail listesinde ya da bir forumda aynı hatayla karşılaşan başka birine verilmiş cevabı bulabilirsiniz.
- O da olmazsa başkalarından yardım almaya çalışın. irc (irc.freenode.net #pardus), forum, e-posta listeleri hepsi parmağınızın ucunda...
[değiştir] Faydalı Komutlar
- diff komutu:
Bu komutla patches bölümüne eklemek üzere kendi yamamızı oluşturabiliriz. Dizin yaması oluşturmak:
diff -Naur OrjinalDizin/ YamalıDizin/ > yamadosyası.patch ör: diff -Naur cinepaint/ cinepaint_toplu_patch/ > cinepaint_yamaları.patch
Bir dosyanın yamasını oluşturmak:
diff -u Orjinaldosya Yamalıdosya > yamadosyası.patch Ör: diff -u Makefile Makefile-yeni > Makefile_yamasi.patch
- patch komutu:
Diff komutuyla oluşturduğumuz yamaları uygulayabilmemizi sağlar.
patch -p0 < uygulanacak_yama.patch ör: patch -p0 < Makefile_yamasi.patch
- xmllint komutu:
Bu komutla xml dosyamızın doğruluğunu kontrol edebiliriz.
xmllint --valid dosya.xml ör: xmllint --valid pspec.xml
- diğer komutlar:
paket derlenirken sistem kaydını error-log dosyasında toplamak için:
pisi build pspec.xml -d 2>&1 | tee error-log
po dosyalarını mo ya çevirmek için:
msgfmt -v tr.po -o program.mo
mo dosyalarını po'ya çevirmek için:
msgunfmt kig.mo > kig.po
[değiştir] Dosyalardaki Hizalamalar
Hizalama, bir dosyadaki satırların başında belli sayıda boşluk karakteri bırakılmasıyla sağlanır. pisi paketi dosyalarımızın kolay okunabilmesi ve birbirine benzeyip aynı bütünün parçası olduklarını hissettirmeleri için hizalamalara dikkat etmeliyiz. Eğer dosyaları hazırlarken kwrite, kate gibi bir KDE uygulaması kullanıyorsanız aşağıda anlatılan şekilde şekilde ayar yapın, böylece siz xml dosyasını yazarken hizalama otomatik olarak yapılacaktır. Aslında yapılması gereken tek şey tab karakteri yerine 4 adet boşluk karakteri kullanmak.
[değiştir] Kwrite Ayarlamaları
Yukarda bahsedilen standartlara uymak için bazı ayarları yapmamız gerekiyor. 4 Boşluk kuralı için;
Ayarlar > Düzenleyiciyi Yaplandır > Girinti
Menusunden
Girinti Kipi: XML Biçemi Boşluklar ile girinti: Girinti için Tab yerine Boşluk kullan Boşluk sayısı: 4
yapmamız yeterli olacaktır.
Ayrıca pspec.xml dosyalarınızdaki son </PISI> tag'inden sonra 1 boşluk bırakmalısınız.
Actions.py dosyasında python kurallarına sıkı sıkıya bağlı kalmamız gerekiyor. def ve from ile başlayan satırlar haricinde dört adet boşluk bırakmazsak zaten çalışmayacaktır.
Bu konuyu daha iyi anlayabilmek için şu adresteki resmi pisi paketlerine bakmanız faydalı olacaktır: http://svn.pardus.org.tr/pardus/devel/
[değiştir] Kaynaklar
- http://tr.wikipedia.org/wiki/PISI
- http://tr.pardus-wiki.org/NASIL:PiSi_Hello_World
- http://www.pardus.org.tr/projeler/pisi/pisi-spec.dtd
- http://svn.pardus.org.tr/uludag/trunk/pisi/pisi-spec.rng
- http://www.uludag.org.tr/projeler/pisi/api/api.html
- Uğur Çetin <jnmbk [at] users.sourceforge.net>
- Eren Türkay <turkay.eren [at] gmail.com>
- Mustafa Durmuş <mus_dur [at] hotmail.com>

