Bandersnatch + Reposync + Apt-Cacher

Algum tempo atrás precisei instalar algumas coisas em uma maquina que estava em ambiente de produção e fui surpreendido com a dificuldade, posso afirmar que foi tenso conseguir concluir a tarefa. Questionando a equipe descobri que tínhamos um repositório, mas que não estava atualizado e não atendia muito bem.

Combinei de estudar a situação e resolver da melhora maneira possível. Pois bem, a ideia por trás desse post é usar um Ubuntu Server 14.04 como repositório para Python, CentOS e Ubuntu ao mesmo tempo, em outras palavras uma maquina servindo os três simultaneamente.

Em um primeiro momento parece um pouco complexo ou até mesmo louco usar isso. Tenho certeza que após executar todos os passos a seguir vai perceber que é fácil levantar um ambiente desses. 

Repositorio pypi (Bandernatch)

Precisamos do virtualenv para isolar a instalaçao do repositorio do python.
# apt-get install python-virtualenv

Crie um virtualenv com qualquer nome, optei por criar com o nome da aplicação.
# virtualenv bandersnatch

Baixe os pacotes indicados no requirements.txt abaixo.
# cd bandernatch

Necessario rodar a aplicação uma vez, pois assim o arquivo de configuração e a pasta pypi será criada. Lembre-se de iniciar o venv para rodar a aplicação.
# . bin/activate
 # sudo bandersnatch mirror

Crie um arquivo chamado run.sh para facilitar rodar a aplicação das próximas vezes.
#vim /home/dev/bandersnatch/run.sh

#!/bin/bash
. /home/dev/bandersnatch/bin/activate
sudo /home/dev/bandersnatch/bin/bandersnatch mirror

Para centralizar tudo em uma única pasta optei por fazer dois links simbolicos. Primeiro para o arquivo de configuração, localizado na pasta /etc/ e outro para a pasta onde a aplicação guarda os pacotes baixados.
# sudo mv /etc/bandersnatch.conf bin/
# sudo ln -s bin/bandersnatch.conf /etc/bandersnatch.conf
# sudo mv /srv/pypi .
# ln -s pypi/ /srv/pypi


Repositorio CentOS (Reposync)

Para montar o repositorio offline para CentOS vamos precisar de dois pacotes.
# sudo apt-get install yum-utils createrepo

Vamos precisar de um link simbolico para que os comandos adiantes funcionem corretamente. Afinal, não estamos no CentOS e sim no Ubuntu Server 1404.
# sudo ln -s /etc/yum/yum.conf /etc/yum.conf

Monte o cdrom do centos no qual você quer fazer o repositorio e copie todo conteudo da pasta package da media para dentro de um diretorio de sua escolha, optei pelo nome: centos/6.5. Importante lembrar que precisamos que ele seja dentro da pasta root do seu webserver. (como é possível perceber usei /var/www/html, lembre-se que o default do nginx é: /usr/share/nginx/html)
# sudo cp -R /media/cdrom/Packages /var/www/html/centos/6.5/

Precisamos do arquivo comps.xml que está dentro da media, copie para a pasta junto aos pacotes.
# sudo cp /media/cdrom/repodata/*comps*.xml /var/www/html/centos/6.5/Packages/comps.xml

De dentro da pasta do repositorio rode o comando createrepo para gerar o indice
# sudo createrepo -g Packages/comps.xml .

Repositorio está feito! Os CentOS que forem utilizar esse repositorio vão precisar de um arquivo .repo personalizado. Pois bem, o conteudo dele deve ser:

[DEPED_REPO]
name=Repositorio DEPED
baseurl=http://192.168.10.38/centos/6.5/
gpgcheck=0
enabled=1

Repositorio Ubuntu (apt-cacher)

Optei pelo apt-cacher ao invés do apt-mirror, porque ele faz o download sob demanda. Ou seja, o servidor de repositorio só vai buscar somente os pacotes de ubuntu que forem solicitados. Toda vez que uma outra maquina solicitar o mesmo pacote, ele não baixa duas vezes, ele utiliza o cache local. O apt-mirror faz o download do repositorio todo, isso consome muito mais espaço em disco.

# apt-get install apt-cacher

Acesse o apt-cacher.conf e vamos configurar algumas opções:

# vim /etc/apt-cacher/apt-cacher.conf
cache_dir = /var/cache/apt-cacher
log_dir = /var/log/apt-cacher
daemon_port = 3142
group = www-data
user = www-data
allowed_hosts = *


Nas maquinas clientes, vamos precisar alterar o sources.list.

# vim /etc/apt/sources.list

Coloque antes de todas as linhas uteis do arquivo o endereço ip:porta/apt-cacher do nosso servidor. Ex:

0 comentários: