Как сделать deb пакет

Создание deb пакетов

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

Создание deb пакетов

Шаг 1. Подготовка

Давайте создадим для этого примера небольшую программу на Си. Она будет называться hellolosst и будет выводить на экран строку Hello from losst.ru в терминал при запуске. Сначала создайте папку hellolosst и перейдите в неё:

mkdir hellolosst
cd hellolosst

Затем поместите в неё файл с исходным кодом:

#include
int main() <
printf(«Hello from losst.ru\n»);
>

Как сделать deb пакет. Смотреть фото Как сделать deb пакет. Смотреть картинку Как сделать deb пакет. Картинка про Как сделать deb пакет. Фото Как сделать deb пакет

Для компиляции программы выполните такую команду:

Затем вы можете её выполнить:

Как сделать deb пакет. Смотреть фото Как сделать deb пакет. Смотреть картинку Как сделать deb пакет. Картинка про Как сделать deb пакет. Фото Как сделать deb пакет

Таким образом, теперь у нас есть программа, которую надо упаковать в deb пакет.

2. Создание манифеста

В каждом deb пакете содержаться не только файлы самой программы, но и файл манифеста, в котором описан пакет, его зависимости и параметры. Этот файл имеет название control и должен находится в папке DEBIAN. Для сборки пакета будем использовать папку package, чтобы файлы программы не путались с исходными файлами и те не попали в пакет. Создайте эти папку:

Прежде чем вы сможете создать этот файл надо узнать несколько вещей. Первым делом надо посмотреть размер файлов программы, поскольку в данном случае файл один, достаточно посмотреть его размер:

Как сделать deb пакет. Смотреть фото Как сделать deb пакет. Смотреть картинку Как сделать deb пакет. Картинка про Как сделать deb пакет. Фото Как сделать deb пакет

Если файлов несколько, то можно удалить исходники и посмотреть общий размер папки с файлами программы. Дальше надо понять от каких пакетов будет зависеть ваша программа. Для этого воспользуйтесь командой objdump:

Как сделать deb пакет. Смотреть фото Как сделать deb пакет. Смотреть картинку Как сделать deb пакет. Картинка про Как сделать deb пакет. Фото Как сделать deb пакет

В данном случае программе необходима только libc. Чтобы посмотреть в каком пакете она находится выполните:

Как сделать deb пакет. Смотреть фото Как сделать deb пакет. Смотреть картинку Как сделать deb пакет. Картинка про Как сделать deb пакет. Фото Как сделать deb пакет

Пакет называется libc6. Затем создайте файл манифеста со следующим содержимым:

Это минимальный набор параметров в файле манифеста. Вот их значение:

3. Расположение файлов

Манифест готов. Теперь в папке пакета надо создать структуру папок, аналог того, что есть в корневой файловой системе. В данном случае надо создать папку usr/bin и поместить туда исполняемый файл:

4. Скрипты установки

#!/bin/bash
echo «Hello from losst installed»

Разработчики Debian не рекомендуют использовать эти скрипты без крайней надобности, поскольку они дают вам полный контроль над системой пользователя и вы можете случайно что-то повредить. Обычно эти скрипты используются для того чтобы задавать пользователям вопросы и на основе этого генерировать конфигурационные файлы.

5. Сборка и проверка пакета

Осталось собрать настроенный пакет. Для этого используйте такую команду:

Как сделать deb пакет. Смотреть фото Как сделать deb пакет. Смотреть картинку Как сделать deb пакет. Картинка про Как сделать deb пакет. Фото Как сделать deb пакет

Теперь вы знаете как как собрать deb пакет. После завершения сборки можете установить его с помощью apt:

Как сделать deb пакет. Смотреть фото Как сделать deb пакет. Смотреть картинку Как сделать deb пакет. Картинка про Как сделать deb пакет. Фото Как сделать deb пакет

После этого исполняемый файл программы появится в /usr/bin, а сообщение из postinst будет выведено после установки.

Выводы

В этой небольшой статье мы рассмотрели как выполняется создание deb пакета с помощью инструмента dpkg-deb. Как видите, всё очень просто. Вам достаточно написать манифест и расположить файлы там, где они должны быть. Мы рассмотрели здесь только самые основы. На самом деле создание пакетов намного сложнее. Существует целый набор утилит debhelpers, которые используются на различных этапах сборки и установки deb пакетов, подробнее обо всём этом вы можете прочитать в официальной документации.

Источник

Сборка пакетов

Содержание

