[ previous ] [ Copyright Notice ] [ Contents ] [ next ]

Ръководство на новите отговорници по поддръжка на Debian
Chapter 4 Задължителни файлове в debian/


Вече има нова директория в директорията на програмата (`gentoo-0.9.12'), която се казва `debian'. В нея има няколко файла. Ще ги редактираме за да можем да настроим държанието на пакета при инсталирането му. Най-важните от тях са `control', `changelog', `copyright' и 'rules', които са задължителни за всички пакети.


4.1 файлът `control'

Този файл съдържа няколко стойности които dpkg и dselect ще използват за управление на пакета. Ето control файла който dh_make създава.

       1  Source: gentoo
       2  Section: unknown
       3  Priority: optional
       4  Maintainer: Josip Rodin <jrodin@jagor.srce.hr>
       5  Standards-Version: 3.0.1
       6
       7  Package: gentoo
       8  Architecture: any
       9  Depends: ${shlibs:Depends}
       10 Description: <insert up to 60 chars description>
       11  <insert long description, indented with spaces>

(Номерата на редовете са добавени от мен.)

Редове 1-5 са контролната информация на изходния пакет. Ред 1 е името на изходния пакет.

Ред 2 е секцията на дистрибуцията в която пакета ще бъде поставен. Както може би сте забелязали Debian е разделен на секции: main (свободен софтуер), non-free (не точно свободен софтуер) и contrib (свободен софтуер който зависи от не свободен софтуер). Под всяка една от тези секции съществуват подсекции които описват какъв тип са пакетите в него. За пример `admin' съдържа програми за администриране, `base' съдържа основните инструменти, `devel' - инструменти в помощ на програмиста, `doc' - документация, `libs' - библиотеки, `mail' - e-mail еклиенти и демони, `net' - мрежови приложения и демони, `x11' - специфични приложения за X11, и много други.

Нека тогава да го променим на x11.

Ред 3 описва колко важно е потребителя да инсталира този пакет. Section и priority всъщност се използват само от dselect когато сортира пакетите и те могат (и най-вероятно ще бъдат) променени от нашите FTP maintainers. Виж в Policy manual за повече информация какво да напишете в тези полета.

Тъй като това е пакет с нормален приоритет ще го оставим като optional.

Ред 4 е името и e-mail адреса на отговорника по поддръжка.

Ред 5 е версията на Debian Policy стандарта с която този пакет е съобразен (две основни версии на инсталиран debian-policy пакет).

Ако се изисква някакъв нестандартен компилатор или друг инстумент за да бъде изграден пакета, трябва да го добавите тук на `Build-Depends' реда и списък със задължителните пакети. За повече информация прочетете Packaging Manual (секция 8.7) и документацията на `build-essential' пакета.

Ред 7 е името на бинарния пакет.

Ред 8 описва аритектурата на процесора за която пакета е бил компилиран. Можем да го оставим "any" защото dpkg-gencontrol(1) ще попълни съответната стойност за всяка машина за която този пакет е компилиран (виж Developer's Reference за информация относо пренасянето на пакети от една платформа на друга). Ако вяшият пакет е независим архитектурно (примерно shell скрипт, Perl скрипт или документ), променете го на "all", и прочетете по-късно файлът `rules', Section 4.4 относно използването на `binary-indep' правило вместо `binary-arch' за изграждането на пакета.

Ред 9 разкрива едно от най-мощните свойства на системата за пакетиране на Debian. Пакетите могат да зависят един с друг по няколко различни начина. Освен Depends:, други зависимости са Recommends:, Suggests:, Pre-Depends:, Conflicts:, Provides:, и Replaces: .

Инструментите за управление на пакети като dpkg, dselect или APT (и тяхните помощни обвивки) обикновенно се държат по един и същ начин когато работят с тези зависимости, ако ли не, то ще бъде обяснено. (виж dpkg(8), dselect(8), apt(8), console-apt(8), gnome-apt(8))

Ето какво обикновенно означават:

Всички тези полета имат еднакъв синтаксис. Те са списък от пакети разделени със запетая. Тези имена на пакети също може да бъдат алтернативни пакети разделени с вертикална черта | (pipe symbols). Полетата могат да ограничат тяхната приложимост за определени версии за всеки именуван пакет. Версиите са изброени в скоби след всеки индивидуален пакет и трябва да включват зависимости последвани от номер на версия. Зависимостите могат да бъдат: <<, <=, =, >= и >> за съответно по-стара версия, по-стара или равна, точно тази, по-нова или равна и по-нова версия.

И накрая последното нещо с което трябва да се запознаете е $(shlibs:Depends). Това е генерирано автоматично от dh_shlibdeps(1) и попълнено от dh_gencontrol(1) с имената на всички споделени библиотеки които вашата програма използва, такива като libc6 или xlib6g, такак че не се налага да ги указвате ръчно. И казано с две думи - ред 9 го оставяме както си е :-)

Ред 10 съдържа списък с предложени пакети за инсталация. В този случай това е само `file' защото gentoo може да ползва някои свойства предоставени от този програма/пакет.

Ред 11 е кратко описание. Повечето потребители иползват 80 колонен екран така че не трябва да е по дълго от 60 символа. Аз ще го променя на "A fully GUI configurable GTK+ file manager".

Ред 12 е за пълното описание. Тук трябва да има детайлно описание на пакета. 1-вата колона на всеки ред трябва да е празна, тоест да оставяте по един интервал. Не трябва да има празни редове, но може да ползвате . (точка) за да симулирате празен ред. Също така не трябва да има повече от един празен ред след края на пълното описание.

Ето и редактирания control файл:

       1  Source: gentoo
       2  Section: x11
       3  Priority: optional
       4  Maintainer: Josip Rodin <jrodin@jagor.srce.hr>
       5  Standards-Version: 3.0.1
       6
       7  Package: gentoo
       8  Architecture: any
       9  Depends: ${shlibs:Depends}
       10 Suggests: file
       11 Description: A fully GUI configurable GTK+ file manager
       12  gentoo is a file manager for Linux written from scratch in pure C. It
       13  uses the GTK+ toolkit for all of its interface needs. gentoo provides
       14  100% GUI configurability; no need to edit config files by hand and re-
       15  start the program. gentoo supports identifying the type of various
       16  files (using extension, regular expressions, or the 'file' command),
       17  and can display files of different types with different colors and icons.
       18  .
       19  gentoo borrows some of its look and feel from the classic Amiga file
       20  manager "Directory OPUS" (written by Jonathan Potter).

(номерата на редовете са добавени от мен.)


4.2 файлът `copyright'

Този файл съдържа информация относно от къде е изтеглен пакета , copyright и информация за лиценза. Неговия формат не е продиктуван от Policy, но съдържанието му е (секция 6.5). Dh_make го създава по подразбиране и ето как изглежда:

       1  This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on
       2  Wed, 11 Nov 1998 21:02:14 +0100.
       3
       4  It was downloaded from <fill in ftp site>
       5
       6  Upstream Author(s): <put author(s) name and email here>
       7
       8  Copyright:
       9
       10 <Must follow here>

(номерата на редовете са добавени от мен.)

Важните неща които трябва да присъстват в този файл са мястото от където е взета тази програма, точния лиценз и copyright. Трябва да включите пълния лиценз освен ако той не е някой от основните свободни лицензи като GNU GPL или LGPL, BSD или the Artistic license, за тях просто може да посочите съответния файл в директорията /usr/share/common-licenses/ която съществува във всяка Debian система. Gentoo е лицензиран под GNU General Public License така че ще променим файла така:

       1  This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on
       2  Wed, 11 Nov 1998 21:02:14 +0100.
       3
       4  It was downloaded from: ftp://ftp.obsession.se/gentoo/
       5
       6  Upstream author: Emil Brink <emil@obsession.se>
       7
       8  This software is copyright (c) 1998-99 by Emil Brink, Obsession
       9  Development.
       10
       11 You are free to distribute this software under the terms of
       12 the GNU General Public License.
       13 On Debian systems, the complete text of the GNU General Public
       14 License can be found in /usr/share/common-licenses/GPL file.

(номерата на редовете са добавени от мен.)


4.3 файлът `changelog'

Този файл задължително трябва да съществува, той има специален формат описан в Packaging Manual (секция 3.2.3). Форматът се използва от dpkg и от други програми за да получат номер на версията, преработка, дистрибуция и приоритет (спешност) на вашия пакет.

За вас също ще е полезен тъй като е добре да имате документирани всичките промени които сте направили. Също така ще помогне на тези които са изтеглили вашия пакет да разберат дали има неразрешени проблеми с този пакет за които трябва да се разбере веднага. Той ще бъде съхранен като `/usr/share/doc/gentoo/changelog.Debian.gz' в бинарния пакет.

Dh_make създава по подразбиране ето такъв файл:

       1  gentoo (0.9.12-1) unstable; urgency=low
       2
       3   * Initial Release.
       4
       5  -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
       6
       7  Local variables:
       8  mode: debian-changelog
       9  End:

(номерата на редовете са добавени от мен.)

Ред 1 е името на пакета, версията, дистрибуцията и приоритета. Името трябва да съвпада с името на пакета с изходния код., дистрибуцията трябва да е или `unstable' или `experimental' (засега) и приоритета трябва да е променен на нещо по голямо от `low'. :-)

