Pisilemek

Wiki.Pardus-Linux.Org sitesinden

Git ve: kullan, ara

Konu başlıkları



PİSİLEMEK


PİSİ (Packages Installed Successfully as Intended) Pardus projesi kapsamında geliştirilen bir ikili paket yönetim sistemidir. PİSİ sadece paketlerin kurulup kaldırılmasından daha fazla işleve sahiptir, örneğin tüm paketlerin atomik olarak eski bir tarihteki haline geri döndürülebilmesi mümkündür (Bu özelliğin Pardus 2008 ile kullanılabilir olması beklenmektedir). Paketlerin de pisi sisteminde kullanılabilmesi için pisi dosyaları halinde işlenerek ikili paketler haline getirilmeleri gerekmektedir. Pisilemek kısaca bu işleme verilen gayrı-resmi isimdir. PİSİ sistemi hakkındaki daha geniş bilgiye http://pardus.org.tr/projeler/pisi/index.html adresinden ulaşabilirsiniz.


[değiştir] Temel Bilgiler

Paket: Sisteme kurulacak bir program, doküman veya her tür veri.

Kaynak dosya: Pakete ait dosyaları bulunduran genelde sıkıştırılmış halde bulunan ve internetten indirilebilir haldeki dosya. Programlarda genelde .tar.gz olarak sıkıştırılmış dosyalar kullanılıyor. Bu dosyanın programa ait derlenmemiş kaynak kodları, programın ihtiyaç duyduğu veri ve dökümanları barındırması gerekiyor.

Pisilemek: Bir paketi Pisi dosyası haline getirmek.

Derleme: Derlenebilir bir programlama dili ile yazılan programların (C, C++ gibi) kaynak kodlarını çalıştırılabilir ikili dosyaya (executable binary) dönüştürmek için yapılması gereken işlem.

Bağımlılık: Programın çalışması veya derlenmesi sırasında kullandığı ve sistemde bulunması gereken başka paketler.

Doğrulama kodu: Bu kod internetten indirilen dosyaların doğru bir şekilde indirildiğini test etmek için kullanılıyor. Pisi paketi yaparken Genelde kaynak dosyaların md5 veya sha algoritmasıyla elde edilen kodları sitelerinde yayınlanıyor, bu kod ile indirilen dosyadan elde edilen kod karşılaştırılarak doğrulama yapılıyor.


[değiştir] Bakış açısı

Bir paketi Pisi sistemine dahil etme süreci sadece pisilemekten daha fazlasıdır. Pisilemek istediğiniz paketin ne olduğu ve nasıl çalıştığı hakkında bilgi toplamaktan başlayıp pisi dosyası oluşturulduktan sonra test edilip sonraki hata düzeltme ve yeni sürümlerin takip edilmesiyle devam eden bir süreçtir. Bir kullanıcı eğer bu süreci takip edebileceğini düşünüyorsa pisileme işlemine başlamalıdır. Bu açıdan bakınca yapılan pisi dosyaları onu yapanların çocukları gibi olurlar ve paketin her yeni sürümünde ve hata düzeltmesinde yenilenirler. Ancak sürece sadık kalınmadan başıboş bırakılan ve takip edilmeyen pisi dosyalarının ömrü her gün yeni geliştirmelerin yapıldığı Linux dünyasında çok kısa olacaktır. Bu nedenle "yapabildiğin kadar değil bakabileceğin kadar pisile" sözünü unutmamalısınız. Ayrıca Linux dünyası kollektif çalışmanın ve imece yönteminin en güzel örneklerini sergileyip bu şekilde geliştiğinden mutlaka pisilediğiniz kaynak dosyaları internette paylaşın. Bu sayede pisi dosyanızı takip edecek pek çok ebebeyni olabilir.


[değiştir] Pisileme mekanizması

