[devel] hasher 1.3.14 - remote repo cache

Alexey Tourbin at at altlinux.ru
Sat Jul 18 12:40:59 MSD 2009


* Fri Jul 17 2009 Alexey Tourbin <at at altlinux> 1.3.14-alt1
- hsh-rpmi-print-files: New helper program, to replace 'apt-get --print-uris'
  with 'apt-get -o RPM::PM=external -o Dir::Bin::rpm=hsh-rpmi-print-files'.
- hsh-sh-functions.in (print_uris): Updated for hsh-rpmi-print-files.
- FAQ, README: Discarded remote repo limitations.
* Fri Jul 17 2009 Alexey Tourbin <at at altlinux> 1.3.13-alt1
- mkaptbox: Eliminated read_apt_config() usage.
- hsh-sh-functions.in (read_apt_config): Removed.
- hsh-sh-cache-contents-functions: Set pkglists_dir from Dir::State::lists.
* Wed Jul 15 2009 Alexey Tourbin <at at altlinux> 1.3.12-alt1
- hsh-sh-cache-contents-functions: Reimplemented contents index routines.
- Contents index is now generated from apt pkglist files.
- Added /usr/lib/kde4bin to contents_index_bin directories.
- Disabled contents_index_all.
* Thu May 07 2009 Dmitry V. Levin <ldv at altlinux> 1.3.11-alt1

Я предпринял ряд мер, направленных на улучшение работы хешера
в конфигурации с remote репозиторием.  Теперь с remote репозиторием
хешер работает так же хорошо, как в конфигурации с локальным
репозиторием.  А именно, решены следующие две проблемы.

1) Воспроизводимость/идентичность сборки: результат сборки пакетов
с использованием remote репозитория не должен отличаться от результата
сборка пакетов на локальном репозитории.

При сборке пакетов хешер использовал для порождения зависимостей файлы
contents_index, которые доступны только на локальном репозитории (в виде
отдельных файлов).  Contents index -- это индекс файлов в репозитории, к
каким пакетам эти файлы относятся.  Contents index использовался в двух
случаях: для отображения путей в названия пакетов (contents_index_all) и
для поиска команд из shell-скриптов по каталогам PATH (contents_index_bin).

contents_index_all теперь не используется (в последних релизах rpm)
и не генерируется хешером вообще.  При сборке пакетов не должно быть
такого понятия, как все файлы и все пакеты в репозитории.  Требования
на файлы теперь отображаются в зависимости as is (после каноникализации
имени файла и т.п.).

contents_index_bin сохранен, но теперь он генерируется на основе
pkglist* файлов, то есть на основе первичной информации из репозитория,
доступной через apt как в remote, так и в локальной конфигурации.

2) Проблемы трафика.  По умолчанию хешер всё время копирует/скачивает
rpm-пакеты заново.  Но должен быть простой способ, как настроить хешер,
чтобы не было повторного скачивания пакетов.  То есть чтобы можно было
собирать хешером на локалхосте с относительно медленным интернетом.

Далее описано, как правильно сконфигурировать локальное кеширование.
Summary: нужно создать отдельный apt.conf и назначить в нём два
постоянных каталога -- для скачивания индексов и для скачивания пакетов.

	~/.hasher/config:
workdir=$TMPDIR/build
mkdir -p "$workdir"
known_mountpoints=/proc
packager="$(rpm --eval %packager)"
apt_config=~/.hasher/apt.conf
sed "s|@HOME@|$HOME|g" <"$apt_config".in >"$apt_config"

Здесь устанавливается рабочий каталог хешера по умолчанию (сборка на tmpfs/swap
идёт гораздо быстрее, чем сборка на ext3).  Каталог /proc будет монтироваться
по мере необходимости (на основе зависимостей пакетов).  Packager выставляется
в значение из ~/.rpmmacros (иначе sisyphus_check не пройдёт).  Далее создается
файл apt.conf.

	~/.hasher/apt.conf.in:
Dir::Etc::SourceList "@HOME@/.hasher/sources.list";
Dir::Etc::SourceParts "/var/empty/";
Dir::State::lists "@HOME@/.hasher/lists/";
Dir::Cache::archives "@HOME@/.hasher/archives/";

Сборка будет идти на репозитории, указанном в ~/.hasher/sources.list.

	~/.hasher/sources.list:
rpm [alt] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus x86_64 classic
rpm [alt] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus noarch classic

Каталог Dir::State::lists определяет, куда будут скачиваться индексы
репозитория (pkglist* и release* файлы) при 'apt-get update'.

Каталог Dir::Cache::archives определяет, куда будут скачиваться пакеты
при 'apt-get install'.

Эти два каталога нужно создать так:

mkdir -p ~/.hasher/lists/partial
mkdir -p ~/.hasher/archives/partial

(то есть нужно дополнительно создать подкаталог partial).

Теперь всё готово для того, чтобы сказать

hsh --init

Начнётся скачивание пакетов из репозитория.  Для инициализации базовой
сборочной среды в первый раз нужно скачать примерно 40 метров (на
мегабитном канале будет скачиваться несколько минут).  К сожалению,
сейчас хешер не показывает диагностику, какие файлы он скачивает.
При желании это можно узнать вручную:

find ~/.hasher/*/partial/

После этого можно собирать пакеты с помощь hsh* и gear-hsh как обычно.
Недостающие пакеты будут скачиваться по мере необходимости.  Обновление
на текущее состояние удаленного репозитория будет выполняться автоматически
(насколько я знаю, сейчас ftp.altlinux.org обновляется раз в сутки ранним
утром).

Можно пойти ещё дальше -- сделать общий кеш для системного апта и для хешера.
Шарить листы я не рекомендую.  Расшарить скачивание пакетов можно следующим
способом.

- Добавить себя в группу rpm, чтобы получить доступ на запись
  в /var/cache/apt/archives.
- После этого нужно перелогиниться.
- Вместо каталога ~/.hasher/archives создать симлинк:

rm -rf ~/.hasher/archives
ln -s /var/cache/apt/archives ~/.hasher/archives

- Создать и/или исправить файл /var/cache/apt/archives/lock.
  У него должны быть права доступа 664, а не 644.

[ -w /var/cache/apt/archives/lock ] || install -v -m664 /dev/null /var/cache/apt/archives/lock
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://lists.altlinux.org/pipermail/devel/attachments/20090718/2ea61ff5/attachment.bin>


More information about the Devel mailing list