Debian Paket Yapımı :.
Önsöz
© 2004 Osman Yüksel <yuxel (~) sonsuzdongu (.) com>
Bu döküman, GNU GPL lisansının 2 ve sonraki sürümleri koşullarında dağıtılabilir.
Dökümandakilerin uygulanmasından çıkacak sorunlardan yazar sorumlu tutulamaz.
Son Güncellenme : 15-11-2004
İçerik
1 Başlangıç
Debian'ı en popüler dağıtımlardan birisi yapan şüphesiz ki paket yönetim sistemidir. Neredeyse tüm paketleri resmi depolardan (http://www.debian.org) veya gayri resmi yansılardan (http://www.apt-get.org) edinmek mümkün. Ancak bazen istediğiniz programı istediğiniz koşullarda paketlenmiş olarak bulamıyorsunuz. Bu durumda kendiniz kaynak koddan derlemek zorunda kalıyorsunuz. Daha sonraki kullanımlar veya arkadaşlarınızla paylaşmak için bu derleme işlemini bir paket olarak kenarda köşede bekletmek isteyebilirsiniz. Bu belge adım adım bir debian paketi yapmayı anlatacaktır.
1.1 Gerekli Programlar
Bir debian paketi yapmak için bir kaç araca ihtiyacınız olacak. Bunları
apt-get install build-essential lintian debhelper dh-make devscripts fakeroot
komutuyla kurun.
Burada build-essential, C kütüphanesi, gcc, g++, make, dpkg-dev gibi geliştirme ilgili programlarını; debhelper ise perl,coreutils, file, binutils, po-debconf gibi
debian/rules dosyasını düzenlerken kullanılabilecek programları kurar.
Bunların yanında developers-reference ve debian-policy gibi güzel belgeleri de kurabilirsiniz.
2 Program Seçimi
2.1 Program Seçimi
Bir programı paketlemeden önce düşünmeniz gereken bir kaç nokta var;
- Program dağıtımda var mı, yok mu ?
* Bunu apt-cache search program_adi şeklinde bir aramayla görebilirsiniz.
- Programı paketleme ile uğraşan başka birileri var mı?
* http://www.de.debian.org/devel/wnpp/being_packaged adresinden üzerinde çalışılan paketlerin listesini bulabilirsiniz.
- Programın bir lisansı olmalı!
* Mümkünse Debian Özgür Yazılım Rehberi'ne uygun bir lisansı olan bir programı paketleyin. Eğer bu lisanslardan birine uymuyorsa ancak paketlenmesinde/dağıtılmasında bir sorun yok ise yine de bu programı paketleyebilirsiniz.
Bu lisanslara /usr/share/common-licenses/ altından ulaşabilirsiniz.
- Program root haklarını kullanacak bir güvenlik açığına, setuid,setgid gibi özniteliklere sahip olmamalı veya root hakkı ile port açan bir arka plan programı (deamon) olmamalı.
- Belgelendirmesi iyi olmalı ve kodları anlaşılır olmalı.
- Program sorunsuz çalışmalı ve bir çok kez denenmeli.
2.2 Programı edinme ve deneme
Programınızı belirledikten sonra kaynak kodunu edinin.Genelde unix programları .tgz, .gz, .bz2 gibi sıkıştırılmış paketlerde gelirler. Paketi ev dizininiz içinde bir klasöre (örn: ~/paket/ ) içine açın. Daha sonra (genelde) bu klasör içinde bir klasör daha bulacaksınız ( örn : ~/paket/beedon-0.1.9 ) bu klasör içinde kurulumu anlatan INSTALL veya README gibi dosyalar olacaktır. Kurulumda alınacak parametreleri ve kurulumun inceliklerini bu belgelerden öğrenebilirsiniz. Genelde kaynak koddaki programlar /usr/local/* altına kurulumak ister. Ancak bu genelde sadece kaynakktan kurulan programlar için yerel bir klasördür. Paketleme için
kaynak kodu düzenlemeniz veya `rules` dosyasını düzenlemeniz gerekebilir.
Çoğu program bir `configure` betiği ile gelir. Daha sonra `make` ve `make install` ile kurulum tamamlanır.
Şimdi siz de INSTALL veya README'de anlatılan şekilde parametreler ile
./configure
make
make install
komutları ile kurulumu deneyin. Program kurulduktan sonra çalışıp çalışmadığını kontrol edin.
2.3 Paket isimlendirme ve sürüm numarası
Programı paketlemeye temiz bir kaynak koddan başlamalısınız. Dizine açtığınız klasör adını <paket_adı>-<sürüm_no> şeklinde değiştirin (örn : beedon-0.1.9). Eğer klasor birden fazla kelime içeriyorsa bunları birleştirin (örn : foo bar 1.19 -> foobar-1.19 )
2.4 Debianlaştırma
Program dizininde
export DEBEMAIL="[email protected]"
export DEBFULLNAME="Osman Yuksel"
ile paket sağlayıcı(maintainer) bilgilerini girin. Daha sonra da
dh_make
komutunu verin. Burada sizden oluşturmak istediğiniz paketin tipini (tek binary, çoklu binary, kütüphane, veya kernel modulü) seçmeniz isteniyor. Bunu da seçip "debianlaştırma" işlemini bitiriyorsunuz.
3 debian/ klasörü altındaki dosyalar
3.1 `control` dosyası
Bu dosya, paket yönetim sistemi için gerekli bilgileri düzenlememizi sağlar,dosya içeriği aşağıdaki gibidir
Source: beedon #program adı
Section: unknown #ilgili bölüm
Priority: optional #öncelik
Maintainer: Osman Yuksel <[email protected]> #paket sağlayıcısı bilgileri
Build-Depends: debhelper (>= 4.0.0) #bağımlılıkları
Standards-Version: 3.6.0 #uygun standartlar
Package: beedon #paket adı
Architecture: any #mimari
Depends: ${shlibs:Depends}, ${misc:Depends} #bağımlılıkları
Description: <insert up to 60 chars description> #kısa açıklama
<insert long description, indented with spaces> #uzun açıklama
* # ile başlayan kelimeler açıklamalardır. Bunlara göre önündeki değerleri değiştirebilirsiniz.
Section
Debian bölümlere ayrılmıştır; main(özgür yazılımlar), non-free(özgür olmayan yazılım), contrib (özgür olmayan bir yazılıma bağımlılığı olan yazılım) . Bu bölümler de ortak olarak
'admin' ->yönetim programları
'base' ->temel araçlar
'devel' ->geliştirme araçları
'doc' ->belgelendirme
'libs' ->kütüphaneler
'mail' ->e-posta
'net' ->ağ araçları ve arka plan programları(deamons)
'x11' ->yukarıdaki kategorilere uymayan X(Grafik Ortam) programları
şeklinde bölümlere ayrılır. Bunların kombinasyonundan bir "Section" parametresi hazırlayabilirsiniz.
main/base , non-free/net v.s.
Depends
Bu bölüme paketin bağımlı olduğu paketler yazılır.
Aynı şekilde bu bölüme paketin "gerektirdiği", "önerdiği", "önceden önerdiği(predepends)", "çakıştığı", "sağladığı " ve "yerine geçtiği" paketleri de belirleyebiliriz.
- Depends
Burda paketin bağımlı olduğu paketler yazılır
- Reccommends
Paket için bağımlı olmayan ancak kullanımı gerekli paketler.
- Suggests
Paket için gerekli olmayan ancak kullanımı önerilen paketler.
- Pre-Depends
Bu "Depends" den daha güçlüdür. Eğer paket daha önceden düzgün kurulup yapılandırılmamışsa bu paket kurulumaz. Bunun kullanımı pek önerilmez
- Conflicts
Kurulum sırasında kurulumu çakışan paketler
- Provides
Bazı paketler bir paketin görevini üstlenebilir, örn: exim, postfix, qmail farklı sunuculardır, ancak debian'da tek bir "mail sunucu" vardır ve örneğin exim üstüne kurulan bir postfix bu görevi devralır, daha fazla bilgi için /usr/share/doc/debian-policy/virtual-package-names-list.txt.gz dosyasına göz atın.
- Replaces
Kurulumdan sonra paket başka bir paketin yerini alabilir.(örn: libqt-mt, libqt'nin yerini alabilir)
Sonuçta
Depends: sinek (>= 3.1), bocek (= 2.2)
Conflicts: f4l
Suggests: lale
Recommends: muhasebeci (>> 0.1)
Replaces: beelog (<= 0.1)
gibi bir kullanım olabilir
Description
Burada paket hakkında genel bir bilgi verilir. Ilk satır paketi tanımlayan satırdır, diğer satırlar ise detaylı anlatım için kullanılır. Örnek kullanım
Description: Beedon bir içerik yönetim sistemidir
Beedon gelişimi sürmekte olan, PHP ile yazılmış bir içerik yönetim sistemidir.
MySQL veritabanı ile çalışmaktadır. Çoklu dil destekli ve modüler bir yapıdadır.
gibi olabilir
3.2 `copyright` dosyası
Bu dosya, paket hakkındaki lisans bilgilerini içerir. dh_make öntanımlı olarak
This package was debianized by Osman Yuksel <[email protected]> on
Sun, 14 Nov 2004 22:36:43 +0200.
It was downloaded from <fill in ftp site>
Copyright:
Upstream Author(s): <put author(s) name and email here>
License:
<Must follow here>
gibi bir copyright dosyası oluşturur. Eğer program Debian Özgür Yazılım Rehberi'ne uygun
bir lisansa sahipse, /usr/share/common-licenses/ altındaki bu dosyalara bağ verebilirsiniz. Örnek copyright dosyası
aşağıdaki gibi olabilir;
This package was debianized by Osman Yuksel <[email protected]> on
Sun, 14 Nov 2004 22:36:43 +0200.
It was downloaded from http://www.beedon.org
Copyright:
Upstream Author(s): sman Yuksel <[email protected]>
License:
Bu yazılım, GNU Genel Kamu Lisansı (GPL) koşullarına uygun olarak dağıtılabilir.
GPL lisansına /usr/share/common-licenses/GPL dosyasından ulaşabilirsiniz
3.3 `changelog` dosyası
Bu dosya, yazılımın gelişimini anlatan bir seyir defteridir. Dosyaya özel bir biçimde değişiklikleri kaydedebilirsiniz.
dh_make öntanımlı olarak
beeedon (0.1.9-1) unstable; urgency=low
* Initial Release.
-- Osman Yuksel <[email protected]> Sun, 14 Nov 2004 22:36:43 +0200
gibi bir dosya oluşturur. Örnek changelog dosyası aşağıdaki gibi olabilir;
beeedon (0.1.9-1) unstable; urgency=low
*Çoklu dil destekli, cookie destekli yeni sürüm duyruldu (alfa9)
*Altyapı çok dilli olacak şekilde değiştirilmeye başlandı (alfa9 pre)
*Modülleri, blokları ve menü'yü yönetim için yönetim modülü eklendi (alfa8)
*Haber modülü ve son 10 haberi gösteren blok eklendi (alfa7)
*Yönetim paneli oluşturuldu (alfa5)
*Kullanıcı için blok oluşturuldu. (alfa4)
*Kullanıcı modülü oluşturuldu. (alfa3)
*Kurulum uygulaması oluşturuldu. (alfa2)
*ilk html şablon oluşturuldu.
-- Osman Yuksel <[email protected]> Sun, 14 Nov 2004 22:36:43 +0200
3.4 `rules` dosyası
Bu dosya paketin kurulumunda rol alan Makefile gibidir. dh_make'in öntanımlı oluştuduğu dosyaya bir göz atalım.
1 #!/usr/bin/make -f
2 # -*- makefile -*-
3 # Sample debian/rules that uses debhelper.
4 # This file was originally written by Joey Hess and Craig Small.
5 # As a special exception, when this file is copied by dh-make into a
6 # dh-make output file, you may use that output file without restriction.
7 # This special exception was added by Craig Small in version 0.37 of dh-make.
8
9 # Uncomment this to turn on verbose mode.
10 #export DH_VERBOSE=1
11
12
13
14
15 CFLAGS = -Wall -g
16
17 ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
18 CFLAGS += -O0
19 else
20 CFLAGS += -O2
21 endif
22
23 configure: configure-stamp
24 configure-stamp:
25 dh_testdir
26 # Add here commands to configure the package.
27
28 touch configure-stamp
29
30
31 build: build-stamp
32
33 build-stamp: configure-stamp
34 dh_testdir
35
36 # Add here commands to compile the package.
37 $(MAKE)
38 #docbook-to-man debian/beedon.sgml > beedon.1
39
40 touch build-stamp
41
42 clean:
43 dh_testdir
44 dh_testroot
45 rm -f build-stamp configure-stamp
46
47 # Add here commands to clean up after the build process.
48 -$(MAKE) clean
49
50 dh_clean
51
52 install: build
53 dh_testdir
54 dh_testroot
55 dh_clean -k
56 dh_installdirs
57
58 # Add here commands to install the package into debian/beedon.
59 $(MAKE) install DESTDIR=$(CURDIR)/debian/beedon
60
61
62 # Build architecture-independent files here.
63 binary-indep: build install
64 # We have nothing to do by default.
65
66 # Build architecture-dependent files here.
67 binary-arch: build install
68 dh_testdir
69 dh_testroot
70 dh_installchangelogs
71 dh_installdocs
72 dh_installexamples
73 # dh_install
74 # dh_installmenu
75 # dh_installdebconf
76 # dh_installlogrotate
77 # dh_installemacsen
78 # dh_installpam
79 # dh_installmime
80 # dh_installinit
81 # dh_installcron
82 # dh_installinfo
83 dh_installman
84 dh_link
85 dh_strip
86 dh_compress
87 dh_fixperms
88 # dh_perl
89 # dh_python
90 # dh_makeshlibs
91 dh_installdeb
92 dh_shlibdeps
93 dh_gencontrol
94 dh_md5sums
95 dh_builddeb
96
97 binary: binary-indep binary-arch
98 .PHONY: build clean binary-indep binary-arch binary install configure
(satır numaralarını ben ekledim)
15 ile 21. satırlar arasındaki seçenekler, derleme seçenekleridir. Daha fazla bilgiye Debian Policy'de Bölüm: "11.1 Binaries"'den ulaşabirsiniz.
33 ile 40. satırlar arasındaki seçenekler, oluşturma (build) kuralları içindir. Bu kurallar programın
Makefile dosyası ile birlikte çalıştırılırlar.
42 ile 50. satırlar arasındakiler de silme(clean) kuralları içindir.
52 ile 61. satırlar arasındakiler de kurulum (install) kuralları içindir. Bu Makefile içindeki `install` kurallarını
çalıştırır ancak programı $(CURDIR)/debian/beedon içine kurar. $(CURDIR) , şu anda bulunduğumuz yerdir.
67 ile 95. satırlar arasındakiler de pakette kullanılacak debhelper eylemlerini belirtir. Örneğin satır 94'teki `dh_md5sums`, paketteki tüm dosyaların
md5 hash'lerini almaya yarar. Bu kurallar hakkında daha fazla bilgi için `man debhelper` klavuz sayfasına göz atabilirsiniz
PS: Beedon'da derlenecek herhangi bişey olmadığı için build, clean ve install kurallarını kaldırıp install kuralı
olarak dosya kopyalattırabiliriz.
3.5 Diğer dosyalar
Bu dosyalar bir pakette olması zorunlu olmayan ancak bazı olayları kolaylaştırabilen dosyalardır.
Bu dosyaları kullanmak istiyorsanız yapmanız gereken birkaç şey var.
- Dosyaların ne işe yaradığını araştırmak ( Debian Policy ) ve gerekliyse dosyaları düzenlemek
- Eğer başında veya sonunda .ex uzantısı varsa bunları silmek
- Eğer gerekliyse `rules` dosyasını düzenlemek
README.Debian -> BeniOku dosyasıdı
conffiles.ex -> Yeni bir program kurarken eski ayar dosyalarınız olabilir ve bu dosyayı
korumak isteyebilirsiniz. Debian size bunun için bir fırsat sunuyor. Eğer bir ayar dosyanız var ise bunu conffiles.ex dosyasında belirtebilirsiniz.
cron.d.ex -> Eğer yazılım belli zamanlarda belli işlevleri gerektiriyorsa bu dosyayı düzenleyebilirsiniz.
dirs -> Normal kurulumda oluşmayan ancak ihtiyacımız olacak klasörleri burdan oluşturabiliriz.
docs -> Eğer belgeler varsa burdan belgeleri belirleyebiliriz.
emacsen-*.ex -> Eğer yazılım kurulum sırasında bir Emacs dosyasını destekliyorsa burdan belirtebiliriz.
init.d.ex -> Eğer başlangıçta çalıştırılmasını istediğimiz bir dosya varsa dosyayı burdan duzenleyebiliriz.
manpage.1.ex, manpage.sgml.ex -> Bir klavuz sayfası varsa burdan düzenleyebiliriz.
menu.ex -> Pencere yöneticileri tarafından kullanılan menü girdisi için bu dosyayı düzenleyebiliriz.dh_make öntanımlı olarak
?package(beedon):needs="X11|text|vc|wm" section="Apps/see-menu-manual"\
title="beedon" command="/usr/bin/beedon"
gibi bir girdiye sahip. "section" kısımndaki özellikler için /usr/share/doc/debian-policy/menu-policy.html dosyasına göz atabilirsiniz.
watch.ex -> watch dosyası için `man uscan` ve `man uupdate` klavuz sayfalarına göz atın.
ex.package.doc-base -> Bu klavuz sayfaları ve diğer dökümanlar haricindeki dökümantasyonları düzenlemeye yardımcı olur.
postinst.ex, preinst.ex, postrm.ex, prerm.ex -> Eğer program kurulumundan sonra, kurulumundan önce veya program kaldırdıktan sonra ve kaldırmadan önce yapılacak işlemler
varsa bu dosyalarda belirtilir.
4 Paketi Oluşturma
Paket dizini içinde
dpkg-buildpackage -rfakeroot
gibi bir komutla
- `debian/rules clean` ile temizleme
- `dpkg-source -b` ile kaynak paketini oluşturma
- `debian/rules build` ile programı oluşturma(build)
- `debian/rules binary` ile ikili paketi oluşturma/li>
- `gnupg` ile kaynak .dcs dosyasını imzalama
- `dpkg-genchanges` ve `gnupg` ile .changes dosyasına değişiklikleri kaydetme
gibi olayların hepsini yapmış olackasınız.
* Paketteki hataları kontrol etmek için ise oluşan changes dosyasını lintian ile bir test edin.
lintian -i beedon_0.1.9-1_i386.changes
5 Kaynakça
|