objetivo

Abordar criação de mirror de pacotes CENTOS e EPEL para uso local na rede com objetivo de agilizar instalação, atualização e economizar banda de internet.

centos

CENTOS é um distro baseada no RHEL (Red Hat Enterprise Linux), ela é montada a partir os pacotes SRPM das distros entreprise da RH, a compatibilidade com software e recursos homologados para RHEL é 100%.

ELPEL significa 'Extra Packages for Enterprise Linux', é um repositório de pacotes mantido pelo projeto FEDORA com foco em pacotes para rodar em distros ENTERPRISE.

Aqui vamos abordar a criação de mirrors CENTOS e EPEL (fedora project).

Para obter a lista de mirrors CENTOS, acesse:

Para obter a lista de mirror EPEL, acesse

criando mirror

Temos 3 protocolos disponíveis que nos permitem fazer o mirror de repositórios de pacotes, FTP, HTTP e RSYNC.

Devido as caraterística e recursos do RSYNC, escolhi este protocolo para buscar os pacotes e manter o repositório atualizado.

centos

primeiro vamos criar o diretorio e o arquivo.

mkdir /srv/mirror
touch /srv/mirror/mirror-centos.sh
chmod 700 /srv/mirror/mirror-centos.sh

Abaixo o script RSYNC para mirror de pacotes CENTOS.

vim /srv/mirror/mirror-centos.sh
#!/bin/bash

LOCKFILE="/var/lock/subsys/rsync_updates"
CENTOSDIR="/srv/mirror/centos"
MIRROR="rsync://mirror.steadfast.net/centos/6.2"

if [ -f $LOCKFILE ]; then
    echo "Updates via rsync already running."
    exit 0
else
	if [ -d $CENTOSDIR ] ; then
	   touch $LOCKFILE
           rsync -avSHP $MIRROR --delete --exclude 'local*' --exclude isos $CENTOSDIR
	   rm -f $LOCKFILE
	else
	    echo "Target directory $CENTOSDIR not present."
	fi
fi
:wq

para atender a estrutura do script, vamos criar um subdir.

mkdir -p /srv/mirror/centos

epel

Abaixo o script para fazer mirror de pacotes EPEL.

touch /srv/mirror/mirror-epel.sh
chmod 700 /srv/mirror/mirror-epel.sh
vim /srv/mirror/mirror-epel.sh
#!/bin/bash

LOCKFILE="/var/lock/subsys/rsync_updates_epel"
EPELDIR="/srv/mirror/epel/centos/6"
MIRROR="rsync://fedora.mirror.nexicom.net/Fedora-EPEL/6/x86_64/"

if [ -f $LOCKFILE ]; then
    echo "Updates via rsync already running."
    exit 0
else
	if [ -d $EPELDIR ] ; then
	   touch $LOCKFILE
           rsync -avSHP $MIRROR --delete $EPELDIR/
	   rm -f $LOCKFILE
	else
	    echo "Target directory $EPELDIR not present."
	fi
fi
:wq

Para atender a estrutura do script vamos criar um subdir

mkdir -p /srv/mirror/epel/centos/6

crontab

Eu normalmente crio um terceiro script que chama os scripts de mirror e configuro um cron para rodar a cada 30 minutos após a primeira sincronização 'full'.

#!/bin/bash

/srv/mirror/mirror-centos.sh
/srv/mirror/mirror-epel.sh
:wq

E o agendamento do cron ficaria assim:

crontab -e
  */30 * * * * /srv/mirror/mirror.sh
:wq

configurando yum

repo local

yum local centos - base

No YUM vamos ajustar o arquivo CENTOS-BASE.REPO em /etc/yum.repo.d

vim /etc/yum.repod./CentOS-Base.repo
# base packages
[base]
name=CentOS-$releasever - Base
baseurl=http://mirror.empresa.df/centos/6.2/os/$basearch/
gpgcheck=0

