APT в ALT Linux/NginxAsCache

Материал из ALT Linux Wiki

(Различия между версиями)
Перейти к: навигация, поиск

Версия 15:54, 28 июля 2008

Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Содержание

Использование nginx как кэширующего прокси для APT

При использовании дистрибутивов ALT Linux или ALT Linux Sisyphus часто требуется локальное частичное зеркало APT-источников: для раздачи пакетов группе машин в локальной сети, для разработки и других потребностией. Локальное - для хорошей скорости доступа, частичное - для экономии времени и трафика, которые уходят на поддержание полного зеркала.

Очевидное решение: вытаскивать из /var/cache/apt/archives или /hasher/aptbox пакеты, запускать genbasedir и подключать результат как локальный репозитарий. Очевидный недостаток: теряется информация о конкретном источнике пакета. Если подключен и бранч, и сизиф, то полученный репозитарий нельзя использовать на другой машине, которую желательно оставить на бранче.

nginx >= 0.5.31 позволяет организовать локальный частичный миррор, лишённый этого недостатка.

Конфигурация nginx

nginx.conf:

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

location /fetch/altlinux/alt/ {
        internal;
        proxy_pass http://ftp.altlinux.org/;
        proxy_store /var/www/$request_uri;
}

location /fetch/altlinux/kiev/ {
        internal;
        proxy_pass http://ftp.linux.kiev.ua/;
        proxy_store /var/www/$request_uri;
}

/etc/apt/sources.list:

rpm http://**NGINX HOST**/altlinux/alt/pub/Linux/ALT/updates/4.0/ i586 updates
rpm http://**NGINX HOST**/altlinux/alt/pub/Linux/ALT/4.0/branch/ i586 classic
rpm http://**NGINX HOST**/altlinux/alt/pub/Linux/ALT/4.0/branch/ noarch classic

И сделать

mkdir /var/www/altlinux
chown _nginx:_nginx /var/www/altlinux

Более умная конфигурация nginx

Чтобы пользователи APT не заботились о том, на какое зеркало настроен nginx, его нужно слегка перенастроить:

nginx.conf:

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

location /fetch/altlinux/ {
    internal;
    proxy_pass http://ftp.altlinux.org/pub/distributions/ALTLinux/;
    proxy_pass http://ftp.linux.kiev.ua/pub/Linux/ALT/;

    proxy_store /var/www/$request_uri;
}

/etc/apt/sources.list:

rpm http://**NGINX HOST**/altlinux/4.0/branch/ i586 classic
rpm http://**NGINX HOST**/altlinux/4.0/branch/ noarch classic

Известные проблемы

nginx - это все-таки не настоящий кэширующий прокси, и обновлять сохраненные файлы он не намерен независимо от Last-Modified. Сами пакеты меняться не могут, поэтому это составляет проблему только для индексов APT, так что необходимо периодически делать

find /var/www/altlinux/ -type d -name base -exec rm -rf '{}' \;

Если пакеты на сервере обновляются, в нашем кэше будут накапливаться старые версии. Почистить можно так:

rsync -r --delete-before --existing rsync://ftp.altlinux.org/ALTLinux/ /var/www/altlinux/

Эта команда удалит из локального репозитория все файлы, которых нет на сервере, и заодно обновит индексы.

Информация об авторе

Взято из этой публикации gns.


Добавлено 24.03.08 by Черносов Денис

Пробовал внедрить рецепт на версии nginx-0.5.33-alt1.M40.1

обнаружил, что помещение нескольких директив proxy_pass в один раздел location приводит к ошибке такого вида:

# service nginx restart
Checking configuration sanity for nginx:  2008/03/21 13:42:48 [emerg] 9153#0: "proxy_pass" directive is duplicate in /etc/nginx/nginx.conf:73

Также в моем случае вылезала ошибка:

Checking configuration sanity for nginx:  2008/03/21 14:09:09 [emerg] 9433#0: could not build the types_hash, you should increase types_hash_bucket_size: 32

После модификаций конфиги выглядят следующим образом:

/etc/apt/sourses.list

rpm http://localhost/altlinux/updates/4.0/ i586 updates

####optional
#rpm http://localhost/altlinux/4.0/branch i586 classic
#rpm http://localhost/altlinux/4.0/branch noarch classic

#rpm http://localhost/altlinux/4.0/Server/current i586 main
#rpm http://localhost/altlinux/4.0/Server/current i586 classic

#rpm http://localhost/altlinux/backports/4.0/ i586 backports

/etc/nginx/nginx.conf

http {
...
       types_hash_bucket_size 64;
...
        location /fetch/altlinux/ {
            internal;
            proxy_pass http://ftp.heanet.ie/mirrors/ftp.altlinux.org/;
            proxy_store /var/www/$request_uri;
        }

        location /fetch/altlinux/ {
            internal;
            proxy_pass http://ftp.linux.kiev.ua/pub/Linux/ALT/;
            proxy_store /var/www/$request_uri;
        }

        location /fetch/altlinux/ {
            internal;
            proxy_pass http://mirror.yandex.ru/altlinux/;
            proxy_store /var/www/$request_uri;
        }

        location /fetch/altlinux/ {
            internal;
            proxy_pass http://ftp.altlinux.org/pub/distributions/ALTLinux/;
            proxy_store /var/www/$request_uri;
        }
...
 
Личные инструменты