Редове 3-5 са log записи където са отразени промените направени в тази версия на пакета (не промените по изходния код които са правени от авторите - има специален файл за тази цел, който е създаден от авторите на програмата, инсталира се в /usr/share/doc/gentoo/changelog.gz). Новите редове трябва да бъдат вмъквани в началото на файла точно над първия ред започващ със звездичка (`*'). Можете да направите това с помоща на dch(1), emacs(1) (редове 7-9 съдържат информация относно редактора Emacs), или който и да е друг редактор. Трябва да се получи нещо такова:

       1  gentoo (0.9.12-1) unstable; urgency=low
       2
       3   * Initial Release.
       4   * This is my first Debian package.
       5   * Adjusted the Makefile to fix $DESTDIR problems.
       6
       7  -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
       8
       9  Local variables:
       10  mode: debian-changelog
       11 End:

(номерата на редовете са добавени от мен.)

Когато публикувате нова версия, трябва да увеличите номера на версията. Най-лесно ще го направите с `dch -i` или `dch -v <version>-<revision>` и после добавете коментари чрез любимия ви редактор. Полезен съвет: как най-лесно мога да получа датата в изисквания формат? Ползвайте `822-date`, или `date -R`.

Информацията за новата версия е добавена в началото на changelog файла. Ето как изглежда той след промените:

       1  gentoo (0.9.12-2) unstable; urgency=low
       2
       3   * Fixed a glitch in the menu file.
       4
       5  -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 22:15:39 +0100
       6
       7  gentoo (0.9.12-1) unstable; urgency=low
       8
       9   * Initial Release.
       10  * This is my first Debian package.
       11  * Adjusted the Makefile to fix $DESTDIR problems.
       12
       13 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
       14
       15 Local variables:
       16 mode: debian-changelog
       17 End:

(номерата на редовете са добавени от мен.)

Може да прочетете повече относно нови версии/прегледи на пакетите в Обновяване на пакета, Section 6.4.


4.4 файлът `rules'

Сега трябва да погледнем и правилата които dpkg-buildpackage(1) ще използва за да създаде пакета. Този файл всъщност е един вид Makefile, тъй като се се изпълнява чрез `make -f`, но е различен от този който идва с изходния код.

Всеки файл `rules', както и всеки Makefile се състои от няколко правила които указват как да бъде манипулиран изходния код. Всяко правило се състои от цел, имена на файлове или имена на действия които трябва да бъдат изпълнени. Правилата които искате да бъдат изпълнени се извикват като аргументи на командния ред (примерно: `./debian/rules build` или `make -f rules install`). След името може да укажете зависимост, програма или файл от който зависят правилата. След това може да укажете брой команди (разделени с <tab>!) докато се достигне празен ред. След него започва ново правило. Множество празни редове и редове започващи с `#' (диез) се третират като коментари и съответно се игнорират.

Хмм, най-вероятно вече достатъчно се объркахте но ще ви стане ясно след като изследваме файла `rules' който dh_make създава по подразбиране. Препоръчвам ви да прочетете информацията относно `make' (info make) за повече подробности.

Важно е да знаете че файла `rules' който е създаден dh_make е просто за да ви подскаже как би трябвало да изглежда този файл. На по простите пакети най-вероятно ще работи но за по-сложните пакети не се страхувайте а го редактирате така че да пасне на нуждите на програмата. Не променяйте единствено имената на правилата защото всички инструменти използват тези имена както е указано в Packaging Manual.

       1  #!/usr/bin/make -f
       2  # Made with the aid of dh_make, by Craig Small
       3  # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess.
       4  # Some lines taken from debmake, by Christoph Lameter.
       5
       6  # Uncomment this to turn on verbose mode.
       7  #export DH_VERBOSE=1
       8
       9  # This is the debhelper compatability version to use.
       10 export DH_COMPAT=1
       11
       12 build: build-stamp
       13 build-stamp:
       14    dh_testdir
       15
       16    # Add here commands to compile the package.
       17    $(MAKE)
       18
       19    touch build-stamp
       20
       21 clean:
       22    dh_testdir
       23    dh_testroot
       24    rm -f build-stamp
       25
       26    # Add here commands to clean up after the build process.
       27    -$(MAKE) clean
       28
       29    dh_clean
       30
       31 install: build-stamp
       32    dh_testdir
       33    dh_testroot
       34    dh_clean -k
       35    dh_installdirs
       36
       37    # Add here commands to install the package into debian/tmp.
       38    $(MAKE) install DESTDIR=`pwd`/debian/tmp
       39
       40 # Build architecture-independent files here.
       41 binary-indep: build install
       42 # We have nothing to do by default.
       43
       44 # Build architecture-dependent files here.
       45 binary-arch: build install
       46 #  dh_testversion
       47    dh_testdir
       48    dh_testroot
       49 #  dh_installdebconf
       50    dh_installdocs
       51    dh_installexamples
       52    dh_installmenu
       53 #  dh_installemacsen
       54 #  dh_installpam
       55 #  dh_installinit
       56    dh_installcron
       57    dh_installmanpages
       58    dh_installinfo
       59 #  dh_undocumented
       60    dh_installchangelogs
       61    dh_link
       62    dh_strip
       63    dh_compress
       64    dh_fixperms
       65    # You may want to make some executables suid here.
       66    dh_suidregister
       67 #  dh_makeshlibs
       68    dh_installdeb
       69 #  dh_perl
       70    dh_shlibdeps
       71    dh_gencontrol
       72    dh_md5sums
       73    dh_builddeb
       74
       75 binary: binary-indep binary-arch
       76 .PHONY: build clean binary-indep binary-arch binary install

(номерата на редовете са добавени от мен.)

Най-вероятно сте срещали редове като 1-ви от shell и Perl скриптовете. Той указва на операционната система че този файл трябва да бъде обработен от /usr/bin/make.

Редовете от 12 до 19 описват правилото `build' (и неговото под-правило `build-stamp') който стартира Makefile-а за да се компилира програмата.

