Como Criar Um Repositório Local para o YUM

Como faezr para criar um repositório na sua rede local para o YUM e reduzir o consumo de banda da Internet.

O que é o YUM?

YUM significa Yellow dog Updater, Modified, trata-se de um software desenvolvido pela Duke University para ser um instalador, atualizador e removedor de pacotes RPM, semelhante ao apt-get do Debian.

Ele trata automaticamente as dependências de arquivos não sendo necessário ficar buscando e instalando as dependências manualmente, lógico que para ele fazer tudo sozinho todas as dependências tem que estar nos repositórios configurados na maquina

Mais informações em:

http://linux.duke.edu/projects/yum/

http://pt.wikipedia.org/wiki/Yum

http://fedora.redhat.com/docs/yum/pt_BR/

Porque usar o YUM?

O YUM é um sistema totalmente automatizado de instalação com diversos recursos e opções, por exemplo, para instalar o kde-network em uma maquina sem ambiente gráfico.

#yum install kdenetwork
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
......
CORTADO
......
Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 kdenetwork              i386       7:3.5.2-0.1.fc4  my-updates         10 M
Installing for dependencies:
 arts                    i386       8:1.5.2-0.1.fc4  my-updates        1.1 M
 cdparanoia-libs         i386       alpha9.8-25      my-base            44 k
 desktop-backgrounds-basic  noarch     2.0-29           my-base           2.6 M
 fonts-xorg-base         noarch     6.8.2-1          my-base           7.3 M
 kdebase                 i386       6:3.5.2-0.1.fc4  my-updates         28 M
 kdelibs                 i386       6:3.5.2-0.1.fc4  my-updates         18 M
 libraw1394              i386       1.2.0-1.fc4      my-updates         37 k
 redhat-artwork          i386       0.122-10         my-base           4.6 M
 samba-common            i386       3.0.14a-2        my-base           5.7 M
 xinitrc                 noarch     4.0.18.1-1       my-updates         28 k
 xorg-x11                i386       6.8.2-37.FC4.49.2.1  my-updates         14 M
 xorg-x11-xauth          i386       6.8.2-37.FC4.49.2.1  my-updates        102 k
 xorg-x11-xdm            i386       6.8.2-37.FC4.49.2.1  my-updates        171 k
 xterm                   i386       212-1.FC4        my-updates        195 k

Transaction Summary
=============================================================================
Install     15 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 92 M
Is this ok [y/N]:

O Yum automaticamente busca pelo pacote a kdenetwork e analisa todas as dependências dele e de todos pacotes relacionados a ele e mostra um resumo do que será feito, basta digitar y e teclar enter para iniciar o processo de download e instalação dos pacotes.

O YUM foi adicionado em substiução ao software Red Hat Network que foi usado até o Red Hat Linux 9, o RHN tinha varias restrições para criar repositórios locais, tinha que usar ferramentas como o NRH-up2date, essa ferramenta era muito boa, porém tinha varios detalhes para poder funcionar corretamente.

  • Então temos alguns motivos que nos levam a usar o YUM como instalador, send eles:
  • É padrão no Fedora Cora
  • É facil criar repositórios locais
  • Resolve todas as dependências sozinho
  • Pode ser usado para instalar softwares de CDs
  • Quando remove algum software usando o YUM ele tambem remove os pacotes que dependem do pacote a ser removido

Como instalar o YUM

Isso varia de versão para versão, nesse tutorial darei foco a distribuição Fedora Core 4.

Para as outras versões voce pode visitar o site http://download.fedoralegacy.org/ e baixar a versão do YUM para a sua distribuição.

Para todas as distribuições suportadas há um diretorio chamado legacy-utils/i386 que contém o RPM legacy-yumconf que deve ser instalado.

Por exemplo para instalar no Fedora Core 3 basta digitar:

#
# rpm -ivh http://download.fedoralegacy.org/fedora/3/legacy-utils/i386/legacy-yumconf-3-4.fc3.noarch.rpm
#

No Fedora Core esse utilizario já vem por padrão.

Sistema utilizados nos testes

Para os nossos testes vou usar a seguinte maquina:

#cat /proc/cpuinfo 

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 15
model           : 2
model name      : Intel(R) Pentium(R) 4 CPU 2.00GHz
stepping        : 4
cpu MHz         : 2000.459
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
bogomips        : 4007.65
#free

             total       used       free     shared    buffers     cached
Mem:        515624     506200       9424          0       8500      59072
-/+ buffers/cache:     438628      76996
Swap:      1020116     356600     663516
#cat /etc/fedora-release
Fedora Core release 4 (Stentz)

Preparando o ambiente do servidor

Softwares

Vamos precisar dos seguintes softwares instalados:

httpd

yum

createrepo

rsync

Todos podem ser encontrados no CD de instalação, mas acredito que você só precisa instalar o createrepo.

Diretórios

