Product SiteDocumentation Site

Capítulo 9. Gestión avanzada de repositorios YUM

9.1. Creación de repositorios con createrepo
9.2. Consultar repositorios con repoquery
9.3. Gestión de grupos con yum-groups-manager
9.4. Creando espejos YUM con reposync
9.5. Repositorios explorables web con repoview
9.6. Dependencias no resueltas con repoclosure
9.7. Seguimiento de paquetes con repotrack
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