login
Sat 25 of Nov, 2017 (05:23 UTC)

[root@madeira.eng.br ~]#

Linux - It is now safe to turn on your computer

atualizar cache imprimir

Criando um repositório local para Yum

Criada por: Frederico Madeira, última modificação em: Wed 09 of Sep, 2009 (04:46 UTC)

1. Introdução


Um repositório local para o YUM pode ser algo bastante útil dependendo do tamanho da rede que você administre.

Imagine uma rede que possua 10 máquinas rodando o Fedora. Supondo que existam atualizações que totalizem 200Mb. Se cada uma das máquinas tiver que baixar estes pacotes de atualização, o tamanho total do download feito através de seu link será de 2 Gb podendo causar uma degradação neste link podendo impactar serviços mais nobres de sua rede.

Através deste artigo, você poderá criar um servidor centralizado para distribuir pacotes de atualização para suas máquinas linux baseadas em RPM e com suporte ao YUM. Apenas este servidor acessará a internet para buscar as atualizações, em horário preestabelecido, garantindo que seu link de internet esteja disponível durante os momentos mais críticos da operação de sua rede..

No tutorial a seguir, usaremos um servidor baseado no CentOS 5.3 e montaremos nele um repositório para o Fedora 11 x86_64 e i386.

2. Configurando o apache

Como o YUM fará acesso ao nosso servidor via http, precisaremos que o apache esteja rodando no servidor, para tanto é necessário que ele esteja instalado e configurado para ser inicializado no boot da máquina:

[root@matheus ~]# yum install httpd
[root@matheus ~]# chkconfig --level 35 httpd on
[root@matheus ~]# /etc/init.d/httpd start


Se tudo estiver correto, você deverá ver algo parecido com:
[root@matheus ~]# /etc/init.d/httpd status
O httpd (pid 6423 6422 6421 6420 6419 6418 6417 6416 3352) está a correr...


3. Construindo o Repositório

Agora que já temos o servidor web rodando, precisamos construir o repositório, para tanto precisamos do pacote createrepo.

[root@matheus ~]# yum install createrepo


Vamos manter os pacotes do repositório no seguinte diretório local:

/var/www/html/yum/base/11/i386 - Pacotes Base da distribuição i386
/var/www/html/yum/updates/11/i386 - Pacotes de atualização i386
/var/www/html/yum/base/11/x86_64 - Pacotes Base da distribuição x86_64
/var/www/html/yum/updates/11/x86_64 - Pacotes de atualização x86_64

Para tanto, vamos criá-los:

[root@matheus ~]# mkdir -p  /var/www/html/yum/base/11/i386
[root@matheus ~]# mkdir -p  /var/www/html/yum/updates/11/i386
[root@matheus ~]# mkdir -p  /var/www/html/yum/base/11/x86_64
[root@matheus ~]# mkdir -p  /var/www/html/yum/updates/11/x86_64


Agora será necessário copiar os pacotes para os diretórios correspondentes. No meu caso, usarei o arquivo de imagem baixado do site http://torrent.fedoraproject.org/.

Vamos montar as imagens e copiar os arquivos para a patas base de cada uma das arquiteturas.

I386:
[root@matheus ~]# mkdir -p /media/fedora11/i386
[root@matheus ~]# mount -t iso9660 -o loop /opt/Fedora-11-i386-DVD.iso /media/fedora11/i386/
[root@matheus ~]# cd /media/fedora11/i386/Packages/
[root@matheus ~]# cp  -v  * /var/www/html/yum/base/11/i386/


X86_64:
[root@matheus ~]# mkdir -p /media/fedora11/x86_64
[root@matheus ~]# mount -t iso9660 -o loop /opt/Fedora-11-x86_64-DVD.iso /media/fedora11/x86_64/
[root@matheus ~]# cd /media/fedora11/x86_64/Packages/
[root@matheus ~]# cp  -v  * /var/www/html/yum/base/11/x86_64/


Agora estamos prontos para criar o repositório. Vamos usar o comando createrepo.

[root@matheus ~]# createrepo /var/www/html/yum/base/11/x86_64
2871/2871 - oprofile-0.9.4-6.fc11.x86_64.rpm                                    
Saving Primary metadata
Saving file lists metadata
Saving other metadata

[root@matheus ~]# createrepo /var/www/html/yum/base/11/i386
2871/2871 - oprofile-0.9.4-6.fc11.x86.rpm                                    
Saving Primary metadata
Saving file lists metadata
Saving other metadata


Será criada uma pasta chamada repodata cujo conteúdo deverá ser:

[root@matheus repodata]# ls -allh /var/www/html/yum/base/11/x86_64/repodata/
total 15M
drwxr-xr-x 2 root root 4,0K Set  8 23:56 .
drwxr-xr-x 3 root root 196K Set  8 23:56 ..
-rw-r--r-- 1 root root 2,5M Set  8 23:56 filelists.xml.gz
-rw-r--r-- 1 root root  11M Set  8 23:56 other.xml.gz
-rw-r--r-- 1 root root 1,1M Set  8 23:56 primary.xml.gz
-rw-r--r-- 1 root root  951 Set  8 23:56 repomd.xml


Podemos agora preencher os pacotes do repositório updates, para tanto, precisaremos escolher um mirror para realizar a sincronização.
Acesse http://mirrors.fedoraproject.org/publiclist/Fedora/11/ e escolha o mirror mais próximo de você.

Para atualizar sua pasta updates com os pacotes mais recentes, vamos utilizar o rsync:

