Журнал LinuxFormat - перейти на главную

LXF91:Deb

Материал из Linuxformat
Перейти к: навигация, поиск
Hardcore Linux Проверьте себя, участвуя в сложных проектах для продвинутых пользователей

Содержание

dh_make: Сборка Deb-пакетов

Ubuntu набирает все большую популярность – почему бы не помочь ему, собрав пакет с одним из недостающих приложений? Грэм Моррисон проведет мастер-класс по дебианизации открытого ПО.

Благодаря появлению Ubuntu, Deb-файл стал самым распространенным форматом двоичного пакета в Linux (если верить Google Trends). Большинство дистрибутивов на базе Debian используют Deb-пакеты, а не другие доморощенные форматы упаковки, и хотя мы на данном уроке будем говорить в основном про Ubuntu, эта информация в равной степени применима к прочим дистрибутивам на базе Debian, или к любому другому дистрибутиву, располагающему соответствующими утилитами установки пакетов.

Просьбы о двоичных пакетах буквально засорили Интернет. Пользователи, не имеющие опыта в сборке программного обеспечения, отчаянно рвутся «наложить лапу» на последние версии полюбившегося программного обеспечения. Создание и обмен собственными пакетами – один из лучших видов вклада в сообщество. Приложение, которое я выбрал в качестве примера, Ale – графический инструмент для комбинирования изображений. Новая версия была выпущена в январе, но так как разработчики Ubuntu намерены выпускать только пакеты обновлений по безопасности, создание Deb-файла последнего релиза будет отличным способом добавить новую функцию без мучений по обновлению дистрибутива.

Процесс создания Deb-файла очень схож с созданием RPM и страдает такими же проблемам – нахождением зависимостей вашего пакета. К счастью, в отличие от RPM, существует хороший инструмент, облегчающий создание собственного пакета.


Часть 1: Готовим систему

Большая часть приложений, которую вы скачиваете, использует тройку команд ./configure, make и make install, а также систему Autoconf для собственной сборки и установки. В своей основе эти инструменты используют набор скриптов для сбора необходимой информации о вашем дистрибутиве, чтобы приложение было правильно скомпилировано, а его файлы попали в нужные каталоги.

Примерно такой же процесс и лежит в создании Deb-файла, а используемая вами система Linuх для создания пакетов должна быть возможно чище, чтобы собственные или неподдерживаемые пакеты случайно не попали в число зависимостей. Когда вы создаете пакет из исходных текстов, результирующий двоичный файл будет скомпонован с библиотеками вашей системы. Процесс сборки не знает, оригинальные ли это версии библиотек, собранные вами или скачанные из стороннего репозитория, поэтому необходимо собирать Deb-файлы в системе, максимально близкой к эталонной – и виртуальные машины являются идеальной средой для компиляции программ.

Процесс создания двоичных пакетов аналогичен сборке приложения из исходных текстов, поэтому, прежде чем начать, вам понадобится рабочая среда для компиляции – включая стандартные утилиты сборки GNU – а также библиотеки для разработки, требуемые для сборки и установки выбранного приложения. Вот как вы должны удостовериться, что ваша система содержит все необходимые зависимости для двоичных файлов, которые вы хотите распространять. Установка Ubuntu по умолчанию не содержит пакетов для разработки, но их можно установить, набрав в консоли следующее:

sudo APT-get install build-essential

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

Теперь мы добрались до группы дополнительных пакетов, которые используются для создания Deb-файла. Первый – fakeroot, он нужен, чтобы файлы в нашем пакете имели привилегии root. Fakeroot позволяет обычному, не суперпользователю создавать файлы, владельцем которых является root – при создании пакетов так безопаснее.

Но львиная доля работы осуществляется пакетом dh-make, инструментом, специально спроектированным для «дебианизации» архива исходного кода: он принимает кучу файлов конфигурации и выдает двоичный пакет. Еще два пакета, debhelper и devscripts, содержат много полезных инструментов. Наконец, последнее, что вам понадобится, это Dpkg – в дистрибутивах на базе Debian он установлен по умолчанию, в других же дистрибутивах вам придется самим о нем позаботиться.

Часть 2: Создаем файл настройки

Установив все необходимое для создания Deb-файла, можете скачивать исходный код выбранного приложения. Сперва лучше скомпилировать и запустить приложение, чтобы удостовериться, что ничто не повлияет на процесс сборки. Если все пройдет нормально, возвращайтесь к исходному тексту. Следующий шаг состоит в использовании команды dh_make, являющейся частью ранее установленного пакета dh-make (дефис, а не знак подчеркивания).

Команда dh_make создаст в каталоге с исходным текстом программы подкаталог, в котором будут содержаться все файлы настройки, которые понадобятся Dpkg для создания Deb-файла. Чтобы выполнить работу, dh_make нужен как каталог, так и архив с исходными текстами в определенном месте с именем определенного формата. Вам потребуется извлечь архив в каталог с названием имя пакета-номер версии – где имя пакета отделено от номера версии дефисом. Для Ale 0.8.5, например, каталог будет назван ale-0.8.5. Так уж вышло, что именно этот формат используется большинством приложений (Deb’ами или другими), включая Ale, поэтому есть шанс, что каталог будет иметь верное имя по умолчанию.

