Dot Sharp Consulting

Como Criar Um Repositório Local para o YUM

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 <fedora@redhat.com>"
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.

Autor

Rodrigo Luis Silva é especialista em sistemas GNU/Linux com ampla experiência em diversas áreas, trabalha a mais de seis anos focado em desvendar os diversos recursos existentes nesse sistema operacional.

Todos os textos disponiveis no site tem como objetivo mostrar casos praticos de uso, não nos responsabilizamos de forma alguma por problemas causados pelo mau uso das informações.
Valid CSS! Valid XHTML 1.1