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).