O Fedora Core é divido em diversas plataformas como i386, x64, etc, aqui vamos fazer tudo para i386 que é a mais comum, porém com poucas modificações você poderá fazer para qualquer plataforma.

Dentro do diretório de cada plataforma temos os seguinte subdiretórios:

base

updates

extras

No site do projeto encontramos a seguinte estrutura para o Fedora Core 4

http://download.fedora.redhat.com/pub/fedora/linux/core/4/i386/os/Fedora/RPMS/

http://download.fedora.redhat.com/pub/fedora/linux/core/updates/4/i386/

http://download.fedora.redhat.com/pub/fedora/linux/extras/4/i386/

Para o nosso repositório local irei usar uma estrutura um pouco diferente, fica a seu critério usar a estrutura proposta ou criar a sua, o importante e entender o funcionamento, dai em diante fica facil.

#mkdir /var/www/html/linux
#mkdir /var/www/html/linux/fedora
#mkdir /var/www/html/linux/fedora/4
#mkdir /var/www/html/linux/fedora/4/i386
#mkdir /var/www/html/linux/fedora/4/i386/base
#mkdir /var/www/html/linux/fedora/4/i386/updates
#mkdir /var/www/html/linux/fedora/4/i386/extras

ou mais simples e com o mesmo resultado

#mkdir /var/www/html/linux/fedora/4/i386/{base,updates,extras}

Agora temos os três diretórios que irão armazenar o conteúdo do nosso repositório, agora vamos alimentar o primeiro, esse nada mais é do que a copia completa de todos os RPMs dos CDs da distribuição, para fazer isso coloque o primeiro cd na unidade de siga os passos abaixo:

#mount /media/cdrom
#cp -iav /media/cdrom/Fedora/RPMS/* /var/www/html/linux/fedora/4/i386/base
#umount /media/cdrom

Agora é só repetir os passos para os outros CDs.

Quando terminar de copiar os arquivos do cd é necessarios criar a lista dos arquivos, essa lista é lida pelo yum quando ele busca pelas atualizações, para fazer isso execute o comando abaixo.

#createrepo /var/www/html/linux/fedora/4/i386/base
2185/2185 - xorg-x11-server-Xnest-1.0.1-8.i386.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata

Após excutar esse comando será criado um diretório chamado repodata com os seguintes arquivos:

filelists.xml.gz

other.xml.gz

primary.xml.gz

repomd.xml

A grosso modo esse arquivos contém todas as informações retornardas pelo comando rpm -qif, só que gravadas em formato XML, o yum quando busca por algum pacote checa se esses arquivos foram alterados e baixa para um cache local para poder consultar se o pacote existe no repositório.

Os diretório updates e extras darão um pouco mais detrabalho visto que eles precisam ser baixados da web e mantidos sincronizados, no próximo topico iremos detalhar a criação dos scripts para fazer essa atualização.

Ao total iremos precisar de 8Gb para um repositório completo para Fedora Cora 4 e 10Gb para o Fedora Core 5, abaixo o resumo do meu repotório.

# du -h --max-depth=1 4/i386/
2.3G    4/i386/updates
2.4G    4/i386/base
3.1G    4/i386/extras
7.6G    4/i386/

# du -h --max-depth=1 5/i386/
2.9G    5/i386/base
4.0G    5/i386/extras
3.1G    5/i386/updates
9.9G    5/i386/

Sincronizando as atualizações

O script abaixo sincroniza todas as atualizações do Fedora Core 4.

rsync \
  --verbose \
  --progress \
  --exclude=debug \
  --exclude=repodata \
  --compress \
  --delete \
  --delete-excluded \
  --archive \
  rsync://mirrors.kernel.org/fedora/core/updates/4/i386/ \
  /var/www/html/linux/fedora/4/i386/updates

Agora temos que criar o indice dos arquivos usando o createrepo

createrepo /var/www/html/linux/fedora/4/i386/updates

Para sincronizar os extras uso o seguinte comando:

rsync \
  --verbose \
  --progress \
  --exclude=debug \
  --exclude=repodata \
  --exclude=headers \
  --compress \
  --delete \
  --delete-excluded \
  --archive \
  rsync://mirrors.kernel.org/fedora/extras/4/i386/ \
  /var/www/html/linux/fedora/4/i386/extras

Mais uma vez vamos criar o indice dos arquivos

createrepo /var/www/html/linux/fedora/4/i386/extras

Todos os extras dão um total de 3Gb, os extras nem sempre são necessários, eu gosto de mante-los localmente devido a grande quantidade de pacotes, por exemplo, xmms, zope, clamav e um monte de coisas que não estão na distribuição oficial.

Detalhe da opções usadas:

     --verbose = Mostra detalhes da operação na tela
     --progress = Mostra o progresso do download de cada arquivo
     --exclude = Diretorios ou arquivos que não devem ser sincronizados
     --compress = Usar compressão de dados
     --delete --delete-excluded = Remove arquivos que não existem mais no servidor
     --archive = Agrupamentos da opções -rlptgoD
     -r = Recursivo
     -l = Copia links simbolicos
     -p = Mantém as permissoes dos arquivos
     -t = Mantém as datas de modificações dos arquivos
     -g = Mantém os grupos
     -o = Mantém o dono
     -D =  Mesmo que --devices --specials
     --devices = Preserva arquivos de dispositivos
     --specials = Preserva arquivos especiais

Mais informações sobre os pacotes extras podem ser obtidas em http://fedoraproject.org/wiki/Extras

Um detalhe importate sobre o indice dos arquivos criados, você pode baixar o diretório repodata junto com todos os outros RPMs, eu não gosto de fazer isso mas se você quiser basta tirar o –exclude=repodata do comando rsync, agora porque eu não faço isso?

Por dois motivos simples, primeiro é que eu não faço o download do diretorio debug, acho desnecessário ter informações sobre debug de pacotes, sem falar que é grande pra caramba, o outro motivo está relacionado ao primeiro, é importante que o seu índice informe o que realmente tem no seu repositório e somente criando ele do zero para ter essa certeza.

Outra coisa que você não pode esquecer e que você vai ter que criar o indice toda vez que fizer o download, ou você vai receber uma mensagem igual a que está abaixo quando tentar atualizar alguma maquina.

Cannot open/read repomd.xml file for repository: my-updates
failure: repodata/repomd.xml from my-updates: [Errno 256] No more mirrors to try.
Error: failure: repodata/repomd.xml from my-updates: [Errno 256] No more mirrors to try.

Configurando

Agora falta pouco, basta configurar o Apache para prover os arquivos para o yum no cliente.

Servidor

#vi /etc/httpd/conf/httpd.conf
    <Directory "/var/www/html/linux/">
	    Options +Indexes
    </Directory>

No servidor basta essa pequena configuração para os clientes poderem navegar através dos diretorios usando um browser.

Cliente

O nome do arquivo pode ser qualquer um, bastando que tenho .repo no final

vi /etc/yum.repos.d/meu-repositorio.repo
[my-base]
name=Fedora Core(local) $releasever - $basearch - Base
baseurl=http://MEU-SERVIDOR/linux/fedora/$releasever/$basearch/base
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora

[my-updates]
name=Fedora Core(local) $releasever - $basearch - Released Updates
baseurl=http://MEU-SERVIDOR/linux/fedora/$releasever/$basearch/updates
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora

[my-extras]
name=Fedora Extras(local) $releasever - $basearch
baseurl=http://MEU-SERVIDOR/linux/fedora/$releasever/$basearch/extras
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-extras

Aonde está escrito MEU-SERVIDOR você deve colocar o endereço IP ou o nome do seu servidor.

Agora você deve desativar os repositórios que vem junto com a distribuição editando os arquivos:

/etc/yum.repos.d/fedora-extras.repo

/etc/yum.repos.d/fedora.repo

/etc/yum.repos.d/fedora-updates.repo

Basta verificar os que estiverem com enable=1 e mudar para enable=0

Atualizando

Depois que tiver tudo pronto, o servidor sincronizado, basta digitar no cliente o comando

#yum update

O YUM irá buscar por pacotes que tenham atualizações necessarios no servidor, fará o download e instalação.

Na primeira execução será exebida uma mensagem como a que está abaixo

warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2
Public key for postgresql-libs-8.1.4-1.FC5.1.i386.rpm is not installed
Retrieving GPG key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
Importing GPG key 0x4F2A6FD2 "Fedora Project <[email protected]>"
Is this ok [y/N]:

Basta digitar y e presionar enter para instalar a chave GPG e continuar a atualização

Automatizando

Para que o YUM faça atualização do sistema todo dia basta executar o comando

chkconfig yum on
service yum start

Pronto, o primeiro comando configura o yum para iniciar automaticamente na inicialização e o segundo comando inicia o yum nesse momento.

Agora todo dia por volta das 04:00 o yum vai baixar e instalar todas as atualizações necessárias, sempre que algum pacote for atualizado o yum grava um log que é lido pelo logwatch e adiciona no email diario o seguinte trecho.

 --------------------- yum Begin ------------------------ 

 Packages Updated:
    rsync.i386 2.6.8-1.FC4

 ---------------------- yum End -------------------------

Você também pode usar o programa yum-repo-sync que eu criei para automatizar a tarefa de sincronização dos meus repositórios, mais informações acesse a página do programa.

Rodrigo Luis Silva

Gestor de equipes especialista em sistemas GNU/Linux com vasta experiência em gerenciamento de storage, virtualização, network, desenvolvimento e outros.

More Posts - Website

Follow Me:
Twitter

Deixe uma resposta

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

Home Linux Como Criar Um Repositório Local para o YUM