20080109

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

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

К счастью, пересобрать (изменённый) пакет достаточно просто. Последовательность действий:

0. Убедиться, что в /etc/apt/sources.list есть подходящая запись deb-src; добавить, если нет. Добавляется примерно такая строчка:
deb-src http://ftp.ru.debian.org/debian/ testing main contrib non-free

в ней можно менять адрес зеркала, ветку (например, stable или unstable вместо testing) и разделы репозитория.

После этого надо сделать aptitude update. Перейти в каталог, в котором собираетесь собирать исходники.

1. Получить исходники пакета: apt-get source -t unstable названиепакета. Здесь надо учитывать, что иногда из одного пакета с исходниками собирается несколько бинарных. Указывать название пакета с исходниками. Параметр -t unstable указывает, что взять нужно исходники версии из unstable.

2. Скачать всё, что необходимо для сборки: apt-get build-dep название пакета

3. Перейти в каталог названиепакета-версия/

4. Поправить, что хочется, в исходниках. Отредактировать файл debian/changelog (см. документацию, как описывать изменения). Описывать изменения и менять номер версии пакета нужно, чтобы потом самому отличать свои пакеты от дистрибутивных.

Дополненине: Для редактирования debian/changelog можно воспользоваться dch. Например, dch -l myname создаст в changelog запись для новой версии пакета, добавив myname к номеру версии Debian.

5. Пересобрать пакет: fakeroot dpkg-buildpackage -us -uc

Дополнение:: Savagex в комментария заметил, что тот же результат можно получить с помощью dpkg-buildpackage -rfakeroot.

На каталог выше должны появиться новые бинарные пакеты, готовые к установке.

Возможно, это не совсем идеологически верное описание и что-то важное я упустил (я не Debian-гуру). Кто знает лучше — пусть поправит. Однако такой способ вполне годится для личного использования.

Дополнение: анонимный читатель указал, что для пересборки пакета можно также воспользоваться программой pbuilder, которая позволяет производить сборку в «чистом окружении» и не засорять систему зависимостями для сборки (см. этап получения build-dep). Соответственно, рекомендую две ссылки по теме: Как я собираю/бэкпорчу deb пакеты (GQ's blog) и о сборке пакетов Debian в русской Debian wiki.