APT в ALT Linux/NginxAsCache
Материал из ALT Linux Wiki
(Import from freesource.info) |
м (→Известные проблемы: fixed thinko, thanks lewellyn) |
||
(15 промежуточных версий не показаны.) | |||
Строка 1: | Строка 1: | ||
- | + | == Использование nginx как кэширующего прокси для APT<ref>[http://gns-ua.livejournal.com/114453.html этой публикации gns]</ref> == | |
- | + | При использовании дистрибутивов 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''': |
- | + | server { | |
- | + | listen 80; | |
- | + | location /altlinux/ { | |
- | } | + | root /var/www/; |
- | + | error_page 404 = /fetch$uri; | |
- | location /fetch/altlinux/alt/ { | + | } |
- | + | ||
- | + | location /fetch/altlinux/alt/ { | |
- | + | internal; | |
- | } | + | proxy_pass http://ftp.altlinux.org/; |
- | + | proxy_store /var/www/$request_uri; | |
- | location /fetch/altlinux/kiev/ { | + | } |
- | + | ||
- | + | location /fetch/altlinux/kiev/ { | |
- | + | internal; | |
- | } | + | proxy_pass http://ftp.linux.kiev.ua/; |
+ | proxy_store /var/www/$request_uri; | ||
+ | } | ||
+ | } | ||
'''/etc/apt/sources.list''': | '''/etc/apt/sources.list''': | ||
- | + | rpm http://**NGINXHOST**/altlinux/alt/pub/Linux/ALT/updates/4.0/ i586 updates | |
- | rpm http://** | + | rpm http://**NGINXHOST**/altlinux/alt/pub/Linux/ALT/4.0/branch/ i586 classic |
- | rpm http://** | + | rpm http://**NGINXHOST**/altlinux/alt/pub/Linux/ALT/4.0/branch/ noarch classic |
И сделать | И сделать | ||
- | + | mkdir /var/www/altlinux | |
- | chown _nginx:_nginx /var/www/altlinux | + | chown _nginx:_nginx /var/www/altlinux |
=== Более умная конфигурация nginx === | === Более умная конфигурация nginx === | ||
Строка 43: | Строка 46: | ||
'''nginx.conf''': | '''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/ { | + | } |
- | + | 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''': | '''/etc/apt/sources.list''': | ||
- | + | rpm http://**NGINXHOST**/altlinux/4.0/branch/ i586 classic | |
- | rpm http://** | + | rpm http://**NGINXHOST**/altlinux/4.0/branch/ noarch classic |
=== Известные проблемы === | === Известные проблемы === | ||
Строка 68: | Строка 76: | ||
Если пакеты на сервере обновляются, в нашем кэше будут накапливаться старые версии. Почистить можно так: | Если пакеты на сервере обновляются, в нашем кэше будут накапливаться старые версии. Почистить можно так: | ||
- | <pre>rsync -r --delete-before --existing rsync:// | + | <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://mailman.nginx.org/pipermail/nginx-ru/2011-July/042020.html sin@ по взаимодействию apt с nginx < 1.1.0] | |
- | + | <references/> | |
- | + | ||
- | + | ||
- | + | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | + | {{Category navigation|title=APT|category=APT|sortkey={{SUBPAGENAME}}}} | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + |
Текущая версия на 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";
Ссылки