- 1. Предисловие
- 2. Требования
- 2.1. Ключ GPG
- 2.2. Цепочка инструментов для упаковки
- 2.3. Подготовка программного обеспечения к упаковке
- 3. Debianization
- 3.1 Подготовка структуры пакета
- 3.2. Настройте управляющий файл
- 3.3. Настройте файл авторских прав
- 3.4. Настройте файл журнала изменений
- 4. Сборка пакета
- 4,1. Проверка пакета
- 4.2. Предупреждение: `readme-debian-contains-debmake-template
- 4.3. Предупреждение: `description-Start-with-Leading-Spaces`
- 4.4. Ошибка: `description-synopsis-is-duplicated`
- 5. Ссылки и ссылки
- 6. Благодарности
1. Предисловие
Быть ответственным за машину означает заботиться как об аппаратном обеспечении, так и о программных компонентах. Как повседневный системный администратор видит, что гораздо лучше устанавливать программное обеспечение как пакет программ, а не как набор исходных файлов. Это снижает затраты на правильное обслуживание системы.
Пакеты, которые доступны у предпочитаемого вами дистрибьютора, проверяются и контролируются сопровождающим пакета. Он протестировал программное обеспечение и заверяет, что оно подходит для других программных пакетов, доступных в дистрибутиве. Более того, пакет подписан ключом GPG от сопровождающего пакета. Это гарантирует целостность пакета и показывает, что пакет получен из надежного источника.
Формат пакета зависит от вашего дистрибутива Linux. Выбраны следующие форматы:
deb
Пакеты, используемые в: Debian GNU/Linux, Ubuntu, Armbian, Linux Mint, Knoppix
rpm
Пакеты, используемые в: RedHat, Fedora, CentOS, OpenSuse
tgz и txz
Пакеты, используемые в: Slackware
tar.xz
Пакеты, используемые в: Arch Linux
В этом документе кратко объясняется, как собрать пакет для Debian GNU/Linux. Для получения подробной информации о формате пакета Debian и инструментах для поддержки системы Linux на основе `deb` вы можете заглянуть в книгу управления пакетами Debian [dpmb]. Для создания пакетов для Debian GNU/Linux необходимы следующие документы:
- Руководство нового сопровождающего Debian [dnmg]
- Справочник разработчика Debian [ddr]
- Руководство по упаковке Debian [dpt ]
- Руководство по политике Debian [dpm]
Пакет, с которым мы будем работать, называется `helloworld` и имеет номер версии 0.1. В демонстрационных целях он просто содержит один скрипт Python, который выводит известное сообщение «Hello, world!»:
#!/Usr/bin/pythonprint («Hello, world!»)
2. Требования
2.1. Ключ GPG
На шаге 1 подготовьте ключ GPG. В дальнейшем ключ понадобится для подписи посылки. Имейте в виду, что неподписанные пакеты не заслуживают доверия и не могут быть частью вселенной Debian.
Если у вас еще нет ключа GPG, создайте его. Вы можете выполнить следующие три шага. Первая команда генерирует новый ключ, вторая экспортирует ваш новый ключ в отдельный файл, а третья добавляет ключ в вашу личную связку ключей.
$ gpg --gen-key $ gpg -a --output ~/.gnupg/YOUR_NAME.gpg --export 'ВАШЕ ИМЯ' $ gpg --import ~/.gnupg/YOUR_NAME.gpg
Во время создания убедитесь, что данное имя ВАШЕ ИМЯ_ правильно. Обычно используется комбинация имени и фамилии. Это имя должно быть точно таким же в пакете при создании контрольного файла пакета Debian. Дополнительную информацию о GPG см. В Руководстве по конфиденциальности GNU [gph].
2.2. Цепочка инструментов для упаковки
Для сборки пакета Debian с исходным кодом в вашей системе требуются следующие программные пакеты:
- build-essential
- autoconf
- automake
- autotools-dev
- dh-make
- debhelper
- сценарии разработки
- fakeroot
- xutils
- lintian
- pbuilder
Как пользователь `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.tar.gz ~./build/helloworld/0.1
Перейдите в каталог и распакуйте пакет:
$ cd ~./build/helloworld/0.1 ~/build/helloworld/0.1 $ tar -xzf helloworld-0.1.tar.gz
Теперь , каталог содержит как исходный код в отдельном каталоге, так и сжатый архив:
~/build/helloworld/0.1 $ lshelloworld-0.1 helloworld-0.1.tar.gz
3. Debianization
На этом этапе мы добавим файлы, относящиеся к пакету Debian. Вот почему этот шаг называется _Дебианизация_ программного обеспечения. Это выполняется в несколько отдельных шагов.
3.1 Подготовка структуры пакета
Перейдите в каталог, в котором хранится весь исходный код пакета. В нашем примере пакет содержит только файл `helloworld.py`:
~ $ cd build/helloworld/0.1/helloworld-0.1 ~/build/helloworld/0.1/helloworld-0.1 $ ls helloworld.py
Давайте добавим файлы, относящиеся к пакету Debian. В игру вступает инструмент dh_make. Переключатель `-e` использует данный адрес в качестве адреса электронной почты в поле` Maintainer` файла `debian/control`. Вместо этого при создании пакета используйте свой собственный адрес электронной почты. Не забывайте использовать тот же адрес электронной почты, который соответствует вашему ключу GPG.
Переключатель `-f` использует данный файл как исходный исходный архив и пропускает копирование текущего дерева программы в `program.orig`.
~/build/helloworld/0.1/helloworld-0.1 $ dh_make -e [защита электронной почты] -f ../helloworld-0.1.tar.gz
В приглашении вас попросят выбрать тип пакета, который необходимо создать. Чтобы выбрать _ single binary_ type `s`.
Тип пакета: одиночный двоичный файл, двоичный файл indep, несколько двоичных файлов, библиотека, модуль ядра, патч ядра? [s/i/m/l/k/n] Имя администратора: Фрэнк Хофманн Адрес электронной почты: [электронная почта защищена] Дата: Сб, 4 ноября 2017 г. 21:16:13 + 0100 Имя пакета: helloworldВерсия: 0.1 Лицензия: blankТип пакета: SingleHit для подтверждения: в настоящее время не существует Makefile верхнего уровня. Это может потребовать дополнительной настройки.. Теперь отредактируйте файлы в подкаталоге debian/. Также убедитесь, что Makefiles helloworld устанавливаются в $ DESTDIR, а не в/.
В результате создается каталог с именем `debian`:
~/build/helloworld/0.1/helloworld-0.1 $ lsdebian helloworld.py
Это каталог содержит все файлы для конкретных пакетов.
3.2. Настройте управляющий файл
Файл `debian/control` хранит зависимости, которые необходимы _для сборки_ пакета. Используя команду `dpkg-depcheck -d./Configure`, вы получите список со всеми необходимыми пакетами. В нашем случае нет необходимости в дополнительном пакете, потому что Python — это интерпретируемый язык.
Затем мы должны отредактировать файл `debian/control` и добавить значения, специфичные для пакета. В нашем примере это выглядит следующим образом:
Source: helloworldSection: pythonPriority: optionalMaintainer: Frank Hofmann Build-Depends: debhelper (> = 9) Standards-Version: 3.9.5 : http://www.efho.de/#Vcs-Git: git://anonscm.debian.org/collab-maint/helloworld.git#Vcs-Browser: http://anonscm.debian.org/?p = collab-maint/helloworld.git; a = summaryPackage: helloworldArchitecture: anyDepends: $ {shlibs: Depends}, $ {misc: Depends}, python Описание: Печать Hello World в Python Печать Hello World в Python
3.3. Настройте файл авторских прав
Файл `debian/copyright` содержит информацию о лицензии для программного пакета. Он подготовлен к выпуску по лицензии GNU Public License 2 (GPLv2). В нашем примере это выглядит следующим образом:
Формат: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/Upstream-Name: helloworldSource: http://www.efho.de/Files: debian/* Авторские права: 2017 Frank Hofmann Лицензия: 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) нестабильный; urgency = low * Первоначальный выпуск - Фрэнк Хофманн Сб, 4 ноября 2017 г. 21:16:13 +0100
Это все, что нам пока нужно — теперь мы можем собрать пакет , наконец.
4. Сборка пакета
Чтобы собрать пакет, нам нужно переместиться на один каталог вверх и выполнить следующую команду:
~/build/helloworld/0.1/helloworld-0.1 $ dpkg-buildpackage -rfakeroot
Параметр `-rfakeroot` позволяет` dpkg-buildpackage` запускать команды от имени привилегированного пользователя с помощью команды `fakeroot`. Это необходимо для подготовки пакета, а также для создания файлов и каталогов.
Результатом выполнения приведенной выше команды является более длинный список выходных сообщений (показанный здесь в среде немецкого языка):
dpkg-buildpackage: Quellpaket helloworlddpkg-buildpackage: Quellpaket helloworlddpkg-buildpackage: Quellversion 0.1-1dpkg-buildpackage: Quelldistribution unstabledpkg-buildpackage: Quellen geändert durch Франк Хофманн dpkg-buildpack before-build helloworld-0.1 fakeroot debian/rules cleandh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b helloworld-0.1dpkg-source: Информация: Quellformat »3.0 (quilt)« wird verwendetdpkg-source: Информация: helloworld wird unter Benutzdenung. /helloworld_0.1.orig.tar.gz gebautdpkg-source: Информация: helloworld wird в helloworld_0.1-1.debian.tar.xz gebautdpkg-source: Информация: helloworld wird в helloworld_0.1-1.dsc gebaut debian/rules builddh build dh_testdir dh_auto _configure dh_auto_build dh_auto_test fakeroot Debian/правила binarydh двоичный 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_gencontroldpkg-gencontrol: Warnung: Feld Средний фон Paket HelloWorld: unbekannte Substitutionsvariable $ {shlibs: ЗАВИСИТ} dh_md5sums dh_builddebdpkg-Деб: Paket »HelloWorld «Вирд в» ../helloworld_0.1-1_amd64.deb «gebaut. dpkg-genchanges " 4096-битный RSA Schlüssel, ID D431AC07, erzeugt 05.09.2014
4,1. Проверка пакета
Поздравляем — вам удалось собрать пакет Debian — да! А теперь посмотрим на упаковку поближе. Здесь в игру вступает `lintian`. Этот инструмент проверяет ваш пакет на предмет нарушений строгих правил, которые должны выполняться пакетами Debian.
Чтобы запустить тесты, введите следующую команду:
lintian helloworld_0 .1-1_amd64.deb
Инструмент не обнаруживает нарушения правил, но также орфографические ошибки и неправильные символы. Переключатель «–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 --------------------- - Frank Hofmann Сб, 4 ноября 2017 21:16:13 +0100
В нашем примере у нас нет дополнительной информации, поэтому мы можно удалить файл.
4.3. Предупреждение: `description-Start-with-Leading-Spaces`
Это предупреждение возникает из-за того, что более длинное описание нашего пакета в файле` debian/control` начинается с нескольких пробелов. Как только мы удалим один пробел, предупреждение исчезнет.
4.4. Ошибка: `description-synopsis-is-duplicated`
Для каждого пакета требуется как краткое, так и более подробное описание в` debian/control`. Эта ошибка возникает из-за того, что оба описания идентичны. Как только мы расширили более подробное описание, ошибка исчезла.
5. Ссылки и ссылки
— [ddr] Андреас Барт, Адам Ди Карло, Рафаэль Герцог, Лукас Нуссбаум, Кристиан Шварц, Ян Джексон: Справочник разработчика Debian
— [dnmg] Джосип Родин , Осаму Аоки: Руководство нового сопровождающего Debian
— [dpmb] Аксель Бекерт, Франк Хофманн: Книга по управлению пакетами Debian
— [dpm] Руководство по политике Debian
— [dpt ] Учебник по упаковке Debian
— [gph] Руководство по конфиденциальности GNU
— [lushpaiPackage] Алекс Лушпай: Как создать пакет debian из исходного кода
6. Благодарности
Автор хотел бы поблагодарить Акселя Беккерта и Герольда Руппрехта за их поддержку и критиков при подготовке этой статьи.