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.
Uma resposta