Criando um repositório local de pacotes para Debian ou Ubuntu

Ter servidores e desktops em Linux apresenta muitas vantagens em sua rede como estabilidade, segurança, e a capacidade de total customização do ambiente. Mas nem sempre é fácil manter esse parque de máquinas atualizado, ter um repositório próprio é uma ótima opção para facilitar atualizações e instalações de ambientes para testes.



Tudo que precisamos neste caso é uma máquina Debian ou Ubuntu com um servidor Web instalado. Isto não será coberto neste post, apenas a configuração dos repositórios.

Primeiro instale o pacote debmirror, que utiliza o Rsync como método de sincronia. Assim depois de instalado e sincronizado o repositório o Rsync irá apenas fazer download dos arquivos que não existem no servidor, assim poucos arquivos serão baixados para atualizar o servidor.

Instalemos o programa:
# apt-get install debmirror rsync

Para facilitar a configuração do repositório iremos criar um script para ser agendado para atualização constante. Nos arquivos abaixo, antes das opções que são palavras ( como host por exemplo) usaremos dois sinais de menos ( – ), o wordpress costuma mudar para travessão depois da edição.

# vi /usr/local/bin/mirror-debian.sh

#!/bin/bash
# Repositorio de onde serão baixados os pacotes
repo=ftp.br.debian.org
# Lugar do repositório onde estão os pacotes
root=:debian
# Onde na máquina local serao baixados os pacotes
localdir=/var/www/debian/
# Versoes do Debian
dists=stable
# Seções de Software utilizados
sections=main,contrib,non-free
# Arquitetura, 32bits(i386), 64bits(amd64)
arch=i386,amd64
# Parametros de configuração do Debmirror (Apenas stable, utilizando o Rsync, ignorando o arquivo Release.gpg e não baixando pacotes de código fonte)
defopt=”-v -p –arch=$arch –host=$repo –root=$root –section=$sections –dist=$dists -e rsync –ignore-release-gpg –postcleanup –getcontents –nosource”
# Linha que executa o Debmirror
echo -e “n Criando mirror de Debian n”
debmirror $defopt $localdir
####################################

Agora vamos criar um script para o repositório do Ubuntu:

# vi /usr/local/bin/mirror-ubuntu.sh

#!/bin/bash
# Repositorio de onde serão baixados os pacotes
repo=us.archive.ubuntu.com
# Lugar do repositório onde estão os pacotes
root=:ubuntu
# Onde na máquina local serao baixados os pacotes
localdir=/var/www/ubuntu/
# Versoes do Ubuntu
dists=maverick
# Seções de Software utilizados
sections=main,restricted,universe,multiverse
# Arquitetura, 32bits(i386), 64bits(amd64)
arch=i386,amd64
# Parametros de configuração do Debmirror (Apenas Maverick, utilizando o Rsync, ignorando o arquivo Release.gpg e não baixando pacotes de código fonte)
defopt=”-v -p –arch=$arch –host=$repo –root=$root –section=$sections –dist=$dists -e rsync –ignore-release-gpg –postcleanup –getcontents –nosource”
# Linha que executa o Debmirror
echo -e “n Criando mirror de Ubuntu n”
debmirror $defopt $localdir
####################################

Após criar os arquivos vamos dar permissão de execução aos scripts:

# chmod -v 755 /usr/local/bin/mirror-*

Para testar basta executar manualmente os comandos:
# mirror-debian.sh
Ou

# mirror-ubuntu.sh

Lembrando que os repositórios terão todos os pacotes disponíveis das distribuições, por isso o download inicial de cada um será de mais de 40 GB, porém depois de sincronizados os downloads serão muito, mas muito menores.

Segue abaixo um screenshot de um repositório de Ubuntu sendo sincronizado com este script de Debmirror

Faça o agendamento dos scripts na crontab do seu sistema, aguarde o download ser finalizado (vai levar um bom tempo dependendo da sua conexão ;-p) e basta utilizar seus repositórios em seus clientes.

Supondo que o IP do Servidor Web seja 192.168.1.200, nos clientes Debian colocaremos a seguinte linha na sources.list:

# vi /etc/apt/sources.list

deb http://192.168.1.200/debian stable main contrib non-free
########################

Nos clientes Ubuntu colocaremos a seguinte linha:

deb http://192.168.1.200/ubuntu maverick main restricted universe multiverse
########################

Atualize seus clientes com:

# apt-get update

Para testar faça:

# apt-get install cmatrix

