Arch linux paketi geliştirirken aşşağıda ki paket kurallarına uygun olarak geliştirme yapabilirsiniz eğer ki yeni bir paket geliştirmek ve katkıda bulunmak istiyorsanız o zaman PKGBUILD ve makepkg 'nin man sayfalarına da ayrıca bakmanız gerekmektedir .
# Bakımı Yapan Kişi: İsminiz <[email protected]>
pkgname=İSİM
pkgver=VERSİYON
pkgrel=1
pkgdesc=""
arch=()
url=""
license=('GPL')
groups=()
depends=()
makedepends=()
optdepends=()
provides=()
conflicts=()
replaces=()
backup=()
options=()
install=
changelog=
source=($pkgname-$pkgver.tar.gz)
noextract=()
md5sums=() #updpkgsums kullanarak otomatik doldurma
build() {
cd "$pkgname-$pkgver"
./configure --prefix=/usr
make
}
package() {
cd "$pkgname-$pkgver"
make DESTDIR="$pkgdir/" install
}
pacman ve abs paketleri için diğer örnekler
/usr/share/pacmandizinin de bulunmaktadır.
- Paketler asla
/usr/local
dizinine yüklenmemeli - makepkg içerisinde ki fonksiyon ve değişken isimleri ile çakışabileceğinden dolayı,PKGBUILD scriptleri içine yeni değişkenler ve fonksiyonlar tanımlanmamalı.
- Eğer gerçekten yeni bir fonksiyon ya da değişken tanımlanması gerekliyse ,değişkenin adıyla birlikle
_
(Alt tire) kullanılması gereklidir.
_yenidegisken=
-
Herhangi bir durumda
/usr/libexec
kullanımını önlemek amacıyla onun yerine/usr/lib/$pkgname
kullanılmalı. -
/etc/makepkg.conf
dosyasından paket yapılandırıcı yardımıyla paket meta verilerini tutan dosyanın içerinde kipackager
kısmı değiştirilebilir. Alternatif olarak~/.makepkg.conf
dosyasını oluşturup üzerine yazma olarak istenilen değişikliği aynı şekilde gerçekleştirebilirsiniz. -
.install dosyası
kullanarak yükleme yapılırken bütün önemli mesajlar kullanıcıya gösterilir.Örneğin bir paket fazladan kuruluma ihitiyaç duyarsa, yolu gösterilmelidir. -
Paket bağımlılıkları en yaygın paketleme hatalarındandır. Paket bağımlılıklarını bulurken lütfen yeteri kadar zamanınızı harcayarak dikkatli bir şekilde bağımlılıkları belirleyin.
namcap
aracı bu konuda size yardımcı olabilir. Bu araç PKGBUILD ve paketin tarball'ını analiz ederek; eksik bağımlılıkları,izinleri, gereksiz bağımlılıkları ve yaygın hataları göstericektir. -
Herhangi bir paketin çalışmasında kullanılması zorunlu olmayan bağımlılık ya da
dependsarray
içinde olmayan fonksiyonlar ,optdepends
içerisine eklenmelidir.
optdepends=('cups: printing support'
'sane: scanners support'
'libgphoto2: digital cameras support'
'alsa-lib: sound support'
'giflib: GIF images support'
'libjpeg: JPEG images support'
'libpng: PNG images support')
Yukarıda ki örnek
extraiçerisin de bulunan
winepaketinden alınmıştır. optdepends otomatik olarak yükleme ve yükseltme durumlarını yazdırmaktadır dolayısıyla
.installiçerisinde bu tip bilgilerin tutulmasına gerek yoktur.
-
Paket açıklamasını yazarken kesinlikle paketin kendi ismini açıklamaya eklemeyin.Örneğin "Nedit X11 İçin Bir Text Editördür". Bu örnek daha da basit hale getirilerek ve 80 karakteri geçmiyecek şekilde şu hale getirilebilir. "X11 İçin Text Editörü".
-
PKGBUILD dosyası içerisinde her bir satır yaklaşık olarak 100 katakterin altında olmalı.
-
PKGBUILD içerinde mümkün olduğunca boş satırların bulunmaması gerekli.
-
PKGBUILD dosyasının yukarıda gösterildiği gibi sırasına göre yazılması gayet güzel bir pratik olur. Bu durum PKGBUILD dosyası için zorunlu birşey değil ama tam bir bash sözdizimi(yapısı) için gerekli.
-
"$pkgdir"
ve"$srcdir"
gibi yinelenen değişkenler boşluklar içerebilir. -
Paketlerin bütünlüğünü sağlamak amacıyla , bütünlük sağlayan değişkenlerin(sha1,sha256,md5...) doğru değerler içerdiğinden emin olunması gerekiyor. Bunlar
updpkgsums
aracı kullanılarak güncellenebilir.
-Paket isimleri yanlızca alfanümerik karakterleri içerebilir. @,.,_,+,- başlayan isimler kabul edilmemektedir ve bütün paket isimleri küçük harfli olmalıdır.
-
Paket isimleri ana versiyonun numarasını içermemelidir örneğin eğer libfoo v2.3.4 gibi bir versiyonu varsa ve öyle kullanılıyorsa, paket ismi olarak
libfoo2
kullanılmamalıdır. -
Paket versiyonları, paket geliştiricisinin yayınladığı versiyonlarda olmalıdır. Versiyonlar harfler içerebilir (nmap versiyonu: 2.54BETA32) . Versiyon numaraları tireleri içermez. Harfleri,sayıları ve periotları içerir.
-
Arch linux paketleri için, paket sürümleri farklıdır. Bu durum kullanıcıların yeni ve eski paket mi olduğu hakkında ayrım yapmasını sağlar. Eğer ki yeni oluşturulmuş bir paket ve versiyonu ilk versiyonsa, sürüm numarası olarak 1 den başlar daha sonra diyelim ki pakete yeni optimizasyonlar getirildi ve yeniden yayınlandı dolayısıyla versiyon numarası artıcak. Yeni bir sürüm çıktığında ise paket yayın sayısı 1'e düşürülür. Paket yayın etiketleri ,versiyon etiketleri gibi isimlendirme kısıtlamalarını takip eder.
-
Ayar dosyaları
/etc
dizini içerisinde bulunmalıdır. Eğer fazladan ayar dosyaları varsa , alt dizin kullanılarak/etc
içerisinde düzenli ve temiz bir şekilde tutulabilir./etc/paket_ismi
kullanılarak bu dizin içerisin de ayar dosyaları ve gerekli ayarlamaları yapılabilir,barındırılabilir. Örneğin apachenin kullandığı/etc/httpd
gibi. -
Paket dosyaları aşşağıdaki kuralları takip etmek zorundadır:
Bölüm 1 | Bölüm 2 |
---|---|
/etc | Gerekli sistem ayar dosyaları |
/usr/bin | Derlenmişler(Binaryler(ikililer)) |
/usr/lib | Kütüphaneler |
/usr/include | Header Dosyaları |
/usr/lib/{pkg} | Modüller,eklentiler vb. |
/usr/share/doc/{pkg} | Uygulama dökümantasyonları |
/usr/share/info | GNU Info sistem dosyaları |
/usr/share/man | Man sayfaları |
/usr/share/{pkg} | Uygulama verileri |
/var/lib/{pkg} | Kalıcı uygulama depolama |
/etc/{pkg} | {pkg} için ayar dosyaları |
/opt/{pkg} | Geniş, kendi kendine yeten, başka bağımlılığı olmayan paketler |
-
Paketler aşşağıda ki dizinlerden hiçbirini içermemelidir. /bin /sbin /dev /home /srv /media /mnt /proc /root /selinux /sys /tmp /var/tmp /run
makepkg paket yapılandırmaları için kullandıldığında, otomatik olarak şu adımları takip eder:
- Paket bağımlılıkları ve makedepends yüklü olup olmadığını kontrol eder
- Kaynak dosyalarını sunucudan indirir
- Kaynak dosyalarının bütünlüğü kontrol eder
- Kaynak dosyaları çıkartır
- Gerekli patchleme varsa, yapar
- Yazılımları yapılandırır ve yüklemeleri sahte dizine yapar
- Binaryden sembolleri ayırır.
- Debug sembollerini de kütüphanelerden ayırır.
- Manual ve info sayfalarını sıkıştırma yapar.
- Her paketin meta verilerini içeren meta dosyasını oluşturur.
- Paket dosyası içerisine sahte root dizinini sıkıştırır.
- Paket dosyalarını , ayarlanmış hedef dizin içerisin de depolar.
Eğer paket mimariye bağımlıysa arch dizisi x86_64
bilgisini içermeli. Eğer mimariden bağımsızsa any
bilgisini içermeli.