Product SiteDocumentation Site

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

Falcot Corp gradually started maintaining a number of Debian packages, either locally modified from existing packages or created from scratch to distribute internal data and programs.
Чтобы упростить процесс развёртывания, им необходимо интегрировать эти пакеты в хранилище, которое может быть использовано непосредственно с помощью APT. В силу очевидных причин они хотят отделить внутренние пакеты от пересобранных локально. Цель состоит в том, чтобы можно было привести записи в файле /etc/apt/sources.list.d/falcot.list к следующему виду:
deb http://packages.falcot.com/ updates/
deb http://packages.falcot.com/ internal/
Соответственно, администраторы настраивают на своем внутреннем HTTP-сервере виртуальный хост с корневым каталогом /srv/vhosts/packages/. Управление самим архивом осуществляется командой mini-dinstall (из одноимённого пакета). Этот инструмент следит за каталогом incoming/ (в нашем случае это /srv/vhosts/ packages/mini-dinstall/incoming/) и ожидает появления пакетов в нём; когда пакет будет загружен, он установится в хранилище Debian по адресу /srv/vhosts/packages/. Команда mini-dinstall считывает файл *.changes, создающийся при сбоке пакета Debian. Эти файлы содержат список всех прочих файлов, относящихя к этой версии пакета (*.deb, *.dsc , *.diff.gz/*.debian.tar.gz, *.orig.tar.gz или их эквивалентов, сжатых другими инструментами), и из них mini-dinstall узнаёт, какие файлы устанавливать. Файлы *.changes также содержат название целевого дистрибутива (чаще unstable), указанного в последней записи в debian/changelog, и mini-dinstall использует эту информацию,чтобы решить, куда нужно установить пакеты. Поэтому администраторы перед сборкой пакета должны всегда изменять значение в этом поле на internal или updates, в зависимости от целевого расположения. Затем mini-dinstall создает файлы, необхдимые для APT, такие как 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, «Управление приоритетами пакетов»).
Вызов mini-dinstall на самом деле запускает демон в фоне. Пока этот демон работает, он будет проверять наличие новых пакетов в каталоге incoming/ каждые полчаса; когда прибывает новый пакет, он будет перемещён в архив, и файлы Packages.gz and Sources.gz создадутся заново. Если запуск демона проблематичен, mini-dinstall можно также вызывать вручную в пакетном режиме (с опцией -b) каждый раз, когда пакет загружается в каталог incoming/. Другие возможности, предоставляемые mini-dinstall, документированы на странице руководства mini-dinstall(1).