Дистрибутивы, основанные на Debian – это не только отличная система управления пакетами APT, которая сама разрешает зависимости, но и удобные инструменты для создания пакетов и своих репозиториев. Если уж вы решились собрать программу из исходников, то советую ещё изучить, как дебианизировать исходники. Это отнимет чуть больше времени, чем стандартное

но зато позволит сохранить систему в чистоте. Удалить программы, установленные командой make install, можно только командой

Чаще всего такие случаи очень корректно разрешаются путём удаления конфликтного пакета. Но на разбор ситуации уйдёт некоторое время.

Классификация случаев сборки

Возможны следующие случаи сборки пакетов:

исходники или бинарные файлы берутся:

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

Что необходимо

Полное Руководство начинающего разработчика Debian доступно тут.

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

Нам понадобятся как минимум программы, устанавливаемые командой

Создание ключа шифрования

Этот шаг не обязателен, его можно пропустить.

Чтобы создать ключ, зайдите в Приложения → Стандартные → Пароли и ключи шифрования. В открывшемся окне, в меню Ключ → Новый ключ, выбираем ключ pgp. Заполняем поля Полное имя и Электронный адрес.

Хотя последняя версия программы seahorse имеет демон, который автоматически запускается в сеансе GNOME, и умеет «запоминать пароль» на время сеанса, но пока не все программы умеют с ней работать.

/.bashrc, или в другой стартовый скрипт, вашего любимого шелла (для zsh

/.zshrc), нужно вписать переменные

На основании e-mail будет искаться ключ в pgp, при подписи пакета.
Нужно завершить сеанс и зайти заново, чтобы изменения вступили в силу.
Помните, что если вы бэкпортируете пакет, дебианизированный не вами, обязательно нужно изменить версию командой

для того, чтобы в изменения вписался ваш e-mail. А для того, чтобы ваш открытый ключ попал на сервер, необходимо в настройках «seahorse → Пароли и ключи шифрования», настроить соединение с сервером публичных ключей.
Для этого, в меню Правка→Параметры на закладке Публикация ключей необходимо поставить галку Публиковать ключи….
Теперь можно выбрать ключ и в меню по правой кнопке выбрать Синхронизировать и опубликовать ключи.

Дебианизация недоступна

Итак, у нас есть только gcoolprog-0.5.3.tar.gz.

Обычно я выполняю следующие действия:

Предварительно подготавливаю рабочую директорию

Получаем файл gcoolprog-0.5.3.tar.gz. Распакуем его перейдем в полученный каталог:

Ниже будем считать директорию

/src/gcoolprog/0.5.3/gcoolprog-0.5.3 корневой директорией исходников.
Далее выполняем «черновую» сборку. Т.е. сконфигурируем и соберем приложение, без его установки:

Если команда выполнилась успешно, то осталось только дебианизировать.

Дебианизация

На что мы должны получить следующий диалог

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

Будем считать, что программа у нас простая – обычно ни один из этих файлов не нужен.
Первым делом, нужно добавить описание программы в файле debian/control

без этого мы получим пустой пакет.
Иногда debian/rules содержит лишь:

Что приемлемо с использованием debhelper.
Этих настроек будет достаточно для сборки пакета с одной программой, которая не содержит разделяемых библиотек, т.е. только бинарник в /usr/bin и данные в /usr/share.

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

Теперь, соберём пакет:

В директории выше, т.е. в

/src/gcoolprog/0.5.3, мы получим файлы

Вот теперь мы можем установить пакет

Дебианизация берётся из репозитория Ubuntu, из PPA или из Debian

Дебианизация берётся из другой версии программы

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

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

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

Предварительно подготовим рабочую директорию

получаем файл gcoolprog-0.5.3.tar.bz2

теперь распаковываем его

скачиваем предыдущую версию с http://packages.ubuntu.com или http://packages.debian.org, файл gcoolprog_0.5.1.diff.gz (в самом низу в секции More Information on gcoolprog)

копируем каталог gcoolprog-0.5.1/debian в директорию

дальше нам нужно изменить версию командой

этой командой изменяется файл debian/changelog например увидим

но поскольку у нас версия 0.5.3, то нужно изменить значения на

сохраните изменения. Теперь можно выполнить команду сборки в пакет.

Дебианизация берётся из текущей версии программы

Дебианизация берётся не из репозитория текущего выпуска Ubuntu

Предварительно подготовим рабочую директорию

теперь скачиваем три файла

или тоже самое, но одной командой

из пакета devscripts
затем распакуем командой