Bu mekanizma sonraki bölümde anlatılan dosyalar (Pisi kaynak dosyaları) kullanılarak paketin kaynak dosyasından Pisi tarafından kullanılabilecek bir dosya (ikili paket) ortaya çıkarma mekanizmasıdır. Bu mekanizmanın teknik ayrıntıları bir tarafa konursa Pisi tarafından ikili paket oluşturma süreci kabaca şöyledir;

  • Oluşturulan pspec.xml dosyasının Source bölümündeki bilgiler işlenerek kaynak kod indirilir ve doğruluğu kontrol edilerek /var/pisi/paket_adi/work klasörüne açılır.
  • Eğer varsa gerekli dosya ve yamalar uygun bir şekilde koda uygulanır.
  • actions.py Betiği işletilerek ikili veri elde etmek için kaynak koddan /var/pisi/paket_adi/install dizinine kurulum yapılır.
  • Varsa ek dosyalar install dizinine pspec.xml dosyasında belirtildiği üzere kopyalanır.
  • Pisi, oluşturulan bu install dizinindeki verileri kendi veritabanına uygun şekilde XML dosyaları biçiminde indeksler.
  • Bu indeks dosyalarını ve ikili veriyi pspec.xml'den alınan verilerle birleştirerek zip biçiminde tek bir pisi dosyası olarak sıkıştırılır.


Görüldüğü gibi pisi dosyası oluştururken aynı zamanda paketi /var/pisi/paket_adi/install dizinine de kurmuş oluyoruz. Pisi bu kurulumun sanki kök dizine (yani sisteme) yapılıyormuş gibi olmasını sağlıyor, yani bu dizin kök dizinmiş gibi işlem yapılıyor. Bu sayede bu dizine bakarak program kurulduğunda sistemdeki hangi klasörlerde hangi dosyaları oluşturduğunu görmüş oluyoruz.

[değiştir] Pardus SVN Deposu

SVN deposu Pardus geliştiricilerinin paketler için yaptığı pisi kaynak dosyalarını ve Pardus projelerini inceleyebileceğiniz bir nevi kütüphanedir. Bu sayede takıldığınız noktalarda Pardus geliştiricilerinin benzer paketlerde nasıl çözümler ürettiklerini inceleyebilirsiniz. Depoya http://svn.pardus.org.tr/ adresinden ulaşabilirsiniz, buradaki Pisi Paketleri Deposunda Pardus için pisilenmiş paketlerin kaynak pisi dosyaları, Uludağ Deposunda da Pardus'a ait projelerin kaynak kodları bulunur. Pisilemeye yeni başlayanların "Nasıl?" sorularının yanıtlarının hepsi aslında bu Pisi Paketleri Deposundaki kaynak dosyalarda mevcuttur.

[değiştir] Dosya ve Dizin Konumları

Pisi tarafından istenen zorunlu paketleme dosyaları pspec.xml ve actions.py'dir ve her ikisi de aynı dizinde olmalıdır. Ayrıca ihtiyaç halinde kullanılan diğer dosyalar için comar ve files dizinleri kullanılır, bunlar da yine pspec.xml ile aynı klasörde bulunmalıdır. Kaynak dosyalar şöyle görünür;

paket_adı
   |__pspec.xml
   |__actions.py
   |__files
   |__comar
         |__package.py
         |__service.py



[değiştir] Paktleme dosyaları (pspec.xml ve actions.py)

[değiştir] pspec.xml

Bu dosya paketin ve pisileme işleminin tanımı ve içeriği ile ilgidir, XML yapısındadır.

[değiştir] Temel XML yapısı ve pspec.xml

XML dosyaları bir çeşit veritabanı gibidir, veriyi tanımlayan bir Tag ve bu verinin özelliklerini taşıyan Tag’a ait parametreleri ile bir XML verisi şu şekilde görünür:

<Path fileType="executable">/usr/kde/3.5/bin</Path>
   |      |       |                  |
   |      |       |                  \--Veri
   |      |        \--------------------Verinin özelliği
   |       \----------------------------Özelliğin adı
    \-----------------------------------Tag


Bir başka örnek:

