Últimamente he estado aprendiendo a crear paquetes RPM y cuando ya tienes hechos unos cuantos es muy útil crearse un repositorio para instalarlos desde ahí. Para una empresa que tiene que gestionar muchas máquinas es una herramienta fundamental para distribuir versiones personalizadas o aplicaciones propias. Hay bastante documentación al respecto, yo he estado leyendo entradas como ésta.
Os cuento como he creado mi repositorio.
Cuento con dos máquinas, el servidor (un VPS en buyvm.net, os lo recomiendo) y mi máquina de trabajo. Los RPM ya los tengo generados, en otra entrada ya explicaré en más detalle como hacerlos.
Primero voy a crear toda la estructura en mi máquina.
$ mkdir -p /home/user/devel/repo #Este será el directorio raiz del repositorio $ cd /home/user/devel/repo $ mkdir -p Fedora/15/{i386,x86_64}/{os,debug} $ mkdir -p Fedora/15/source/SRPMS $ cp _<rpms>_ _<directorio donde les corresponda>_ #Los binarios en arch/os los src.rpm en source/SRPMS etc.
Ahora vamos a generar una clave GPG para firmar los RPM y la información del repositorio. $ gpg --gen-key #Creamos una clave RSA de 4096 bits (recomendado), le damos el nombre del repositorio. $ gpg --export _<nombre de la clave>_ > /home/user/devel/repo/RPM-GPG-KEY-myrepo #Exportamos la clave pública al repositorio
Añado las siguientes líneas a ~/.rpmmacros %_signature gpg %_gpg_name _<nombre de la clave del repositorio>_ Y firmo los paquetes con la clave: $ find /home/user/devel/repo -type f -name "*.rpm" | xargs rpm --resign Ahora solo nos queda crear la información del repositorio, para esto usaremos la herramienta createrepo. He creado el siguiente script en bash para automatizar el proceso:
#!/bin/bash
repodir="/home/user/devel/repo/Fedora/15"
archs="i386/os i386/debug x86_64/os x86_64/debug source/SRPMS"
# Actualizo la informacion del repositorio
for arch in $archs
do
pushd ${repodir}/${arch} >/dev/null 2>&1
createrepo -v .
popd >/dev/null 2>&1
done
# Firmo el repositorio
files=$(find $repodir -name repomd.xml)
for file in $files
do
echo "Firmo el archivo: $file"
if [ -f ${file}.asc ]; then
rm -f ${file}.asc
gpg --armor --detach-sign --default-key "<nombre de la clave del repositorio>" $file
fi
done
Ya tenemos el repositorio creado en nuestra máquina. Ahora vamos a replicarlo al servidor web, para ello crearemos la carpeta que alojará la web y lo sincronizaremos con rsync. Podemos crear un tarea cron que se ejecute cada hora para tenerlo siempre sincronizado o lanzarlo manualmente.
rsync -avz --rsh=ssh --delete /home/user/devel/repo/ user@server.example.com:/var/www/vhosts/rpm.server.example.com/repo/
Por último creamos el fichero myrepo.repo que describe nuestro repositorio y lo copiamos en /etc/yum.repos.d
[myrepo] name=My repository baseurl=http://server.example.com/repo/Fedora/15/$basearch/os enabled=1 gpgcheck=1 gpgkey=http://server.example.com/repo/RPM-GPG-KEY-myrepo.asc
[myrepo-debuginfo] name=My repository - Debug baseurl=http://server.example.com/repo/Fedora/15/$basearch/debug enabled=0 gpgcheck=1 gpgkey=http://server.example.com/repo/RPM-GPG-KEY-myrepo.asc
[myrepo-source] name=My repository - Source baseurl=http://server.example.com/repo/Fedora/15/source/SRPMS enabled=0 gpgcheck=1 gpgkey=http://server.example.com/repo/RPM-GPG-KEY-myrepo.asc