[root@matheus ~]# rsync -avrt rsync://fedora.c3sl.ufpr.br/fedora/linux/updates/11/x86_64/ --exclude=debug/ /var/www/html/yum/updates/11/x86_64


[root@matheus ~]# rsync -avrt rsync://fedora.c3sl.ufpr.br/fedora/linux/updates/11/i386/ --exclude=debug/ /var/www/html/yum/updates/11/i386


A partir deste momento, iniciará a sincronização do repositório remoto com o local.

4. Configurando atualização periódica


O nosso repositório local precisa estar sempre atualizado, para tanto, vamos configurar um job no crontab para que diariamente as 01:00 da manhã ele inicie uma nova sincronização do pacotes x86_64 e as 02:00 dos pacotes i386 (este intervalo pode ser reduzido de acordo com a capacidade de seu link)

[root@matheus ~]# crontab -e


No arquivo que será aberto, insira as seguintes linhas:

00 01 * * * /usr/bin/rsync -avrt rsync://fedora.c3sl.ufpr.br/fedora/linux/updates/11/x86_64/ --exclude=debug/ /var/www/html/yum/updates/11/x86_64
00 02 * * * /usr/bin/rsync -avrt rsync://fedora.c3sl.ufpr.br/fedora/linux/updates/11/i386/ --exclude=debug/ /var/www/html/yum/updates/11/i386
00 04 * * * /usr/bin/createrepo --update /var/www/html/yum/updates/11/x86_64
00 04 * * * /usr/bin/createrepo --update /var/www/html/yum/updates/11/i386


As duas últimas linhas irão atualizar os dados do repositório com os novos pacotes baixados. Para repositórios com uma grande quantidade de pacotes e pouca atualização de seus pacotes, o uso da opção --update reduz significativamente o uso de I/O uma vez que ele apenas atualizará o metadata existente.

5. Configurações no Cliente


Uma vez configurado o servidor, será necessário configurarmos todos os clientes para que passem a utilizar o servidor local ao invés de utilizarem os servidores externos.
Os arquivos de repositório de yum ficam localizados em /etc/yum.repos.d/. Edite todos os arquivos existentes neste diretório, procure pelas linhas enabled=1 e substitua por enabled=0. Esta configuração está desabilitando os repositórios externos no cliente.

[root@localhost ~]# cd /etc/yum.repos.d
[root@localhost yum.repos.d]# vi fedora.repo 
[fedora]
name=Fedora $releasever - $basearch
failovermethod=priority
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
enabled=1
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch


Após a alteração o arquivo ficará desta forma:

[fedora]
name=Fedora $releasever - $basearch
failovermethod=priority
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
enabled=0
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch


Refaça este processo para todos os arquivos do diretório.

Agora vamos criar as configurações do nosso repositório local:

[root@localhost yum.repos.d]# vi local.repo
[base-local]
name=Fedora $releasever - $basearch
baseurl=http://192.168.15.100/yum/base/$releasever/$basearch
enabled=1
gpgcheck=0

[updates-local]
name=Fedora $releasever - $basearch - Updates
baseurl=http://192.168.15.100/yum/updates/$releasever/$basearch/
enabled=1
gpgcheck=0


Substitua o IP acima pelo endereço IP do seu servidor local (no meu caso, o meu servidor possui o IP 192.168.15.100)

6. Testando


Vamos fazer algumas consultas a nossos repositórios locais:

[root@localhost etc]# yum search k3b
======= Matched: k3b ===================================================
k3b.x86_64 : CD/DVD burning application
k3b-extras-freeworld.x86_64 : Additional codec plugins for the k3b CD/DVD burning application
k3b-libs.i586 : Runtime libraries for k3b
k3b-libs.x86_64 : Runtime libraries for k3b

[root@localhost etc]# yum search unzip
Plugins carregados: dellsysidplugin2, refresh-packagekit
======= Matched: unzip ===================================================
unzip.x86_64 : Um utilitário para desempacotar arquivos zip


Se você obteve pacotes com os comandos acima, parabéns o seu repositório local está funcionando.

Vamos agora testar a instalação de um pacote:

[root@localhost etc]# yum install reiserfs-utils
Plugins carregados: dellsysidplugin2, refresh-packagekit
Configurando o processo de instalação
Resolvendo dependências
--> Executando verificação da transação
---> Pacote reiserfs-utils.x86_64 2:3.6.21-1.fc11 definido para ser atualizado
--> Resolução de dependências finalizada


7. Consideracões Finais


Se seu servidor estiver rodando um firewall ou ainda o selinux, será necessário reconfigurá-lo de forma que possa permitir este novo tipo de tráfego.

Desabilite o Firewall

[root@matheus yum]# /etc/init.d/iptables stop
A limpar as regras de 'firewall':                          [  OK  ]
A definir as sequências para a política ACCEPT: nat filter [  OK  ]
A desactivar os módulos do iptables:                       [  OK  ]


Ou adicione a seguinte regra no seu arquivo de firewall para liberar este tráfego.

iptables -A INPUT -s 192.168.15.0/24 -p tcp --dport 80 -j ACCEPT
iptables -O OUTPUT -d 192.168.15.0/24 -p tcp --sport 80 -j ACCEPT


Desabilite o SElinux

[root@matheus yum]# setenforce 0

ou edite o arquivo /etc/sysconfig/selinux e troque o parâmetro SELINUX=enforcing para SELINUX=disabled


Comentários