<bilgisayar monitor=”crt” islemci=”amd-x2” ram=”1024”>Ali Bey</bilgisayar>
<bilgisayar monitor=”lcd” islemci=”intel-c2duo” ram=”512”>Ali Bey</bilgisayar>


Görüldüğü gibi Tag’lar <…> arasına yazılır ve </…> ile kapatılır, ayrıca tıpkı HTML’de olduğu gibi XML’de de taglar ağaç yapısında organize edilebilir. Şöyle ki;

<Bilgisayarlar>
   <bilgisayar monitor=”crt” islemci=”amd-x2” ram=”1024”>Ali Bey</bilgisayar>
   <bilgisayar monitor=”lcd” islemci=”intel-c2duo” ram=”512”>Ali Bey</bilgisayar>
   <bilgisayar monitor=”lcd” islemci=”celeron” ram=”256”>Ayşe Hanım</bilgisayar>
</Bilgisayarlar>


Görüldüğü gibi yine <…> ile başlayıp </…> ile kapatılan bir tag’ın içine bir grup veri yerleştirilebiliyor, bu örnek ihtiyaca göre şöyle de organize edilebilir;


<Ofis>
<Bilgisayarlar servis=”Muhasebe”>
   <Bilgisayar></Bilgisayar>
   <Bilgisayar></Bilgisayar>
</Bilgisayarlar>
<Bilgisayarlar servis=”Satış”>
   <Bilgisayar></Bilgisayar>
   <Bilgisayar></Bilgisayar>
</Bilgisayarlar>
<Fotokopiler servis=”ön büro”>
   <Fotokopi></Fotokopi>
</Fotokopiler>
</Ofis>

Bu <> ile başlama ve </> ile kapatma kuralı çok kesindir, XML yapısı bunun gibi çok kesin kurallarla tespit edildiğinden kural hatalarını asla kabul etmez ve tek bir hatadan dolayı tüm XML Tag’ları kırılmış olarak değerlendirilir. Ancak içinde veri grupları bulunan Tag’ların içindeki Tag’ları yazarken bir miktar içeriden başlamak bir zorunluluk olmayıp sadece herkesin kolay okuyup anlayabilmesi için genelde mutlaka uygulanır.

Pspec.xml’de temelde şu yapıdadır; Üstteki iki satır standarttır.

<?xml version="1.0" ?>
<!DOCTYPE PISI SYSTEM "http://www.pardus.org.tr/projeler/pisi/pisi-spec.dtd">
<PISI>
   <Source>
       ...
  </Source>

  <Package>
       ...
  </Package>

   <History>
       ...
   </History>

</PISI>

Pspec.xml'deki bu bölümlerin içinde pek çok Tag bulunur ve bunlardan bazıları özeldir. Bu özel Tag'ların taşıdığı verilerin neler olabileceği Pardus sistemi tarafından tanınabilmesi için önceden tespit edilmiştir. Bu özel tagların alabileceği değerler ve tüm tagların kullanımı ile ilgili bilgiler Pardus geliştiricileri tarafından bir Relax NG (rng) dosyasında tutulur. Bu rng dosyaları bir XML dosyasındaki taglar hakkında bilgi alınabilecek şema dosyasıdır ve her tag burada bir şema içinde açıklanmıştır. Ancak merak etmeyin rng dosyası'da XML yapısında kolay okunup anlaşılabilir bir yapıdadır.

Pspec.xml dosyasının rng şemasının en güncel haline http://svn.pardus.org.tr/uludag/trunk/pisi/pisi-spec.rng adresinden ulaşabilirsiniz. Bir tag hakkında bilgi almanın en kolay yolu bu rng dosyasının içinde <!-- tag --> şeklinde arama yapmaktır.

[değiştir] Source bölümü

Bu bölüm pisiye paket hakkındaki temel bilgileri verir. Bunun yanında paketin Pardus sistem yapısında hangi kategori ve bölüme ait olduğu, derleme yapılırken sistemde hangi paketlerin bulunması gerektiği ve derleme işleminden önce paket kaynağına uygulanması gereken yamaların hangileri olduğu da bu bölümde tanımlanır. Bu bölüm temelde şöyle görünür;


<Source>
   <Name>Paketin adı</Name>
   <Homepage>Paketin web sayfası</Homepage>
   <Packager>
       <Name>Pisileyenin adı soyadı</Name>
       <Email>e-posta adresi</Email>
   </Packager>
   <License>Lisansı</License>
   <IsA>Paketin ait olduğu kategori</IsA>
   <IsA> </IsA>
   <PartOf> Paketin ait olduğu grup</PartOf>
   <Summary>Özet (İngilizce)</Summary>
   <Summary xml:lang="tr">Özet (Türkçe) </Summary>
   <Description>Paketin kısa tanıtımı (İngilizce)</Description>
   <Description xml:lang="tr"> Paketin kısa tanıtımı (Türkçe)</Description>
   <Archive type="sıkıştırma yöntemi" sha1sum="sha doğrulama kodu">
                     Kaynak dosyanın direk http veya ftp bağlantı adresi</Archive>
   <BuildDependencies>
       <Dependency>Varsa derleme bağımlılığı paketi</Dependency>
       <Dependency> </Dependency>
   </BuildDependencies>
   <Patches>
       <Patch>Varsa uygulanacak yama dosyaları</Patch>
       <Patch></Patch>
   </Patches>
</Source>

Bu bölümdeki IsA ve PartOf Tag'ları en çok tereddüt edilen Taglar'dır.

IsA Tag'ı paketin hangi kategoriye ait olduğunu tespit etmeye yarar, bu sayede mesela Paket Yöneticisi gibi bir arayüz'de aynı kategoriye ait paketler birlikte listelenebilir, bu Tag birden fazla tanımlanabilir. Alabileceği değerleri 2.1.1 bölümünde anlatılan pisi-spec.rng dosyasından öğrenebilirsiniz.

PartOf Tag'ı paketin sistemdeki hangi bileşene ait olduğunu tespit etmeye yarar, bu sayede kullanıcılar belli bir bileşen grubu üzerinde toplu işlemler yapabilir. Sistemdeki bileşenleri görebilmek için "pisi list-components" komutunun çıktısına bakıp paketin uygun olduğunu düşündüğünüz bileşeni buraya yazabilirsiniz. Örneğin "applications.text" metin editörleri için kullanılan bileşen grubunun adıdır.

Eğer indirdiğiniz kaynak dosyanın doğrulama kodu sitesinde yoksa "sha1sum dosya_adı" komutuyla elde edebilirsiniz.

Yama dosyaları için 3.2 bölümüne bakınız.

[değiştir] Package bölümü

Bu bölüm pisileme sonucunda ortaya çıkacak olan pisi dosyaları ile ilgili tanımlamaları taşır. Eğer bir paketten birden çok pisi dosyası oluşturulması gerekiyorsa her bir pisi dosyası için aynı pspec.xml içinde ayrı bir Package bölümü yazılır. Pisi dosyalarının oluşturulması bu bölümlere göre yapılır.

<Package>
   <Name>pisi paketinin adı</Name>
   <RuntimeDependencies>
       <Dependency versionFrom="sürüm numarası">Varsa çalışma bağımlılığı</Dependency>
       <Dependency></Dependency>
   </RuntimeDependencies>
   <Files>
       <Path fileType="türü">Kurulacak klasör</Path>
       <Path></Path>
   </Files>
</Package>

Buradaki en önemli bölüm Files bölümüdür. Bölüm 1.2'de anlatıldığı gibi, pisileme sırasında kaynak dosya açılıp varsa gerekli yamalar uygulandıktan sonra derleniyor ve /var/pisi/paket_adı/install dizinine kurulumu yapılıyordu. İşte Path Tag'ının değeri olan klasörler bu install dizininde oluşmuş olan klasörler olmalıdır. Burada belirtilen klasörlerin içeriği Pisi tarafından pisi dosyasına eklenir, Path Tag'ında belirtilmeyen klasörler eklenmez. Ancak bu klasörler pisi dosyasına eklenirken fileType ile belirtilen türe göre eklenecektir. "fileType" Özelliğinin alabileceği değerleri 2.1.1 bölümünde anlatılan pisi-spec.rng dosyasından öğrenebilirsiniz.

Zorunlu olmamakla birlikte RuntimeDependencies bölümündeki Dependency Tag'ı ile paketin çalışmak için başka hangi paketlere bağımlı olduğunu Pisi'ye bildirebiliriz. Böylece pisi dosyası kurulurken sistemde bu bağımlılıklarının bulunup bulunmadığını kontrol eder, eğer yoksa bunlar da kurulmaya çalışılır, eğer bağımlılıkları kurulamazsa bu paketin kurulumu da gerçekleşmez. Bu sayede programın doğru çalışması da garanti edilmiş olur. Dependency Tag'ının "versionFrom" gibi birkaç kullanışlı parametresi vardır, yine bunları 2.1.1 bölümünde anlatılan pisi-spec.rng dosyasından öğrenebilirsiniz.

Bir paketin hangi bağımlılıkları olduğunu öğrenmek için tek bir yol yoktur ancak daima ilk önce kaynak dosyasındaki belgelerde veya web sayfasındaki bilgilerde araştırma yapmak paket hakkında bilgi toplamak gerekir. Bazen en kolay yol programın gentoo gibi kaynak koddan kurulum yapılan dağıtımlar için yapılmış paketlerine bakmak da olabilir. Bu konu sizin pisilemek istediğiniz programı ne kadar iyi tanıyor olduğunuz veya pisileme konusunda ne kadar tecrübeli olduğunuzla ilgilidir. Anlamış olduğunuz üzere eğer pisilemek istediğiniz programın bağımlı olduğu paketler henüz pisi depolarında bulunmuyorsa önce bu bağımlılıklarını pisilemeniz gerekecektir.

[değiştir] History bölümü

<History>
   <Update release="Derleme numarası">
       <Date>Derleme tarihi</Date>
       <Version>sürüm numarası</Version>
       <Comment>Yapılan değişiklik hakkında kısa açıklama</Comment>
       <Name>Değişiklik yapanın adı soyadı</Name>
       <Email>e-posta adresi</Email>
   </Update>
   <Update>
        ...
   </Update>
</History>

Paketin her yeni derlemesinde değişikliği yapan paketçi tarafından yeni bir Update bölümü eklenerek yapılan değişiklik ve kimin hangi tarihte yaptığı gibi bilgiler kayıt edilir.

Bu bölümde dikkat edilmesi gereken konu derleme numarasıdır. Bazen paketin programcıları hata düzeltme veya yeni özellik ekleme amacıyla yaptıkları değişiklikleri yeni bir sürüm çıkartmak yerine bazı yamalar yayınlayarak duyururlar. Bazen de programınızın sizin sisteminizde daha verimli veya doğru çalışabilmesi için kaynak kodunda, belki de depaketin ayarlama dosyalarında değişikliğe neden olan bir yama uygulamanız gerekir. Yani paketin sürüm numarası veya kaynak dosyası değişmemiş olur ancak yapılan değişiklik sonucunda paketin yeni bir derlemesi yapılmak zorundadır. İşte bu verilecek yeni derleme numarası pisi dosyasının adına eklenecek ve önceki derlemelerle karışmasının önüne geçilmiş olacaktır. Derleme numarası bir öncekinin bir fazlası şeklinde devam eder.


[değiştir] actions.py

Bu dosyadaki kodlar paketin kaynak dosyasından pisileme işleminin yapıldığı bilgisayarda derlenmesi ve sanal olarak 2.1'de bahsedilen install dizinine sanal bir kurulum yapılması için pisi tarafından çalıştırılır. Python programı yapısındadır.

[değiştir] Temel Python yapısı

