Руководство по сборке собственного deb-пакета

: Внимательно изучуить и ВСЁ пересмотреть http://wiki.debian.org/DebianRussian/DebinstPackages

персмотренная версия, в стадии оформления

Настольная/поваренная книга разработчика Debian

Типы пакетов:

бинарный пакет

пакет с исходными текстами (src-пакет)

Src-пакет

Src-пакет для debian это исходные тексты программы, которые любезно предоставлены автором под той или иной лицензией, дополненные несколькими скриптами (которые предоставлены майнтенером пакета), обеспечивающими сборку пакета.

Все скрипты, файлы итп, относящиеся к сборке пакета в системе Debian традиционно располагаются в подкаталоге debian/ вместе с исходными текстами.

Src-пакет Debian, обычно состоит из нескольких файлов:

package-version.dsc - текстовый файл, включающий в себя перечень остальных необходимых файлов;

package-version.orig.tar.gz - архив с исходными текстами программы;

package-version.diff.gz - патч на архив с исходными текстами программы, добавляющий в них вышеупомянутый каталог debian/, а так же возможно содержащий исправления внесенные в исходные тексты майнтенером.

Примечание: Некоторые включают каталог debian/ прямо в архив с исходными кодами. Это в основном касается программ разработанных специально для Debian. В таком случае вместо файлов .orig.tar.gz и .diff.gz будет один файл package-version.tar.gz.

Чтобы получить и распаковать исходные тексты пакета, можно выполнить следующее:

zps@debian:~/workspace$ apt-get source fluxbox Чтение списков пакетов... Готово Построение дерева зависимостей... Готово Нужно загрузить 950kB архивов с исходными текстами. Получено:1 http://ftp.fi.debian.org etch/main fluxbox 0.9.14-1.2 (dsc) [882B] Получено:2 http://ftp.fi.debian.org etch/main fluxbox 0.9.14-1.2 (tar) [932kB] Получено:3 http://ftp.fi.debian.org etch/main fluxbox 0.9.14-1.2 (diff) [16,9kB] Получено 950kB за 0s (1282kB/c) gpg: Signature made Птн 26 Май 2006 19:25:59 MSD using DSA key ID 68FD549F gpg: Can't check signature: public key not found dpkg-source: extracting fluxbox in fluxbox-0.9.14 dpkg-source: unpacking fluxbox_0.9.14.orig.tar.gz dpkg-source: applying ./fluxbox_0.9.14-1.2.diff.gz zps@debian:~/workspace$

Однако, это не единственный способ получить данный пакет. Его можно скачать со странички http://packages.debian.org/stable/x11/fluxbox. Внизу этой странички размещена ссылка на бинарный пакет для системы Debian. Однако если присмотреться, то справа можно увидеть раздел “Загрузка пакета исходного кода”, где можно как раз скачать теже три файла, что мы получили во время apt-get source fluxbox. А именно:

fluxbox_0.9.14-1.2.dsc

fluxbox_0.9.14.orig.tar.gz

fluxbox_0.9.14-1.2.diff.gz

Скачав эти файлики вручную, их необходимо распаковать. Для этого необходимо выполнить команду: dpkg-source -x fluxbox_0.9.14-1.2.dsc

результатом распаковки будет каталог fluxbox-0.9.14

