Como criar e configurar um repositório local Centos

Criar um repositório local pode ser útil por diversos motivos como por exemplo:

• Rede isolada
Você tem uma rede isolada porém quer manter os servidores atualizados.

• Segurança
Para alguns servidores críticos da empresa, por exemplo ambientes sob na norma PCI (ambientes de pagamento), a rede precisa ser isolada por questões de segurança, os servidores não podem ter acesso a internet, neste caso um repositório local é a solução.
PCI são normas de segurança aplicadas a ambientes de tecnologia.

• Velocidade
Baixar de uma rede local quase sempre será mais rápido que baixar da internet. Hoje em dia todos nós queremos fazer um deploy mais rápido, criar uma VM mais rápido, criar um container mais rápido, um processo de Bootstrap mais rápido, enfim para todos estes casos um repositório local será interessante.

• Economia de banda
Além de baixar os pacotes mais rápido, você não vai gastar banda de internet, já que seus servidores não vão precisar buscar lá fora os pacotes.

• Criação de pacotes localmente
Pode ser que na sua empresa vocês mesmos criam seus pacotes, é muito comum isto, você baixa um pacote qualquer, modifica o conteúdo e empacota novamente, após isto você manda para o repositório local. Ou então cria um pacote do zero e envia para o repositório.

Pré-requisitos

Centos 7 – 64 bits – atualizado – instalação mínima.
Web Server: Apache ou Nginx.

Como criar e configurar um repositório local Centos

O conceito aplicado aqui também pode ser utilizado em ambientes Debian/Ubuntu.

Domínio teste: repo.devopslab.com.br

Crie uma pasta para o armazenamento dos pacotes “.rpm”

#mkdir -p /var/www/html/repo/CentOS/7/os
#mkdir -p /var/www/html/repo/CentOS/7/updates

Instale o pacote createrepo

#yum install createrepo -y

Inicialize o repositório

#createrepo  /var/www/html/repo/CentOS/7/

[root@repo-01 ~]# createrepo  /var/www/html/repo/CentOS/7/
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

Sincronização dos pacotes
Vamos sincronizar um repositório público CentOS com nosso repositório local.

Escolha um espelho próximo a sua localidade, escolha aquele que você consiga uma boa velocidade de download.

https://www.centos.org/download/mirrors/
http://mirror-status.centos.org/

No meu caso vou baixar do espelho rsync://linorg.usp.br/CentOS

Quando você abrir a url via navegador existirão várias pastas, como isos, extras, centosplus e etc. Nós não precisamos de nada disto para manter um ambiente atualizado, sendo assim vou sincronizar apenas a pasta “os” e “updates”.
*Antes de prosseguir veja dica no final deste tutorial.

#rsync -avz rsync://linorg.usp.br/CentOS/7/os/ /var/www/html/repo/CentOS/7/os
#rsync -avz rsync://linorg.usp.br/CentOS/7/updates/ /var/www/html/repo/CentOS/7/updates

Este primeiro sync vai demorar pois serão baixados todos os arquivos do repositório, mas no próximo processo de sincronização será baixado apenas o que foi modificado ou novos pacotes. O Rsync é inteligente e verifica e baixa apenas as alterações.

Update do repositório
Após você sincronizar o repositório local será preciso atualizar a lista de pacotes do repositório.

#createrepo --update /var/www/html/repo/CentOS/7/

Web Server
Você precisa subir um web server, pode ser um Apache ou Nginx ou qualquer um de sua preferência.

Instalação do Nginx
Repositório EPEL.

#rpm -hiv http://mirror.globo.com/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

Instalação

#yum install nginx –y

Altere a pasta raiz para “/var/www/html” e adicione “autoindex on”

#vi /etc/nginx/nginx.conf

root         /var/www/html;
autoindex 		on;

Restart do Nginx e ativação.

#systemctl restart nginx
#systemctl enable nginx

Liberação do Firewall

 
#firewall-cmd --permanent --add-service http
#systemctl reload firewalld

Configuração dos clientes
Antes limpe a pasta “yum.repos.d”, então mova todos os arquivos “.repo” para outra pasta e crie um novo repositório.