#released updates
[update]
name=CentOS-$releasever - Updates
baseurl=http://mirror.empresa.df/centos/6.2/updates/$basearch/
gpgcheck=0

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirror.empresa.df/centos/6.2/extras/$basearch/
gpgcheck=0
enabled=0

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirror.empresa.df/centos/6.2/centosplus/$basearch/
enabled=0
gpgcheck=0

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
baseurl=http://mirror.empresa.df/centos/6.2/contrib/$basearch/
enabled=0
gpgcheck=0
:wq

extras, centosplus e contrib estao desativados, se quiser usar espefique no comando, veja o exemplo abaixo

yum --enablerepo=extras install pacote

yum local epel

vim /etc/yum.repo.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://mirror.detran.df/epel/centos/6/$basearch
gpgcheck=0
enabled=0
:wq

epel está desativado, se quiser usá-lo, especifique no comando, veja o exemplo abaixo

yum --enablerepo=epel install pacote

yum local file config

Os repositórios no YUM podem ser acessados via FTP, HTTP ou podemos utilizar a diretiva LOCAL caso esteja no própio disco do servidor, veja abaixo um exemplo desta configuração.

[base]
name=CentOS-$releasever - Base
baseurl=file:/share/CentOS/$releasever/os/$basearch/
gpgcheck=0

[updates]
name=CentOS-$releasever - Updates
baseurl=file:/share/CentOS/$releasever/updates/$basearch/
gpgcheck=0

[extras]
name=CentOS-$releasever - Extras
baseurl=file:/share/CentOS/$releasever/extras/$basearch/
gpgcheck=0

[centosplus]
name=CentOS-$releasever - Plus
baseurl=file:/share/CentOS/$releasever/centosplus/$basearch/
exclude=kernel*
gpgcheck=0
protect=0

[contrib]
name=CentOS-$releasever - Contrib
baseurl=file:/share/CentOS/$releasever/contrib/$basearch/
gpgcheck=0
gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
protect=0

yum remote

apenas para referência, coloco abaixo as configurações de YUM para repos externos

yum remote base

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
exclude=postgresql*

#released updates 
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
exclude=postgresql*

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

yum remote epel

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 6 - $basearch - Debug
baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 6 - $basearch - Source
baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1

configurando httpd

considerando que você já tem o apache2 instalado e funcionando, com porta 80 liberada na firewall e selinux desligado.

cd /etc/httpd/conf.d

crie um arquivo chamado mirror.conf com o conteúdo abaixo

mirror.conf
#
# repositorio
#
 
Alias /mirror /srv/mirror
 
<Directory /srv/mirror>
	Options Indexes
	AllowOverride none
	Order Allow,Deny
	Allow from all
</Directory>
 
<VirtualHost *:80>
    ServerAdmin jose.carvalho@empresa.df.gov.br
    DocumentRoot /srv/mirror
    ServerName mirror.empresa.df
    ErrorLog logs/mirror.empresa.df-error.log
    CustomLog logs/mirror.empresa.df-common common
 
	<Directory /srv/mirror>
	Options Indexes
	AllowOverride none
	Order allow,deny
	Allow from all
	</Directory>
 
</VirtualHost>

reinicie o apache2

service httpd restart

problemas conhecidos

repodata

se voce fizer o mirror usando rsync, pode ser que não que alguma fonte nao tenha os diretório repodata, que contem os indices do repositorio, necessários para o yum saber quais sao os pacotes disponíveis.

http://nas1.itc.virginia.edu/fedora-epel/5/x86_64/repodata/bd1da...-primary.sqlite.bz2: 
[Errno 14] HTTP Error 404: Not Found

Se isso ocorrer voce pode gerar os indices manualmente, como faco abaixo

createrepo /srv/mirror/epel/centos/6/x86_64

Isso vai gerar o indice dos pacotes que voce baixou e vai permitir que você use o mirror.

referências



centos_criando_repositorio_local_de_pacotes.txt · Last modified: 2012/03/28 18:38 by gutocarvalho
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0