APT в ALT Linux/NginxAsCache

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

< APT в ALT Linux(Различия между версиями)
Перейти к: навигация, поиск
м Apt/NginxAsCache» переименована в «APT в ALT Linux/NginxAsCache»)
м (Известные проблемы: fixed thinko, thanks lewellyn)
 
(13 промежуточных версий не показаны.)
Строка 1: Строка 1:
-
{{MovedFromFreesourceInfo|AltLinux/Apt/NginxAsCache}}
+
== Использование nginx как кэширующего прокси для APT<ref>[http://gns-ua.livejournal.com/114453.html этой публикации gns]</ref> ==
-
 
+
-
== Использование nginx как кэширующего прокси для APT ==
+
При использовании дистрибутивов ALT Linux или Sisyphus часто требуется локальное частичное зеркало APT-источников: для раздачи пакетов группе машин в локальной сети, для разработки и других потребностией. Локальное - для хорошей скорости доступа, частичное - для экономии времени и трафика, которые уходят на поддержание [[Apt/Mirror|полного зеркала]].
При использовании дистрибутивов ALT Linux или Sisyphus часто требуется локальное частичное зеркало APT-источников: для раздачи пакетов группе машин в локальной сети, для разработки и других потребностией. Локальное - для хорошей скорости доступа, частичное - для экономии времени и трафика, которые уходят на поддержание [[Apt/Mirror|полного зеркала]].
-
Очевидное решение: вытаскивать из /var/cache/apt/archives или /hasher/aptbox пакеты, запускать genbasedir и подключать результат как локальный репозитарий. Очевидный недостаток: теряется информация о конкретном источнике пакета. Если подключен и бранч, и сизиф, то полученный репозитарий нельзя использовать на другой машине, которую желательно оставить на бранче.
+
Очевидное решение: вытаскивать из /var/cache/apt/archives или /hasher/aptbox пакеты, запускать genbasedir и подключать результат как локальный репозиторий. Очевидный недостаток: теряется информация о конкретном источнике пакета. Если подключен и бранч, и сизиф, то полученный репозиторий нельзя использовать на другой машине, которую желательно оставить на бранче.
nginx >= 0.5.31 позволяет организовать локальный частичный миррор, лишённый этого недостатка.
nginx >= 0.5.31 позволяет организовать локальный частичный миррор, лишённый этого недостатка.
 +
 +
См. тж. {{pkg|nginx-apt-cache}}.
=== Конфигурация nginx ===
=== Конфигурация nginx ===
-
'''nginx.conf''':
+
'''/etc/nginx/sites-enabled.d/01-altrepo.conf''':
-
<pre>location /altlinux/ {
+
  server {
-
        root /var/www/;
+
    listen      80;
-
        error_page 404 = /fetch$uri;
+
    location /altlinux/ {
-
}
+
        root /var/www/;
-
 
+
        error_page 404 = /fetch$uri;
-
location /fetch/altlinux/alt/ {
+
    }
-
        internal;
+
-
        proxy_pass http://ftp.altlinux.org/;
+
    location /fetch/altlinux/alt/ {
-
        proxy_store /var/www/$request_uri;
+
        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/;
+
    location /fetch/altlinux/kiev/ {
-
        proxy_store /var/www/$request_uri;
+
        internal;
-
}</pre>
+
        proxy_pass http://ftp.linux.kiev.ua/;
 +
        proxy_store /var/www/$request_uri;
 +
    }
 +
}
'''/etc/apt/sources.list''':
'''/etc/apt/sources.list''':
-
<pre>rpm http://**NGINX HOST**/altlinux/alt/pub/Linux/ALT/updates/4.0/ i586 updates
+
rpm http://**NGINXHOST**/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://**NGINXHOST**/altlinux/alt/pub/Linux/ALT/4.0/branch/ i586 classic
-
rpm http://**NGINX HOST**/altlinux/alt/pub/Linux/ALT/4.0/branch/ noarch classic</pre>
+
rpm http://**NGINXHOST**/altlinux/alt/pub/Linux/ALT/4.0/branch/ noarch classic
И сделать
И сделать
-
<pre>mkdir /var/www/altlinux
+
mkdir /var/www/altlinux
-
chown _nginx:_nginx /var/www/altlinux</pre>
+
chown _nginx:_nginx /var/www/altlinux
=== Более умная конфигурация nginx ===
=== Более умная конфигурация nginx ===
Строка 43: Строка 46:
'''nginx.conf''':
'''nginx.conf''':
-
<pre>location /altlinux/ {
+
'''/etc/nginx/sites-enabled.d/01-altrepo.conf'''
-
    root /var/www/;
+
server {
-
    error_page 404 = /fetch$uri;
+
    listen 80;
-
    error_page 403 = /fetch$uri;
+
    location /altlinux/ {
-
}
+
        root /var/www/;
-
 
+
        error_page 404 = /fetch$uri;
-
location /fetch/altlinux/ {
+
    }
-
    internal;
+
    location /fetch/altlinux/ {
-
    proxy_pass http://ftp.altlinux.org/pub/distributions/ALTLinux/;
+
        internal;
-
    proxy_pass http://ftp.linux.kiev.ua/pub/Linux/ALT/;
+
        proxy_pass http://ftp.altlinux.org/pub/distributions/ALTLinux/;
-
 
+
        proxy_store /var/www/$request_uri;
-
    proxy_store /var/www/$request_uri;
+
    }
-
}</pre>
+
    location /fetch/altlinux/ {
 +
        internal;
 +
        proxy_pass http://ftp.linux.kiev.ua/pub/Linux/ALT/;
 +
        proxy_store /var/www/$request_uri;
 +
    }
 +
}
'''/etc/apt/sources.list''':
'''/etc/apt/sources.list''':
-
<pre>rpm http://**NGINX HOST**/altlinux/4.0/branch/ i586 classic
+
rpm http://**NGINXHOST**/altlinux/4.0/branch/ i586 classic
-
rpm http://**NGINX HOST**/altlinux/4.0/branch/ noarch classic</pre>
+
rpm http://**NGINXHOST**/altlinux/4.0/branch/ noarch classic
=== Известные проблемы ===
=== Известные проблемы ===
Строка 68: Строка 76:
Если пакеты на сервере обновляются, в нашем кэше будут накапливаться старые версии. Почистить можно так:
Если пакеты на сервере обновляются, в нашем кэше будут накапливаться старые версии. Почистить можно так:
-
<pre>rsync -r --delete-before --existing rsync://ftp.altlinux.org/ALTLinux/ /var/www/altlinux/</pre>
+
<pre>rsync -r --delete-before --existing rsync://rsync.altlinux.org/ALTLinux/ /var/www/altlinux/</pre>
Эта команда удалит из локального репозитория все файлы, которых нет на сервере, и заодно обновит индексы.
Эта команда удалит из локального репозитория все файлы, которых нет на сервере, и заодно обновит индексы.
-
=== Информация об авторе ===
+
Если apt сообщает об ошибке "Error reading from server Remote end closed connection" -- следует добавить в /etc/apt/apt.conf:
-
 
+
  Acquire::http::Pipeline-Depth "0";
-
Взято из [http://gns-ua.livejournal.com/114453.html этой публикации gns].
+
-
 
+
-
 
+
-
=== Добавлено 24.03.08 by Черносов Денис ===
+
-
Пробовал внедрить рецепт на версии nginx-0.5.33-alt1.M40.1
+
-
 
+
-
обнаружил, что помещение нескольких директив proxy_pass в один раздел location приводит к ошибке такого вида:
+
-
<pre># 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</pre>
+
-
 
+
-
Также в моем случае вылезала ошибка:
+
-
<pre>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</pre>
+
-
 
+
-
После модификаций конфиги выглядят следующим образом:
+
-
 
+
-
'''/etc/apt/sourses.list'''
+
-
<pre>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</pre>
+
-
'''/etc/nginx/nginx.conf'''
+
=== Ссылки ===
-
<pre>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/ {
+
* [http://mailman.nginx.org/pipermail/nginx-ru/2011-July/042020.html sin@ по взаимодействию apt с nginx < 1.1.0]
-
            internal;
+
<references/>
-
            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/ {
+
{{Category navigation|title=APT|category=APT|sortkey={{SUBPAGENAME}}}}
-
            internal;
+
-
            proxy_pass http://ftp.altlinux.org/pub/distributions/ALTLinux/;
+
-
            proxy_store /var/www/$request_uri;
+
-
        }
+
-
...</pre>
+

Текущая версия на 10:37, 3 апреля 2014

Содержание

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

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

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

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

См. тж. nginx-apt-cache.

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

/etc/nginx/sites-enabled.d/01-altrepo.conf:

 server {
    listen       80;
    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://**NGINXHOST**/altlinux/alt/pub/Linux/ALT/updates/4.0/ i586 updates
rpm http://**NGINXHOST**/altlinux/alt/pub/Linux/ALT/4.0/branch/ i586 classic
rpm http://**NGINXHOST**/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: /etc/nginx/sites-enabled.d/01-altrepo.conf

server {
    listen 80;
    location /altlinux/ {
        root /var/www/;
        error_page 404 = /fetch$uri;
    }
    location /fetch/altlinux/ {
        internal;
        proxy_pass http://ftp.altlinux.org/pub/distributions/ALTLinux/;
        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;
    }
}

/etc/apt/sources.list:

rpm http://**NGINXHOST**/altlinux/4.0/branch/ i586 classic
rpm http://**NGINXHOST**/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://rsync.altlinux.org/ALTLinux/ /var/www/altlinux/

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

Если apt сообщает об ошибке "Error reading from server Remote end closed connection" -- следует добавить в /etc/apt/apt.conf:

Acquire::http::Pipeline-Depth "0";

Ссылки

  1. этой публикации gns


 
Личные инструменты