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
#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
configure: configure-stamp
configure-stamp:
         dh_testdir
         # Add here commands to configure the package.
         touch configure-stamp
build: build-stamp
build-stamp: configure-stamp  
         dh_testdir
	 # Add here commands to compile the package.
         $(MAKE)
         #docbook-to-man debian/testpack.sgml > testpack.1
         touch $@
clean: 
         dh_testdir
         dh_testroot
         rm -f build-stamp configure-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/testpack.
         $(MAKE) DESTDIR=$(CURDIR)/debian/testpack install
# 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_installchangelogs 
        dh_installdocs
        dh_installexamples
#       dh_install
#       dh_installmenu
#       dh_installdebconf       
#       dh_installlogrotate
#       dh_installemacsen
#       dh_installpam
#       dh_installmime
#       dh_python
#       dh_installinit
#       dh_installcron
#       dh_installinfo
        dh_installman
        dh_link
        dh_strip
        dh_compress
        dh_fixperms
#       dh_perl
#       dh_makeshlibs
        dh_installdeb
        dh_shlibdeps
        dh_gencontrol
        dh_md5sums
        dh_builddeb
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install configure

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.

8 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, manpage.xml.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.