В любом дистрибутиве GNU/Linux, имеющем на борту пакетный менеджер, приветствуется установка программного обеспечения строго из пакетов. В какой-то момент может возникнуть ситуация, что проще собрать пакет, чем компилировать и устанавливать классическим методом «./configure && make && sudo make install», например, если некоторая программа необходима нескольким коллегам, среди которых не каждый в состоянии понять почему сборка из сорцов не удалась.
Если Вы намереваетесь создавать пакеты, которые могу/будут входить в официальный репозиторий Debian, то для начала стоит ознакомится со следующими материалами:
Но, если Вам просто нужно понять, как собрать .deb пакет, здесь и сейчас, то добро пожаловать под кат.
Сборка из исходников
GPG ключ
Первое, что необходимо, это сгенерировать gpg ключ, если его еще нет, так как пакет, при создании, будет подписан этим ключом:
Важно помнить, что на дальнейших этапах необходимо будет использовать те же самые имя и email, что использовались при создании ключа.
Для того, что бы использовать данный ключ для подписи делаем следующее:
После чего:
Все, ключ готов.
Подготовка окружения
Установим необходимые для сборки пакеты:
autotools-dev dh-make debhelper devscripts fakeroot \
xutils lintian pbuilder
Получение и подготовка исходников
Разархивируем исходники и переименуем директорию в формат имя-версия, важно, что бы название директории было в нижнем регистре. После этого, на одном уровне с этой директорией необходимо разместить архив с исходниками, например, в формате tar.gz (можно просто создать архив с директорией, которую только что создали).
Пример:
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
Подготовка к сборке
Первое что мы сделаем — подготовим структуру и информацию о нашем пакете.
dh_make -e youremail@address -f ../memcached-1.4.17.tar.gz
Не забываем, что необходимо использовать тот же email, что использовался при генерации ключа. После выполнения данной команды в терминале появится следующее приглашение:
library, kernel module, kernel patch?
[s/i/m/l/k/n/b]
Выберем пока самый простой вариант — s
В нашей директории появилась новая поддиректория — debian, которая содержит файлы, необходимые для дальнейшей сборки. Теперь отредактируем информацию о нашем пакете.
Файл «control»
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
В терминале видем следующее:
mime-support
libsigsegv2:amd64
gawk
libevent-dev
Теперь изменим файл debian/control, учитывая эти зависимости и добавим необходимую информацию:
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-ключа.
Сборка
Если не было допущено ошибок на предыдущих этапах, то в процессе сборки будет получено приглашение ввести пароль от 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 --update
sudo pbuilder --build ../memcached_1.4.17-1.dsc
Готовый пакет можно будет забрать из директории /var/cache/pbuilder/result
Пересборка пакета
Если в дальнейшем необходимо будет изменить сожержимое пакета, то после внесения изменений необходимо выполнить: