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

Conteúdo

[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}
Ferramentas pessoais