Linux Servidor linux

Criando e atualizando um repositório local no CentOS 7

Criando e atualizando um repositório local no CentOS 7

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.

O que é um repositório

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.

Vantagens

Entre as vantagens de se ter um repositório local podemos destacar:

  • Economia no uso do link da Internet, já que as máquinas clientes irão baixar do servidor local.
  • Instalação é atualização de máquinas que não tenham acesso a Internet.
  • Criação de repositório com pacotes personalizados, imagina que você cria seus próprios pacotes e deseja que eles fiquem disponíveis para instalação pelas demais máquinas da rede, com o repositório local fica mais simples.

Preparando ambiente do servidor

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!

Criando o 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:

Repositório local no CentOS

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:

Repositório local no CentOS

Após criar, sincronizar e gerar os metadados para o Yum, devemos disponibilizá-los para acesso pela rede!

Configurando o Nginx

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.

Repositório local no CentOS

Sincronizando repositórios automaticamente

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

Repositório local no CentOS

Ufa! Finalizamos a configuração do nosso servidor como repositório de pacotes.

Preparando ambiente do cliente

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

Repositório local no CentOS

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:

Repositório local no CentOS

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

comments powered by Disqus

Assine nossa Newsletter! 🐧

Se una com os assinantes de nossa Newsletter, sempre que tiver postagem nova você será notificado.