Debian

Как создать пакет Debian

Как создать пакет Debian

1. Предисловие

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

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

Формат пакета зависит от вашего дистрибутива Linux. Выбранные форматы следующие:

деб

Пакеты, используемые в: Debian GNU / Linux, Ubuntu, Armbian, Linux Mint, Knoppix

об / мин

Пакеты, используемые в: RedHat, Fedora, CentOS, OpenSuse

tgz и txz

Пакеты, используемые в: Slackware

деготь.xz

Пакеты, используемые в: Arch Linux

В этом документе кратко объясняется, как собрать пакет для Debian GNU / Linux. Для получения подробной информации о формате пакета Debian и инструментах для поддержки системы Linux на основе 'deb' вы можете заглянуть в книгу управления пакетами Debian [dpmb]. Для создания пакетов для Debian GNU / Linux необходимы следующие документы:

Пакет, с которым мы будем работать, называется helloworld и имеет номер версии 0.1. В демонстрационных целях он просто содержит один скрипт Python, который выводит известное сообщение «Hello, world!”:

#!/ usr / bin / python print ("Привет, мир!") 

2. Требования

2.1. Ключ GPG

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

Если у вас еще нет ключа GPG, создайте его. Вы можете выполнить три шага ниже. Первая команда генерирует новый ключ, вторая экспортирует ваш новый ключ в отдельный файл, а третья добавляет ключ в вашу личную связку ключей.

$ gpg --gen-key $ gpg -a --output ~ /.gnupg / ВАШЕ ИМЯ.gpg --export 'ВАШЕ ИМЯ' $ gpg --import ~ /.gnupg / ВАШЕ ИМЯ.gpg 

Во время создания убедитесь, что задано правильное имя _YOUR NAME_. Обычно используется комбинация имени и фамилии. Это имя должно быть точно таким же в пакете, тогда при создании «контрольного» файла пакета Debian. Дополнительную информацию о GPG можно найти в Руководстве по конфиденциальности GNU [gph].

2.2. Цепочка упаковочного инструмента

Для сборки пакета Debian с исходным кодом в вашей системе требуются следующие программные пакеты:

Как пользователь root вы можете установить их, используя следующую команду:

# apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder 

2.3. Подготовьте программное обеспечение к упаковке

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

$ mkdir -p ~./ build / helloworld / 0.1 

Скопируйте tar.gz 'в каталоге:

$ cp helloworld-0.1.деготь.gz ~./ build / helloworld / 0.1 

Перейдите в каталог и извлеките пакет:

$ cd ~./ build / helloworld / 0.1 ~ / build / helloworld / 0.1 $ tar -xzf helloworld-0.1.деготь.gz 

Теперь каталог содержит как исходный код в отдельном каталоге, так и сжатый архив:

~ / build / helloworld / 0.1 $ ls helloworld-0.1 helloworld-0.1.деготь.gz 

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

На этом этапе мы добавим файлы, относящиеся к пакету Debian. Вот почему этот шаг называется _Debianization_ программного обеспечения. Это делается в несколько простых шагов.

3.1 Подготовьте структуру пакета

Перейдите в каталог, в котором хранится весь исходный код пакета. В нашем примере пакет содержит файл helloworld.py ', только:

~ $ cd build / helloworld / 0.1 / helloworld-0.1 ~ / build / helloworld / 0.1 / helloworld-0.1 $ ls helloworld.ру 

Давайте добавим файлы, относящиеся к пакету Debian. Инструмент dh_make вступает в игру. Ключ '-e' использует указанный адрес в качестве адреса электронной почты в поле 'Maintainer' файла 'debian / control'. Вместо этого при создании пакета используйте свой собственный адрес электронной почты. Не забывайте использовать тот же адрес электронной почты, который соответствует вашему ключу GPG.

Переключатель '-f' использует данный файл как исходный исходный архив и пропускает копирование текущего дерева программы в 'program.ориг '.

~ / build / helloworld / 0.1 / helloworld-0.1 $ dh_make -e [адрес электронной почты защищен] -f… / helloworld-0.1.деготь.gz 

В приглашении вас попросят выбрать тип создаваемого пакета. Чтобы выбрать _ single binary_ type 's'.

Тип пакета: одиночный двоичный файл, двоичный файл indep, несколько двоичных файлов, библиотека, модуль ядра, патч ядра? [s / i / m / l / k / n] s Имя обслуживающего лица: Frank Hofmann Адрес электронной почты: [защищенный адрес электронной почты] Дата: Сб, 4 ноября 2017 г. 21:16:13 +0100 Имя пакета: helloworld Версия: 0.1 Лицензия: пустая Тип упаковки: Одно нажатие  для подтверждения: в настоящее время отсутствует Makefile верхнего уровня. Это может потребовать дополнительной настройки. Сделанный. Пожалуйста, отредактируйте файлы в подкаталоге debian / сейчас. Вы также должны убедиться, что Makefiles helloworld устанавливается в $ DESTDIR, а не в / . 

