Product SiteDocumentation Site

15.2. Сборка вашего первого пакета

15.2.1. Метапакеты или пакеты-пустышки

Пакеты-пустышки и метапакеты схожи тем, что являются пустыми оболочками, существующими лишь ради эффектов, которые их метаданные оказывают на стек работы с пакетами.
Назначение пакета-пустышки состоит в том, чтобы обманом заставить dpkg и apt поверить в то, что какой-либо пакет установлен, даже если он пуст. Это позволяет удовлетворить зависимость от пакета, когда соответствующее программное обеспечение было установлено в обход системы управления пакетами. Хотя такой способ работает, его следует по возможности избегать, ведь нет никакой гарантии, что установленное вручную программное обеспечение ведет себя точно так же, как соответствующий пакет, и зависящие от него пакеты могут работать некорректно.
Наоборот, метапакет представляет собой прежде всего набор зависимостей, так что установка метапакета в действительности предоставит целый набор других пакетов разом.
Оба эти типа пакетов могут быть созданы командами equivs-control и equivs-build из пакета equivs. Команда equivs-control файл создает заголовочный файл пакета Debian, который следует отредактировть таким образом, чтобы в нём содержалось название неоходимого пакета, номер его версии, имя сопровождающего, зависимости и описание. Прочие поля без значения по умолчанию являются необязательными и их можно удалить. Поля Copyright, Changelog, Readme и Extra-Files являются нестандартными в пакетах Debian; они имеют смысл только в рамках equivs-build и не будут сохранены в заголовках созданного пакета.

Пример 15.2. Заголовочный файл пакета-пустышки libxml-libxml-perl

Section: perl
Priority: optional
Standards-Version: 4.6.2

Package: libxml-libxml-perl
Version: 2.0207-1
Maintainer: Raphael Hertzog <hertzog@debian.org>
Depends: libxml2 (>= 2.9.10)
Architecture: all
Description: Fake package - module manually installed in site_perl
 This is a fake package to let the packaging system
 believe that this Debian package is installed.
 .
 In fact, the package is not installed since a newer version
 of the module has been manually compiled & installed in the
 site_perl directory.
Следующий шаг состоит в том, чтобы создать пакет Debian с помощью команды equivs-build файл. Voilà: пакет создан в текущем каталоге и с ним можно работать, как с любым другим пакетом Debian.
$ equivs-build file
dpkg-buildpackage: info: source package libxml-libxml-perl
dpkg-buildpackage: info: source version 2.0207-1
dpkg-buildpackage: info: source distribution unstable
dpkg-buildpackage: info: source changed by Raphael Hertzog <hertzog@debian.org>
dpkg-buildpackage: info: host architecture amd64
 dpkg-source --before-build .
 debian/rules clean
dh clean
   dh_clean
 debian/rules binary
dh binary
   dh_update_autotools_config
   dh_autoreconf
   create-stamp debian/debhelper-build-stamp
   dh_prep
   dh_auto_install --destdir=debian/libxml-libxml-perl/
   dh_install
   dh_installdocs
   dh_installchangelogs
   dh_perl
   dh_link
   dh_strip_nondeterminism
   dh_compress
   dh_fixperms
   dh_missing
   dh_installdeb
   dh_gencontrol
   dh_md5sums
   dh_builddeb
dpkg-deb: building package 'libxml-libxml-perl' in '../libxml-libxml-perl_2.0207-1_all.deb'.
 dpkg-genbuildinfo --build=binary -O../libxml-libxml-perl_2.0207-1_amd64.buildinfo
 dpkg-genchanges --build=binary -O../libxml-libxml-perl_2.0207-1_amd64.changes
dpkg-genchanges: info: binary-only upload (no source code included)
 dpkg-source --after-build .
dpkg-buildpackage: info: binary-only upload (no source included)

The package has been created.
Attention, the package has been created in the current directory,
not in ".." as indicated by the message above!

15.2.2. Простое файловое хранилище

Администраторам Falcot Corp необходимо создать пакет для того, чтобы облегчить развёртывание набора документов на большом количестве машин. Администратор, отвечающий за эту задачу, сперва читает «Руководство начинающего разработчика Debian», после чего начинает работать над своим первым пакетом.
Первым шагом является создание каталога falcot-data-1.0 для целевого пакета исходного кода. Пакет, логично, будет называться falcot-data и иметь номер версии 1.0. Затем администратор размещает файлы документов в подкаталоге data. После этого вызывается команда dh_make (из пакета dh-make) для того, чтобы добавить файлы, необходимые для создания пакета, которые будут сохранены в подкаталоге debian:
$ cd falcot-data-1.0
$ dh_make --native

Type of package: (single, indep, library, python)
[s/i/l/p]? i

Maintainer Name     : Raphael Hertzog
Email-Address       : hertzog@debian.org
Date                : Sun, 26 May 2024 21:48:41 +0100
Package Name        : falcot-data
Version             : 1.0
License             : gpl3
Package Type        : indep
Are the details correct? [Y/n/q]
Currently there is not top level Makefile. This may require additional tuning
Done. Please edit the files in the debian/ subdirectory now.

