İki Misli Kontrol

Şimdi artık ilk ikilik paketinizi yaptınız ve ilk izlenime sahipsiniz, biraz daha ciddi yaklaşmanın ve ürettiğimiz paketin kalitesine bakmanın zamanı geldi.

lintian

Bizim için ne şans ki Debian projesi Debian paketlerini kontrol etmek için lint benzeri bir araç sunmaktadır. Bu araç lintian olarak isimlendirilir. Hala yüklemediyseniz şu an iyi bir zaman (apt-get install lintian).

Şimdi bu küçük define arayıcıyı kendi paket dosyamız üzerinde kullanacağız.

$ lintian linuxstatus_1.1-1_all.deb
E: linuxstatus: binary-without-manpage linuxstatus
E: linuxstatus: no-copyright-file
W: linuxstatus: prerm-does-not-remove-usr-doc-link
W: linuxstatus: postinst-does-not-set-usr-doc-link

O kadar da mükemmel gözükmüyor. Bir kılavuz sayfası, copyright dosyası ve şu prerm ve postinst betiklerini atladık.

Minimum Belgeleme

Kılavuz sayfaları yazmak ve oluşturmakla ilgili çok fazla söz söylenecek yer burası değil, bir veya herhangi bir bölümü bu konuyla ilgili pek çok kitap ve ayrıca internetten erişebilinecek http://www.tldp.org/HOWTO/mini/Man-Page.html adresindeki belge vardır.

Küçük bir zaman atlaması yapalım ve betiğiniz için ./man/man1/linuxstatus.1 konumunda mükemmel bir kılavuz sayfasına sahip olduğunuzu varsayalım.

Aynı durum copyright dosyası için de geçerli olsun. find /usr/share/doc -name "copyright" komutuyla /usr/share/doc dizini altında yeterince örnek bulabilirsiniz.

İşte bizim kendi copyright dosyası örneğimiz:

linuxstatus

Copyright: Chr. Clemens Lee <clemens@kclee.com>

2002-12-07

The home page of linuxstatus is at:
http://www.kclee.com/clemens/unix/index.html#linuxstatus

The entire code base may be distributed under the terms of the GNU General
Public License (GPL), which appears immediately below.  Alternatively, all
of the source code as any code derived from that code may instead be
distributed under the GNU Lesser General Public License (LGPL), at the
choice of the distributor. The complete text of the LGPL appears at the
bottom of this file.

See /usr/share/common-licenses/(GPL|LGPL)

prerm ve postinst betikleri için yukarıda, parted paketindeki örnekleri birebir aynı isimle kendi proje dizinimize kopyalayalım. Bu dosyalar bizim için de düzgün çalışmalı.

Şimdi Debian paketini tekrar oluşturuyoruz. control dosyasında sürüm numarasını ilk önce 1.1-1'den 1.2-1'e yükseltiriz (yeni bir kılavuz sayfası yazdığımız için dahili sürüm numaramızı yükseltiriz). Aynı zamanda yeni dosyaları uygun konumlara kopyalamaya ihtiyacımız var.

$ mkdir -p ./debian/usr/share/man/man1
$ mkdir -p ./debian/usr/share/doc/linuxstatus
$ find ./debian -type d | xargs chmod 755
$ cp ./man/man1/linuxstatus.1 ./debian/usr/share/man/man1
$ cp ./copyright ./debian/usr/share/doc/linuxstatus
$ cp ./prerm ./postinst ./debian/DEBIAN
$ gzip --best ./debian/usr/share/man/man1/linuxstatus.1
$ 
$ dpkg-deb --build debian
dpkg-deb: building package `linuxstatus' in `debian.deb'.
$ mv debian.deb linuxstatus_1.2-1_all.deb

gzip gereklidir, çünkü lintian kılavuz sayfalarının mümkün olduğunca sıkıştırılmış olmasını bekler.

fakeroot

Bakalım paketimiz daha iyi bir Debian tebaası haline gelmiş mi:

$ lintian linuxstatus_1.2-1_all.deb
E: linuxstatus: control-file-has-bad-owner prerm clemens/clemens != root/root
E: linuxstatus: control-file-has-bad-owner postinst clemens/clemens != root/root
E: linuxstatus: bad-owner-for-doc-file usr/share/doc/linuxstatus/ clemens/clemens != root/root
E: linuxstatus: bad-owner-for-doc-file usr/share/doc/linuxstatus/copyright clemens/clemens != root/root
E: linuxstatus: debian-changelog-file-missing

Ups, yeni şikayetler. Tamam, yılmayacağız. Çoğu hata aslında aynı hataymış gibi duruyor. Bizim dosyalarımızın hepsi clemens kullanıcı ve gurubu için paketlendi, bunu yaparken de ben pekçok insanın onları root kullanıcısı ve gurubu için yüklü tercih edeceklerini varsaydım. Bu sorun fakeroot aracı kullanılarak kolayca çözülebilir. Hadi bunu hızlı bir şekilde düzeltip kontrol edelim (changelog kısmını ihmal ediyoruz).

$ fakeroot dpkg-deb --build debian
dpkg-deb: building package `linuxstatus' in `debian.deb'.
$ mv debian.deb linuxstatus_1.2-1_all.deb
$ lintian linuxstatus_1.2-1_all.deb
E: linuxstatus: debian-changelog-file-missing

Güzel, fakat hala pakete eklememiz gereken bir dosya var.

Daha Fazla Belge

Hemen şunu söyliyeyim, changelog dosyası yanında doc/linuxstatus dizininde changelog.Debian dosyasına da ihtiyaç vardır. Her ikisi de gzip ile sıkıştırılmış olmalıdır.

İki örnek dosya, changelog:

linuxstatus (1.2-1)

  * Made Debian package lintian clean.

  -- Chr. Clemens Lee <clemens@kclee.com>  2002-12-13

ve changelog.Debian:

linuxstatus Debian maintainer and upstream author are identical.
Therefore see also normal changelog file for Debian changes.

Debian Sözleşme (Debian Policy File) dosyası, changelog dosyasının biçimiyle ilgili daha ayrıntılı bilgiye sahiptir.

Ve nihayet son adımımız:

$ cp ./changelog ./changelog.Debian ./debian/usr/share/doc/linuxstatus
$ gzip --best ./debian/usr/share/doc/linuxstatus/changelog
$ gzip --best ./debian/usr/share/doc/linuxstatus/changelog.Debian
$ fakeroot dpkg-deb --build ./debian
dpkg-deb: building package `linuxstatus' in `debian.deb'.
$ mv debian.deb linuxstatus_1.2-1_all.deb
$ lintian linuxstatus_1.2-1_all.deb

Ah, artık başka şikayet almıyoruz ;-). root olarak bu paketi eskisinin üzerine standart komutu kullanarak yükleyebilirsiniz: dpkg -i

root# dpkg -i ./linuxstatus_1.2-1_all.deb
(Reading database ... 97124 files and directories currently installed.)
Preparing to replace linuxstatus 1.1-1 (using linuxstatus_1.2-1_all.deb) ...
Unpacking replacement linuxstatus ...
Setting up linuxstatus (1.2-1) ...