Espero que tenha ajudado aqueles que tem dúvida em como criar um repositório espelho de Debian ou Ubuntu, e não se esqueçam de assinar nosso Portal.

  • Luciano Silva

    Saberia ensinar como criar um repositório em um servidor na web?
    Estamos precisando disso aqui na ONG onde trabalho para colocar alguns pacotes específicos de uso nosso.

    • Luciano,

      Caso você tenha acesso ao servidor web no nível de administrador do servidor o procedimento é o mesmo, caso o seu acesso seja apenas de hospedagem seria muito difícil criar esse servidor lá, já que você não teria acesso a protocolo rsync nem ao debmirror.

      Espero ter esclarecido sua dúvida.

  • Daniel Moura

    Grande Vagner, este seu tutorial está demais, só tenho uma dúvida, e se eu quiser criar um repositório para a nova versão do ubuntu 11.04, onde e qual dos dois scripts tenho q alterar?

    • Daniel,

      Para criar um repositório para outra versão do Ubuntu você deve mudar no segundo script (mirror-ubuntu.sh ), cujo nome já diz que é para Ubuntu ;-P , na linha “dists=maverick” para “dists=natty” e caso quiera fazer mais de uma versão do Ubuntu no repositório utilize “dists=maverick,natty,oneiric” (oneiric será a próxima versão do Ubuntu).

      Espero ter ajudado e em breve teremos um review interessante sobre o Gerenciamento de Servidores com Ubuntu via Web. Aguarde.

  • Rafael Cruz.

    Aee consegui termina o download..^^

    vlw ~vagner vai ajudar muitos nos estudos de montagem de laboratórios em casa

  • Rodrigo Leonel

    Fala Vagner:

    To fazendo uns testes aqui para implementar esse serviço para a ativação dos servidores daqui da empresa, ai estou com uma dúvida, qual seria o tamanho que deveria reservar em uma máquina virtual? Uns 50 Gb para cada distribuição? To fazendo uns testes aqui e vou postar quando da resultado.
    abraços
    PS.: Ainda precisando daquela máquina?

    • Rodrigo,

      Criei recentemente um repositório para o Debian stable e testing para as arquiteturas x86 e x86_64 e o espaço utilizado foi de 104GB.

      Espero ter ajudado

      Abraços

    • Fala Rodrigo,

      Tudo bem mas já tenho máquina sobrando…

  • Rodrigo Leonel

    Vagner,

    Tentei postar logando pelas minhas contas do Google, Facebook e Twitter mas sem sucesso, então vai por aqui direto.
    O espaço que estou ocupando em disco é:
    Debian, stable, i386 e 64, main, contrib, non-free e source: 49Gb
    Ubuntu, precise, i386 e 64, main, restricted, universe e multiverse: 61Gb

  • Boa noite Wagner, tudo bem?

    Gostaria de uma ajuda.
    Fiz os passos para criar o servidor de repositório e tudo deu certo.
    Só que eu tenho uma necessidade diferente aqui na minha empresa, eu preciso manter versões do debian sem atualização, isso por conta do PHP e MYSQL que usamos no desenvolvimento.
    Por exemplo, eu faço um download da versão 6 que está no site hoje, os programadores farão os ajustes para essa versão e não posso mudá-la mais, entendeu?
    Como eu posso fazer para manter essa versão 6, depois baixar uma possível versão 7 e nunca mudar aquele download antigo que fiz da versão 6.
    Deu para entender?
    Agradeço a ajuda.

    Abraços

    • Leonardo,

      Mude os diretórios onde os scripts gravam os arquivos baixados.

  • Juliano

    Ok, ficou muito bom! Aqui funcionou! Gostaria de sugerir um complemento: seria possível fazer um repositório local de drives de impressora (sansung, HP e outros)?

  • pra mim deu erro na linha

    # Parametros de configuração do Debmirror (Apenas Maverick, utilizando o Rsync, ignorando o arquivo Release.gpg e não baixando pacotes de código fonte)
    defopt=”-v -p –arch=$arch –host=$repo –root=$root –section=$sections –dist=$dists -e rsync –ignore-release-gpg –postcleanup –getcontents –nosource”

    especificamente no parametro “-p” diz que o parâmetro não existe.

  • Bruno

    Gostei muito do post. Simples e direto.

    Obrigado, Vagner.

  • Excelente!
    EU estava fazendo de uma forma mais trabalhosa. Seu script ficou sensacional!
    Só tenho uma dúvida. Há como baixar os PPAs do Ubuntu também por esse procedimento?

    Um abraço!

  • Educacional Ramon

    Vagner, poderia fazer essa demonstração no Debian 8.5 no formato de vídeo aula?! Estou precisando muito, pois em minha localidade o link de internet é muito lento, seria uma ótima solução. Ficarei muito grato pelo apoio.

  • Wesley Fideles

    Alguém conseguiu rodar o Script na crontab?

  • Gabriel Paganoti

    Ótima dica! Porém o script que você disponibilizou não estava funcionando para mim. Como gostei da forma que você abortou a questão. Resolvi refazer o script. Segue abaixo.

    #!/bin/bash
    Repositorio de onde serão baixados os pacotes
    repo=ftp.br.debian.org
    # Lugar do repositório onde estão os pacotes
    root=/debian
    # Onde na máquina local serao baixados os pacotes
    localdir=/var/www/debian/
    # Versoes do Debian
    dists=jessie
    # Seções de Software utilizados
    sections=main,contrib,non-free
    # Arquitetura, 32bits(i386), 64bits(amd64)
    arch=i386,amd64
    # Parametros de configuração do Debmirror (Apenas stable, utilizando o Rsync, ignorando o arquivo Release.gpg e não baixando pacotes de código fonte)
    defopt=”-v –method=rsync –progress –nosource –host=$repo –root=$root –dist=$dists –section=$sections –arch=$arch –cleanup –getcontents”
    # Linha que executa o Debmirror
    echo -e “n Criando mirror de Debian n”
    debmirror $defopt $localdir
    ####################################

    Obrigado pela dica!