Python kodları kolay yazılıp okunan bir yapıdadır. Bir fonksiyon “def fonksiyonadı(argüman1, argüman2):” şeklinde, veriler de “değişken=veri” şeklinde tanımlanabilir. “#” işaretinden sonra yazılanlar açıklama olarak kullanılır. Örneğin;

#!/usr/bin/python

#Fonksiyonu tanımlama

def bir_fonksiyon(adi, soyadi):
  #Ekrana yazdır
   print(adi)
   print(soyadi)

#Değişkenlere veri ata
name=”Luke”
surname=”Skywalker”

#Fonksiyonu kullan
bir_fonksiyon(name, surname)

Ekrana “Luke Skywalker” yazacaktır. Görüldüğü gibi fonksiyonu kullanırken verilen parametrelerin değeri, fonksiyon tanımında belirtilen değişken adlarıyla fonksiyon içinde kullanılabiliyor.

Burada dikkat edilmesi gereken fonksiyon tanımından sonra fonksiyon içeriğini oluşturan kodların dört karakter boşluk içeriden başlaması gerektiği kuralıdır, yoksa girinti verilmeyen kodlar fonksiyona ait değilmiş gibi işlem görür. Her fonksiyonu da boşluk ile diğer kodlardan ayırmak kodu okumayı kolaylaştırır.

Programda bir kütüphaneye (yani başka python kodları, fonksiyonları) ihtiyaç varsa “import” ile programda kullanılabilir olması sağlanır, nereden yükleneceği de “from” ile belirtilir. Örneğin;

from pisi.actionsapi import pisitools

Böylece “pisi.actionsapi” içindeki “pisitools” dosyasındaki fonksiyonları pisitools.fonksiyon_adı(…) şeklinde kullanabiliriz.

Hepsi bu kadar, eğer pisileme yapacaksanız Python konusunda bundan daha fazla bir şey bilmenize pek gerek olmayacaktır. Çünkü paket kurulurken gerekli olan tüm işlemler için Pardus geliştiricilerinin sağladığı hazır fonksiyonlar bulunmaktadır, paket depolarındaki büyük küçük tüm paketler bu hazır fonksiyonlar kullanılarak sisteme kurulur. Bu hazır fonksiyon kütüphanesindeki fonksiyonlara genel olarak “Actions API” denir.

Tek yapmanız gereken bu kütüphanelerdeki fonksiyonları doğru parametrelerle kullanmaktan ibarettir. Bu açıdan bakınca pisi paketi yapabilmek için Python ile önceden çalışmış bir programcı olmaya gerek yoktur, sadece yukarıda bahsedilen Python yazım kurallarını ve Actions API’yi bilmek yeterlidir. Hatta Pardus geliştiricileri actions.py’de Actions API dışında bir kütüphane kullanılmamasını şiddetle tavsiye ederler.

[değiştir] actions.py

Paket derlenirken ve 1.2'de anlatılan install dizinine kurulurken, pisi sistemi bu dosyadan setup, bulid ve install fonksiyonlarını sırasıyla çalıştırır. En basit actions.py dosyası şu yapıda olmalıdır;

#!/usr/bin/python

def setup():
   #Hazırlık işlemleri

def build():
    #Derleme işlemleri

def install():
    #Kurulum işlemleri

Daha önceden kaynak dosyadan program kurmuş iseniz bunun genelde configure, make ve install komutlarının sırasıyla girilmesiyle yapıldığını biliyorsunuzdur. İşte actions.py'deki setup() fonksiyonu pisi tarafından çalıştırıldığında da configure, bulid() çalıştırıldığında make ve install() çalıştırıldığında install işlemini yapmalıyız. Ancak maalesef her paket için bu üç komutun öylece girilmesi yeterli olmuyor, örneğin configure işleminde pek çok parametre ile paketin bizim sistemimize uygun şekilde derlenmesine yardımcı olmak gerekiyor veya paketin kaynak dosyasında farklı dizinlerde bu komutları kullanmak gerekebiliyor.

  • Bu nedenle öncelikle yapmanız gereken, kurulumu yapılacak paket eğer bir program ise, varsa configure, make parametrelerini paketin dokümanlarından öğrenmek olacaktır.
  • Daha sonra da bu parametreleri ve diğer gerekli işlemleri Actinos API'deki hangi fonksiyonlarla yapacağınızı tespit etmelisiniz.
  • Bundan sonra birkaç deneme yanılma ile uygun bir configure, make ve install işlemi gerçekleştirebilirsiniz. Denemelerin sonuçlarını görmek için de 1.2 bölümünde bahsedilen /var/pisi/paket_adı/install dizininden faydalanabilirsiniz.

