Bandersnatch + Reposync + Apt-Cacher
Autor: Pedro Viana | Publicado: 2015-12-25T12:18:00-02:00


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.&nbsp;



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

# bin/pip install -r
https://bitbucket.org/pypa/bandersnatch/raw/stable/requirements.txt




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


&nbsp;# 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: