rules dosyası
Önceki debian/ altında gerekli olanlar Sonraki
rules dosyası
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:
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.
Önceki Üst Ana Başlık Sonraki
changelog dosyası Başlangıç debian/ altındaki diğer dosyalar
Bir Linux Kitaplığı Sayfası