Правилото `clean' както е описано на редове 21-29 изчиства всички ненужни бинарни файлове и автоматично създадени неща който са останали от процеса на изграждане. Правилата трябва да работят винаги (дори когато и изходния код е почистен!) така че използвайте force опциите (примерно за rm тя е `-f') , или игнорирайте върнатите стойности (`-' пред името на командата).

Инсталационния процес започва при правилото `install' на 31 ред. То всъщтност стартира правилото `install' от Makefile-а но инсталацията се прави в директория `pwd`/debian/tmp - ето защо указахме $(DESTDIR) като основна директория за инсталиране в Makefile-а на gentoo.

Както ни подсказва и коментара, правилото `binary-indep на ред 41 се използва когато изграждаме архитектурно независими пакети. Тъй като няма да правим това не се налага да пипаме нищо. Ако пакета е от типа `Architecture: all', трябва да преместим всичките команди под това правило а правилото `binary-arch' да оставим празно.

В следващото правило - `binary-arch', на редове от 45 до 73 стартираме няколко малки програмки от пакета debhelper които помагат пакета да бъде съобразен с Policy.

Имената им започват с dh_ и останалото е описание за какво служи програмката. Имената им говорят сами по себе си но ето малко допълнителна информация:

За повече изчерпателна информация какво точно вършат всичките тези dh_* скриптове и какви са техните опции, прочетете страниците с ръководство. Съществуват и други доста полезни dh_* скриптове които не са споменати тук. Ако се нуждаете от тях прочетете документацията на debhelper.

В секцията binary-arch трябва да коментирате всички редове които не са ви нужни. За gentoo ще коментирам редовете относно testversion, emacsen, pam, init, cron, manpages, info, undocumented, suidregister, makeshlibs, и perl, просто защото gentoo не се нуждае от тях. А на ред 60 трябва да добавя `FIXES' защото така е именуван оригиналния changelog файл.

Последните два реда (заедно с всички други редове които не са обяснени) са просто повече или по-малко нужни неща за които може да прочетете в ръководството на make и в Packaging Manual. Но засега те не са важни.


[ previous ] [ Copyright Notice ] [ Contents ] [ next ]
Ръководство на новите отговорници по поддръжка на Debian
version 1.0, 25 January 2000.
Josip Rodin jrodin@jagor.srce.hr
Превод: Николай Христов geroy@stemo.bg