zps@debian:~/workspace/fluxbox-0.9.14$ ls -la
итого 1788
drwxr-xr-x 8 zps zps 4096 2007-12-09 09:52 .
drwxr-xr-x 5 zps zps 4096 2007-12-09 09:52 ..
-rw-r--r-- 1 zps zps 8962 2005-10-01 09:31 acinclude.m4
-rw-r--r-- 1 zps zps 253728 2005-10-01 09:31 aclocal.m4
-rw-r--r-- 1 zps zps 3870 2005-10-01 09:31 AUTHORS
-rw-r--r-- 1 zps zps 164677 2005-10-01 09:31 ChangeLog
-rwxr-xr-x 1 zps zps 44252 2005-10-01 09:31 config.guess
-rw-r--r-- 1 zps zps 5812 2005-10-01 09:31 config.h.in
-rwxr-xr-x 1 zps zps 31803 2005-10-01 09:31 config.sub
-rwxr-xr-x 1 zps zps 850466 2005-10-01 09:31 configure
-rw-r--r-- 1 zps zps 17671 2005-10-01 09:31 configure.in
-rw-r--r-- 1 zps zps 2242 2005-10-01 09:31 COPYING
drwxr-xr-x 3 zps zps 4096 2007-12-09 09:52 data
drwxr-xr-x 3 zps zps 4096 2007-12-09 09:52 **debian**
-rwxr-xr-x 1 zps zps 12117 2005-10-01 09:31 depcomp
drwxr-xr-x 3 zps zps 4096 2007-12-09 09:52 doc
-rw-r--r-- 1 zps zps 4193 2005-10-01 09:31 INSTALL
-rwxr-xr-x 1 zps zps 5584 2005-10-01 09:31 install-sh
-rwxr-xr-x 1 zps zps 97712 2005-10-01 09:31 ltconfig
-rw-r--r-- 1 zps zps 189680 2005-10-01 09:31 ltmain.sh
-rw-r--r-- 1 zps zps 292 2005-10-01 09:31 Makefile.am
-rw-r--r-- 1 zps zps 20552 2005-10-01 09:31 Makefile.in
-rwxr-xr-x 1 zps zps 6274 2005-10-01 09:31 missing
-rwxr-xr-x 1 zps zps 726 2005-10-01 09:31 mkinstalldirs
-rw-r--r-- 1 zps zps 2469 2005-10-01 09:31 NEWS
drwxr-xr-x 26 zps zps 4096 2007-12-09 09:52 nls
-rw-r--r-- 1 zps zps 2350 2005-10-01 09:31 README
drwxr-xr-x 3 zps zps 4096 2007-12-09 09:52 src
-rw-r--r-- 1 zps zps 2130 2005-10-01 09:31 TODO
drwxr-xr-x 3 zps zps 4096 2007-12-09 09:52 util
-rw-r--r-- 1 zps zps 2657 2005-10-01 09:31 version.h.in

Следует обратить внимаение, что в данном случае каталог debian уже присутствует и содержит все файлики, необходимые для сборки из этого каталога, набора бинарных пакетов.

zps@debian:~/workspace/fluxbox-0.9.14$ ls -la debian/
итого 148
drwxr-xr-x 3 zps zps 4096 2007-12-09 09:52 .
drwxr-xr-x 8 zps zps 4096 2007-12-09 09:52 ..
-rw-r--r-- 1 zps zps 11963 2007-12-09 09:52 changelog
-rw-r--r-- 1 zps zps 2 2007-12-09 09:52 compat
-rw-r--r-- 1 zps zps 1002 2007-12-09 09:52 control
-rw-r--r-- 1 zps zps 4162 2007-12-09 09:52 convertkeys
-rw-r--r-- 1 zps zps 2422 2007-12-09 09:52 copyright
-rw-r--r-- 1 zps zps 325 2007-12-09 09:52 defaults.hh
-rw-r--r-- 1 zps zps 569 2007-12-09 09:52 diff
-rw-r--r-- 1 zps zps 64 2007-12-09 09:52 dirs
-rw-r--r-- 1 zps zps 235 2007-12-09 09:52 fluxbox.desktop
-rw-r--r-- 1 zps zps 102 2007-12-09 09:52 fluxbox.menu
-rw-r--r-- 1 zps zps 1177 2007-12-09 09:52 fluxbox.menu-method
-rw-r--r-- 1 zps zps 35125 2007-12-09 09:52 fluxbox.menu-sample
-rw-r--r-- 1 zps zps 66 2007-12-09 09:52 fluxbox.menu-user
-rw-r--r-- 1 zps zps 1670 2007-12-09 09:52 fluxbox.postinst
-rw-r--r-- 1 zps zps 623 2007-12-09 09:52 fluxbox.postrm
-rw-r--r-- 1 zps zps 357 2007-12-09 09:52 fluxbox.preinst
-rw-r--r-- 1 zps zps 367 2007-12-09 09:52 fluxbox.prerm
-rw-r--r-- 1 zps zps 939 2007-12-09 09:52 menu-icons.patch
drwxr-xr-x 2 zps zps 4096 2007-12-09 09:52 old
-rw-r--r-- 1 zps zps 351 2007-12-09 09:52 README.Debian
-rwxr-xr-x 1 zps zps 1542 2007-12-09 09:52 rules
-rw-r--r-- 1 zps zps 535 2007-12-09 09:52 system.fluxbox-menu
-rw-r--r-- 1 zps zps 537 2007-12-09 09:52 .todo
-rw-r--r-- 1 zps zps 109 2007-12-09 09:52 watch

