Open Source & Linux Lab

It's better when it's simple

User Tools

Site Tools


howtos:deb_building

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

FIXME: Внимательно изучуить и ВСЁ пересмотреть 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

Вопросы

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

You could leave a comment if you were logged in.
howtos/deb_building.txt · Last modified: 2016/08/07 01:21 by kel