Temos várias máquinas aqui que rodam Linux. É dado ao usuário o direito de escolher a distribuição que ele quiser, democraticamente. É garantido ao operador, o direito sagrado de só tirar dúvidas com respeito ao Debian. Uma excessão é gentilmente aberta ao Ubuntu. Para facilitar a difícil tarefa de escolher a distribuição, eu mantenho repositórios do Debian e do Ubuntu, além de ISOs das mesmas. O espelho é mantido em um AMD K6-500, velho de guerra. Mantenho o debian/{etch,lenny,sid} e o ubuntu/{edgy,feisty,gutsy}, nas arquiteturas i386 e amd64, além do debian-security e debian-multimedia. O ubuntu ocupa 105Gb e o debian 75Gb. Como temos vários usuários avançados, mantemos os fontes (Sources) dos pacotes, caso queiram fazer alguma alteração nos pacotes compilados.
A máquina foi instalada do zero, com o Debian Etch. O sistema de arquivos escolhido foi o ext3. As opções de montagem, no /etc/fstab, são noatime,nodiratime,errors=remount-ro
para ser mais rápido. O mesmo está com a opção writeback para o journaling. Além dos pacotes da instalação básica, eu uso os seguintes para montar o mirror: lighttpd monit apticron visitors exim debmirror
O lighttpd é o servidor web, ao invés do apache, o monit para monitorar e reiniciar os serviços em caso de queda de algum deles, o apticron para baixar as atualizações e me avisar, por email, se alguma coisa precisa ser feita, o visitors para estatísticas de visitas e o debmirror para efetivamente baixar os pacotes. Na configuração do lighttpd (/etc/lighttpd/lighttpd.conf), eu só adicionei as seguintes linhas
url.rewrite = ( "^/ubuntu/(.*)" => "/mirror/ubuntu/$1", "^/debian/(.*)" => "/mirror/debian/$1", "^/debian-security/(.*)" => "/mirror/debian-security/$1", "^/debian-multimedia/(.*)" => "/mirror/debian-multimedia/$1", "^/debian-marillat/(.*)" => "/mirror/debian-multimedia/$1", )
A razão é que eu prefiro manter o espelho sob um diretório mirror, do que direto no /var/www. Se você não se importar, não precisa nem mexer na configuração (mas você terá que alterar o script de atualização do mirror, no final do post).
Para configurar o monit, basta acrescentar as seguintes linhas ou no final do /etc/monit/monitrc, ou dentro de um arquivo em /etc/monit/monit.d (prefiro esta, pois se mantém inalterada depois de um upgrade:
check process dhclient with pidfile /var/run/dhclient.eth0.pid start program = "/etc/init.d/networking start" stop program = "/etc/init.d/networking stop" check process cron with pidfile /var/run/crond.pid start program = "/etc/init.d/cron start" stop program = "/etc/init.d/cron stop" if 5 restarts within 5 cycles then timeout check process sshd with pidfile /var/run/sshd.pid start program = "/etc/init.d/ssh start" stop program = "/etc/init.d/ssh stop" if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then timeout check process lighttpd with pidfile /var/run/lighttpd.pid start program = "/etc/init.d/lighttpd start" stop program = "/etc/init.d/lighttpd stop" if cpu > 90% for 5 cycles then alert if cpu > 90% for 10 cycles then restart if loadavg(5min) greater than 10 for 4 cycles then restart
Edite o arquivo /etc/monit/monitrc, para o email que deve receber as notificações (set alert). Caso use o monit.d, não se esqueça de tirar o comentário no final do arquivo. Você pode ainda acompanhar o estado da máquina acessando http://seu_espelho:2812, no seu browser favorito.
O visitors, que é um gerador de estatísticas simples mas que contém o que você precisa para um espelho, é chamado por um arquivo (visitors, por exemplo) salvo em /etc/cron.d, com o seguinte conteúdo:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO="" 9 * * * * www-data visitors -WMY /var/log/lighttpd/access.log > index.html
ou seja, atualizado de hora em hora (aos 9 minutos de cada hora). Agora basta acessar http://seu_mirror, para ter a estatística de visitas.
Para manter seu mirror atualizado, principalmente com as atualizações de segurança, instale o apticron, insira seu email no /etc/apticron/apticron.conf, e adicione o arquivo apticron no /etc/cron.d, com o seguinte conteúdo:
MAILTO="" SHELL=/bin/sh 0 */4 * * * root /usr/bin/apticron
para checar as atualizações, de quatro em quatro horas.
Finalmente, para baixar os pacotes, use o debmirror. Eu fiz um script para o debian, que adicionei no /etc/cron.d, também, pra atualizar o espelho uma vez ao dia
MAILTO="operador@seudominio" SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 1 23 * * * www-data /usr/local/bin/mkdebmirror-marillat 15 22 * * * www-data /usr/local/bin/mkdebmirror-debian 1 3 * * * www-data /usr/local/bin/mkdebmirror-security 1 4 * * * www-data /usr/local/bin/mkdebmirror-ubuntu
Desta vez o MAILTO não está vazio, porque eu quero ser notificado se as atualizações foram feitas corretamente. O conteúdo do /usr/local/bin/mkdebmirror-debian é o seguinte (fácil alterar para as outras atualizações):
proto=http host=sft.if.usp.br root=debian destdir=/var/www/mirror/ defopt="--progress -v -p --arch=i386,amd64 --source --host=$host --root=$root \ --section=main,contrib,non-free --ignore-missing-release --ignore-release-gpg \ --dist=etch,lenny,sid -e $proto --passive --getcontents --ignore-small-errors" echo "------------------ create mirror for debian ------------------" debmirror $defopt $destdir/debian
Agora é só baixar os pacotes e em um ou dois dias você terá um espelho geral do Debian, para sua rede. Acorde cedo e verifique os emails do apticron e dos scripts de atualização dos espelhos.