Artık şimdi dpkg-buildpackage(1)'in asıl paketi oluşturmak için kullanacağı gerçek kurallara bakmalıyız. Bu dosya aslında bir diğer Makefile dosyasıdır, fakat üst düzey kaynaktaki(ler)den farklıdır. debian/ içindeki diğer dosyalardan farklı olarak, bu çalıştırılabilir olarak imlenmiştir.
Her rules dosyası, diğer Makefile dosyaları gibi, kaynağın nasıl işleneceği ile ilgili çeşitli kurallar içerir. Her kural gerçeklenmesi gereken hedeflerden, dosya adlarından veya eylem adlarından (örn. build: veya install:) oluşur. Çalıştırmak istediğiniz kurallar komut satırı argümanları olarak çağrılır (./debian/rules build veya make -f rules install gibi). Hedef isminden sonra, bağımlılığı, kuralın bağlı olduğu program veya dosyanın ismini kullanabilirsiniz. Bundan sonra, sekme ile ayrılmış herhangi bir sayıda komut gelebilir. Yeni bir kural ilk sütunda yeni bir hedef bildirimi ile başlar. Boş satırlar ve `#' (diyez) ile başlayan satırlar yorum satırı olarak algılanır ve göz ardı edilir.
Muhtemelen biraz kafanız karıştı, fakat dh_make'in oluşturduğu öntanımlı rules dosyasını incelerken hepsi netleşecektir. Ayrıca, `info make'i daha fazla bilgi için okuyabilirsiniz.
dh_make'in oluşturduğu
rules dosyası için bilinmesi gereken, onun sadece bir öneri oluşudur. Basit paketler için çalışacak fakat karmaşık olanlar için çalışmayacaktır, ihtiyaçlarınıza uygun hale gelmesi için bu dosyadan çıkarma ve bu dosyaya ekleme yapmaktan korkmayın. Değiştirmemeniz gereken tek şey kurallardır, çünkü tüm araçlar
Debian Politika Kılavuzunda belirtildiği gibi bu isimleri kullanmaktadır.
dh_make'in bizim için oluşturduğu (yaklaşık) bir rules dosyası:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
#!/usr/bin/make -f
# Sample debian/rules that uses debhelper.
# GNU copyright 1997 to 1999 by Joey Hess.
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
# This is the debhelper compatibility version to use.
export DH_COMPAT=4
CFLAGS = -g
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
CFLAGS += -O0
else
CFLAGS += -O2
endif
build: build-stamp
build-stamp:
dh_testdir
# Add here commands to compile the package.
$(MAKE)
#docbook-to-man debian/gentoo.sgml > gentoo.1
touch build-stamp
clean:
dh_testdir
dh_testroot
rm -f build-stamp
# Add here commands to clean up after the build process.
-$(MAKE) clean
dh_clean
install: build
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs
# Add here commands to install the package into debian/gentoo.
$(MAKE) install DESTDIR=$(CURDIR)/debian/gentoo
# Build architecture-independent files here.
binary-indep: build install
# We have nothing to do by default.
# Build architecture-dependent files here.
binary-arch: build install
dh_testdir
dh_testroot
# dh_installdebconf
dh_installdocs
dh_installexamples
dh_installmenu
# dh_installlogrotate
# dh_installemacsen
# dh_installpam
# dh_installmime
# dh_installinit
dh_installcron
dh_installman
dh_installinfo
# dh_undocumented
dh_installchangelogs ChangeLog
dh_link
dh_strip
dh_compress
dh_fixperms
# dh_makeshlibs
dh_installdeb
# dh_perl
dh_shlibdeps
dh_gencontrol
dh_md5sums
dh_builddeb
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install
|
Gerçek debian/rules dosyasında, satırbaşlarındaki boşluklar sekme karakterleridir.
1. satırdakine benzer satırlara muhtemelen daha önce kabuk veya Perl betiklerinizden aşınasınızdır. Bu, işletim sistemine bu dosyanın /usr/bin/make ile yorumlanacağını söyler.
6 ve 9. satırlardaki DH_* değişkenlerinin anlamları kısa açıklamalardan anlaşılıyor olmalı. DH_COMPAT ile ilgili ayrıntılı bilgi için, debhelper(1) kılavuz sayfasının "Debhelper uyumluluk seviyeleri" ("Debhelper compatibility levels") bölümünü okuyunuz.
11'den 16'ya kadar olan satırlar
DEB_BUILD_OPTIONS parametreleri için destek iskeleti görevi görür,
Debian Politika Kılavuzunun 11.1 "İkilikler" ("Binaries") bölümünde anlatılmıştır. Temelde, bu şeyler ikilik paketin hata ayıklama sembolleriyle beraber mi oluşturulacağını ve kurulum sırasında bunların ayıklanıp ayıklanmayacağını kontrol eder. Yine, bu sadece bir iskelettir, yapmanız gerekenler için bir ipucudur. Üst düzey derleme sisteminin (upstream build system) hata ayıklama sembollerini nasıl dahil ettiğini, kurulumda bunları nasıl ayırdığını ve bunu sizin nasıl gerçekleyeceğinizi incelemelisiniz.
Genellikle CFLAGS değişkenini kullanarak gcc'ye -g seçeneğiyle derlemesini söyleyebilirsiniz - eğer bu sizin paketiniz için uygunsa; build kuralı içerisindeki $(MAKE) çağrısının sonuna CFLAGS="$(CFLAGS)" ekleyerek değişkeni türetiniz (aşağıya bakınız). Alternatif olarak, eğer paketiniz bir autoconf configure betiğini kullanıyorsa, yukarıdaki dizgeyi build kuralındaki ./configure'nin öncesine ekleyebilirsiniz.
Hata ayıklama sembollerin ayıklama konusuna gelirsek, programlar genelde ayıklanmamış olarak kurulacak şekilde yapılandırılmışlardır ve çoğunlukla bunu değiştirecek bir seçenek yoktur. Ne büyük şans ki, DEB_BUILD_OPTIONS=nostrip bayrağını tespit edip sessizce çıkacak olan dh_strip(1) aracına sahipsiniz.
18'den 26'ya kadar olan satırlar
build kuralını (ve onun çocuğu olan
build-stamp) açıklar. Bu kural,
make'i bu programı derlemek için kullanılacak olan kendi Makefile dosyası ile çalıştırır. Eğer programınız ikilikleri derlemek için GNU yapılandırma araçlarını kullanıyorsa, kesinlikle
/usr/share/doc/autotools-dev/README.Debian.gz dosyasını okuyunuz. Docbook'tan kılavuz sayfası üretme örneğine ileride
manpage.1.ex, manpage.sgml.ex bölümünde değineceğiz.
28-36 arası satırlarda belirtildiği gibi clean kuralı ile ilgili; paketin derlenmesi sonucu üretilen ve artık ihtiyaç duyulmayan öğeleri temizler. Bu kural her zaman çalışır olmalıdır (hatta kaynak ağacı temizlenmiş olsa bile!), dolayısiyle lütfen zorlayıcı parametreleri kullanın (örn. rm için bu -f'dir) veya make'in geri dönüş değerlerini (hataları) ihmal etmesini komut isminden önce bir `-' kullanarak sağlayın.
Kurulum işlemi, 38. satırdaki install kuralı başlar. Temel olarak programın Makefile dosyasındaki install kuralını çalıştırır, fakat kurulumu $(CURDIR)/debian/gentoo dizinine yapar - gentoo'nun Makefile dosyasında kurulumun kök dizini olarak $(DESTDIR) kullanmamızın sebebi budur.
Açıklama satırındada belirtildiği gibi, 48. satırdaki binary-indep kuralı, mimariden bağımsız paketleri derlemekte kullanılır. Böyle birşeye sahip olmadığımızdan burada hiçbir şey yapmayacağız.
Bir sonraki kuralda, 52 den 79'a kadar olan satırlardaki
binary-arch kuralı, paketin
Debian Politika Kılavuzuna uyumluluğunu sağlamak için paket dosyalarınıza çeşitli işlemler uygulayan bazı
debhelper yardımcı uygulamalarını çağırır.
Eğer paketiniz `Architecture: all' (Tüm mimarilerde derlenir) türü bir paketse, binary-arch kuralını boş bırakıp, paketinizi derlemek için gerekli tüm komutları binary-indep kuralına eklemeniz gerekmektedir.
debhelper araçlarının isimleri dh_ ile başlar ve devamı aracın ne yaptığının açıklamasıdır. İsimleri yeterince açıklayıcı olmasına rağmen bir miktar daha açıklama yapabiliriz:
- dh_testdir(1) doğru dizinde olup olmadığınızı kontrol eder (örn. kaynak ağacının kökü).
- dh_testroot(1)binary-arch, binary-indep ve clean kuralları için gerekli root izinlerine sahip olup olmadığınızı kontrol eder.
- dh_installman(1) kılavuz sayfalarını hedef dizindeki doğru yere yükleyecektir, sadece ona kaynak paketinin kök dizinine göre kılavuz sayfalarının yerlerini belirtmelisiniz.
- dh_strip(1) daha küçük hale getirmek için çalıştırılabilir dosyalar ve kütüphanelerden hata ayıklama başlıklarını temizler.
- dh_compress(1) 4 kB'tan büyük belgeleri ve kılavuz sayfalarını gzip(1) ile sıkıştırır.
- dh_installdeb(1) paketle ilgili dosyaları (örn. bakımcı betiklerini) debian/gentoo/DEBIAN dizinine kopyalar.
- dh_shlibdeps(1) kütüphanelerin ve çalışan dosyaların paylaşımlı kütüphane bağımlılıklarını hesaplar.
- dh_gencontrol(1)control dosyasının düzgün ayarlanmış bir sürümünü debian/gentoo/DEBIAN altına yükler.
- dh_md5sums(1) paketteki tüm dosyalar için MD5 sağlama toplamları üretir.
Tüm bu dh_* betiklerinin ne yaptıkları ve seçeneklerinin neler olduğu ile ilgili bilgi almak için kendi kılavuz sayfalarını okuyunuz. Başka (muhtemelen çok faydalı) ve burada bahsedilememiş dh_* betikleri de var. Eğer onlara ihtiyaç durarsanız, debhelper(7) kılavuz sayfasını okuyunuz.
binary-arch kısmı gerçekten de ihtiyacınız olmayan özellikleri içeren satırları çıkarmanız gereken kısımdır. gentoo için, cron, init, man, info ve örneklerle ilgili satırları iptal edeceğim, çünkü gentoo bunlara ihtiyaç duymuyor. Ayrıca 68. satırda, FIXES'i üstdüzey changelog dosyasının adı olan ChangeLog ile değiştireceğim.
Son iki satır (ve burada bahsedilmeyen diğer satırlarla beraber) bazı az veya çok gerekli şeylerdir, ki bunları
make(1) kılavuz sayfasında ve
Debian Politika Kılavuzunda okuyabilirsiniz. Şu an için, bilmek o kadar da önemli değil.