получим каталог gcoolprog-0.5.3.Перейдём в него и сменим версию:

теперь можно собирать пакет

Дебианизация берётся из репозитория текущего выпуска Ubuntu

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

Для сборки понадобятся следующие пакеты: build-essential devscripts fakeroot. Потребуются также пакеты для разработки, мы их установим в дальнейшем.

apt-get source скачивает исходники из репозитория Ubuntu в текущую директорию. Многие пакеты в репозитории имеют общие друг с другом исходники, поэтому кроме исходников выбранного пакета могут скачаться и исходники других пакетов (общие для нескольких пакетов исходники).

Далее вносим изменения в исходники и собираем из них обратно пакеты.

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

Сборка из бинарных файлов

Ниже идёт пример как можно поступить в случае, если доступен только deb-пакет и нет его дебианизированных исходников.

Предположим, что работаем в каталоге

/tmp. Создадим подкаталог

/tmp/someprog, чтобы распаковать файлы какого-нибудь пакета, нужно выполнить

Для того, чтобы извлечь контрольную информацию, выполним

ну а теперь, чтобы всё это собрать обратно в пакет, нужно выполнить

/tmp/someprog/DEBIAN содержатся файлы, описывающие, что это за пакет, от чего он зависит, и контрольные суммы файлов, находящихся в нём. Для того, чтобы собрать свой пакет, нужно поместить файлы в каталоге

/tmp/someprog так, как будто это корневой каталог.То есть, если нужно, чтобы файл установился в /usr/bin,нужно его поместить в каталог

/tmp/someprog/usr/bin, ну и, соответственно, если что-то должно лежать в /etc, то в

/tmp/someprog/etc и т.д.

/tmp/someprog создать каталог DEBIAN, обязательно большими буквами, и в нём файл

/tmp/someprog/DEBIAN/control, в этом файле описывается название пакета, его зависимости и описание, формат очень простой. Например:

Ну а теперь собрать:

Этой информации достаточно, чтобы собрать/пересобрать простенький пакет. На самом деле можно ещё запускать скрипты при установке пакета, при его удалении и много чего ещё, что нужно нормальному maintainer’у.

Источник

Собираем deb-пакет. Часть 1

В репозитариях Ubuntu собрано огромное количество программ и библиотек. На сайтах самих программ достаточно часто встречаются deb-пакеты, которые можно скачать и установить. Однако все же бывает ситуация, когда нужного ПО нет в репозитариях или на сайте нельзя скачать пакет для Ubuntu, или, наконец, в репозитарии есть старая версия, но она вас не устраивает тем, что в ней присутствует досадный баг или нет нужной функциональности.

Не спешите качать исходники и делать ./configure && make && make install. Это приведет к тому что у вас возникнет каша из библиотек и софта, установленного вручную и через apt, управляться с которой станет очень тяжело. Гораздо лучше потратить побольше времени и приготовить deb-пакет, который уже потом установить используя apt. Преимущества же apt над ручной установкой очевидны.

Допустим мы находимся в ситуации, когда в следующей версии Ubuntu или Debian есть необходимая нам программа, а в текущей версии в репозитории ее нет.

Например, у меня на рабочем компьютере установлена Ubuntu 7.10 Gutsy и мне хочется установить программу Guake. В репозиториях Gutsy ее нет. На сайте deb-пакета под мою версию Ubuntu нет, потому придется делать его самому.

Отправляемся на сайт packages.ubuntu.com и ищем на нем guake в репозитариях для всех версий Ubuntu; обнаруживаю пакет для Ubuntu 8.10. Чем больше различие в версиях убунты, тем больше вероятность получения неожиданных проблем при бэкпортировании. Но что же, попробуем, судя по зависимостям проблем не должно быть слишком много.

Для бэкпортирования или сборки из исходников нам понадобятся определенные утилиты. Перед началом работы установим минимальный набор, который будет необходим для этого. Это пакеты debhelper, dh-make, devscripts, fakeroot, build-essential, automake, gnupg, lintia. Отмечу что для пакетирования конкретного софта будут требоваться дополнительные комплияторы, dev-версии библиотек, которые видимо лучше устанавливать когда они понадобятся.

После установки софта мы готовы к бэкпортированию guake.

Подготовим директорию в которой будем работать:
konstantin@konstantin-desktop:

Backported from Interpid

guake (0.3.1-5ubuntu1) gutsy; urgency=low

* Backported from Interpid

— Konstantin Mikhaylov Thu, 18 Sep 2008 15:07:30 +1100

