Сборка deb-пакета

31 October 2009 #ubuntu

Как уже неоднократно мне говорил Григорий (он же OM), для поддержания системы в актуальном состоянии достаточно обновлять только те несколько программ, которые чаще всего используешь. Потихоньку начинаю понимать данную философию. И с переходом на Ubuntu озадачился сборкой новых версий программ.

Систему нужно подготовить к сборке, для этого устанавливаем следующие пакеты:

$ sudo aptitude install dpkg-dev autoconf automake

При этом желательно устанавливать рекомендуемые пакеты, как зависимости, чтобы подтянулись все остальные, нужные для работы, пакеты. После чего необходимо в ~/.bashrc добавить следующие строки:

export DEBFULLNAME='Denis Evsyukov'
export DEBEMAIL=mymail@gmail.com

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

Теперь для примера рассмотрим сборку Midnight Commander версии 4.7.0-pre4. В темповой директории создаем отдельную папку для работы:

$ mkdir ~/Temp/mc

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

~/Temp/mc$ cd mc-4.7.0-pre4
~/Temp/mc/mc-4.7.0-pre4$ dh_make -f ../mc-4.7.0-pre4.tar.bz2
~/Temp/mc/mc-4.7.0-pre4$ vim debian/control
~/Temp/mc/mc-4.7.0-pre4$ rm debian/*.ex
~/Temp/mc/mc-4.7.0-pre4$ dpkg-buildpackage -rfakeroot

Первой командой переходим в директорию с исходниками. Второй командой подготавливаем служебные файлы, здесь обязательно указывать архив с исходными файлами, которые распаковывали. Во время исполнения данной команды нас спросят, что именно мы собираемся собирать, в нашем случае мы собираем одиночный пакет, поэтому жмем s и затем после просмотра значений, жмем Enter. Третьей командой необходимо изменить файл debian/control, приводим его примерно к следующему виду:

Source: mc
Section: utils
Priority: extra
Maintainer: Denis Evsyukov <mymail@gmail.com>
Build-Depends: debhelper (>= 7), autotools-dev
Standards-Version: 3.8.1
Homepage: http://www.juev.ru

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

При использовании редактора vim, ошибки будут подсвечиваться красным, что довольно удобно. Поле Maintainer заполняется исходя из значений переменных, которые мы задали в файле ~/.bashrc чуть ранее. Изменяем поля Section, прописывая в какой группе программ будет располагаться наш пакет, задаем домашнюю страницу, если она есть, обязательно меняем архитектуру с any на свою (x86 или amd64), иначе сборка не будет завершена корректно и последним шагом задаем описание пакета, в примере оно не заполнено.

Закрываем файл, сохранив изменения и удаляем в папке debian все файлы c расширением ex, они для сборки не нужны. Если это необходимо, можно поправить файл debian/rules, прописав нужные опции в строке с configure. И завершающим шагом собираем пакет, дав последнюю команду из приведенного выше списка.

Результатом наших действий является deb-пакет, который будет располагаться в родительской директории, в нашем случае это ~/Temp/mc. Просто устанавливаем его, для того, чтобы начать использовать программу:

~/Temp/mc$ sudo dpkg -i mc_4.7.0-pre4-1_amd64.deb

Собственно все! Единственно, что мне так и не удалось сделать – это подписать пакет своим ключом и объяснить системе, что установленный пакет является более новым, чем тот, что располагается в репозитории. Ключ он пока просто не находит, хотя gpg работает с ним без проблем, а с пакетным менеджером я еще не разбирался так плотно.