В результате образуется каталог с именем debian:

~ / build / helloworld / 0.1 / helloworld-0.1 $ ls debian helloworld.ру 

Этот каталог содержит все файлы, относящиеся к пакету.

3.2. Настройте контрольный файл

В файле debian / control хранятся зависимости, необходимые _для сборки_ пакета. Используя команду 'dpkg-depcheck -d ./ configure 'вы получите список со всеми необходимыми пакетами. В нашем случае нет необходимости в дополнительном пакете, потому что Python - это интерпретируемый язык.

Затем нам нужно отредактировать файл debian / control и добавить значения, специфичные для пакета. В нашем примере это выглядит так:

Источник: helloworld Раздел: python Приоритет: необязательно Сопровождающий: Франк Хофманн <[email protected]> Зависит от сборки: debhelper (> = 9) Версия стандарта: 3.9.5 Домашняя страница: http: // www.efho.де / # Vcs-Git: git: // anonscm.дебиан.org / collab-maint / helloworld.git # Vcs-Браузер: http: // anonscm.дебиан.org /?р = коллаб-maint / helloworld.git; a = summary Пакет: helloworld Архитектура: любая Зависит: $ shlibs: Depends, $ misc: Depends, python Описание: Печатает Hello World в Python Печатает Hello World в Python 

3.3. Отрегулируйте файл авторских прав

Файл debian / copyright содержит лицензионную информацию для программного пакета. Он подготовлен к выпуску через GNU Public License 2 (GPLv2). В нашем примере это выглядит так:

Формат: http: // www.дебиан.org / doc / Packaging-manuals / copyright-format / 1.0 / Upstream-Name: helloworld Источник: http: // www.efho.de / Files: debian / * Авторские права: 2017 Франк Хофманн <[email protected]> Лицензия: GPL-2 + Этот пакет является бесплатным программным обеспечением; вы можете распространять и / или изменять его в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной Free Software Foundation; либо версия 2 Лицензии, либо (по вашему выбору) любая более поздняя версия… Этот пакет распространяется в надежде, что он будет полезен, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; без даже подразумеваемой гарантии ТОВАРНОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. Подробнее см. Стандартную общественную лицензию GNU… Вы должны были получить копию Стандартной общественной лицензии GNU вместе с этой программой. Если нет, см  . В системах Debian полный текст Стандартной общественной лицензии GNU версии 2 можно найти в "/ usr / share / common-licenses / GPL-2". 

3.4. Отрегулируйте файл журнала изменений

После информации об авторских правах необходимо изменить файл debian / changelog. В нашем примере мы добавляем информацию «Первоначальный выпуск».

helloworld (0.1-1) нестабильный; срочность = низкая * Первоначальный выпуск - Франк Хофманн <[email protected]> Сб, 04 ноя 2017 21:16:13 +0100 

Это все, что нам нужно на данный момент - теперь мы можем собрать пакет, наконец.


4. Соберите пакет

Чтобы собрать пакет, нам нужно переместиться на один каталог вверх и выполнить следующую команду:

~ / build / helloworld / 0.1 / helloworld-0.1 $ dpkg-buildpackage -rfakeroot

Параметр '-rfakeroot' позволяет 'dpkg-buildpackage' запускать команды от имени привилегированного пользователя с помощью команды 'fakeroot'. Это необходимо для подготовки пакета, а также для создания файлов и каталогов.
Приведенная выше команда приводит к более длинному списку выходных сообщений (показанному здесь в немецкоязычной среде):

dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellversion 0.1-1 dpkg-buildpackage: нестабильный пакет Quelldistribution dpkg-buildpackage: Quellen geändert durch Frank Hofmann <[email protected]> dpkg-buildpackage: Host-Architektur amd64 dpkg-source --before-build helloworld-0.1 fakeroot debian / rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b helloworld-0.1 dpkg-source: Информация: Quellformat "3.0 (quilt) "wird verwendet dpkg-source: Информация: helloworld wird unter Benutzung des existierenden ./ helloworld_0.1.происхождение.деготь.gz gebaut dpkg-source: Информация: helloworld wird в helloworld_0.1-1.дебиан.деготь.xz gebaut dpkg-source: Информация: helloworld wird в helloworld_0.1-1.ЦИВ gebaut Debian / правило сборки дк сборка dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot Debian / правила бинарной DH двоичного dh_testroot dh_prep dh_auto_install dh_installdocs dh_installchangelogs dh_perl dh_link dh_compress dh_fixperms dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol Dpkg-gencontrol: Warnung: Feld ЗАВИСИТ фон Paket HelloWorld: unbekannte Substitutionsvariable $ shlibs : Depends dh_md5sums dh_builddeb dpkg-deb: Пакет "helloworld" вирд в "… / helloworld_0.1-1_amd64.деб "гебаут. dpkg-genchanges <… /helloworld_0.1-1_amd64.changes dpkg-genchanges: kompletter Quellcode beim Hochladen hinzufügen dpkg-source --after-build helloworld-0.1 dpkg-buildpackage: Alles hochzuladen (Originalquellen enthalten) signfile helloworld_0.1-1.dsc Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: "Frank Hofmann (Hofmann EDV) <[email protected]> "4096-битный RSA Schlüssel, ID D431AC07, erzeugt 05.09.2014 

4.1. Проверка пакета

Поздравляем - вам удалось собрать пакет Debian - да! А теперь давайте внимательнее посмотрим на упаковку. Здесь в игру вступает `` линтиан ''. Этот инструмент проверяет ваш пакет, чтобы найти нарушения строгих правил, которые пакеты Debian должны выполнять.

Чтобы запустить тесты, введите следующую команду:

lintian helloworld_0.1-1_amd64.деб 

Инструмент не обнаруживает нарушения правил, но также орфографические ошибки и неправильные символы. Переключатель -pedantic требует от lintian быть более критичным, чем обычно. Как вы можете видеть ниже, lintian немного сварливый и обнаружил три предупреждения и одну ошибку.

За исключением первого предупреждения, мы можем легко осчастливить lintian и скорректировать содержимое пакета в соответствии с установленными правилами. Предупреждение 'new-package-should-close-itp-bug' означает, что в пакете ITP нет отчета об ошибке (ITP означает _intended to package_). Для обычного пакета Debian отчет об ошибке должен быть отправлен в багтрекер для пакета ITP, чтобы уведомить других о том, что вы собираетесь начать упаковывать это программное обеспечение.

4.2. Предупреждение: 'readme-debian-contains-debmake-template

Файл README.Debian 'предназначен для хранения дополнительных примечаний относительно этого пакета. 'dh_make' создал для нас этот файл:

helloworld для Debian ---------------------  -- Франк Хофманн <[email protected]> Сб, 04 ноя 2017 21:16:13 +0100 

В нашем примере у нас нет дополнительной информации, поэтому мы можем удалить файл.

4.3. Предупреждение: "описание-начинается-с-ведущими-пробелами"

Это предупреждение возникает из-за того, что более подробное описание нашего пакета в файле debian / control начинается с более чем одного пробела. Как только мы удалим один пробел, предупреждение исчезнет.

4.4. Ошибка: "описание-синопсис-дублируется"

Каждый пакет требует как краткого, так и более подробного описания в 'debian / control'. Эта ошибка возникает из-за того, что оба описания идентичны. Как только мы расширили более подробное описание, ошибка исчезла.


5. Ссылки и ссылки

- [ddr] Андреас Барт, Адам Ди Карло, Рафаэль Герцог, Лукас Нуссбаум, Кристиан Шварц, Ян Джексон: Справочник разработчика Debian
- [dnmg] Иосип Родин, Осаму Аоки: Руководство нового сопровождающего Debian
- [dpmb] Аксель Бекерт, Франк Хофманн: Книга по управлению пакетами Debian
- [dpm] Руководство по политике Debian
- [dpt] Учебное пособие по упаковке Debian
- [gph] Справочник по конфиденциальности GNU
- [lushpaiPackage] Алекс Лушпай: Как создать пакет debian из исходного кода


6. Благодарности

Автор благодарит Акселя Беккерта и Герольда Руппрехта за поддержку и критиков при подготовке этой статьи.

Как использовать чит-движок GameConqueror в Linux
В статье содержится руководство по использованию чит-движка GameConqueror в Linux. Многие пользователи, играющие в игры на Windows, часто используют п...
Лучшие эмуляторы игровой консоли для Linux
В этой статье будет перечислено популярное программное обеспечение для эмуляции игровых консолей, доступное для Linux. Эмуляция - это уровень совмести...
Лучшие дистрибутивы Linux для игр в 2021 году
Операционная система Linux прошла долгий путь от своего первоначального простого серверного вида. Эта ОС значительно улучшилась за последние годы и те...