control dosyası

Bu dosya, paket yönetimi için kullanılacak olan dpkg, dselect ve diğer paket yönetim araçlarına gereken değerleri barındırır.

dh_make'in bizim için oluşturduğu control dosyası:

1
2
3
4
5
6
7
8
9
10
11
12
Source: gentoo
Section: unknown
Priority: optional
Maintainer: Josip Rodin <joy-mg@debian.org>
Build-Depends: debhelper (>> 3.0.0)
Standards-Version: 3.6.2

Package: gentoo
Architecture: any
Depends: ${shlibs:Depends}
Description: <insert up to 60 chars description>
  <insert long description, indented with spaces>

1-6 arası satırlar kaynak paketle ilgili kontrol bilgileridir.

1. satır: kaynak paketin adı,

2. satır: kaynak paketin dağıtımda yer aldığı bölümdür.

Farkettiğiniz gibi, Debian bölümlere ayrılmıştır: main (özgür yazılım), non-free (özgür olmayan yazılım) ve contrib (özgür olmayan yazılıma bağımlı özgür yazılım). Bunların altında, kısaca paket türünü açıklayan mantıksal alt kısımlar vardır. Sadece-sistem yöneticisi için `admin', temel araçlar için `base', programlama araçları için `devel', belgelendirme için `doc', kütüphaneler için `libs', elektronik posta istemci ve arka planda çalışan art alan programları için `mail', ağ uygulamaları ve artalan süreçleri için `net', herhangi bir yere uymayan X11 programları için `x11' vs. alt bölümleri bulunmaktadır.

Öyleyse onu x11 olarak değiştirelim. ("main/" öneki ima edilmiştir, dolayısiyle onu atlayabiliriz.)

3. satır: kullanıcının bu paketi yüklemesinin ne kadar önemli olduğunu belirtmektedir. Bu alanı nasıl ayarlayacağınıza karar vermek için Debian Politika Kılavuzuna bakınız. "optional" önceliği genellikle yeni paketler için kullanılmaktadır.

Section ve priority, paketleri sıralayacak veya öntanımlıları seçecekleri zaman, dselect diğer kullanıcı araçları tarafından kullanılır. Bir kere paketi Debian'a yükledikten (upload) sonra, arşiv sürdürücüleri tarafından bu iki alanın değeri değiştirilebilir, ki bu da size e-posta ile bildirilir.

Bu, normal öncelikli bir paket olduğu ve herhangi bir şeyle çakışmadığı için, "optional" olarak bırakacağız.

4. satır: paket bakımcısının adı ve e-posta adresidir. Bu kısmı bir epostadaki geçerli bir "To: " başlığı olarak düzenlemeniz gerekir, çünkü paketi Debian'a gönderdikten sonra, hata izleme sistemi hataları göndermek için bu e-posta adresini kullanacaktır. Virgül, & ve parantez kullanımından kaçının.

5. satır: paketinizin derlenebilmesi (build) için gerekli paketleri listelemektedir. gcc ve make gibi bazı paketler göz ardı edilmiştir; ayrıntılar için build-essential paketini inceleyiniz. Eğer paketinizi yapmak için standartdışı bir derleyici veya başka araçlar gerekiyorsa, bunu `Build-Depends' satırına eklemelisiniz. Birden çok girdi varsa, virgüllerle ayrılır; bu alanın sözdizimi hakkında bilgi edinmek için ikilik paketlerin bağımlıklıklar ile ilgili açıklamalarını okuyunuz.

Bu kısımda ayrıca Build-Depends-Indep (bağımlılıklar), Build-Conflicts (çakışmalar) ve diğer alanlar olabilir. Bu veri Debian otomatik paket yapım sistemi tarafından diğer bilgisayar platformları için ikilik paket yapımında kullanılacaktır. Derleme bağımlılıkları (build-dependency) ile ilgili bilgi edinmek için Debian Politika Kılavuzuna, diğer platformlar (mimariler) ve bunlara yazılımların uyarlanması ile ilgili bilgi edinmek için Geliştiricilerin Başvuru Kılavuzuna (Developers' Reference) bakınız.

Paketinizin derlenebilmesi için hangi paketlere ihtiyaç duyduğunu bulmakta kullanabileceğiniz küçük bir kod:

strace -f -o /tmp/log ./configure
# Paket autoconf kullanmıyorsa, ./configure yerine make kullanılsın
for x in `dpkg -S $(grep open /tmp/log|\
        perl -pe 's!.* open\(\"([^\"]*).*!$1!' |\
        grep "^/"| sort | uniq|\
        grep -v "^\(/tmp\|/dev\|/proc\)" ) 2>/dev/null|\
        cut -f1 -d":"| sort | uniq`; \
      do \
        echo -n "$x (>=" `dpkg -s $x|grep ^Version|cut -f2 -d":"` "), "; \
      done

Bu betik bütün bağımlılıklarının (Build-depends) sürüm numaralarını döndürmektedir. Sürüm numaraları belirtilmiş, kararlı olarak karşılanabilen bağımlılıkların, "Build-depends" bölümünde belirli tek bir sürüm numarasıyla belirtilmemiş olması gerekmektedir.

/usr/bin/foo için derleme bağımlılıklarını el yordamıyla bulmak isterseniz,

objdump -p /usr/bin/foo | grep NEEDED

komutunu, listelenmiş her kütüphane için (örn, libfoo.so.6),

dpkg -S libfoo.so.6

komutunu kullanabilirsiniz. Daha sonra da her paketin -dev sürümünü Build-deps girdisi olarak alırsınız. Eğer bu amaç için ldd'yi kullanırsanız, dolaylı kütüphane bağımlılıklarını da rapor edeceğinden, bu gereğinden fazla derleme bağımlılığına sebep olacaktır.

Gentoo ayrıca derleme aşamasında xlibs-dev, libgtk1.2-dev ve libglib1.2-dev'e ihtiyaç duymaktadır, debhelper'ın yanına onları da buraya ekleyeceğiz.

6. satır: paketin uyduğu Debian Politika standartlarının sürümüdür; paketinizi yaparken okuduğunuz Debian Politika Kılavuzunun sürüm numarasıdır.

8. satır: ikilik paketin adıdır. Bu genellikle kaynak paketin adıyla aynıdır, ama hep böyle olması gerekmemektedir.

9. Satır: ikilik paketin derlenebileceği işlemci mimarisini açıklamaktadır. Bu kısmı "any" olarak bırakacağız, çünkü dpkg-gencontrol(1) bu kısmı paketin delenebileceği mimariye uygun değerlerle dolduracaktır.

Eğer paketiniz mimariden bağımsızsa (mesela, bir kabuk veya bir Perl betiği ya da bir belge), bunu "all" olarak değiştirin ve daha sonra da binary-arch yerine binary-indep kurallarının kullanımı ile ilgili olarak rules dosyası bölümünü okuyunuz.

10. satır, Debian paketleme sisteminin en güçlü özelliklerinden birini göstermektedir. Paketler birbirleriyle değişik şekilde ilişkide olabilir. Depends:'den başka, Recommends:, Suggests:, Pre-Depends:, Conflicts:, Provides:, ve Replaces: ilişki alanları belirtilebilir.

Paket yönetim araçları bu ilişkilerle muhatap olurken genelde aynı şekilde davranır; bunun aksine durumlar ileride açıklanacaktır. (dpkg(8), dselect(8), apt(8), aptitude(1) v.b. kılavuz sayfalarına bakınız.)

Paket içeriğinin çalışabilmesi için (derlenebilmesi için değil) bağımlı olduğu paketlerle ilişki alanları:

Depends:
Paket, bağımlılığı olan paketler kurulmadan kurulmayacaktır. Bunu eğer paketiniz belli bir paket olmadan kesinlikle çalışmayacaksa (ya da ciddi bozukluklara sebep olacaksa) kullanın.

Recommends:
dselect ve aptitude gibi araçlar), paketinizle beraber bu alanda tavsiye edilen paketlerin de kurulmasını isteyip istemediğinizi soracaklardır; hatta dselect ısrar edecektir. dpkg ve apt-get bu alanı ihmal edecektir. Bunu kesinlikle zorunlu olmayan fakat genellikle program ile beraber kullanılan paketler için kullanın.

Suggests:
Bir kullanıcı programınızı kurmak istediğinde, tüm kurulum araçları bu alanda belirtilen paketlerin de kurulup kurulmayacağını soracaktır. dpkg ve apt-get bu alan önemsemezler. Bu alanı, paketinizle çalışması hoş olacak fakat çalışması için mutlaka gerekli olmayan paketler için kullanın.

Pre-Depends:
Bu, Depends:'den daha güçlüdür. Önbağımlılıklar kurulmadan ve düzgün şekilde ayarlanmadan peketinizin kurulumu yapılmayacaktır. Bunu oldukça tutarlı bir şekilde ve debian-devel eposta listesinde tartıştıktan sonra kullanın. (Bunu, hiç kullanmayın şeklinde okuyun. :-))

Conflicts:
Paket, çeliştiği tüm paketler kaldırılmadan kurulmayacaktır. Bunu, eğer paketiniz belli bir paketin varlığında çalışmayacak veya ciddi sorunlara yol açacaksa kullanın.

Provides:
Birden fazla alternatifi olan paletler için sanal isimler tanımlanmıştır. Tüm listeyi /usr/share/doc/debian-policy/virtual-package-names-list.txt.gz dosyasından alabilirsiniz. Bunu, eğer programınız mevcut bir sanal paketin bir işlevini yerine getiriyorsa kullanın.

Replaces:
Programınız başka bir paketin dosyaların değiştiriyorsa ya da başka bir paketin tamamen yerini alıyorsa, bunu kullanın (Conflicts: ile birlikte kullanılır). Paketinizdeki dosyalar, ismi belirtilen paketlerin dosyalarının üzerine yazılacaktır.

Tüm bu alanların kendilerine has bir sözdizimi vardır. Paket adları virgüllerle ayrılır. Bu paket adları ayrıca `|' (boru sembolü) ile ayrılmış alternatif paket adları şeklinde belirtilebilir.

