- Создайте свои собственные пакеты DEB и RPM
- Ресурсы
- Пошаговое описание
- Часть 1: Debian
- Часть 2: Создание пакетов RPM в Fedora
- Сборка пакетов
- Содержание
- Классификация случаев сборки
- Сборка из исходников
- Что необходимо
- Создание ключа шифрования
- Дебианизация недоступна
- Дебианизация
- Сборка пакета
- Дебианизация берётся из репозитория Ubuntu, из PPA или из Debian
- Дебианизация берётся из другой версии программы
- Дебианизация берётся из текущей версии программы
- Дебианизация берётся не из репозитория текущего выпуска Ubuntu
- Дебианизация берётся из репозитория текущего выпуска Ubuntu
- Сборка из бинарных файлов
Создайте свои собственные пакеты DEB и RPM
Мы расскажем вам, как создавать два наиболее распространенных типа пакетов Linux для распространения программного обеспечения, и вы сможете сами распространять свои собственные пакеты.
Мы собираемся провести вас через процесс создания пакетов программ для двух самых популярных систем пакетов DEB и RPM. Вы можете использовать эти методы, чтобы создавать пакеты вашего собственного программного обеспечение или даже сопровождать пакеты для того программного обеспечения, которое, как вы считаете, остается незамеченным.
Мы начнем с руководство по созданию файлов DEB ((.deb) для дистрибутивов, производных от Debian — для этого мы качестве нашей базы используем Xubuntu. После этого мы подробно опишем методы, необходимые для создания пакетов RPM для использования в дистрибутивах, производных от Red Hat, и для этого мы будем использовать Fedora. Часто можно создать пакет на одном дистрибутиве, а затем установить его на родственном дистрибутиве (например, Ubuntu>Debian), но если это важно, то вам, может быть, стоит попробовать это самостоятельно.
Что касается программы, мы собираемся в качестве примера пакета, собираемого из исходного кода, использовать легковесный веб-браузер Dillo. Когда сборка выполняется из исходных текстов, в случае, если сборка не идет так, как надо, вы можете, как и обычно, поискать решения в сети интернете. Например, в случае Dillo 3.0.3, нам из-за недосмотра в архиве исходного кода пришлось для того, чтобы команды работали, перед командами сборки добавить ‘LIBS =-lX11’ .
Сборка происходит в командной строке
Ресурсы
Инсталляция (или виртуальная машина) Ubuntu и Fedora
Пошаговое описание
Шаг 01: Использование виртуальной машины
Использование средств виртуализации, таких как VirtualBox или Vmware, часто является лучшим подходом к созданию пакетов для других систем. С одной стороны, этот подход позволяет поддерживать сравнительно чистую базовую инсталляцию, сравнимой с настройками, с которыми вероятно, будут работать другие. Это также означает, что вы, используя различные дистрибутивы, можете получить коллекцию целевых систем. Кроме того, большинство средств виртуализации позволяют эмулировать различные архитектуры, и, следовательно, на 32-разрядной платформе можно запускать 64-разрядные ОС, хотя будет страдать производительность.
Шаг 02: Начинаем с нуля
Если в Ubuntu или Fedora что-то идет не так, то можно совершенно безопасно просто удалить исходный каталог и начать все заново. Обратите внимание, что инструментальные средства Debian изменяют исходный архив, так что вам придется начать с новой копии.
Часть 1: Debian
Шаг 03: Установите среду сборки
Мы начнем с установки большей части инструментальных средств, которые нам нужны для создания программ из исходных кодов. Наберите:
Теперь мы должны установить инструменты, которые используются для работы с пакетами DEB. Сделайте это с помощью следующей команды .
Шаг 04: Создайте ключ GPG
Если вы еще в прошлом не создали открытый ключ GPG, его необходимо создать прямо сейчас для того, чтобы можно было подписать пакеты. Вначале вводите текст gpg –gen-key. Выберите значения, устанавливаемые по умолчанию, и при запросе введите свое настоящее имя и контактные данные. Аккуратно запишите все данные, поскольку позднее нам в конфигурационном файле потребуется их точное соответствие. После этого наберите команду ls
/.gnupg для того, чтобы убедиться, что новый ключ существует (это файл имя_фамилия.gpg). Из него создайте открытый ключ:
Импортируйте его с помощью:
Шаг 05: Скачайте пакет
В этом примере мы собираемся скачать и собрать самую последнюю версию веб-браузера Dillo. Перейдите на сайт Dillo (www.dillo.org) и загрузить самый свежий архив .tar.bz. С помощью команды mkdir
/srcand создайте каталог для исходного кода и переместите в него архив.
Шаг 06: Распакуйте архив
Распакуйте архив с помощью команды tar -xjvf [имя архива].tar.bz2. Обратите внимание, что соблюдение договоренностей об именовании каталога (имяпакета-версия) является важным для наших целей, и, к счастью, пакет Dillo соответствует им. Также важно, чтобы архив с исходным кодом находится на один уровень выше каталога с исходным кодом.
Шаг 07: Настраиваем под Debian
Переместите в только что распакованный каталог скрипт dh_make, который позаботится о большей части работы — добавит конфигурационный файл и создаст структуру каталогов, и который входит в состав интруменртария разработчика, который мы добавили ранее.
В нашем примере, командная строка тбудет выглядеть следующим образом:
При появлении запроса выберите один двоичный файл. Скрипт-помощник скрипт должен в каталоге с исходным кодом создать каталог с именем Debian.
Шаг 08: Откройте управляющий файл
Откройте в текстовом редакторе управляющий файл в подкаталоге Debian. Заполните раздел «Домашняя страница» (используйте Google для заполнения списка разделов программ Debian) и поля описания этого файла.
Шаг 09: Изучите имеющиеся зависимости
Вы можете изучить, какие зависимости необходимы для запуска программы, поставляемой в виде пакета. Перейдите в каталог с исходными кодами и наберите в терминале команду dpkg-depcheck -d ./configure. Если так сделать, то будут выданы ошибки, указывающие какой отсутствует пакет, необходимый для сборки программы (поставляемой отдельно). Вы можете открыть этот пакет, набрав sudo apt-get build-dep [имя пакета], и это должно помочь, если в репозитарии дистрибутива этот пакет поддерживается. Если он не поддерживается, то вам придется неоднократно запустить команду dpkg-depcheck -d ./configur и добавлять пакеты вручную, набирая команду рsudo apt-get install [имя пакета].
Шаг 10: Добавьте зависимости в управляющий файл
Когда все действия из предыдущего шага будут завершены, у вас должен быть список всех необходимых пакетов. Добавьте этот список зависимостей в раздел depends: управляющего файла. Элемент в списке должны быть разделены запятой и пробелом.
Шаг 11: Отредактируйте файл авторских прав
Попробуйте выполнить этот шаг настолько полно, насколько вы сможете, и не пропускайте его. Source: — это обычно главная страница проекта. В разделе Files: * замените информацию об авторских правах именами авторов проекта. Пример заполнения вы можете увидеть в разделе Files: debian/*, в который должна быть занесена соответствующая информация. Возможно, вам придется немного побыть детективом, чтобы найти необходимую вам информацию. Ищите в каталоге с исходными кодами файлы, такие как AUTHORS и COPYING.
Шаг 12: Отредактируйте файл журнала изменений
Откройте файл журнала изменений и убедитесь, что имя и адрес электронной почты совпадают с теми, которые вы ввели при создании ключа GPG. Обычно скрипт-помощник может добавить в файл имя пользователя, а не ваше настоящее имя. Как с файлом авторских прав, не пропускайте этот раздел, поскольку из-за этого процесс создания пакета может остановиться или может быть создан неправильный пакет.
Шаг 13: Создайте пакет
Если все настроено правильно, мы можем, наконец, собрать пакет DEB. Перейдите в каталог с исходным кодом и для того, чтобы собрать пакет, , который будет помещен в каталог
/src/, наберите команду dpkg-buildpackage -b. Например, создайте пакет с помощью команды dpkg -I [пакет]. Для того, чтобы проверить на соответствие политики Debian, с помощью команды lintian [пакет] запустите программу Lintian. Обратите внимание, что этот инструмент, как известно, строгий, и ваше дело решать, допустимы ли для вас некоторые незначительные предупреждения о несоблюдения. Наконец, установите пакт с помощью команды sudo dpgk -i [пакет].
Часть 2: Создание пакетов RPM в Fedora
Шаг 14: Откройте управляющий файл
Перейдите в режим пользователя root, набрав для этого su. Начните с инсталляционной группы Development Tools (Инструменты разработки) в yum, а затем с помощью yum установите упаковщик gcc-c++ fedora-. Наберите команду usermod -a -G mock для того, чтобы добавить вашего пользователя в группу mock. Это позволяет нам выполнять процедуру сборки без необходимости перехода в роль пользователя root.
Шаг 15: Создайте среду сборки
Нажмите Ctrl + D для того, чтобы выйти из роли root. Введите rpmdev-setuptree для того, чтобы создать дерево каталогов (под
/rpmbuild), которое нам необходимо.
Шаг 16: Скачайте архив и переместите его в нужное место
Скачайте пакет Dillo с вебсайта Dillo и переместите архив в соответствующий каталог — наберите команду mv [имя архива]
Шаг 17: Создайте файл .spec
Дистрибутивы, созданные на основе Red Hat, такие как Fedora, используют файлы .spec для задания процесса сборки. Перейдите в каталог, в котором находятся такие файлы, с помощью команды cd
/rpmbuild/SPECS/andcreateablank.spec и создайте пустой файл .spec с помощью команды rpmdev-newspec dillo.
Шаг 18: Отредактируйте файл .spec
Наберите команду gedit dillo.spec. Заполните поля Version (Версия), Summary (Краткое содержание) Licence (Лицензия) (в данном случае — GPLv3+).В URL указывается домашняя страница проекта; в Source0 указывается адрес исходного кода. Укажите комментарии в полях BuildRequires (Требования к сборке) и Requires (Требования). Добавьте полное описание в область %description.
Шаг 19: Выполните сборку исходного кода
Если пакет вообще поддерживается в системе, запустите команду yum-builddep [имя пакета]. В противном случае, вам придется повторять команду сборки для того, чтобы получать сообщения об ошибках, или поискать документацию в архиве с исходным кодом. В каталоге SPEC наберите команду rpmbuild -ba[название пакета].spec. Если эта сборка завершится неудачно и будут выданы сообщения о дополнительных не распакованных файлах, выделите и скопируйте этот список файлов в раздел %files файла .spec и повторите команду сборки. Теперь пакет будет находиться в каталоге RPMS. Наберите команду rpm -ivh [пакет] для того, чтобы его установить. Наберите команду rpm -qa | grep [пакет] для того, чтобы убедиться, что он установлен.
Источник
Сборка пакетов
Содержание
Дистрибутивы, основанные на Debian – это не только отличная система управления пакетами APT, которая сама разрешает зависимости, но и удобные инструменты для создания пакетов и своих репозиториев. Если уж вы решились собрать программу из исходников, то советую ещё изучить, как дебианизировать исходники. Это отнимет чуть больше времени, чем стандартное
но зато позволит сохранить систему в чистоте. Удалить программы, установленные командой make install, можно только командой
но не все исходники это поддерживают, а что ещё чаще — исходники удаляют после установки, тогда удалить программу можно только вручную. Но чтобы это сделать, нужно точно знать что и куда установилось. А это уж точно никто не знает, кроме самих разработчиков программы (ну или тех, кто более-менее разбирался в исходниках программы).
и документ не будет открываться. Таких «недочётов» может быть очень много. А теперь, если представить что это удалить нельзя, поскольку пользователь не запоминал что и куда поставилось, наступает паника и как результат — переустановка.
Чаще всего такие случаи очень корректно разрешаются путём удаления конфликтного пакета. Но на разбор ситуации уйдёт некоторое время.
Классификация случаев сборки
Возможны следующие случаи сборки пакетов:
исходники или бинарные файлы берутся:
Сборка из исходников
Что необходимо
Полное Руководство начинающего разработчика Debian доступно тут.
К сожалению, на русском, информация немного устарела, свежая инструкция доступна на английском. Но принципы не изменились, поэтому если интересны детали лучше прочитать руководство от и до.
Нам понадобятся как минимум программы, устанавливаемые командой
Можно так же autobook — это документация по утилитам GNU Autoconf , Automake , и Libtool . Ну и конечно то, что требуют сами исходные коды для корректной сборки.
Создание ключа шифрования
Этот шаг не обязателен, его можно пропустить.
Чтобы создать ключ, зайдите в Приложения → Стандартные → Пароли и ключи шифрования. В открывшемся окне, в меню Ключ → Новый ключ, выбираем ключ pgp. Заполняем поля Полное имя и Электронный адрес.
В мире свободного программного обеспечения, для предотвращения «краж» или «подделок», принято подписывать свои «ценные» вещи электронным ключом, открытая часть которого хранится на общедоступных серверах и позволяет другим пользователям легко выяснить подлинность и целостность той или иной вещи.
Поэтому отнеситесь к созданию ключа очень ответственно.
Никто вас не заставляет вписывать сюда реальные имя и фамилию, или ещё какие-нибудь личные данные, но если вас не разыскивает интерпол — думаю указать фамилию и имя будет верным решением, хотя можно и просто свой ник В общем, решайте сами. А вот почтовый адрес укажите реальный, и который вы не поменяете.
Можно завести ящик, если ещё нет, на каком-нибудь популярном почтовом сервере: например, gmail.com или yandex.ru .
Это позволит в будущем легко связаться с вами человеку, который вас не знает, но по той или иной причине встретил «вещь», подписанную вами.
Далее вас спросят ввести пароль, как дополнительную защиту. Он может быть полезен, если вы будете использовать закрытый ключ на машинах, которым вы не можете на 100% доверять. Обратная сторона — вам придётся вводить пароль каждый раз, как только вы будете что-то подписывать.
Хотя последняя версия программы 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 в корне исходников, с нужными файлами конфигурации и скриптом(ами).
Для этого, в корне исходных текстов, выполним
На что мы должны получить следующий диалог
Тут мы указываем сформировать пакет, для одиночного бинарного файла.
Но мы с вами молодцы и всё у нас прошло без ошибок — появился каталог debian в корне исходников, посмотрев его содержимое, Вы увидите кучу файлов (расширение .ex) с примерами на все случаи жизни.
Будем считать, что программа у нас простая – обычно ни один из этих файлов не нужен.
Первым делом, нужно добавить описание программы в файле debian/control
Вместо и (без угловых кавычек) нужно вписать описание, что это за программа.
Именно эти сведения увидит пользователь, когда посмотрит описание пакета.
Второй момент — это поправить файл debian/rules
в секции binary-arch: нужно раскомментировать (т.е. убрать # в начале строки)
без этого мы получим пустой пакет.
Иногда 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
Для Debian нужно использовать сайт http://packages.debian.org, для Ubuntu — http://packages.ubuntu.com. Тогда, например, в Ubuntu ищем пакет gcoolprog в репозитории будущего релиза.
Предварительно подготовим рабочую директорию
теперь скачиваем три файла
или тоже самое, но одной командой
из пакета devscripts
затем распакуем командой
получим каталог gcoolprog-0.5.3.Перейдём в него и сменим версию:
теперь можно собирать пакет
Дебианизация берётся из репозитория текущего выпуска Ubuntu
В случае, когда для нужной версии программы имеется пакет в репозитории текущего выпуска Ubuntu, но он по каким-либо причинам не устраивает и в его исходники нужно внести изменения (например, применить какой-нибудь патч) и пересобрать, основываясь на уже имеющейся в пакете дебианизации, можно поступить следующим образом.
Для сборки понадобятся следующие пакеты: build-essential devscripts fakeroot. Потребуются также пакеты для разработки, мы их установим в дальнейшем.
apt-get source скачивает исходники из репозитория Ubuntu в текущую директорию. Многие пакеты в репозитории имеют общие друг с другом исходники, поэтому кроме исходников выбранного пакета могут скачаться и исходники других пакетов (общие для нескольких пакетов исходники).
Далее вносим изменения в исходники и собираем из них обратно пакеты.
Устанавливаем необходимые для сборки пакеты для разработки:
debuild следует запускать в директории исходников. Параметры -b -us -uc передаются программе dpkg-buildpackage. Первый требует собирать только бинарные пакеты, второй и третий — не подписывать цифровой подписью, соответственно, пакет исходников и файл .changes. Получившиеся в результате сборки пакеты будут в директории на один уровень выше.
Сборка из бинарных файлов
Ниже идёт пример как можно поступить в случае, если доступен только 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’у.
Источник