Introduction
Le but de cette opération est de mettre en cache sur un serveur les métadonnées d’un dépôt particulier afin d’éviter les soucis tels que :
"14: PYCURL ERROR 6 - Couldn't resolve host"
En effet il arrive assez souvent que la réponse envoyant les métadonnées se fasse attendre !
Une solution est de mettre en cache ces métadonnées sur un serveur faisant office de mandataire.
Mise en place
Installer nginx :
apt-get install nginx -y
Voyons ce que contient le fichier de conf !
cat /etc/nginx/nginx.conf
lolotux@gmail.com
cat /etc/nginx/conf.d/epel.conf
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:50m inactive=200d max_size=12g;
server {
listen 81;
server_name epel.local;
location /pub/ {
proxy_pass https://dl.fedoraproject.org/pub/;
proxy_cache off;
proxy_no_cache 1;
expires off;
}
# cache repodata
location /pub/epel/6/x86_64/repodata/ {
proxy_pass https://dl.fedoraproject.org/pub/epel/6/x86_64/repodata/;
include /etc/nginx/cache.conf;
}
location /icons/ {
proxy_pass https://dl.fedoraproject.org/icons/;
include /etc/nginx/cache.conf;
}
}
cat /etc/nginx/cache.conf
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 100m;
client_body_buffer_size 1m;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffers 32 4k;
proxy_cache STATIC;
proxy_cache_valid 200 10m;
proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
Le cas du repo EPEL
cat /etc/yum.repos.d/epel.repo
[epel-cache]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://IP-container:8000/pub/epel/6/$basearch
#baseurl=https://dl.fedoraproject.org/pub/epel/6/x86_64/
#mirrorlist=http://centos.mirrors.ovh.net/ftp.centos.org/6/os/x86_64/
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
On lance tout cela :
docker rm -f *nginx* ; docker run -it --name some-nginx -p 8000:81 -v `pwd`/nginx.conf:/etc/nginx/nginx.conf:ro -v `pwd`/cache.conf:/etc/nginx/cache.conf:ro -v `pwd`/conf.d/epel.conf:/etc/nginx/conf.d/epel.conf:ro -d nginx
Puis on log :
clear ; docker logs -f some-nginx
10.0.2.38 - cache: EXPIRED - - [03/Aug/2016:14:48:55 +0000] "GET /pub/epel/6/x86_64/repodata/repomd.xml HTTP/1.1" 200 4380 "-" "urlgrabber/3.9.1 yum/3.2.29" "-"
10.0.2.38 - cache: EXPIRED - - [03/Aug/2016:14:49:45 +0000] "GET /pub/epel/6/x86_64/repodata/b62b82980a3683d984a9ce7444172b512d356ce33202717ad4c20b19e21c2db0-primary.sqlite.bz2 HTTP/1.1" 200 6135536 "-" "urlgrabber/3.9.1 yum/3.2.29" "-"
10.0.2.38 - cache: - - - [03/Aug/2016:14:50:58 +0000] "GET /pub/epel/6/x86_64/htop-1.0.3-1.el6.x86_64.rpm HTTP/1.1" 200 85176 "-" "urlgrabber/3.9.1 yum/3.2.29" "-"
10.0.2.38 - cache: - - - [03/Aug/2016:14:51:09 +0000] "GET /pub/epel/6/x86_64/libwebp-0.4.3-3.el6.x86_64.rpm HTTP/1.1" 200 215532 "-" "urlgrabber/3.9.1 yum/3.2.29" "-"
10.0.2.38 - cache: - - - [03/Aug/2016:14:51:13 +0000] "GET /pub/epel/6/x86_64/munin-2.0.25-11.el6.noarch.rpm HTTP/1.1" 200 203772 "-" "urlgrabber/3.9.1 yum/3.2.29" "-"
10.0.2.38 - cache: - - - [03/Aug/2016:14:51:14 +0000] "GET /pub/epel/6/x86_64/munin-common-2.0.25-11.el6.noarch.rpm HTTP/1.1" 200 93556 "-" "urlgrabber/3.9.1 yum/3.2.29" "-"
10.0.2.38 - cache: - - - [03/Aug/2016:14:51:21 +0000] "GET /pub/epel/6/x86_64/munin-node-2.0.25-11.el6.noarch.rpm HTTP/1.1" 200 413312 "-" "urlgrabber/3.9.1 yum/3.2.29" "-"
10.0.2.38 - cache: - - - [03/Aug/2016:14:51:26 +0000] "GET /pub/epel/6/x86_64/perl-Net-CIDR-0.18-1.el6.noarch.rpm HTTP/1.1" 200 19304 "-" "urlgrabber/3.9.1 yum/3.2.29" "-"
10.0.2.38 - cache: - - - [03/Aug/2016:14:51:47 +0000] "GET /pub/epel/6/x86_64/python2-boto-2.40.0-1.el6.noarch.rpm HTTP/1.1" 200 1872764 "-" "urlgrabber/3.9.1 yum/3.2.29" "-"
10.0.2.38 - cache: - - - [03/Aug/2016:14:51:48 +0000] "GET /pub/epel/6/x86_64/python2-rsa-3.4.1-1.el6.noarch.rpm HTTP/1.1" 200 69708 "-" "urlgrabber/3.9.1 yum/3.2.29" "-"
Voilà ! 😉