Criando mirrors com debmirror
De gutocarvalho.net
Criando mirrors de repositórios de pacotes com o debmirror.
por: guto carvalho (guto@gutocarvalho.net)
Procure tirar dúvidas deste tutorial no fórum apropriado: http://gutocarvalho.net/phpBB3
[editar] qual a vantagem de se ter um mirror de pacotes ?
Vamos pensar no seguinte cenário, você tem uma empresa onde existem mais de 60 estações e uns 10 servidores com Ubuntu ou Debian instalado, imagine se todos ao mesmo tempo conectarem na internet para verificar se existem atualizações, agora imagine se existirem 60 MB de atualizações, e cada estação/servidor começa a fazer o download, o uso do seu link vai bater no teto, e acho que você não vai querer que isto ocorra.
No meu caso eu mantenho no meu HD o mirror do fesity, gutsy e debian etch, pois utilizo eles para instalar muitos servidores e ganho muito tempo baixando pacotes do meu HD do que baixando da internet.
Para installfests também é muito prático e ajuda muito mesmo.
Para quem trabalha com projetos sociais de inclusão digital que possuem conexão via satélite também é uma "mão" na roda visto as instabilidades deste tipo de acesso.
Como resolver isto, faça um mirror do repositório de pacotes do Ubuntu/Debian e aponte todos as estações e servidores para este mirror.
Você pode criar um script que atualize o mirror diariamente ou a cada 1 hora.
Aqui vou abordar o uso da ferramenta debmirror e um pouco de shellscript.
[editar] ajustando problemas do debmirror no gutsy
Se você usa Dapper ou Feisty pode usar o debmirror direto, se você usa o Gutsy precisa fazer a correção abaixo:
Edite o arquivo /usr/bin/debmirror
root@defiant:/storage/mirror/scripts/ubuntu# vim /usr/bin/debmirror
Vá até a linha 793
local $/=”\n\n”;
altere para :
local $/=”\n”;
Agora o debmirror funcionará corretamente..
[editar] Vamos fazer um mirror do ubuntu gusty, utilizando shellscript
Escrevendo shellscript para facilitar nossa vida
#!/bin/sh ############################################## # proto pode ser http,ftp ou rsync proto=http ########################################################### # host é de onde baixar # Eu mantenho alguns comentados no caso do último falhar host=br.archive.ubuntu.com #host=ubuntu.interlegis.gov.br #host=sft.if.usp.br #host=10.82.0.206/mirror ########################################## # root é de onde começa o mirror # costuma ser /pub/ubuntu em ftps. root=ubuntu ########################################## # onde eu vou colocar os pacotes destdir=/storage/mirror/distros/ubuntu/gutsy ########################################## # Baixando 32 e 64 bits... arch=i386 ########################################## # dists dists=gutsy,gutsy-updates,gutsy-security,gutsy-backports,gutsy-proposed ########################################## # sections sections=main,multiverse,restricted,universe # aqui é o trabalho de verdade e está em uma única linha defopt="-v -p --arch=$arch --host=$host --root=$root --section=$sections --dist=$dists -e $proto -ignore-release-gpg --postcleanup --nosource" ######################################### # imprimindo algumas informacoes echo "\n--- criando mirror ubuntu" echo "--- arch: $arch" echo "--- dist: $dists" echo "--- sec: $sections\n" # rodando debmirror debmirror $defopt $destdir
[editar] mirror do ubuntu gutsy
Esse script acima facilita muito o trabalho, mas podemos fazer diretamente.
A linha ficaria assim.
debmirror -v -p --arch=i386 --host=br.archive.ubuntu.com --root=ubuntu --section=main,multiverse,restricted,universe --dist=gutsy,gutsy-updates,gutsy-security,gutsy-backports,gutsy-proposed -e http --ignore-release-gpg --postcleanup --nosource /storage/mirror/distros/ubuntu/gutsy
o que significa cada coisa?
-v = mostra o progresso entre os downloads -p = mostra uma barra de progresso para cada download --arch = arquitetura --host = endereço do host --root = raiz dos pacotes ubuntu no host --section = quais sessões quer baixar --dist = quais distros vai baixar -e = qual protocolo vamos usar --ignore-release-gpg = não falha se o release gpg não existir no repositório --postcleanup = limpa os arquivos locais que nao existem mais no repositório remoto, somente após a sincronização completa e sem erros. --nosource = não baixa os sources
[editar] script para mirror do ubuntu repositório gutsy
pacotes oficiais, sessões main, restricted, universe e multiverse
#!/bin/sh # proto pode ser http,ftp ou rsync proto=http # host é de onde baixar # Eu mantenho alguns comentados no caso do último falhar # host=ubuntu.interlegis.gov.br host=archive.ubuntu.com #host=sft.if.usp.br #host=10.82.0.206 # root significa raiz, é de onde começa o mirror # costuma ser /pub/ubuntu em ftps. root=ubuntu # onde eu vou colocar os pacotes destdir=/storage/mirror/distros/ubuntu/gutsy # arquitetura, baixando pacotes 32 bits... arch=i386 # sessões sections=main,restricted,universe,multiverse # distribuições dists=gutsy,gutsy-updates,gutsy-security,gutsy-proposed,gutsy-backports # configurando parâmetros defopt="-v -p --arch=$arch --host=$host --root=$root --section=$sections --dist=$dists -e $proto --ignore-release-gpg --postcleanup --nosource" # imprimindo informações echo "\n--- criando mirror ubuntu" echo "--- arch: $arch" echo "--- dist: $dists" echo "--- sections: $sections \n" # rodando debmirror debmirror $defopt $destdir
[editar] script para mirror do ubuntu repositório feisty
pacotes oficiais, sessões main, restricted, universe e multiverse
#!/bin/sh # proto pode ser http,ftp ou rsync proto=http # host é de onde baixar # Eu mantenho alguns comentados no caso do último falhar # host=ubuntu.interlegis.gov.br host=archive.ubuntu.com #host=sft.if.usp.br #host=10.82.0.206 # root significa raiz, é de onde começa o mirror # costuma ser /pub/ubuntu em ftps. root=ubuntu # onde eu vou colocar os pacotes destdir=/storage/mirror/distros/ubuntu/feisty # arquitetura, baixando pacotes 32 bits... arch=i386 # sessões sections=main,restricted,universe,multiverse # distribuições dists=feisty,feisty-updates,feisty-security,feisty-proposed,feisty-backports # configurando parâmetros defopt="-v -p --arch=$arch --host=$host --root=$root --section=$sections --dist=$dists -e $proto --ignore-release-gpg --postcleanup --nosource" # imprimindo informações echo "\n--- criando mirror ubuntu" echo "--- arch: $arch" echo "--- dist: $dists" echo "--- sections: $sections \n" # rodando debmirror debmirror $defopt $destdir
[editar] script para mirror do ubuntu repositório feisty-commercial
repositorio comercial do ubuntu, tem o vmware-server aqui...
#!/bin/sh # proto pode ser http,ftp ou rsync proto=http # host é de onde baixar # Eu mantenho alguns comentados no caso do último falhar # host=ubuntu.interlegis.gov.br host=archive.canonical.com #host=10.82.0.206/mirror # root significa raiz, é de onde começa o mirror # costuma ser /pub/ubuntu em ftps. root=/ # onde eu vou colocar os pacotes destdir=/storage/mirror/distros/ubuntu/feisty-commercial # arquitetura, baixando pacotes 32 bits... arch=i386 # distribuições dists=feisty-commercial # sessões sections=main # configurando todos os parametros defopt="-v -p --arch=$arch --host=$host --root=$root --section=$sections --dist=$dists -e $proto --ignore-release-gpg --postcleanup --nosource" echo "\n--- criando mirror ubuntu" echo "--- arch: $arch" echo "--- dist: $dists" echo "--- sec: $sections\n" # rodando debmirror debmirror $defopt $destdir
[editar] script para mirror do ubuntu repositório feisty-medibuntu
aqui são pacotes multimedia para o feisty, como w32codecs, libdvdcss, skype, opera, googleearth
#!/bin/sh # proto pode ser http,ftp ou rsync proto=http # host é de onde baixar # eu mantenho alguns comentados no caso do último falhar # host=ubuntu.interlegis.gov.br # host=archive.ubuntu.org host=packages.medibuntu.org # root significa raiz, é onde começa do mirror # costuma ser /pub/ubuntu em ftps. root=/ # onde eu vou colocar os pacotes destdir=/storage/mirror/distros/ubuntu/feisty-medibuntu # arquitetura, baixando pacotes 32 bits... arch=i386 # sessões sections=free,non-free # distribuições dists=feisty # configurando todos os parametros defopt="-v -p --arch=$arch --host=$host --root=$root --section=$sections --dist=$dists -e $proto --ignore-release-gpg --postcleanup --nosource" echo "\n--- criando mirror medibuntu" echo "--- arch: $arch" echo "--- dist: $dists" echo "--- sections: $sections \n" # rodando debmirror debmirror $defopt $destdir
[editar] script para mirror do ubuntu repositório gutsy-medibuntu
aqui são pacotes multimedia para o feisty, como w32codecs, libdvdcss, skype, opera, googleearth
#!/bin/sh # proto pode ser http,ftp ou rsync proto=http # host é de onde baixar # eu mantenho alguns comentados no caso do último falhar # host=ubuntu.interlegis.gov.br # host=archive.ubuntu.org host=packages.medibuntu.org # root significa raiz, é onde começa do mirror # costuma ser /pub/ubuntu em ftps. root=/ # onde eu vou colocar os pacotes destdir=/storage/mirror/distros/ubuntu/gutsy-medibuntu # arquitetura, baixando pacotes 32 bits... arch=i386 # sessões sections=free,non-free # distribuições dists=gutsy # configurando todos os parametros defopt="-v -p --arch=$arch --host=$host --root=$root --section=$sections --dist=$dists -e $proto --ignore-release-gpg --postcleanup --nosource" echo "\n--- criando mirror medibuntu" echo "--- arch: $arch" echo "--- dist: $dists" echo "--- sections: $sections \n" # rodando debmirror debmirror $defopt $destdir
[editar] script para mirror do ubuntu repositório feisty-google
repositório de pacotes do google para debian/ubuntu, google-desktop neste aqui...
#!/bin/sh # proto pode ser http,ftp ou rsync proto=http # host é de onde baixar # Eu mantenho alguns comentados no caso do último falhar # host=ubuntu.interlegis.gov.br host=dl.google.com #host=10.82.0.206 # root significa raiz, é de onde começa o mirror # costuma ser /pub/ubuntu em ftps. root=linux/deb/ # onde eu vou colocar os pacotes destdir=/storage/mirror/distros/ubuntu/feisty-google # arquitetura, baixando pacotes 32 bits... arch=i386 # sessões sections=non-free # distribuições dists=stable # configurando parâmetros defopt="-v -p --arch=$arch --host=$host --root=$root --section=$sections --dist=$dists -e $proto --ignore-release-gpg --postcleanup --nosource" # imprimindo informações echo "\n--- criando mirror ubuntu/debian - google" echo "--- arch: $arch" echo "--- dist: $dists" echo "--- sections: $sections\n" # rodando debmirror debmirror $defopt $destdir
[editar] script para mirror do debian repositório etch
pacotes do repositorio oficial: main, crontrib, free, non-free
#!/bin/sh # proto pode ser http,ftp ou rsync proto=http # host é de onde baixar # eu mantenho alguns comentados no caso do último falhar # host=ubuntu.interlegis.gov.br host=ftp.br.debian.org #host=sft.if.usp.br #host=10.82.0.206 # root significa raiz, é de onde começa o mirror # costuma ser /pub/ubuntu em ftps. root=debian # onde eu vou colocar os pacotes destdir=/storage/mirror/distros/debian/etch # distribuições dists=etch # sessões sections=main,contrib,non-free # arquitetura, baixando pacotes 32 bits... arch=i386 # configurando parâmetros defopt="-v -p --arch=$arch --host=$host --root=$root --section=$sections --dist=$dists -e $proto --ignore-release-gpg --postcleanup --nosource" # imprimindo informações echo "\n--- criando mirror debian" echo "--- arch: $arch" echo "--- dist: $dists" echo "--- sec: $sections\n" # rodando debmirror debmirror $defopt $destdir
[editar] script para mirror do debian repositório etch security/updates
atualizações de segurança
#!/bin/sh # proto pode ser http,ftp ou rsync proto=http # host é de onde baixar # Eu mantenho alguns comentados no caso do último falhar # host=ubuntu.interlegis.gov.br host=security.debian.org #host=sft.if.usp.br #host=10.82.0.206 # root significa raiz, é de onde começa o mirror # costuma ser /pub/ubuntu em ftps. root=debian-security # onde eu vou colocar os pacotes destdir=/storage/mirror/distros/debian/etch-security # arquitetura, baixando pacotes 32 bits... arch=i386 # sections $sections=main,contrib,non-free # dists $dists=etch/updates # aqui é o trabalho de verdade e está em uma única linha defopt="-v -p --arch=$arch --host=$host --root=$root --section=$sections --dist=$dists -e $proto --ignore-release-gpg --postcleanup --nosource" # imprimindo informações echo "\n--- criando mirror debian security" echo "--- arch: $arch" echo "--- dist: $dists" echo "--- sec: $sections\n" # rodando debmirror debmirror $defopt $destdir
[editar] script para mirror do debian repositório etch volatile
aqui sempre tem as últimas atualizacoes do clamav, engine e vacinas...
#!/bin/sh # proto pode ser http,ftp ou rsync proto=http # host é de onde baixar # Eu mantenho alguns comentados no caso do último falhar host=volatile.debian.org #host=sft.if.usp.br #host=10.82.0.206 # root é de onde começa o mirror # costuma ser /pub/ubuntu em ftps. root=debian-volatile # onde eu vou colocar os pacotes destdir=/storage/mirror/distros/debian/etch-volatile # Baixando 32 e 64 bits... arch=i386 # sessões sections=main # distribuições dists=etch/volatile # aqui é o trabalho de verdade e está em uma única linha defopt="-v -p --arch=$arch --host=$host --root=$root --section=$sections --dist=$dists -e $proto --ignore-release-gpg --postcleanup --nosource" # imprimindo informações echo "\n--- criando mirror debian-volatile" echo "--- arch: $arch" echo "--- dist: $dists" echo "--- sec: $sections\n" # rodando debmirror debmirror $defopt $destdir
[editar] script para mirror do debian repositório etch debian/multimedia
pacotes multimedia, w32codecs/libdvdcss
#!/bin/sh # proto pode ser http,ftp ou rsync proto=http # host é de onde baixar # Eu mantenho alguns comentados no caso do último falhar # host=ubuntu.interlegis.gov.br host=linorg.usp.br #host=sft.if.usp.br #host=10.82.0.206 # root é de onde começa o mirror # costuma ser /pub/ubuntu em ftps. root=/debian-marillat # onde eu vou colocar os pacotes destdir=/storage/mirror/distros/debian/etch-multimedia # Baixando 32 e 64 bits... arch=i386 # distribuições dists=stable # sessões sections=main # aqui é o trabalho de verdade e está em uma única linha defopt="-v -p --arch=$arch --host=$host --root=$root --section=$sections --dist=$dists -e $proto --ignore-release-gpg --postcleanup --nosource" # imprimindo informações echo "\n--- criando mirror debian multimedia" echo "--- arch: $arch" echo "--- dist: $dists" echo "--- sec: $sections\n" debmirror $defopt $destdir
[editar] script para mirror do debian repositório etch backports
#!/bin/sh # proto pode ser http,ftp ou rsync proto=http # host é de onde baixar # Eu mantenho alguns comentados no caso do último falhar host=www.backports.org #host=sft.if.usp.br #host=10.82.0.206 #host=debian.sil.at # root é de onde começa o mirror # costuma ser /pub/ubuntu em ftps. #root=debian-backports root=backports.org # onde eu vou colocar os pacotes destdir=/storage/mirror/distros/debian/etch-backports # arquitetura, baixando pacotes 32 bits... arch=i386 # sessões sections=main # distribuições dists=etch-backports # aqui é o trabalho de verdade e está em uma única linha defopt="-v -p --arch=$arch --host=$host --root=$root --section=$sections --dist=$dists -e $proto --ignore-release-gpg --postcleanup --nosource" # imprimindo informações echo "\n--- criando mirror debian-backports" echo "--- arch: $arch" echo "--- dist: $dists" echo "--- sec: $sections\n" # rodando debmirror debmirror $defopt $destdir
[editar] entendendo sources.list
agora vamos aprender a apontar o sources.list para o seu repositório local
deb protoloco://raiz/do/repositorio distro sessão sessão sessão sessão
ex:
deb http://br.archive.ubuntu.com/ubuntu gutsy main restricted universe multiverse
[editar] configurando sources.list
usando prefixo local, caso o repositorio esteja na mesma maquina, como é o meu caso.
deb file:///storage/mirror/distros/ubuntu/gutsy gutsy main restricted universe multiverse deb file:///storage/mirror/distros/ubuntu/gutsy gutsy-updates main restricted universe multiverse deb file:///storage/mirror/distros/ubuntu/gutsy gutsy-security main restricted universe multiverse
apontando para um endereço HTTP (prefira http a ftp)
deb http://127.0.0.1/mirror/distros/ubuntu/gutsy gutsy main restricted universe multiverse deb http://127.0.0.1/mirror/distros/ubuntu/gutsy gutsy-updates main restricted universe multiverse deb http://127.0.0.1/mirror/distros/ubuntu/gutsy gutsy-security main restricted universe multiverse
neste caso eu tenho apache2 instalado e apenas criei um link simbolico no /var/www
ln -s /storage/mirror /var/www
[editar] ajustando cron para atualizações diárias
aconselho que coloque o script no cron para ser executado 1 vez ao dia
veja o exemplo
root@defiant:/home/gutera# cd /etc/cron.dayly
root@defiant:/etc/cron.daily# ln -s /storage/mirror/scripts/sync-all.sh .
conteúdo do sync-all.sh
#!/bin/bash ROOT="/media/disk/mirror/scripts" echo "atualizando mirrors..." $ROOT/ubuntu/sync-feisty.sh $ROOT/ubuntu/sync-feisty-commercial.sh $ROOT/ubuntu/sync-feisty-google.sh $ROOT/ubuntu/sync-feisty-medibuntu.sh $ROOT/ubuntu/sync-gutsy.sh $ROOT/ubuntu/sync-gutsy-medibuntu.sh $ROOT/debian/sync-etch.sh $ROOT/debian/sync-etch-security.sh $ROOT/debian/sync-etch-multimedia.sh $ROOT/debian/sync-etch-volatile.sh $ROOT/debian/sync-etch-backports.sh echo "atualizacao finalizada..."
pronto seus mirrors serão atualizados diariamente...
[editar] sugestão de script alternativo
Por: Jarbas Peixoto Júnior:
#!/bin/bash
##
## Programa: mirror.sh
## Objetivo: manter atualizado o mirror local do "Debian Stable/Testing"
## Autor: jarbas.junior@gmail.com
## Data: 08/09/2006 - Implementação Inicial
## 07/02/2007 - Incluir mirrors de Ubuntu, Debian e Medibuntu
## 15/02/2007 - Identificar arq. TXT e MAIL com 'mktemp'
## 23/04/2007 - Incluir o mirror do Ubuntu/Feisty e do Debian/Security
##
TMP_TXT=`mktemp /tmp/mirror-txt.XXXXXXXXXX` || exit 1
TMP_MAIL=`mktemp /tmp/mirror-mail.XXXXXXXXXX` || exit 1
MAIL_ADM="jarbas.junior@gmail.com"
# Executa o debmirror com parâmetros
function _mirror()
{
_str=$1
_local=$2
_host=$3
_root=$4
_dist=$5
_section=$6
date > ${TMP_TXT} 2>&1
debmirror --method=http --host=$_host --root=$_root --progress --nosource \
--dist=$_dist --section=$_section --arch=i386 --ignore-small-errors
--ignore-missing-release --ignore-release-gpg \
--postcleanup $_local >> ${TMP_TXT} 2>&1
date >> ${TMP_TXT} 2>&1
# Verificar se houve downloads de pacotes .deb
/bin/grep -E "(Download|*deb*)" ${TMP_TXT} > ${TMP_MAIL}
if [[ `grep ".deb... ok" ${TMP_MAIL}` ]]; then
nail -s "Mirror $_str Atualizado" ${MAIL_ADM} < ${TMP_TXT}
fi
}
## DEBIAN-VOLATILE ETCH
#_mirror "DEBIAN-VOLATILE-ETCH" /var/mirror/debian-volatile/
volatile.debian.org debian-volatile etch/volatile main,contrib,non-free
## DEBIAN-SECURITY STABLE
_mirror "DEBIAN-SECURITY-ETCH" /var/mirror/debian-security/
security.debian.org debian-security etch/updates main,contrib,non-free
## DEBIAN STABLE
## Lançado o Etch em 08/04/2007
#_mirror "DEBIAN-ETCH" /var/mirror/debian/ ftp.debian.org debian etch
main,contrib,non-free
## DEBIAN TESTING
## Não utilizar em ambiente de produção
_mirror "DEBIAN-TESTING" /var/mirror/debian-testing/ ftp.debian.org
debian testing main,contrib,non-free
## UBUNTU: FEISTY
## Lançado em 19/04/2007
_mirror "UBUNTU-FEISTY" /var/mirror/feisty/ archive.ubuntu.com ubuntu
feisty,feisty-updates,feisty-security,feisty-backports
main,multiverse,restricted,universe
## UBUNTU: FEISTY-COMMERCIAL
## Mais em
http://ubuntu.wordpress.com/2006/07/08/introducing-the-dapper-commercial-repository/
_mirror "UBUNTU-FEISTY-COMMERCIAL" /var/mirror/feisty-commercial/
archive.canonical.com ubuntu feisty-commercial main
## UBUNTU: GUTSY
## Lançado em 20/10/2007
_mirror "UBUNTU-GUTSY" /var/mirror/gutsy/ archive.ubuntu.com ubuntu
gutsy,gutsy-updates,gutsy-security,gutsy-backports
main,multiverse,restricted,universe
## UBUNTU: Miro - The free open-source video platform.
## Mais em http://www.getmiro.com/download/ubuntu.php
## UBUNTU: GOOGLE-FEISTY
## Mais em http://www.google.com/linuxrepositories/ubuntu704.html
#_mirror "UBUNTU-FEISTY-GOOGLE" /var/mirror/feisty-google/ dl.google.com
linux/deb stable non-free
### UBUNTU: DAPPER e EDGY
#_mirror "Dapper e Edgy" /var/mirror/ubuntu/ archive.ubuntu.com ubuntu
edgy,edgy-updates,edgy-security,edgy-backports,dapper,dapper-updates,dapper-security,dapper-backports
### ORACLE
### https://help.ubuntu.com/community/Oracle10g
#_mirror "ORACLE" /var/mirror/oracle/ oss.oracle.com debian unstable
main,non-free
### MEDIBUNTU FREE/NON-FREE
### Mais informações: http://www.tuxresources.org/blog/?p=141
#_mirror "MEDIBUNTU-FEISTY" /var/mirror/medibuntu/ medibuntu.sos-sts.com
repo feisty free,non-free
# Apagar arquivos temporários antes de sair
rm -rf ${TMP_TXT} ${TMP_MAIL}

