deb

Как собрать .deb пакет

В любом дистрибутиве GNU/Linux, имеющем на борту пакетный менеджер, приветствуется установка программного обеспечения строго из пакетов. В какой-то момент может возникнуть ситуация, что проще собрать пакет, чем компилировать и устанавливать классическим методом «./configure && make && sudo make install», например, если некоторая программа необходима нескольким коллегам, среди которых не каждый в состоянии понять почему сборка из сорцов не удалась.

Если Вы намереваетесь создавать пакеты, которые могу/будут входить в официальный репозиторий Debian, то для начала стоит ознакомится со следующими материалами:

Но, если Вам просто нужно понять, как собрать .deb пакет, здесь и сейчас, то добро пожаловать под кат.

Сборка из исходников

GPG ключ

Первое, что необходимо, это сгенерировать gpg ключ, если его еще нет, так как пакет, при создании, будет подписан этим ключом:

gpg --gen-key

Важно помнить, что на дальнейших этапах необходимо будет использовать те же самые имя и email, что использовались при создании ключа.

Для того, что бы использовать данный ключ для подписи делаем следующее:

gpg -a --output ~/.gnupg/YOUR_NAME.gpg --export 'YOUR NAME'

После чего:

gpg --import ~/.gnupg/YOUR_NAME.gpg

Все, ключ готов.

Подготовка окружения

Установим необходимые для сборки пакеты:

sudo apt-get install build-essential autoconf automake \
autotools-dev dh-make debhelper devscripts fakeroot \
xutils lintian pbuilder

Получение и подготовка исходников

Разархивируем исходники и переименуем директорию в формат имя-версия, важно, что бы название директории было в нижнем регистре. После этого, на одном уровне с этой директорией необходимо разместить архив с исходниками, например, в формате tar.gz (можно просто создать архив с директорией, которую только что создали).

Пример:

mkdir -p ~/build/memcached/1.4.17
cd ~/build/memcached/1.4.17
wget -c http://www.memcached.org/files/memcached-1.4.17.tar.gz
tar -xzf memcached-1.4.17

Подготовка к сборке

Первое что мы сделаем — подготовим структуру и информацию о нашем пакете.

cd ~/build/memcached/1.4.17/memcached-1.4.17
dh_make -e youremail@address -f ../memcached-1.4.17.tar.gz

Не забываем, что необходимо использовать тот же email, что использовался при генерации ключа. После выполнения данной команды в терминале появится следующее приглашение:

Type of package: single binary, indep binary, multiple binary,
 library, kernel module, kernel patch?
[s/i/m/l/k/n/b]

Выберем пока самый простой вариант — s

В нашей директории появилась новая поддиректория — debian, которая содержит файлы, необходимые для дальнейшей сборки. Теперь отредактируем информацию о нашем пакете.

Файл «control»

Source: memcached
Section: unknown
Priority: optional
Maintainer: YOUR NAME <your @email.org>
Build-Depends: debhelper (>= 8.0.0), autotools-dev
Standards-Version: 3.9.4
Homepage: <insert the upstream URL, if relevant>

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

Добавим зависимости и описание пакета

# Смотрим зависимости
dpkg-depcheck -d ./configure

В терминале видем следующее:

Packages needed:
  mime-support
  libsigsegv2:amd64
  gawk
  libevent-dev

Теперь изменим файл debian/control, учитывая эти зависимости и добавим необходимую информацию:

Source: memcached
Section: web
Priority: optional
Maintainer: YOUR NAME <your @email.org>
Build-Depends: debhelper (>= 8.0.0), autotools-dev,
 mime-support, libsigsegv2, gawk, libevent-dev
Standards-Version: 3.9.4
Homepage: http://memcached.org/

Package: memcached
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: High-performance, distributed memory object caching system
  Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects)
from results of database calls, API calls, or page rendering.

Файл «copyright»

Тут размещаем правовую информацию, в частности, можно разместить текст лицензии, под которой распространяется исходный код программы.

Файл «changelog»

Этот файл автоматически заполняется при вызове dh_make, важно убедиться, что указанный в файле email тот же, что использовался для генерации gpg-ключа.

Сборка

dpkg-buildpackage -rfakeroot

Если не было допущено ошибок на предыдущих этапах, то в процессе сборки будет получено приглашение ввести пароль от gpg-ключа, после ввода которого в директории на уровень выше появятся файлы:

  • memcached_1.4.17-1_amd64.changes
  • memcached_1.4.17-1_amd64.deb
  • memcached_1.4.17-1.dsc
  • memcached_1.4.17-1.debian.tar.xz
  • memcached_1.4.17.orig.tar.gz

Как видите, сборка производилась на платформе x86_64. Нужна другая платформа — не проблема.

Сборка под другую платформу

Для сборки, например, под платформу i386 нам понадобится pbuilder — система автоматической сборки, работающая в chroot.

sudo pbuilder --create --architecture i386
sudo pbuilder --update
sudo pbuilder --build ../memcached_1.4.17-1.dsc

Готовый пакет можно будет забрать из директории /var/cache/pbuilder/result

Пересборка пакета

Если в дальнейшем необходимо будет изменить сожержимое пакета, то после внесения изменений необходимо выполнить:

dpkg-buildpackage -rfakeroot -b

2 Comments

  • Алекс commented on 11.03.2014 Reply

    С каких пор sudo классический способ?

    • gwinn commented on 11.03.2014 Reply

      А вы таки без него умудряетесь сделать install в системные директории? :)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>