Стоит отметить, что в случае с fluxbox, каталог debian запакован в fluxbox_0.9.14-1.2.diff.gz

Содержимое файлика control(Описание формата control):

zps@debian:~/workspace/fluxbox-0.9.14/debian$ cat control Source: fluxbox Section: x11 Priority: optional Maintainer: Matt Hope <dopey@debian.org> Uploaders: Matt Hope <dopey@debian.org>, martin f. krafft <madduck@debian.org> Build-Depends: libx11-dev, libxext-dev, libxft-dev, libxinerama-dev, libxpm-dev, libxrandr-dev, x-dev, libxt-dev, debhelper (>=3.0.0), libxft-dev, libx11-dev, libxext-dev, libxft-dev, libxinerama-dev, libxpm-dev, libxrandr-dev, x-dev, libimlib2-dev, libgtk2.0-dev, cdbs Standards-Version: 3.6.1.1 Package: fluxbox Architecture: any Provides: x-window-manager Suggests: fluxconf, fbpager, fbdesk, xfonts-artwiz Depends: menu (>=2.1.19), ${shlibs:Depends} Conflicts: menu (<<2.1.9-1) Description: Highly configurable and low resource X11 Window manager Fairly similar to blackbox, from which it is derived, but has been extended with features such as pwm-style window tabs, configurable key bindings, toolbar, and an iconbar. It also includes some cosmetic fixes over blackbox. . This package contains support for Gnome and KDE.

Описание rules, содержимое файлика rules:

zps@debian:~/workspace/fluxbox-0.9.14/debian$ cat rules #!/usr/bin/make -f # include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/rules/simple-patchsys.mk include /usr/share/cdbs/1/class/autotools.mk DEB_CONFIGURE_SYSCONFDIR := /etc/X11/fluxbox DEB_CONFIGURE_EXTRA_FLAGS := --enable-xinerama --enable-nls # DEB_MAKE_ENVVARS := \ # DEFAULT_MENU=$(DEB_CONFIGURE_SYSCONFDIR)/fluxbox-menu \ # DEFAULT_KEYSFILE=$(DEB_CONFIGURE_SYSCONFDIR)/keys \ # DEFAULT_INITFILE=$(DEB_CONFIGURE_SYSCONFDIR)/init \ # DEB_INSTALL_DOCS_ALL := README CXXFLAGS := -O2 -ffunction-sections # this gets run after './configure' but before 'make' common-configure-arch:: cp ./debian/defaults.hh ./src/defaults.hh install/fluxbox:: cp ./debian/convertkeys debian/fluxbox/usr/share/doc/fluxbox/ for i in init keys ; do mv debian/fluxbox/usr/share/fluxbox/$$i debian/fluxbox/etc/X11/fluxbox/$$i ; done # Menu stuff cp ./debian/system.fluxbox-menu debian/fluxbox/etc/X11/fluxbox/ cp ./debian/fluxbox.menu-user debian/fluxbox/etc/X11/fluxbox/ # We use menu file generated by the 'menu' package. -mv ./debian/fluxbox/usr/bin/fluxbox-generate_menu ./debian/fluxbox/usr/share/doc/fluxbox/ -rm ./debian/fluxbox/usr/share/fluxbox/menu cp ./debian/fluxbox.desktop ./debian/fluxbox/usr/share/xsessions/ # Turn on anti-alias by default echo "session.screen0.antialias: true" >> ./debian/fluxbox/etc/X11/fluxbox/init # Some of the provided styles still use 'bsetroot' instead of 'fbsetroot' -perl -pi -e 's# bsetroot# fbsetroot#g' ./debian/fluxbox/usr/share/fluxbox/styles/* || true

