APT в ALT Linux/NginxAsCache: различия между версиями

Материал из ALT Linux Wiki
(Слил изменения)
Нет описания правки
 
(не показано 14 промежуточных версий 5 участников)
Строка 1: Строка 1:
{{MovedFromFreesourceInfo|AltLinux/Apt/NginxAsCache}}
{{Викифицировать}}
== Использование nginx как кэширующего прокси для APT<ref>[http://gns-ua.livejournal.com/114453.html этой публикации gns]</ref> ==
== Использование nginx как кэширующего прокси для APT<ref>[http://gns-ua.livejournal.com/114453.html этой публикации gns]</ref> ==


При использовании дистрибутивов 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''':
http {
  server {
     types_hash_bucket_size 64; # Для nginx < 0.5.35-alt1.1
     listen      80;
     location /altlinux/ {
     location /altlinux/ {
         root /var/www/;
         root /var/www/;
Строка 31: Строка 30:
         proxy_store /var/www/$request_uri;
         proxy_store /var/www/$request_uri;
     }
     }
}


'''/etc/apt/sources.list''':
'''/etc/apt/sources.list''':
  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
  rpm http://**NGINXHOST**/altlinux/alt/pub/Linux/ALT/4.0/branch/ noarch classic


И сделать
И сделать
Строка 46: Строка 46:


'''nginx.conf''':
'''nginx.conf''':
  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/;
location /fetch/altlinux/ {
        error_page 404 = /fetch$uri;
    internal;
     }
    proxy_pass http://ftp.altlinux.org/pub/distributions/ALTLinux/;
    location /fetch/altlinux/ {
    proxy_store /var/www/$request_uri;
        internal;
}
        proxy_pass http://ftp.altlinux.org/pub/distributions/ALTLinux/;
location /fetch/altlinux/ {
        proxy_store /var/www/$request_uri;
    internal;
    }
    proxy_pass http://ftp.linux.kiev.ua/pub/Linux/ALT/;
    location /fetch/altlinux/ {
    proxy_store /var/www/$request_uri;
        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''':
  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
  rpm http://**NGINXHOST**/altlinux/4.0/branch/ noarch classic


=== Известные проблемы ===
=== Известные проблемы ===
Строка 73: Строка 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" (хоть это должно быть уже поправлено в [http://git.altlinux.org/gears/a/apt.git?p=apt.git;a=commit;h=3903d911f4a9a0d1f6c0549b06316d655692af6c 0.5.15lorg2-alt58]) -- следует добавить в /etc/apt/apt.conf:
Acquire::http::Pipeline-Depth "0";
также, как и в других похожих случаях:
Acquire::ftp::Pipeline-Depth "0";
=== Вариант конфигурации ===
[[Nginx/hasher-apt-cache|Краткое руководство простейшего кеширующего локального сервера, для использования с утилитами Mkimage-profiles или (и) hasher.]]


=== Ссылки ===
=== Ссылки ===


* [http://mailman.nginx.org/pipermail/nginx-ru/2011-July/042020.html sin@ по взаимодействию apt с nginx < 1.1.0]
<references/>
<references/>
{{Category navigation|title=APT|category=APT|sortkey={{SUBPAGENAME}}}}

Текущая версия от 21:05, 21 ноября 2022

Использование 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" (хоть это должно быть уже поправлено в 0.5.15lorg2-alt58) -- следует добавить в /etc/apt/apt.conf:

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

также, как и в других похожих случаях:

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

Вариант конфигурации

Краткое руководство простейшего кеширующего локального сервера, для использования с утилитами Mkimage-profiles или (и) hasher.

Ссылки