Construindo seu próprio espelho

Ao hospedar serviços em casa, um cenário comum é que todas as VMs têm o mesmo sistema operacional e o mesmo software básico, com algumas diferenças entre eles. Isso significa que, se você tiver 7 VMs (como é o meu caso), você baixaria as mesmas atualizações 7 vezes. Embora isso não seja um grande problema para o dia-a-dia, torna-se um incômodo quando você decide atualizar suas VMs. Baixar centenas de pacotes, ou mesmo inicializar uma nova VM, torna-se uma tarefa que leva algum tempo para terminar.

Cansado disso, decidi construir um servidor de espelhamento simples. Estou usando o nginx e o squid para isso. Simplificando, isso é tudo de que precisamos:

Para nginx, no Fedora 20:

yum install nginx squid
firewall
-cmd --add-port=80/tcp --permanent
firewall
-cmd --add-port=443/tcp --permanent
firewall
-cmd --add-port=80/tcp
firewall
-cmd --add-port=443/tcp

E em /etc/squid/squid.conf:

maximum_object_size 4 GB
http_port
3128 accel defaultsite=dl.fedoraproject.org
cache_peer dl
.fedoraproject.org parent 80 0 no-query originserver
http_access allow all

cache_dir ufs
/var/spool/squid 161166 16 256
access_log
/var/log/squid/access.log

On /etc/nginx/conf.d/mirror.conf:

server {
listen
80;
server_name mirror
.kroehling.de;
location
/ {
proxy_set_header X
-Forwarded-Host $host;
proxy_set_header X
-Forwarded-Server $host;
proxy_set_header X
-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http
://localhost:3128/;
}
}

Depois disso, tudo que você precisa é apontar suas máquinas para usar este host ao obter atualizações. Isso pode ser feito alterando os /etc/yum.repos.d/fedora*repoarquivos, para usar a URL do seu espelho como baseurl, em vez de usar um metalink.

E quando você decidir inicializar novas VMs, você também pode aproveitar este espelho, usando o parâmetro “-l” ativado virt-install, apontando para o osdiretório em seu espelho, assim:

virt-install --ram 1024 -l http://mirror.kroehling.de/pub/fedora/linux/releases/20/Fedora/x86_64/os/ --os-type=linux --os-variant=fedora20 --disk path=/usr/local/data/projects/virtual-images/NAME.qcow2,format=qcow2 --vnc --name NAME