Переименовав при необходимости каталог с исходным кодом, проверьте, что архив назван согласно тому же формату (т.е. ale-0.8.5.tar.gz), и перейдите в каталог с исходным кодом. Для создания необходимых файлов настройки наберите следующую команду и проверьте, что параметр -f указывает на архив с исходными текстами:

dh_make -f ../ale-0.8.5.tar.gz

Вам потребуется ответить на несколько вопросов. Первый – какой тип пакета вы хотите создать: одиночный двоичный, множественный двоичный, библиотеку, модуль ядра или CDBS. Кроме CDBS, все остальное должно быть понятно. CDBS – это Common Debian Build System [Общая система сборки Debian]; в этом случае создастся основной набор файлов настройки, который потребует значительного редактирования, прежде чем вы сможете создать Deb-файл. Все осталь ные опции пытаются заполнить файлы настройки автоматически, в зависимости от типа приложения или выбранного инструмента. Для большинства приложений, скачанных из Сети, вы можете спокойно выбрать опцию «одиночный двоичный» (Single Binary). Когда вы сделаете выбор, dh_make выведет набор параметров, добытых им из вашей системы, и попросит вас их подтвердить – впрочем, чисто из любезности: пути назад уже нет, и все, что вы можете сделать, это нажать Enter; после чего dh_make создаст все файлы настройки и поместит их в каталог debian.

Расставляем все по местам

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

Создание собственного Deb-пакета требует кое-каких знаний. Но за год-другой работы с Linux вы их накопите. Процесс сборки пакетов – идеальное времяпрепровождение, если вы не умеете программировать, но не боитесь компилировать свое собственное ПО. Пользователи всех уровней часто взывают о последних релизах любимых программ в удобной «упаковке».

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

Часть 3: Тонкая настройка

Взглянув на содержимое созданного каталога debian, вы увидите бездну настроечных файлов. К счастью, для большинства приложений требуется отредактировать только парочку из них. Первый файл, в который следует заглянуть, это Control. Он содержит основную информацию о вашем приложении, а также набор зависимостей для его сборки из исходных текстов (файлы Dev) и установки как бинарного пакета. Многие поля обязательны для заполнения, и dh_make должен был уже поработать над ними. Это также относится и к другим необходимым файлам настройки. Очень важен формат этого и всех остальных файлов в каталоге debian. Каждое поле располагается на одной строке – никаких возвратов каретки – и между полями Standards-Version и Package должна быть пустая строка. Вот поля, которые придется редактировать:

  • Source Имя вашего приложения. В нашем примере это Ale.
  • Section Категория вашего приложения. Нажмите на кнопку Разделы в Synaptic, чтобы посмотреть примеры.
  • Maintainer Так как вы поддерживаете данный пакет, здесь следует указать ваше имя и адрес электронной почты.
  • Standards Это поле следует оставить как есть, так как оно представляет версию стандарта упаковки Debian, используемую для файлов настройки.
  • Package Укажите здесь то же, что и в поле Source.
  • Architecture Если вы хотите создать пакет для конкретной архитектуры процессора, то указать ее следует здесь. Это может быть, к примеру, i386 или AMD64, но для сборки пакета вам потребуется именно этот процессор. Вы можете проверить архитектуры, поддерживаемые вашим процессором, набрав dpkg-architecture в консоли.
  • Description В этом поле формат особенно некстати: требуется описать ваш пакет менее чем 60-ю символами. Но можно продолжить описание, только последующие строки должны начинаться с пробела, а уж за ним помещайте столько текста, сколько необходимо.

Если вы, читая это руководство, одновременно смотрите на файл настройки, то наверняка увидели, что я пропустил два важных поля: Build-Depends и Depends. Они описывают зависимости: Build-Depends – список всего, что необходимо для компиляции и сборки пакета из исходных текстов, а Depends – список других двоичных пакетов, требующихся для правильной работы вашего приложения. Есть много способов, позволяющих определить нужные зависимости – включая просмотр документации к приложению, скриптов настройки или просто зависимостей старой версии в менеджере пакетов Synaptic; но разработчики Debian придумали кое-что получше: скрипт, который, получив имя вашего приложения, выдаст список всех его зависимостей. Скрипт полагается на то, что собираемое вами приложение является корректным проектом Autotools:

strace -f -o /tmp/log ./configure
# или же make вместо ./configure, если пакет не использует autoconf
 for x in `dpkg -S $(grep open /tmp/log|\
 perl -pe ‘s!.* open\(\”([^\”]*).*!$1!’ |\
 grep “^/”| sort | uniq|\
 grep -v “^\(/tmp\|/dev\|/proc\)” ) 2>/dev/null|\
 cut -f1 -d”:”| sort | uniq`; \
 do \
 echo -n “$x (>=” `dpkg -s $x|grep ^Version|cut -f2 -d”:”` “), “; \
 done

Сохраните этот код в текстовом файле и запустите его в каталоге, содержащем файл настройки вашего приложения (просто наберите sh ./имя_файла). Его вывод подобен создаваемому скриптом ./configure, но отфильтрован с тем, чтобы получить оригинальные Dpkg-имена зависимостей. Они появятся в самом конце вывода, после строки ‘configure:make clean’, и их надо скопировать в поля Build-Depends и Depends файла Control. Имена пакетов для разработки оканчиваются на ‘-dev’, они добавляются в строку Build-Depends, включая строку с версией, следующую за именем пакета – libstdc++6-4.1-dev(>=4.1.1-13ubuntu5), например. Все остальные зависимости надо добавить в поле Depends.

Если ваше приложение использует троицу Autotools из команд configure, make и install для вашего пакета, вам не нужно предоставлять еще какую-то информацию. Без Automake понадобится редактировать файл rules, а это само по себе может потребовать руководства на четыре страницы. Фактически это Debian-версия файла Makefile, которую dpkg-buildpackage использует для сборки вашего пакета. Но в остальном трудности позади. Теперь надо только отредактировать несколько других настроечных файлов, а потом собрать бинарный пакет.

Откройте файл changelog в текстовом редакторе. Этот файл – Debian-эквивалент рабочего журнала программиста: места, куда помещаются отличия данного релиза от предыдущего. Изменения заносятся в раздел, следующий за символом звездочки, и вам также надо включить сюда ваше имя и адрес электронной почты. Основная цель этого файла – дать вашему пакету имя, распознаваемое менеджером пакетов Debian. Текущее имя находится в первой строке файла настройки, и его надо отредактировать в соответствии с соглашениями по именованию, принятыми в вашем дистрибутиве. Для Ubuntu единственной заменой будет замена слова ‘unstable’ на ‘edgy’, точнее, на ту версию дистрибутива, которую вы используете. Новое Руководство Debian для ответственных за программы (http://www.debian.org/doc/maint-guide) также предлагает отредактировать файлы Copyright и README.debian, включив всевозможную информацию о пакете, который вы собираете. Скрипт dh_make создал шаблоны man-страниц вашего приложения, и их надо перезаписать реальными файлами, идущими в его составе, или же создать руководство самому, если вы думаете, что у вас получится (см. LXF76 – там рассказано, как писать man-страницы). Есть еще файл инициализации системы (init.d.ex), он может использоваться для запуска сервисов во время загрузки, если ваше приложение того требует, а также довольно избыточные шаблоны Emacs (emacsen*) и набор скриптов (pre* и post*). Если вы достаточно хорошо знаете собираемое приложение, то сумеете извлечь выгоду из дополнительных возможностей. В противном случае удалите файлы, которые не хотите использовать, чтобы они не установились по умолчанию.

Альтернатива: CheckInstall

Есть более легкий способ создать Deb-файлы: использовать CheckInstall. Эта отличная утилита требует меньше трудов, чем dh_make, потому что не надо редактировать никаких файлов настройки. Но за счет чего? Она не такая гибкая, и будет работать только с более общим классом приложений, которые используют Autoconf.

Установив CheckInstall с помощью менеджера пакетов вашего дистрибутива, скачайте и распакуйте исходный код приложения – кандидата на «пакетирование». На самом деле, CheckInstall подключается на стадии make install сборки вашего приложения, перехватывая контроль над процессом для получения списка зависимостей от библиотек, создаваемых во время компиляции. Чтобы добраться до этой стадии, наберите ./configure, затем make в каталоге с исходным текстом вашего приложения. А вместо make install наберите checkinstall.

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

Часть 4: Запуск системы

Если ваше приложение содержится только в RPM-пакете, а Deb-файлов не предоставляет, собирать его вручную не обязательно: воспользуйтесь инструментом под названием Alien. Просто наберите alien --to-deb пакет.rpm и установите получившийся Deb-файл с помощью dpkg -i пакет.deb.

Файлы настройки отредактированы, и все готово к финальному аккорду – сборке Deb-файла. Выполните магическую команду dpkg_buildpackage -rfakeroot из каталога с исходным кодом. Запустившись, она скомпилирует программу и свяжет вместе различные компоненты, используя файлы настройки. По окончании ее работы вы найдете в родительском каталоге с исходным кодом группу файлов, включая главный двоичный Deb-пакет. Это и будут те самые файлы, которые можно установить и передавать другим людям. Для установки нового пакета просто наберите

sudo dpkg -i ale_0.8.5-1_i386.deb.

Потом вы сможете использовать ваше приложение, а если оно вам надоест, удалить его с помощью менеджера пакетов вашего дистрибутива.

Теперь у вас есть Debian-эквивалент информационной бомбы на вашем жестком диске, осталось только швырнуть ее в других пользователей (сосчитав до трех). Хорошая стартовая площадка – форум вашего дистрибутива. Вы и охнуть не успеете, как легионы преданных пользователей примутся скачивать, устанавливать и использовать ваш пакет – забивая ваш почтовый ящик вопросами, дальнейшими пожеланиями, жалобами, а то и шальными «спасибо».

Добро пожаловать в сообщество Open Source! LXF

Персональные инструменты
купить
подписаться
Яндекс.Метрика