Для более детального ознакомления с содержанием файла rules, необходимо обратиться к первоисточнику (пакету fluxbox)

Формат changelog, содержимое changelog в пакете fluxbox:

zps@debian:~/workspace/fluxbox-0.9.14/debian$ cat changelog
fluxbox (0.9.14-1.2) unstable; urgency=low
* NMU as part of the GCC 4.1 transition.
* Declare the namespace
(Closes: Bug#357490)
-- Martin Michlmayr <tbm@cyrius.com> Fri, 26 May 2006 16:08:18 +0200
fluxbox (0.9.14-1.1) unstable; urgency=low
* Non-maintainer upload.
* Remove Build-Dependency on xlibs-dev (Closes: #346659).
* Credit and Big Thanks to Justin Pryzby <justinpryzby@users.sourceforge.net>
for the patch and testing.
-- Amaya Rodrigo Sastre <amaya@debian.org> Wed, 18 Jan 2006 16:24:27 +0100
fluxbox (0.9.14-1) unstable; urgency=low
* New version from upstream
- Renames 'bsetroot' to 'fbsetroot'
(Closes: Bug#308052, Bug#309958, Bug#319094)
- Fixes to font handling
(Closes: Bug#262305, Bug#300531, Bug#295941)
* Updated fluxbox.desktop to use startfluxbox
(Closes: Bug#314644)
-- Matt Hope <dopey@debian.org> Sat, 1 Oct 2005 15:48:02 +1000

При сборке пакетов с исходными текстами часто используются утилиты deb-helper Подробное описание

Бинарный пакет

Правильный путь — сборка из бинарного пакета из подготовленного каталога с исходниками. Все остальные пути — неправильные, хоть и существуют.

В случае корректно сожержимого каталога debian, для сборки бинарного пакета достаточно вызвать в fluxbox-0.9.14 утилиуту deb-helper-a под названием dpkg-buildpackage. Она начнет выполнять сборку согласно файлику rules и если всё будет хорошо и корректно на уровень выше рядом с каталогом fluxbox-0.9.14 мы получим собранный нами бинарный пакет.

Различия между пакетом репозитария SLIND и обычным Debian

Основные различия заключаются в добавлении дополнительных полей в файлике control, необходимых при кросс-компиляции пакета внутри chroot.

поле Sections (дополнительные значения):

host-tools, for packages which are intended for compilation environment only (or mostly); examples: slindak, toolchain-package, gcc-4.1;

core is for packages that are basic (do not misinterpret this for “essential” as quite a few of those are really essential to be installed on a target rootfs); examles: busybox, dash, procps;

gui is for packages which are related to graphical interface (which is provided by x11 or alternatively, raw framebuffer IO like directfb); examples: freetype, libx11, xserver-kdrive;

debug packages are those used for various diagnostics; examples: tcpdump, strace, libssl0.9.8-dbg;

security is for packages which make use of strong cryptography to provide security features for target rootfs; examples: openssl, dropbear;

libdevel is for development packages (e.g. library headers, static libraries); examples: zlib1g-dev, libncurses5-dev;

doc is for packages that put their documentation in a separate package; example: bash-doc.

дополнительные поля:

XCS-Cross-Host-Build-Depends – зависимости для сборки пакета

XCS-Cross-Build-Depends – зависимости на целевой платформе

об этом пишут подробно с той стороны: https://www.slind.org/Documentation:Packaging

Вопросы

написать все вопросы и ответы на них.