#mv -v /etc/yum.repos.d/*.repo ~
#vi /etc/yum.repos.d/meurepositorio.repo
[os-devopslab]
name=Repositorio Base - DevOpsLab
baseurl=http://repo.devopslab.com.br/repo/CentOS/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[updates-devopslab]
name=Repositorio Upadates - DevOpsLab
baseurl=http://repo.devopslab.com.br/repo/CentOS/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

Substitua o domínio “repo.devopslab.com.br” pelo seu ip ou domínio.

Verificação do repositório.

#yum clean all
#yum repolist all

[root@client-01 ~]# yum repolist all
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id                                       repo name                                           status
os-devopslab/7/x86_64                         Repositorio Base - DevOpsLab                        enabled: 9,007
updates-devopslab/7/x86_64                    Repositorio Upadates - DevOpsLab                    enabled:   826
repolist: 9,833

Verificação de um pacote.

[root@client-01 ~]# yum info PyYAML
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Available Packages
Name        : PyYAML
Arch        : x86_64
Version     : 3.10
Release     : 11.el7
Size        : 153 k
Repo        : os-devopslab/7/x86_64
Summary     : YAML parser and emitter for Python
URL         : http://pyyaml.org/
License     : MIT
Description : YAML is a data serialization format designed for human readability and
            : interaction with scripting languages.  PyYAML is a YAML parser and
            : emitter for Python.

Instalação de um pacote.

[root@client-01 ~]# yum install PyYAML
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package PyYAML.x86_64 0:3.10-11.el7 will be installed
--> Processing Dependency: libyaml-0.so.2()(64bit) for package: PyYAML-3.10-11.el7.x86_64
--> Running transaction check
---> Package libyaml.x86_64 0:0.1.4-11.el7_0 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================================================
 Package                Arch                  Version                         Repository                   Size
================================================================================================================
Installing:
 PyYAML                 x86_64                3.10-11.el7                     os-devopslab                153 k
Installing for dependencies:
 libyaml                x86_64                0.1.4-11.el7_0                  os-devopslab                 55 k
Transaction Summary
================================================================================================================
Install  1 Package (+1 Dependent package)
Total size: 208 k
Total download size: 55 k
Installed size: 760 k
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
libyaml-0.1.4-11.el7_0.x86_64.rpm                                                        |  55 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : libyaml-0.1.4-11.el7_0.x86_64                                                                1/2 
  Installing : PyYAML-3.10-11.el7.x86_64                                                                    2/2 
  Verifying  : libyaml-0.1.4-11.el7_0.x86_64                                                                1/2 
  Verifying  : PyYAML-3.10-11.el7.x86_64                                                         2/2 
Installed:
  PyYAML.x86_64 0:3.10-11.el7                                                                                   
Dependency Installed:
  libyaml.x86_64 0:0.1.4-11.el7_0                                                                               
Complete!

Atualização dos repositórios.
Deixe o repositório sempre atualizado, então faça um script de atualização.
Uma atualização semanal é suficiente.

#vi /root/reposync.sh

#!/bin/bash
rsync -az rsync://linorg.usp.br/CentOS/7/os/ /var/www/html/repo/CentOS/7/os
rsync -az rsync://linorg.usp.br/CentOS/7/updates/ /var/www/html/repo/CentOS/7/updates
createrepo --update /var/www/html/repo/CentOS/7/
#Permissão de execução
chmod +x /root/reposync.sh

#Cron
crontan –l
00 03 * * 6 /root/reposync.sh

O Cron vai rodar todo sábado as 3 horas da madrugada.

*Dica
É possível otimizar ainda mais a sincronização.
Mesmo sincronizando apenas as pastas “os” e “updates” ainda é possível eliminar alguns pacotes desnecessários como segue no rsync abaixo.

rsync -avz --exclude=LiveOS --exclude=images --exclude=EFI --exclude=isolinux rsync://linorg.usp.br/CentOS/7/os/ /var/www/html/repo/CentOS/7/os

Qualquer dúvida, correção e sugestão fique à vontade.

4 comentários sobre “Como criar e configurar um repositório local Centos

  1. Muito bom o tutorial!
    Dica:
    1-Recomendo desligar o firewall, pois pode voltar com o reboot da maquina.
    2-Pode fazer em ftp também, é a mesma coisa.

    Parabéns pelo post!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *