Que tal mantermos um repositório de pacotes do CentOS 7 na nossa rede local, assim teremos sempre disponível no nosso ambiente pacotes para instalação e atualização de máquinas com CentOS.
Repositório é um local para armazenar arquivos que permite manter pacotes de software, onde usuários podem baixar e instalar em suas máquinas. O Red Hat/CentOS mantém vários repositórios pela Internet que são utilizados na instalação e atualização de seus sistemas.
Vamos criar e manter um repositório de pacotes na rede local, com script automatizado que faz a sincronização dos pacotes locais com os repositórios da Internet. Também vamos configurar as máquinas com CentOS na nossa rede para buscar os pacotes do nosso repositório.
Entre as vantagens de se ter um repositório local podemos destacar:
Para nossos testes iremos utilizar duas máquinas com CentOS 7 com as seguintes configurações:
Máquina: Repositório
Host: repos [ repos.linuxnaweb.com ]
IP: 172.16.0.100
Máquina: Cliente
Host: centos [ centos.linuxnaweb.com ]
IP: 172.16.0.101
Primeiramente vamos fazer a atualizção dos pacotes do nosso ambiente:
# yum -y check-update
# yum -y update
Também precisamos fazer instalação de alguns pacotes necessários:
# yum -y install epel-release createrepo yum-utils vim tcpdump
epel-release: Pacotes adicionais para o CentOS/Red Hat.
createrepo: Ferramenta para criação de repositórios.
yum-utils: Ferramentas adicionais do yum.
vim: Editor de textos para terminal.
tcpdump: Ferramenta para análise de tráfego rede.
Para que nosso repositório funcione iremos desabilitar o SELinux:
# setenforce 0
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
Pronto, já podemos criar nosso repositório!
Precisamos criar a estrutura de pastas do nosso repositório com o comando abaixo:
# mkdir -pv /var/www/html/repos/centos/7/{base,centosplus,extras,updates,epel}
base: Pacotes que formam a base do CentOS.
centosplus: Pacotes adicionais que acrescentam funcionalidades de pacotes existentes.
extras: Pacotes adicionais que podem ser uteis.
updates: Pacotes de atualizações lançadas.
epel: Pacotes com diversos softwares.
Com os diretórios criados, já podemos sincronizar os repositórios para pastas, para isso execute os comandos abaixo, o processo é bem demorado, aproveite para dar uma olhadinha nos outros artigos no site 😉
# reposync -g -l -d -m -n --repoid=base --download-metadata --download_path=/var/www/html/repos/centos/7/
# reposync -g -l -d -m -n --repoid=centosplus --download-metadata --download_path=/var/www/html/repos/centos/7/
# reposync -g -l -d -m -n --repoid=extras --download-metadata --download_path=/var/www/html/repos/centos/7/
# reposync -g -l -d -m -n --repoid=updates --download-metadata --download_path=/var/www/html/repos/centos/7/
# reposync -g -l -d -m -n --repoid=epel --download-metadata --download_path=/var/www/html/repos/centos/7/
A saída dos comandos é semelhante a imagem abaixo:
Obs.: Os repositórios ocupam aproximadamente 30GB, lembre-se de deixar bastante espaço em disco para a partição /var. A sincronização dos arquivos irá demorar de acordo com a velocidade da sua Internet.
Após a sincronização dos arquivo, devemos inicializar os diretórios para disponibilizá-los para o Yum. O comando createrepo irá criar o arquivo repomd.xml das pastas.
O repomd.xml é um arquivo que contém metadados dos repositórios. Execute os comando abaixo, o processo pode demorar um pouco:
# createrepo -g comps.xml /var/www/html/repos/centos/7/base/
# createrepo /var/www/html/repos/centos/7/centosplus/
# createrepo /var/www/html/repos/centos/7/extras/
# createrepo /var/www/html/repos/centos/7/updates/
# createrepo -g comps.xml /var/www/html/repos/centos/7/epel/
A saída dos comandos é semelhante a imagem abaixo:
Após criar, sincronizar e gerar os metadados para o Yum, devemos disponibilizá-los para acesso pela rede!
Para acessar os repositórios que criamos, vamos instalar o servidor web Nginx. O Yum também aceita o protocolo FTP, mas pela facilidade e costume vamos subir um servidor Web mesmo.
Vamos instalar o Nginx com o seguinte comando:
# yum -y install nginx
Vamos configurar o Nginx para disponibilizar a pasta do repositório, criando o arquivo abaixo:
# vim /etc/nginx/conf.d/repos.conf
server {
listen 80;
server_name repos.linuxnaweb.com; # nome do server ou IP
root /var/www/html/repos/centos/7;
location / {
index index.php index.html index.htm;
autoindex on; # habilita a exibição dos arquivos na pasta
}
}
Iniciando o Nginx e habilitando ele para iniciar no boot do CentOS:
# systemctl start nginx
# systemctl enable nginx
Para finalizar precisamos liberar a porta 80 no firewall:
# firewall-cmd --zone=public --permanent --add-service=http
# firewall-cmd --reload
Tente acessar pelo browser. Você pode acessar pelo IP do seu servidor, como estou utilizando DNS na rede vou acessar pelo endereço repos.linuxnaweb.com. Pronto, nosso repositório já pode ser utilizado.
Com o tempo novos pacotes são criados e atualizados pelo pessoal responsável pelo CentOS, e para que você não tenha que ficar atualizando manualmente os pacotes, vamos criar um job no Cron para fazer isso automaticamente.
Você pode definir a execução do script por mês, por semana ou por dia, eu prefiro que seja executado diariamente então vamos criar o seguinte arquivo:
# vim /etc/cron.daily/update-repos
#!/bin/bash
REPOSITORY="/var/www/html/repos/centos/7"
DIRS="base* centosplus extras updates epel*"
for DIR in ${DIRS}; do
if [ "${DIR/'*'}" = "${DIR}" ] ; then
COMPS=""
else
DIR=${DIR//'*'}
COMPS="-g comps.xml "
fi
reposync -g -l -d -m -n --repoid=${DIR} --download-metadata --download_path=${REPOSITORY}
createrepo ${COMPS}${REPOSITORY}/${DIR}/
done
Obs.: Não vou explicar em detalhes o script, mas basicamente ele executa a sincronização em cada pasta do repositório
Para finalizar definimos a permissão de execução para o script:
# chmod -v 755 /etc/cron.daily/update-repos
Se quiser testar o script basta executar no terminal o script:
# /etc/cron.daily/update-repos
Ufa! Finalizamos a configuração do nosso servidor como repositório de pacotes.
Agora só falta configurar uma máquina cliente e testar se está tudo funcionando. Mas antes vamos faze o backup dos arquivos do repositório que vêm por padrão na instalação do CentOS:
# mkdir /root/repos
# mv -v /etc/yum.repos.d/* /root/repos
Após remover os scripts antigos, vamos criar o script com a indicação das pastas do nosso repositório local:
# vi /etc/yum.repos.d/CentOS-local.repo
[local-base]
name=CentOS Base
baseurl=http://repos.linuxnaweb.com/base/
gpgcheck=0
enabled=1
[local-centosplus]
name=CentOS CentOSPlus
baseurl=http://repos.linuxnaweb.com/centosplus/
gpgcheck=0
enabled=1
[local-extras]
name=CentOS Extras
baseurl=http://repos.linuxnaweb.com/extras/
gpgcheck=0
enabled=1
[local-updates]
name=CentOS Updates
baseurl=http://repos.linuxnaweb.com/updates/
gpgcheck=0
enabled=1
[local-epel]
name=CentOS Epel
baseurl=http://repos.linuxnaweb.com/epel/
gpgcheck=0
enabled=1
Obs.: Caso não tenha DNS na sua rede pode acrescentar o IP do seu servidor ao invés de repos.linuxnaweb.com.
Executando os comandos abaixo iremos limpar o cache do yum e recarregar os novos repositórios que criamos:
# yum clean all
# rm -rvf /var/cache/yum
# yum repolist all
Bem, para testar se a comunicação com o repositório está funcionando corretamente vamos instalar o pacote completo do vim, que não vem instalado por padrão no CentOS:
# yum -y install vim
No repositório podemos executar o tcpdump para verificar se o servidor está sendo acessado pela máquina cliente. Também podemos ver qual pacote ele está acessando:
OK, tudo funcionando \o/
Para maiores informações você podem consultar os seguintes sites:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/sec-configuring_yum_and_yum_repositories
https://linux.die.net/man/8/createrepo
https://linux.die.net/man/1/reposync
Se una com os assinantes de nossa Newsletter, sempre que tiver postagem nova você será notificado.