Вход:  Пароль:  
FreeSource: AltLinux/Apt/NginxAsCache ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Это старая версия AltLinux/Apt/NginxAsCache за 2007-12-03 22:37:02..

автор – 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/ {

root /var/www/;
error_page 404 = /fetch$uri;

}


location /fetch/sisyphus/kiev/ {

internal;
proxy_pass http://ftp.linux.kiev.ua/;
proxy_store /var/www/$request_uri;

}


location /fetch/sisyphus/alt/ {

internal;
proxy_pass http://ftp.altlinux.com/;
proxy_store /var/www/$request_uri;

}


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.


Сделаем еще один шаг:


location /sisyphus/ {
root /var/www/;
error_page 404 = /fetch$uri;
error_page 403 = /fetch$uri;
}


location /fetch/sisyphus/ {


proxy_store /var/www/$request_uri;
}

В 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/


Это удалит все файлы, которых нет на сервере. При этом индексы обновятся [потому что одноименные, но разные].


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]