автор – gns
источник – жж http://gns-ua.livejournal.com/114453.html
если слова altlinux, hasher, apt ничего не говорят – проходите мимо ;)
Хочу пользоваться хэшером и собирать под бранч, однако полного зеркала нету и возможности его сделать тоже. Hasher прекрасно работает с ftp/http репозитариями, однако между сборками удаляет aptbox вместе с apt/cache/archives. Обидно. Еще хочу обновить одну машину и скачанные мегабайты использовать для других.
Очевидное решение: вытаскивать из /var/cache/apt/archives (или, соответственно, из /hasher/aptbox) пакеты, делать genbasedir и подключать как локальный репозитарий. Очевидный недостаток: теряется информация о конкретном источнике пакета. Если подключен и бранч, и сизиф, то полученный репозитарий нельзя использовать на другой машине, которую желательно оставить на бранче.
Можно было бы использовать кэширующий прокси. Не устраивает сквидовский формат хранения.
Начиная с версии 0.5.31, в nginx есть все что нам нужно.
nginx.conf:
location /sisyphus/ {
}
location /fetch/sisyphus/kiev/ {
}
location /fetch/sisyphus/alt/ {
}
sources.list:
rpm http://localhost/sisyphus/kiev/pub/Linux/ALT/updates/4.0/ i586 updates
# Sisyphus stable branch for ALT Linux 4.0 Desktop
rpm http://localhost/sisyphus/kiev/pub/Linux/ALT/4.0/branch/ i586 classic
rpm http://localhost/sisyphus/kiev/pub/Linux/ALT/4.0/branch/ noarch classic
и придется руками сделать mkdir /var/www/sisyphus; chown _nginx:_nginx /var/www/sisyphus;
Всё.
Известные проблемы: это все-таки не настоящий кэширующий прокси, и обновлять сохраненные файлы он не намерен независимо от Last-Modified. Но пакеты ведь не могут меняться, нас интересуют только индексы, поэтому можно изредка делать find /var/www/sisyphus/ -type d -name base -exec rm -rf '{}' \; (или принудительно обновлять, см. ниже).
UPD. Второй недостаток – нам совершенно необязательно знать, с какого именно зеркала были получены пакеты. К тому же приходится перечислять зеркала и в sources.list, и в nginx.conf.
Сделаем еще один шаг:
В sources.list при этом кладется следующее:
rpm http://172.16.10.151/sisyphus/4.0/branch/ i586 classic
rpm http://172.16.10.151/sisyphus/4.0/branch/ noarch classic
Управление используеміми зеркалами остается на совести администратора прокси. Клиент не знает, с каким конкретно зеркалом работает.
UPD2. Еще одна известная проблема. Если пакеты на сервере обновляются, в нашем кэше будут накапливаться старые версии. Почистить можно так:
rsync -r --delete-before --existing rsync://ftp.linux.kiev.ua/ALTLinux/ /var/www/sisyphus/
Это удалит все файлы, которых нет на сервере. При этом индексы обновятся [потому что одноименные, но разные].