$
Выбранный тип пакета (indep) указывает на то, что из этого пакета с исходным кодом будет создан единственный двоичный пакет, не зависящий от архитектуры (Architecture: all) в debian/control). single аналогичен и приводит к созданию единого двоичного пакета, который зависит от целевой архитектуры (Architecture: any). В этом случае первый выбор более актуален, поскольку пакет содержит только документы и никаких двоичных программ, так что он может быть с одинаковым успехом использован на компьютерах для всех архитектур.
Тип library соответствует пакету исходного кода, из которого получается несколько двоичных пакетов. Он полезен для разделяемых библиотек, так как они должны следовать строгим правилам пакетирования.
Команда dh_make создала поддиректорию debian со многими файлами. Некоторые из них необходимы, в частности правил, control, changelog и copyright. Файлы с расширением .ex являются примерами файлов, которые могут быть использованы путем их изменения (и удаления расширения), когда это уместно. Когда они не нужны, их рекомендуется удалить. compat файл больше не используется и не создается. Вместо определения уровня совместимости debhelper как числа в этом файле, он теперь определяется как зависимость от debhelper-compat в виртуальном пакете Build-Depends в debian/control.
Файл copyright должен содержать информацию об авторах документов, включённых в пакет, а также соответствующие авторские права и лицензии. В нашем случае это внутренние документы, и их использование ограничено пределами компании Falcot Corp. Формат по умолчанию, используемый для этого файла, определён в поле Format.
Файл по умолчанию changelog, как правило, уместен; замена “Initial release” более подробным объяснением и изменение распространения с UNRELEASED или unstable на имя целевого релиза достаточно.
Файл control также должен быть обновлён: поле Section может быть изменено на misc и Homepage, Vcs-Git и Vcs-Browser. Поля Depends были дополнены с firefox-esr | www-browser, чтобы обеспечить наличие веб-браузера, способного отображать документы в пакете. Если пакет не требует запуска каких-либо команд от root-а (см. ИНСТРУМЕНТ fakeroot), поле Rules-Requires-Root может быть оставлено как есть.

Пример 15.3. Файл control

Source: falcot-data
Section: misc
Priority: optional
Maintainer: Raphael Hertzog <hertzog@debian.org>
Build-Depends: debhelper-compat (= 13)
Standards-Version: 4.6.2
Rules-Requires-Root: no

Package: falcot-data
Architecture: all
Depends: firefox-esr | www-browser, ${misc:Depends}
Description: Internal Falcot Corp Documentation
 This package provides several documents describing the internal
 structure at Falcot Corp.  This includes:
  - organization diagram
  - contacts for each department.
 .
 These documents MUST NOT leave the company.
 Their use is INTERNAL ONLY.

Пример 15.4. Файл changelog

falcot-data (1.0) bookworm; urgency=low

  * Initial Release.
  * Let's start with few documents:
    - internal company structure;
    - contacts for each department.

 -- Raphael Hertzog <hertzog@debian.org>  Sun, 26 May 2024 21:48:41 +0100

Пример 15.5. Файл copyright

Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: falcot-data

Files: *
Copyright: 2004-2024 Falcot Corp
License:
 All rights reserved.
Файл rules обычно содержит набор правил, используемых для конфигурирования, сборки и установки программного обеспечения в выделенный подкаталог (названный именем собранного двоичного пакета). Содержимое этого подкаталога затем архивируется в пакет Debian, как если бы это был корневой каталог файловой системы. В нашем случае файлы будут установлены в подкаталог debian/falcot-data/usr/share/falcot-data/, чтобы установка созданного пакета развернула файлы в /usr/share/falcot-data/. Файл rules используется в качестве Makefile с несколькими стандартными целями (включая clean и binary, используемые соответственно для очистки каталога с исходным кодом и создания двоичного пакета).
Хотя этот файл является центральным во всём процессе, он содержит лишь самый минимум для запуска стандартного набора команд, предоставляемых инструментом debhelper. Так обстоит дело с файлами, созданными с помощью dh_make. Чтобы установить наши файлы, мы просто настроим поведение команды dh_install, создав следующий файл debian/falcot-data.install:
data/* usr/share/falcot-data/
Теперь пакет может быть создан. Однако, мы добавим несколько косметических штрихов. Поскольку администраторы хотят, чтобы документы были легко доступны из меню графического рабочего стола, мы добавим файл falcot-data.desktop, установим в /usr/share/applications, добавив вторую строчку в debian/falcot-data.install.

Пример 15.6. Файл falcot-data.desktop

[Desktop Entry]
Name=Internal Falcot Corp Documentation
Name[ru]=Внутренняя документация Falcot Corp
Comment=Starts a browser to read the documentation
Comment[ru]=Запускает браузер для чтения документации
Exec=x-www-browser /usr/share/falcot-data/index.html
Terminal=false
Type=Application
Categories=Documentation;
Изменённый файл debian/falcot-data.install выглядит следующим образом:
data/* usr/share/falcot-data/
falcot-data.desktop usr/share/applications/
Наш пакет исходного кода теперь готов. Все, что осталось сделать, это создать двоичный пакет тем же методом, который мы использовали ранее для пересборки пакетов: мы запускаем команду dpkg-buildpackage -us -uc в каталоге falcot-data-1.0.