Alanlar kendi uygulanabilirliklerini belirttikleri paketlerin belirli sürümleriyle sınırlayabilir. Bu sürümler her bir paket adından sonra parentez içinde belirtilir, ayrıca sürüm numarasının önüne şu ilişki gösterimlerinden biri eklenmelidir: <<, <=, =, >= ve >> (Sırayla: kesinlikle önceki, önceki ya da aynısı, kesinlikle aynısı, sonraki ya da aynısı, kesinlikle sonraki). Örnek:

Depends: foo (>= 1.2), libbar1 (= 1.3.4)
Conflicts: baz
Recommends: libbaz4 (>> 4.0.7)
Suggests: quux
Replaces: quux (<< 5), quux-foo (<= 7.6)

Bilmeniz gereken en son özellik ${shlibs:Depends}'dir. Paketiniz derlenip, geçici dizine kurulduktan sonra, dh_shlibdeps(1) ikilikler ve kütüphaneler için orayı tarayacak ve libc6 veya xlib6g gibi paylaşımlı kütüphane bağımlılıklarını ve bunları içeren paketleri belirleyecektir. Bunları dh_gencontrol(1)'deki listeye aktaracak ve doğru yere yerleştirilecek, bunun hakkında kaygılanmanıza gerek kalmayacaktır.

Tüm bunları anlattıktan sonra Depends: satırını şu an olduğu gibi bırakabilir ve ardına Suggests: file satırını ekleyebiliriz, Çünkü gentoo o program/paket tarafından sunulan bazı özellikleri kullanabilmektedir.

11. satır: kısa açıklamadır. Pekçok kimsenin ekranı 80 sütun genişliğindedir, dolayısıyle bu kısım yaklaşık 60 karakteri geçmemelidir. Bu kısmı "fully GUI configurable X file manager using GTK+" olarak değiştireceğim.

12. satır: uzun açıklamanın yer aldığı kısımdır. Bu paket hakkında ayrıntılı bilgi veren bir paragraf olmalıdır. Her satırın ilk sütunu boş olmalıdır. Hiç boş satır olmamalıdır, fakat bir sütuna tek bir . (nokta) koyarak boş bir satır bırakılmasını sağlayabilirsiniz. Ek olarak, uzun açıklamadan sonra birden fazla boş satır olmamalıdır.

Sonuçta, güncellenmiş control dosyası:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Source: gentoo
Section: x11
Priority: optional
Maintainer: Josip Rodin <joy-mg@debian.org>
Build-Depends: debhelper (>> 3.0.0), xlibs-dev, libgtk1.2-dev, libglib1.2-dev
Standards-Version: 3.5.2

Package: gentoo
Architecture: any
Depends: ${shlibs:Depends}
Suggests: file
Description: fully GUI configurable X file manager using GTK+
 gentoo is a file manager for Linux written from scratch in pure C. It
 uses the GTK+ toolkit for all of its interface needs. gentoo provides
 100% GUI configurability; no need to edit config files by hand and re-
 start the program. gentoo supports identifying the type of various
 files (using extension, regular expressions, or the 'file' command),
 and can display files of different types with different colors and icons.
 .
 gentoo borrows some of its look and feel from the classic Amiga file
 manager "Directory OPUS" (written by Jonathan Potter).