Instalação e configuração do servidor

Instale o pacote “debmirror” disponível em testing ou unstable:

# apt-get install debmirror

Crie um usuário e um grupo que será dono do processo que iremos automatizar para o uso do debmirror:

# groupadd mirror
# useradd -g mirror -d /mirror -c “Debian Mirror” mirror

Crie os diretórios necessários para o repositório.

# mkdir -p /mirror/debian # mkdir /mirror/non-US # chown -R mirror:mirror /mirror

Criando os scripts para a sincronização

Iremos criar agora os script para a sincronização dos repositórios:

Repositório US:

# emacs /usr/local/bin/mirror1.sh

#!/bin/bash
su mirror -c “debmirror /mirror/debian –method=http –progress –nosource –host=ftp.br.debian.org –root=/debian –dist=woody,sarge,sid –section=main,contrib,non-free –arch=i386 –cleanup –getcontents”

Repositório non-US:

# emacs /usr/local/bin/mirror2.sh

#!/bin/bash
su mirror -c “debmirror /mirror/non-US –method=http –progress –nosource –host=ftp.br.debian.org –root=/debian-non-US –dist=woody/non-US,sarge/non-US,sid/non-US –section=main,contrib,non-free –arch=i386 –cleanup ?getcontents”

Você pode alterar a opção –method por ftp, http ou rsync -e. Leia o manual do debmirror para maiores detalhes.

# man debmirror

Permitindo a leitura escrita e execução somente para o usuário root:

# chmod 700 /usr/local/bin/mirror*.sh

Repositório local, http e ftp na sua LAN
Para uso local, em seu /etc/apt/sources.list coloque as linhas:

deb file:/mirror/debian sid main non-free contrib
deb file:/mirror/non-US sid/non-US main contrib non-free

Você pode alterar a versão conforme a sua necessidade trocando onde esta sid por woody ou sarge. ;)

Vamos agora configurar para que você possa ter o repositório disponível para outras máquinas.

Configurando o Apache:

Edite o arquivo de configuração /etc/apache/httpd.conf:

# emacs /etc/apache/httpd.conf

Troque “<Directory /var/www>” por “<Directory /mirror>”.

Reinicie o Apache:

# /etc/init.d/apache restart

Edite o arquivo /etc/apt/sources.list nos clientes para configurar o repositório no protocolo HTTP:

# emacs /etc/apt/sources.list

deb http://(ip_ou_host_do_servidor)/debian/ sid main non-free contrib
deb http://(ip_ou_host_do_servidor)/non_US/ sid/non-US main contrib non-free

Configurando o proftpd:

Para ter o repositório disponível por ftp, edite o arquivo de configuração do proftpd:

# emacs /etc/proftpd.conf

Altere as TAGS da configuração compreendidas entre <Anonymous …> </Anonymous> por:

<Anonymous ~mirror>
User                     ftp
Group                    nogroup
UserAlias                anonymous ftp
RequireValidSh           off
# Limit the maximum number of anonymous logins
MaxClients               20
DisplayLogin             welcome.msg
DisplayFirstChdir        .message
# Limit WRITE everywhere in the anonymous chroot
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
</Anonymous>

Edite o arquivo /etc/apt/sources.list nos clientes para configurar o repositório no protocolo FTP:

deb ftp://(ip_ou_host_do_servidor)/debian/ sid main non-free contrib
deb ftp://(ip_ou_host_do_servidor)/non_US/ sid/non-US main contrib non-free

Automatizando o processo
Com o crontab podemos se aproveitar das horas de menor uso da rede para fazer a sincronização:

# crontab -e

insira a linha:

0 22 * * * /usr/local/mirror1.sh 2>&1 > /dev/null;/usr/local/mirror2.sh 2>&1 > /dev/null

Salve e feche.

# /etc/init.d/cron restart

No crontab configurei para que todos os dias a partir das 22:00hs o servidor atualize o repositório.