Product SiteDocumentation Site

15.3. Создание репозитория пакетов для APT

Falcot Corp со временем начала сопровождение нескольких пакетов Debian, либо локально модифицированных из существующих пакетов, либо созданных с нуля с целью распространять внутренние данные и программы.
To make deployment easier, they want to integrate these packages in a package archive that can be directly used by APT. For obvious maintenance reasons, they wish to separate internal packages from locally-rebuilt packages. The goal is for the matching entries in a /etc/apt/sources.list.d/falcot.list file to be as follows:
deb http://packages.falcot.com/ updates/
deb http://packages.falcot.com/ internal/
The administrators therefore configure a virtual host on their internal HTTP server, with /srv/vhosts/packages/ as the root of the associated web space. The management of the archive itself is delegated to the mini-dinstall command (in the similarly-named package). This tool keeps an eye on an incoming/ directory (in our case, /srv/vhosts/packages/mini-dinstall/incoming/) and waits for new packages there; when a package is uploaded, it is installed into a Debian archive at /srv/vhosts/packages/. The mini-dinstall command reads the *.changes file created when the Debian package is generated. These files contain a list of all other files associated with the version of the package (*.deb, *.dsc, *.diff.gz/*.debian.tar.gz, *.orig.tar.gz, or their equivalents with other compression tools), and these allow mini-dinstall to know which files to install. *.changes files also contain the name of the target distribution (often unstable) mentioned in the latest debian/changelog entry, and mini-dinstall uses this information to decide where the package should be installed. This is why administrators must always change this field before building a package, and set it to internal or updates, depending on the target location. mini-dinstall then generates the files required by APT, such as Packages.gz.
Настройка mini-dinstall сводится к созданию файла ~/.mini-dinstall.conf; в случае Falcot Corp содержимое его будет следующим:
[DEFAULT]
archive_style = flat
archivedir = /srv/vhosts/packages

verify_sigs = 0
mail_to = admin@falcot.com

generate_release = 1
release_origin = Falcot Corp
release_codename = stable

[updates]
release_label = Recompiled Debian Packages

[internal]
release_label = Internal Packages
Решением, которое стоит отметить, является генерация файла Release для каждого хранилища. Это может помочь управлять приоритетами установки пакета с помощью конфигурационного файла /etc/apt/preferences (см. Раздел 6.2.5, «Managing Package Priorities»).
Вызов mini-dinstall на самом деле запускает демон в фоне. Пока этот демон работает, он будет проверять наличие новых пакетов в каталоге incoming/ каждые полчаса; когда прибывает новый пакет, он будет перемещён в архив, и файлы Packages.gz and Sources.gz создадутся заново. Если запуск демона проблематичен, mini-dinstall можно также вызывать вручную в пакетном режиме (с опцией -b) каждый раз, когда пакет загружается в каталог incoming/. Другие возможности, предоставляемые mini-dinstall, документированы на странице руководства mini-dinstall(1).