Сборка собственного пакета deb формата (из готовых бинарников)

Knoppix

Модераторы: Warderer, Модераторы разделов

eXeC001er
Сообщения: 7

Сборка собственного пакета deb формата

Сообщение eXeC001er »

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

В качестве программы я имею ввиду или программу предствавленную в ибнарном виде или это опросто набор скриптов.

Я попробовал использовать dpkg-buildpackage но особенно ничего не получилось, т.к. необходимо неким образом написать написать конфигурационные файлы, а как их писать в описанном выше случае я не знаю.

Сразу скажу что все описанное выше я проделываю на Nexenta Core Platform. (это грубо говоря OpenSolaris с системой управления пакетами от Debian).
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: Сборка собственного пакета deb формата

Сообщение KernelPanic »

eXeC001er писал(а):
18.03.2009 19:38
Программа написана с применением неких библиотек без которых она не работоспособна
Это библиотеки в составе программы или они тоже в каких-то сторонних пакетах?
Если все зависимости для работоспособности Вам известны, то всё просто.

deb-пакет - это архив, в котором хранятся два архива:
1) control.tar.gz - архив с управляющей информацией;
2) data.tar.gz - архив с данными в уже "раскиданной" по нужным папкам форме.

Возьмите любой deb-пакет, например hdparm (я на нем поясню).
Поместите его в папку ~/hdparm и перейдите туда в терминале.
Выполните команду:

Код: Выделить всё

$ dpkg-deb -x hdparm_8.9-3_i386.deb package/

По этой команде происходит распаковка в папку package всех файлов данных (из архива data.tar.gz). Как видно, они уже раскиданы по нужным папкам. Если представить, что папка package/ - это корень, то видно, куда будут положены какие файлы.

Выполните команду:

Код: Выделить всё

$ dpkg-deb -e hdparm_8.9-3_i386.deb package/DEBIAN

По этой команде распакуется вся управляющая информация в папку package/DEBIAN (название подпапки обязательно должно быть DEBIAN).
Зайдите туда и посмотрите, что там есть:
- control - управляющий файл, где прописана вся информация о пакете. Если Вы действительно смотрели, как собирать пакет, то должны быть уже знакомы со структурой данного файла и Вам не составит особого труда сделать аналогичный для своего пакета.
- md5sums - файл md5-сумм некоторых файлов данных.
- conffiles - перечень конфигурационных файлов (обычно это файлы, которые кидаются в папку /etc). Здесь важно знать, что при удалении пакета через aptitude remove имя_пакета мы удаляем все файлы пакета, ЗА ИСКЛЮЧЕНИЕМ фйлов, перечисленных в данном управляющем файле. При использовании команды aptitude purge имя_пакета мы удаляем ВСЕ файлы данных, включая перечисленные в этом файле.
- preinst - скрипт, который выполняет определенные действия ДО установки пакета (то есть до разархивирования файлов данных).
- postinst - скрипт, который выполняет определенные действия сразу после установки файлов данных (какое-нибудь конфигурирование, связывание библиотек, запуск установленных демонов и т.д.). Тут важно то, что если данный скрипт не отработает (то есть не сможет отработать в силу каких-то косяков), то пакет будет несконфигурированным.
- postrm - скрипт, выполняющий определенные действия после удаления пакета.

Из перечисленных файлов обязательным является только файл control. Если программа предоставляет какие-либо библиотеки, то также обычно присутствует скрипт postinst, задача которого выполнить команду ldconfig для предоставления системе информации о том, что появились какие-то новые библиотеки, которые могут быть использованы. Но Вас, я так понимаю, вопрос с библиотеками не касается, значит остается только control.

Теперь удалите deb-пакет hdparm_8.9-3_i386.deb.
Из всего добра, находящегося в папке package/ можно собрать пакет простой командой. Находиться Вы должны на уровень выше, то есть в папке hdparm, которую создали вначале. Команда такая:
$ fakeroot dpkg-deb -b папка_с_файлами куда_поместить_пакет
В нашем случае будет иметь вид (мы в каталоге hdparm):

Код: Выделить всё

$ fakeroot dpkg-deb -b package/ ./

fakeroot нужен для того, чтоб у файлов внутри пакета владельцем стал root (короче, безопасность).
Появится пакет hdparm_ВЕРСИЯ_АРХИТЕКТУРА.deb, где ВЕРСИЯ и АРХИТЕКТУРА прописаны в control-файле, то есть будет пакет hdparm_8.9-3_i386.deb.

Итак, Ваша задача сводится к:
1) созданию папки proga;
2) созданию внутри данной папки структуры для раскидывания имеющихся у Вас данных;
3) раскидыванию Ваших файлов по данной структуре подкаталогов;
4) созданию папки DEBIAN с расположенным и правильно заполненным файлом control внутри (может еще какие скрипты из вышеперечисленных надумаете сделать здесь);
5) выдаче команды на сборку пакета.
Только не собирайте пакет в ту же папку proga - получится не совсем то, что Вы ожидаете :).
Спасибо сказали:
eXeC001er
Сообщения: 7

Re: Сборка собственного пакета deb формата

Сообщение eXeC001er »

супер! все описано по высшему классу и понятно. спасибо.
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Сборка собственного пакета deb формата

Сообщение IMB »

Прошу рассмотреть возможность закрепления данного топика.
Спасибо сказали:
eXeC001er
Сообщения: 7

Re: Сборка собственного пакета deb формата

Сообщение eXeC001er »

появилась необходимость сборки подобного рода пакетов, но для размешения их в репозитории, в следствии чего на выходе помимо deb нужны и другие файлы, которые генерируются при использовании dpkg-buildpackage.
Что делать в этом случае?
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: Сборка собственного пакета deb формата

Сообщение KernelPanic »

Какие конкретно? changes-файлы? У меня репозиторий работает и без них, смотрите прикрепленную тему про локальные репы. Что за репозиторий такой?
Спасибо сказали: