Capítulo 9. Gestión avanzada de repositorios YUM
A continuación se examinarán las herramientas nativas disponibles en Fedora destinadas a la gestión de los repositorios YUM.
9.1. Creación de repositorios con createrepo
En esta sección se creará un repositorio yum de ejemplo a partir de un conjunto de paquetes rpm. Antes es necesario instalar la herramienta createrepo.
# yum install createrepo
$ createrepo -h
Usage: genpkgmetadata.py [options]
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-q, --quiet output nothing except for serious errors
-v, --verbose output more debugging info.
--profile output timing/profile info.
-x EXCLUDES, --excludes=EXCLUDES
files to exclude
--basedir=BASEDIR basedir for path to directories
-u BASEURL, --baseurl=BASEURL
baseurl to append on all files
-g GROUPFILE, --groupfile=GROUPFILE
path to groupfile to include in metadata
-s SUMTYPE, --checksum=SUMTYPE
specify the checksum type to use (default: sha256)
-p, --pretty make sure all xml generated is formatted
-c CACHEDIR, --cachedir=CACHEDIR
set path to cache dir
-C, --checkts check timestamps on files vs the metadata to see if we
need to update
-d, --database create sqlite database files: now default, see --no-
database to disable
--no-database do not create sqlite dbs of metadata
--update use the existing repodata to speed up creation of new
--update-md-path=UPDATE_MD_PATH
use the existing repodata for --update from this path
--skip-stat skip the stat() call on a --update, assumes if the
filename is the same then the file is still the same
(only use this if you're fairly trusting or gullible)
--split generate split media
-i PKGLIST, --pkglist=PKGLIST
use only the files listed in this file from the
directory specified
-n INCLUDEPKG, --includepkg=INCLUDEPKG
add this pkg to the list - can be specified multiple
times
-o OUTPUTDIR, --outputdir=OUTPUTDIR
<dir> = optional directory to output to
-S, --skip-symlinks ignore symlinks of packages
--changelog-limit=CHANGELOG_LIMIT
only import the last N changelog entries
--unique-md-filenames
include the file's checksum in the filename, helps
with proxies
--simple-md-filenames
do not include the file's checksum in the filename,
helps with proxies
--retain-old-md=RETAIN_OLD_MD
keep around the latest (by timestamp) N copies of the
old repodata
--distro=DISTRO distro tag and optional cpeid:
--distro'cpeid,textname'
--content=CONTENT_TAGS
tags for the content in the repository
--repo=REPO_TAGS tags to describe the repository itself
--revision=REVISION user-specified revision for this repository
--deltas create delta rpms and metadata
--oldpackagedirs=OLDPACKAGE_PATHS
paths to look for older pkgs to delta against
--num-deltas=NUM_DELTAS
the number of older versions to make deltas against
--read-pkgs-list=READ_PKGS_LIST
output the paths to the pkgs actually read useful with
--update
--max-delta-rpm-size=MAX_DELTA_RPM_SIZE
max size of an rpm that to run deltarpm against (in
bytes)
--workers=WORKERS number of workers to spawn to read rpms
--xz use xz for repodata compression
--compress-type=COMPRESS_TYPE
which compression type to use
El procedimiento básico es simple, hay que crear un directorio para alojar el repositorio, colocar allí los rpms provistos por los desarrolladores y empaquetadores, ejecutar createrepo
especificando el directorio donde se encuentran los rpms.
# mkdir /var/www/html/x86_64/
# cp -ar /home/makerpm/rpmbuild/RPMS/x86_64/*rpm /var/www/html/x86_64/
# createrepo --verbose /var/www/html/x86_64/
Spawning worker 0 with 4 pkgs
Worker 0: reading rubygem-pg-0.12.2-2.fc17.x86_64.rpm
Worker 0: reading fwsnort-1.6.2-1.fc17.noarch.rpm
Workers Finished
Gathering worker results
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Starting other db creation: Fri Feb 1 08:50:57 2013
Ending other db creation: Fri Feb 1 08:50:58 2013
Starting filelists db creation: Fri Feb 1 08:50:58 2013
Ending filelists db creation: Fri Feb 1 08:50:58 2013
Starting primary db creation: Fri Feb 1 08:50:58 2013
Ending primary db creation: Fri Feb 1 08:50:59 2013
Sqlite DBs complete
Se puede verificar fácilmente que el proceso previo ha creado un directorio repodata
con los metadatos que representan y conforman al nuevo repositorio.
# ls /var/www/html/x86_64/repodata/
filelists.xml.gz other.xml.gz primary.xml.gz repomd.xml
Si actualiza o modifica algunos de los rpm fuentes, deberá volver a ejecutar createrepo
para actualizar los metadatos del repositorio.
Una vez creada los metadatos del repositorio YUM es hora de disponibilizar el repositorio. En este ejemplo se creará una configuración local utilizando el método de acceso file:///
que permitirá acceder al repositorio recién creado.
/etc/yum.repos.d/rubyera.repo
[rubyera]
name=Rubyera repo
baseurl=file:///var/www/html/x86_64
enabled=1
gpgcheck=0
Para verificar la disponibilidad del nuevo repositorio puede utilizar la herramienta repoquery y consultarlo.
# repoquery --repoid=rubyera -a
dhcp_probe-0:1.3.0-4.fc13.x86_64
dhcp_probe-debuginfo-0:1.3.0-4.fc13.x86_64
iptables-0:1.4.5-1.fc12.x86_64
iptables-debuginfo-0:1.4.5-1.fc12.x86_64
iptables-devel-0:1.4.5-1.fc12.x86_64
iptables-ipv6-0:1.4.5-1.fc12.x86_64
passenger-0:2.2.15-1.fc13.x86_64
passenger-debuginfo-0:2.2.15-1.fc13.x86_64
rubygem-pg-0:0.9.0-1.fc13.x86_64