Источник

Еще раз о deb пакетах

Подготовка

Чтобы начать создавать deb пакеты, нужно установить несколько пакетов:

Подготовка папки с исходниками

Для того, чтобы dh_make и другие утилиты могли работать с папкой с исходниками, нужно привести ее в специфичный вид.

Папка должна называться имяпакета-версия. Т.е. если у меня есть папка Plugins с программой версии 0.1, то я создаю папку с именем plugins-0.1.

Теперь нужно создать архив с этой папкой. Архив должен содержать в имени *.orig.tar.gz, т.е.:

Последний подготовительный шаг, это создание в папке с исходниками папки debian со множеством служебных файлов. Чтобы это сделать, нужно выполнить команду:

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

Настройка пакета

Вся настройка пакета происходит путем редактирования файлов в каталоге debian. Рассмотрим те файлы, которые будем использовать:

changelog

Данный файл содержит историю изменения пакета и текущую версию пакета. Посмотрим на его содержимое:

В начале идет название пакета — libvksplugins, затем его версия. Версия делиться на две части символом «-». Первая часть показывает версию программы в пакете, вторая «ревизию» пакета. Ревизия это версия пакета, т.е. если раньше такого пакета не было, то ревизия равна 1. Если же пакет с такой версией программы уже был, но в нем произошли изменения, то ревизия увеличивается.

Слово unstable показывает, что пакет является не стабильным, т.е. он не был протестирован должным образом на машинах пользователей.

Надпись urgency=low показывает срочность изменения. Т.к. срочности нет, то значение равно low. Если бы, мы делали пакет для исправления серьезной уязвимости или ошибки, то значение можно было бы установить в high.

После первой строки идет пустая строка, а за ней первая запись:

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

Последняя строка является подписью человека, сделавшего запись. В ней содержится имя и адрес, а также дата изменения.

После установки deb пакета, файл changelog устанавливается в

control

Файл debian/control является главным конфигом, при создании deb пакета. Вот пример такого файла:

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

Source Данная секция говорит о том, что нужно создать пакет исходных кодов. Параметром указано libvksplugins, это значит, что пакет исходных кодов будет называться libvksplugins.

Priority Эта секция устанавливает приоритет пакета. Т.к. система может прекрасно обойтись без нового пакета, то значение секции установлено в optional. Т.е. этот пакет не обязателен для установки. Подробнее о приоритетах написано здесь.

Maintainer Эта секция описывает контакты человека, создающего пакет. Ее формат довольно прост и дополнительного описание не требует.

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

Видно, что в зависимостях стоят debhelper (>= 9), cmake. Зависимость debhelper (>= 9) ставиться для всех пакетов по умолчанию. Она нужна для корректной работы программ вида dh_*.

Второй элемент cmake был добавлен потому, что папка с исходниками содержала файл CMakeLists.txt, т.е. для сборки используется система сборки CMake. Для того, чтобы узнать, какие зависимости есть у программы, можно почитать ее документацию. Кроме этого, можно воспользоваться командой dpkg-depcheck. Данная команда должна запускаться так:

Но, т.к. при использовании CMake нет скрипта конфигурирования, то я использую ее так:

Из примечательных тут можно отметить:

cmake
qt4-qmake
libqt4-dev

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

При этом в CMakeLists.txt указана версия cmake, которую нужно использовать:

Я думаю, что разработчику виднее, и поэтому указываю версию из CMakeLists.txt. Для Qt 4 все понятно с номерами версий, но для очистки совести проверим и их версии:

Т.е. для Qt 4 указываем версию 4.8.6:

Standards-Version Версия стандарта, в соответствии с которым создан файл. Это значение не нужно менять.

Section. Секция для пакета, т.е. группа пакетов, выполняющая одну задачу. В Политике Debian разделе 2.4 этот вопрос описан более подробно.

Homepage Домашняя страница проекта. Т.к. данный код писал я и у него нет страницы, просто удаляю эту строку.

Vcs-* Ссылки на репозитории проекта. Их у меня тоже нет, поэтому удаляю эти строки.

Другие пакеты После секции файла, где описывается пакет с исходниками, идут секции, которые описывают другие пакеты, создаваемые из пакета с исходниками. Схема создания пакетов:

Как сделать deb пакет. Смотреть фото Как сделать deb пакет. Смотреть картинку Как сделать deb пакет. Картинка про Как сделать deb пакет. Фото Как сделать deb пакет

Из схемы видно, что из исходников программы, я хочу получить 4 пакета:

