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*repo
arquivos, 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 os
diretó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