Sonuçta actions.py dosyasında kalıplaşmış kodlar yoktur, işlenen her paketin ihtiyaçlarına göre setup(), bulid() ve install() fonksiyonlarının kodları değişecektir. Onun için henüz hiç paket yapmadıysanız mutlaka 1.3 bölümünde belirtilen svn depolarındaki actions.py dosyalarını incelemeniz gerekecektir.

[değiştir] Actions API

Actions API burada tek tek anlatılamayacak kadar çeşitli fonksiyona sahiptir ayrıca geliştiriciler tarafından belgelendirilmiştir. http://tr.pardus-wiki.org/Pardus:ActionsAPI adresinden en güncel Actions API referansına ulaşılabilir.



[değiştir] Dizinler (comar ve files)

Bulunması zorunlu olmayan ama paketin veya sistemin ihtiyacı olan bazı dosyaları kullanılabilir yapmak için ihtiyaç halinde açılan comar ve files adında iki özel dizin tanımlanmıştır.


[değiştir] comar Dizini

Bu dizin Pardus’un temel bileşenlerinden birisi olan COMAR sistemine kayıt edilmek üzere oluşturulmuş olan dosyaları bulundurur. Bu dizinde ihtiyaca göre package.py ve service.py dosyaları bulunabilir: Her iki dosya da COMAR tarafından kullanılır.

[değiştir] package.py

Paketin kurulması veya kaldırılması zamanında sistemde bazı özel işlemler yapılması gerektiğinde COMAR bu betikteki bazı fonksiyonları çalıştırır. Eğer paket kurulmadan önce yapılması gereken özel işlemler varsa bunlar postInstall fonksiyonu içinde kodlanır. Aynı şekilde preRemove fonksiyonu paket sistemden kaldırılmadan önce yapılacak işlemler içindir. Bu dosya kabaca şöyledir;

#!/usr/bin/python

def postInstall():
   ...

def preRemove():
    ...

[değiştir] service.py

Sistemde servis olarak çalışacak uygulamalar için COMAR tarafından kullanılan betiktir. Servisin başlatılması, durdurulması veya durumu hakkında bilgi alınması gerektiğinde bu betikteki ilgili fonksiyonlar çalıştırılır. Bu dosya kısaca şöyledir;

#!/usr/bin/python

from comar.service import *

serviceType = "server"
serviceDesc = _({"en": "Servisin adı (İngilizce)",
                 "tr": " Servisin adı (Türkçe)"})

@synchronized
def start():
    ...

@synchronized
def stop():
    ...

def status():
    ...

[değiştir] COMAR Betiklerinin pakete eklenmesi

PISI sistemi COMAR klasöründeki betikleri kendiliğinden pisi paketine eklemez, bunun için pspec.xml’deki <Package> bölümüne aşağıdaki gibi ekleme yapmak gerekir;

<Provides>
   <COMAR script="package.py">System.Package</COMAR>
   <COMAR script="service.py">System.Service</COMAR>
</Provides>


[değiştir] files Dizini