Мой персональный ответ на данный вопрос, заключается в том, что такое разбиение помогает структурировать программу по тому, как я хочу с ней работать. Для разработки я поставлю dev пакет, а для использования нет.

Кроме описанных выше пакетов, можно создать dbg пакет с отладочной сборкой программы. Это может пригодиться, если программа падает и у Вас есть под рукой отладчик. Однако, я так и не смог понять как это делать. Документация не дает ответа на этот вопрос. Если делать так как описано в ней, то я либо получаю пустой пакет либо получаю кучу ошибок при сборке.

Схема на рисунке выше показывает, что пакет с исходниками называется libvksplugins_source, однако, в файле control указано, что пакет с исходниками будет называться libvksplugins. На самом деле, он действительно будет называться libvksplugins, а пакет с бинарниками, будет называться libvksplugins… deb. Суть этой путаницы в том, что пакет с исходниками представляет собой tar архив и служебные файлы, тогда как пакет бинарников это архив с расширение deb.

Настройка пакета библиотеки Посмотрим внимательно на описание пакета библиотеки:

Для пакетов, содержащих скрипты или тексты, нужно указывать значение как all.

Третья строка, описывает зависимости создаваемого пакета. Вот как она описана в 4й главе Руководства начинающего разработчика Debian:

Т.е. эта строка говорит о том, что сборщик пакета сам определит зависимости.

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

Настройка пакета документации Вместе с библиотекой поставляется документация, чтобы она была в отдельном пакете, добавляем его описание:

rules

Данный файл является аналогом Makefile для сборки пакетов. По умолчанию, он создается в таком виде:

Видно, что это bash скрипт с синтаксисом Makefile. Единственная интересная конструкция здесь это

Т.к. исходники используют систему сборки CMake, то нужно изменить эту запись следующим образом:

Содержимое пакетов

После того, как мы указали в debian/control какие пакеты мы хотим получить, нужно указать какие файлы в какой пакет помещать. Для этого, для каждого названия пакета из файла control, нужно создать в папке debian два файла. Первый должен называться пакет.dirs, а второй пакет.install. Суть файлов в том, что первый указывает, какие папки нужно создать для пакета, а второй, какие файлы включить в пакет.

Посмотрим на их содержимое:

Важный момент, отсутствие начальной дроби в путях и отсутствие дроби в конце пути к папке. Проверив, куда CMake устанавливает файлы библиотеки, можно сформировать такие файлы:

Завершение настройки

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

Сборка пакетов

После настройки, сборка пакетов происходит довольно просто, нужно в папке проекта (которая включает подпапку debian) выполнить команду:

Заключение

Если вы дочитали до сюда — значит вы любите читать.

Этот текст является результатом моего опыта внедрения deb пакетов на работе. Опыт показал, что наличие сетевого репозитория (reprepro) и внимательное отслеживание версий, позволяют без проблем обновлять и тестировать различные версии ПО на парке из 30 машин с системами Astra Linux 1.3, 1.4 и Эльбрус ОС.

Источник

deb-пакет на коленке

Подготовка

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

Из всех файлов конфигурации пакета важными показались лишь 2:
control — описание пакета
conffiles — описание конфигурационных файлов пакета (при установке новой версии apt спросит заменить ли файл или оставить старую версию).

control
conffiles

В этом файле находится список конфигурационных файлов пакета. Пример:
/etc/seduction/seductiond.conf
/etc/seduction/seductiond.log.properties

Создание пакета
Создание репозитория на сервере

Устанавливаем пакет dpkg-dev.
Создаем директорию /var/opt/repo/, а в ней 2 подддиректории binary и source.
Заливаем пакеты в binary и выполняем комманду для создания каталога архива:

Записываем shell-скрипт для автоматизации апдейта сервера:

Поднятие nginx для доступа к репозиторию

Устанавливаем nginx, добавляем новый сайт:
$ cat /etc/nginx/sites-available/repo
server <
listen 9977;
server_name localhost;
access_log /var/log/nginx/repo.access.log;
location / <
autoindex on;
allow 127.0.0.1;
allow 192.168.0.2;
root /var/opt/repo;
>
>

Установка пакетов из созданного репозитория

Добавляем в /etc/apt/sources.list наш сайт:
deb 192.168.0.1:9977/ binary/
И устанавливаем пакет:
$ sudo apt-get update
$ sudo apt-get install package_name

Заключение

PS. сильно не пинайте — это мой первый пост.

Источник

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

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