* Fri Jul 17 2009 Alexey Tourbin 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 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 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 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