Kaynak dosyaya uygulanacak yama varsa bu klasöre yerleştirilmelidir. Ayrıca kaynak pakette olmayan ama programın çalışması için gerekli olan dosyalar da burada bulunur. Örneğin programın Programlar menüsündeki ikonu gibi. Bunun yanında kaynak pakette olan ama programın bizim sistemimize uygun çalışması için değiştirdiğimiz dosyalar da olabilir. Mesela programın kaynak paketinden çıkan ayar dosyası o haliyle programdaki pek çok özelliği devre dışı bırakmış olabilir veya bizim sistemimize uygun değildir ancak içerdiği pek çok açıklama da kullanıcılar için gerekli olabilir. Bu durumda o dosyanın yanında bizim üzerinde değişiklik yaptığımız dosyanın da pakete eklenmesi için değiştirdiğimiz dosyayı bu dizine yerleştirmeliyiz.

Eğer bu klasörde yama dosyaları varsa bunların pisi tarafından kullanılabilmesi için pspec.xml içindeki Source bölümüne aşağıdaki gibi eklememiz gerekir.

<Patches>
    <Patch level="uygulanma seviyesi">yama dosyasının adı</Patch>
    <Patch>...</Patch>
</Patches>

Bu klasördeki diğer dosyaların pakete eklenebilmesi için her bir dosyayı pspec.xml içindeki Package bölümüne aşağıdaki gibi eklememiz gerekir.

<AdditionalFiles>
    <AdditionalFile owner="kullanıcı" permission="izin" target="dosyanın sistemdeki tam adresi">
                                                      dosyanın files klasöründeki adı</AdditionalFile>
    <AdditionalFile ... >...</AdditionalFile>
</AdditionalFiles>

Dosyaların her birisi için AdditionalFiles bölümünde ayrı bir AdditionalFile Tag'ı kullanmak gerekir. Burada target özelliğine dosyanın kurulum yapılacak sistemde hangi klasör kopyalanacağı dosya adıyla birlikte yazılır. Örneğin "/etc/samba/samba.conf" gibi. Owner ve permission ile bu dosyanın sistemdeki kullanıcı izinlerinin ne olacağı belirtilmiş olur. Owner sahip kullanıcı adı ve permission da 4 haneli rakamdan oluşan (chmod) yetkilendirme kodudur.



[değiştir] Diğer dosyalar

[değiştir] translations.xml

Bu dosya pspec.xml dosyası için bir uluslararasılaştırma dosyasıdır, pspec.xml içindeki açıklama ve özet bölümleri gibi çok dilli olması gereken Tag'lar bu dosya içerisine alınarak pspec.xml dosyasının daha rahat okunabilir olması ve çeviri işlemlerinin daha kolay yapılmasını sağlar. Eğer pisi dosyanızda en fazla iki dile ait açıklama Tag'ları bulunacaksa bunlar için ayrı bir translations.xml dosyasına gerek olmayabilir ancak çok sayıda dil desteği olmasını istediğiniz bir pisi dosyası için bu şekilde ayırmanız çok iyi olacaktır. Bu dosya pspec.xml ile aynı dizinde bulunmalıdır. Bu dosyanın bir örneğine http://svn.pardus.org.tr/pardus/2007/kernel/kernel/ adresinden ulaşabilirsiniz.


[değiştir] components.xml

pspec.xml Dosyasındaki PartOf Tag'ı yerine bu dosyayı kullanabilirsiniz, bu dosya pspec.xml dosyasının bir üst dizininde olmalıdır, bir örneğine http://svn.pardus.org.tr/pardus/2007/kernel/ adresinden ulaşabilirsiniz. Bu dosya bir grup paketiniz varsa kullanışlı olabilir, bütün paketlerinizi bir klasörde kendilerine ait alt klasörler içinde bulundurursanız her paketin bir üst klasöründe aynı component.xml dosyası olacağından işiniz kolaylaşmış olur.



[değiştir] Pisileme Örnekleri Bağlantıları

Yeni başlayanlar için Kmess ve Tuxracer Paketlerinin pisilenmesi

Örnek bir Python programının pisilenmesi

aalib paketi pisileme örneği

Kaya Oğuz'un leafpad pisileme örneği




--Armut 19:03, 20 Nisan 2008 (UTC)