суббота, 23 января 2010 г.

Репозиторий с apt-ftparchive

Заменяя reprepro на apt-ftparchive, в первую очередь хотелось сохранить имеющуюся структуру каталогов. Нижеприведенная конфигурация решает эту задачу, только каталог pool разделен на pool-lenny и pool-etch, поскольку так проще поддерживать.

Вот такая команда обновит список пакетов локального репозитория:
/etc/apt/apt-archive-mbg

А такая команда обновит репозиторий на основном сервере:
apt-archive-mbg-upload
Замечу, что секция non-free из локального репозитория будет скопирована в отдельный закрытый репозиторий.

Ниже приведены скрипты и конфиги, необходимые для решения указанной задачи.
apt-archive-mbg-upload
#!/bin/dash

/usr/bin/rdiff-backup --exclude '**/main' /mnt/work/apt-archive-mbg .../apt-archive-mbg
/usr/bin/rdiff-backup --exclude '**/non-free' /mnt/work/apt-archive-mbg .../debian

/etc/apt/apt-archive-mbg
#!/bin/dash

apt-ftparchive generate /etc/apt/apt-archive-mbg.conf 

cd /mnt/work/apt-archive-mbg/dists/etch
apt-ftparchive -c /etc/apt/apt-mbg-etch.conf release . > Release
rm -f Release.gpg
gpg --output Release.gpg -ba Release

cd /mnt/work/apt-archive-mbg/dists/lenny
apt-ftparchive -c /etc/apt/apt-mbg-lenny.conf release . > Release
rm -f Release.gpg
gpg --output Release.gpg -ba Release

/etc/apt/apt-ftparchive-public.conf
Dir {
ArchiveDir "/mnt/work/apt-public";
CacheDir "/mnt/work/apt-public";
};

Default {
Packages::Compress ". gzip bzip2";
Sources::Compress ". gzip bzip2";
Contents::Compress ". gzip bzip2";
};

TreeDefault {
BinCacheDB "packages-$(DIST)-$(SECTION)-$(ARCH).db";
Directory "pool-$(DIST)/$(SECTION)";
Packages "dists/$(DIST)/$(SECTION)/binary-$(ARCH)/Packages";
SrcDirectory "pool-$(DIST)/$(SECTION)";
Sources "dists/$(DIST)/$(SECTION)/source/Sources";
Contents "dists/$(DIST)/Contents-$(ARCH)";
};

Tree "etch" {
Sections "main";
Architectures "i386 source";
}
Tree "lenny" {
Sections "main non-free";
Architectures "i386 source";
}

/etc/apt/apt-public-etch.conf
APT::FTPArchive::Release::Origin "MBG";
APT::FTPArchive::Release::Label "MBG public";
APT::FTPArchive::Release::Suite "oldstable";
APT::FTPArchive::Release::Codename "etch";
APT::FTPArchive::Release::Architectures "i386 source";
APT::FTPArchive::Release::Components "main";
APT::FTPArchive::Release::Description " MBG Public APT Repository";

/etc/apt/apt-public-lenny.conf
APT::FTPArchive::Release::Origin "MBG";
APT::FTPArchive::Release::Label "MBG public";
APT::FTPArchive::Release::Suite "stable";
APT::FTPArchive::Release::Codename "lenny";
APT::FTPArchive::Release::Architectures "i386 source";
APT::FTPArchive::Release::Components "main non-free";
APT::FTPArchive::Release::Description " MBG Public APT Repository";


Теперь можно держать в репозитории несколько версий каждого пакета, что часто бывает необходимо в процессе разработки.

Upd.
Выложил конфиги для управлениями моим репозиторием здесь же: http://mobigroup.ru/debian/ Скрипт apt-archive-mbg обновляет репозитории для всех требуемых релизов (запускать после добавления/удаления пакетов в репозиторий). Обновление инкрементальное, так что при большом количестве пакетов работает вполне шустро (моя рабочая машинка нынче - нетбук, так что я знаю толк в шустрости - мне его ресурсов хватает). На сервер пересылаю копию локального репозитория скриптом apt-archive-mbg-upload:
/usr/bin/rdiff-backup --exclude './apt-archive-mbg-upload' --exclude './*db' --exclude '**/non-free' . [путь на сервере к открытому репозиторию]
/usr/bin/rdiff-backup --exclude './apt-archive-mbg-upload' --exclude './*db' --exclude '**/main'     . [путь на сервере к закрытому репозиторию]
Скрипт apt-archive-mbg-upload содержит пути на сервере, потому его не выкладываю.

Комментариев нет:


(C) Alexey Pechnikov aka MBG, mobigroup.ru