  RPM COMO
  Donnie Barnes, djb@redhat.com
  Traductor: Antonio Ismael Olea Gonzlez,
  olea@iname.com 2:345/108.9@fidonet.org
  V2.0, April 8, 1997

  Este documento describe el uso del formato de paquetes de instalacin
  que se ha convertido en estndar de facto, el RPM (RedHat Package Man
  ager)
  ______________________________________________________________________

  ndice General:

  1.      Introduccin

  2.      Visin general

  3.      Informacin general

  3.1.    Adquirir RPM

  3.2.    Requerimientos de RPM

  4.      Usando RPM

  5.      Y ahora, qu puedo hacer de verdad  con RPM?

  6.      Construyendo paquetes RPM

  6.1.    El fichero rpmrc

  6.2.    El fichero spec

  6.3.    La Cabecera

  6.4.    %prep

  6.5.    %build

  6.6.    %install

  6.7.    Guiones opcionales pre y post Install/Uninstall

  6.8.    %files

  6.9.    Construccin

  6.9.1.  ``El rbol de Directorios de los Fuentes''

  6.9.2.  Prueba de construccin

  6.9.3.  Creacin de la Lista de Ficheros

  6.9.4.  Construyendo el paquete con RPM

  6.10.   Probndolo

  6.11.   Qu hacer con los nuevos paquetes RPM?

  6.12.   Y ahora qu?

  7.      Construccin multi-arquitectura de paquetes RPM

  7.1.    Ejemplo de fichero spec

  7.2.    Optflags

  7.3.    Macros

  7.4.    Excluyendo arquitectura de los paquetes.

  7.5.    Acabando

  8.      Copyright

  9.      Anexo: El INSFLUG
  ______________________________________________________________________

  1.  Introduccin

  RPM es el gestor de paquetes de Red Hat (Red Hat Package Manager).
  Aunque aparece Red Hat en su nombre, la intencin es que sea un
  sistema de empaquetado abierto y disponible para el uso de cualquiera.
  Permite a los usuarios tomar el cdigo fuente (source code) y
  empaquetarlo en forma de fuentes y binaria de forma que los ficheros
  binarios sean fcilmente instalables y rastreables y los fuentes
  puedan ser reconstruidas con facilidad. Tambin gestiona una base de
  datos de todos los paquetes y sus ficheros que puede ser usada para
  verificar paquetes e interrogarla para obtener informacin acerca de
  ficheros y/o paquetes.

  Red Hat Software anima a otros vendedores de distribuciones a dedicar
  un rato para examinar RPM y usarlo para sus propias distribuciones.
  RPM es completamente flexible y fcil de usar, aunque provee la base
  para un sistema muy extenso. Tambin es completamente abierto y
  disponible aunque agradeceramos informes de fallos (bugs) y sus
  reparaciones (fixes). Se concede permiso para usar y distribuir RPM,
  libre de royalties, bajo la proteccin de la licencia GPL.

  Puede encontrar informacin ms completa sobre RPM en el libro de Ed
  Bailey Maximum RPM.  Dicho libro est disponible en www.redhat.com.

  2.  Visin general

  Primero, permtame expresar parte de la filosofa tras RPM. Uno de los
  objetivos del diseo fue permitir el uso de fuentes ``prstinas (--
  N.T.: originales--)

  Con RPP (nuestro anterior sistema de empaquetado del cual RPM no
  deriva en absoluto), nuestros paquetes de fuentes deban ser
  ``hackeados (-- N.T.: retocados--) aplicaciones desde ellos.
  Tericamente, se poda instalar un paquete fuente RPP y efectuarle un
  make sin problemas.  Pero los fuentes no eran las originales, y no
  haba referencia alguna a los cambios que habamos hecho para que
  pudieran compilar. Se haca pues necesario bajarse los fuentes
  originales de forma separada.

  Con RPM, tiene los fuentes originales junto al ``parche (-- N.T.:
  patch en el original--) compilarlo. Vemos en esto una gran ventaja.
  Por qu? Son varias las razones. La primera es que si sale disponible
  una nueva versin de un programa, usted no necesita empezar desde la
  nada para conseguir que compile bajo RHL. Puede examinar el parche
  para saber qu podra necesitar hacer. De esta manera toda la
  configuracin por defecto de compilacin queda fcilmente a la vista.

  RPM tambin est diseado para disponer de potentes parmetros de
  consulta.  Usted puede hacer bsquedas de paquetes a lo largo de toda
  la base de datos o slo de ciertos ficheros. Tambin puede encontrar
  fcilmente a qu paquete pertenece un fichero y de dnde proviene. Los
  ficheros RPM en s mismos son archivos comprimidos, pero puede
  consultar paquetes independientes fcil y rpidamente, gracias a una
  cabecera binaria a medida aadida al paquete con toda la informacin
  que puede necesitar, almacenada sin comprimir. Esto permite consultas
  rpidas.

  Otra poderosa caracterstica es la habilidad de verificar paquetes. Si
  est preocupado por haber borrado algn fichero importante, slo tiene
  que verificar el paquete. Quedar cumplidamente informado de cualquier
  anomala.  Llegados a ese punto, podr reinstalar el paquete si lo
  considera necesario.  Cualquier fichero de configuracin que usted
  tenga quedar a salvo.

  Queremos agradecer a los colegas de la distribucin BOGUS por muchas
  de sus ideas y conceptos que han sido incluidos en RPM. Aunque RPM
  est completamente escrito por Red Hat Software, su funcionamiento
  est basado en cdigo escrito por BOGUS (PM y PMS).

  3.  Informacin general

  3.1.  Adquirir RPM

  La mejor forma de conseguir RPM es instalando Red Hat Commercial
  Linux. Si no quiere hacer eso, puede seguir usando RPM. Puede
  conseguirse en:

  ftp.redhat.com/pub/redhat/code/rpm

  3.2.  Requerimientos de RPM

  El principal requerimiento para ejecutar RPM es cpio 2.4.2 o superior.
  Aunque el sistema fue ideado para ser usado con Linux, puede ser
  perfectamente portado a cualquier sistema Unix. De hecho, ha sido
  compilado en SunOS, Solaris, AIX, Irix, AmigaOS, y otros.  Queda
  advertido que los paquetes binarios generados en diferentes tipos de
  sistemas Unix no sern compatibles.

  Estos son los mnimos requerimientos para instalar RPMs. Para
  construir RPMs a partir de los fuentes, necesitar todo lo normalmente
  requerido para construir un paquete, cosas como gcc, make, etc.

  4.  Usando RPM

  En su forma ms simple, RPM puede usarse para instalar paquetes:

               rpm -i foobar-1.0-1.i386.rpm

  El siguiente comando ms simple es desinstalar un paquete:

          rpm -e foobar

  Uno de los ms complejos pero ms tiles comandos le permiten instalar
  paquetes a travs de FTP. Si est conectado a la Red y quiere instalar
  un nuevo paquete, todo lo que necesita hacer es especificar el fichero
  con un URL vlido, como esto:

       rpm -i ftp://ftp.pht.com/pub/linux/redhat/rh-2.0-beta/RPMS/foobar-1.0-1.i386.rpm

  Apercbase de que ahora RPM puede hacer consultas y/o instalaciones a
  travs de FTP.

  Aunque estos son comandos simples, rpm puede usarse de multitud de
  formas, como puede verse en el mensaje de Ayuda:

  RPM version 2.3.9
  Copyright (C) 1997 - Red Hat Software
  This may be freely redistributed under the terms of the GNU Public License

  usage: rpm {--help}
         rpm {--version}
         rpm {--initdb}   [--dbpath <dir>]
         rpm {--install -i} [-v] [--hash -h] [--percent] [--force] [--test]
                          [--replacepkgs] [--replacefiles] [--root <dir>]
                          [--excludedocs] [--includedocs] [--noscripts]
                          [--rcfile <file>] [--ignorearch] [--dbpath <dir>]
                          [--prefix <dir>] [--ignoreos] [--nodeps]
                          [--ftpproxy <host>] [--ftpport <port>]
                          file1.rpm ... fileN.rpm
         rpm {--upgrade -U} [-v] [--hash -h] [--percent] [--force] [--test]
                          [--oldpackage] [--root <dir>] [--noscripts]
                          [--excludedocs] [--includedocs] [--rcfile <file>]
                          [--ignorearch]  [--dbpath <dir>] [--prefix <dir>]
                          [--ftpproxy <host>] [--ftpport <port>]
                          [--ignoreos] [--nodeps] file1.rpm ... fileN.rpm
         rpm {--query -q} [-afpg] [-i] [-l] [-s] [-d] [-c] [-v] [-R]
                          [--scripts] [--root <dir>] [--rcfile <file>]
                          [--whatprovides] [--whatrequires] [--requires]
                          [--ftpuseport] [--ftpproxy <host>] [--ftpport <port>]
                          [--provides] [--dump] [--dbpath <dir>] [targets]
         rpm {--verify -V -y} [-afpg] [--root <dir>] [--rcfile <file>]
                          [--dbpath <dir>] [--nodeps] [--nofiles] [--noscripts]
                          [--nomd5] [targets]
         rpm {--setperms} [-afpg] [target]
         rpm {--setugids} [-afpg] [target]
         rpm {--erase -e} [--root <dir>] [--noscripts] [--rcfile <file>]
                          [--dbpath <dir>] [--nodeps] [--allmatches]
                          package1 ... packageN
         rpm {-b|t}[plciba] [-v] [--short-circuit] [--clean] [--rcfile  <file>]
                          [--sign] [--test] [--timecheck <s>] specfile
         rpm {--rebuild} [--rcfile <file>] [-v] source1.rpm ... sourceN.rpm
         rpm {--recompile} [--rcfile <file>] [-v] source1.rpm ... sourceN.rpm
         rpm {--resign} [--rcfile <file>] package1 package2 ... packageN
         rpm {--addsign} [--rcfile <file>] package1 package2 ... packageN
         rpm {--checksig -K} [--nopgp] [--nomd5] [--rcfile <file>]
                             package1 ... packageN
         rpm {--rebuilddb} [--rcfile <file>] [--dbpath <dir>]
         rpm {--querytags}

  Podr encontrar ms detalles acerca de la funcin de estos parametros
  en la pgina del manual de RPM.

  5.  Y ahora, qu puedo hacer de verdad  con RPM?

  RPM es una herramienta potentsima y, como puede ver, dispone de
  varios parmetros. La mejor forma de apercibirse de ellas es
  examinando unos cuantos ejemplos. Antes mostramos una
  instalacin/desinstalacin sencilla, ahora van unos cuantos ms:

    Supongamos que ha borrado unos cuantos ficheros por accidente, pero
     no est seguro de qu es lo que ha borrado. Si quiere verificar
     completamente su sistema y ver qu se ha perdido, puede hacer:

  rpm -Va

    Supongamos que se encuentra con un fichero que no reconoce. Para
     saber a qu paquete pertenece puede hacer:

       rpm -qf /usr/X11R6/bin/xjewel

  La salida podra ser:

       xjewel-1.6-1

    Supongamos que acaba de hacerse con un nuevo paquete RPM de koules,
     pero no sabe qu puede ser. Para obtener informacin al respecto:

       rpm -qpi koules-1.2-2.i386.rpm

  La salida podra ser:

       Name        : koules                      Distribution: Red Hat Linux Colgate
       Version     : 1.2                               Vendor: Red Hat Software
       Release     : 2                             Build Date: Mon Sep 02 11:59:12 1996
       Install date: (none)                        Build Host: porky.redhat.com
       Group       : Games                         Source RPM: koules-1.2-2.src.rpm
       Size        : 614939
       Summary     : SVGAlib action game with multiplayer, network, and sound support
       Description :
       This arcade-style game is novel in conception and excellent in execution.
       No shooting, no blood, no guts, no gore.  The play is simple, but you
       still must develop skill to play.  This version uses SVGAlib to
       run on a graphics console.

    Ahora quiere saber qu ficheros instala el paquete RPM. Puede
     hacer:

       rpm -qpl koules-1.2-2.i386.rpm

  La salida es:

       /usr/doc/koules
       /usr/doc/koules/ANNOUNCE
       /usr/doc/koules/BUGS
       /usr/doc/koules/COMPILE.OS2
       /usr/doc/koules/COPYING
       /usr/doc/koules/Card
       /usr/doc/koules/ChangeLog
       /usr/doc/koules/INSTALLATION
       /usr/doc/koules/Icon.xpm
       /usr/doc/koules/Icon2.xpm
       /usr/doc/koules/Koules.FAQ
       /usr/doc/koules/Koules.xpm
       /usr/doc/koules/README
       /usr/doc/koules/TODO
       /usr/games/koules
       /usr/games/koules.svga
       /usr/games/koules.tcl
       /usr/man/man6/koules.svga.6

  Estos son slo unos pocos ejemplos. Otros, an ms creativos, podr
  hacerlos fcilmente una vez que se haya familiarizado con RPM.

  6.  Construyendo paquetes RPM

  Construir paquetes RPM es algo realmente fcil de hacer, especialmente
  si puede conseguir que el software que intenta empaquetar pueda
  compilarse por s mismo.

  El procedimiento bsico es el siguiente:

    Asegrese que su /etc/rpmrc est configurado para su sistema.

    Hgase con el cdigo fuente del software a empaquetar para ser
     compilado en su sistema.

    Haga un parche con todos los cambios que ha tenido que realizar
     para que los fuentes se compilen adecuadamente.

    Cree un fichero .spec para el paquete.

    Asegrese de que todo est en su sitio.

    Construya el paquete usando RPM.

  En general, RPM construir tanto el paquete binario como el de los
  fuentes.

  6.1.  El fichero rpmrc

  En lo sucesivo, la nica configuracin de RPM est disponible en el
  fichero /etc/rpmrc. ste puede tener la siguiente apariencia:

  require_vendor: 1
  distribution: I roll my own!
  require_distribution: 1
  topdir: /usr/src/me
  vendor: Mickiesoft
  packager:  Mickeysoft Packaging Account <packages@mickiesoft.com>

  optflags: i386 -O2 -m486 -fno-strength-reduce
  optflags: alpha -O2
  optflags: sparc -O2

  signature: pgp
  pgp_name: Mickeysoft Packaging Account
  pgp_path: /home/packages/.pgp

  tmppath: /usr/tmp

  La lnea require_vendor obliga a RPM a requerir una lnea de vendor
  (distribuidor). sta puede venir o bien del propio fichero /etc/rpmrc
  o de la cabecera del fichero .spec. Para desactivar este parmetro
  debe cambiarse el nmero a 0. Esto tambin se aplica a las lneas
  require_distribution y require_group.

  La siguiente lnea es la de distribution (-- N.T.: distribucin--) .
  Puede definirla bien aqu o bien en el fichero buena idea asegurarse
  de que esta lnea es correcta, incluso cuando no se requiera.  La
  lnea de vendor (-- N.T.: distribuidor--)

  funciona de la misma manera, aunque puede contener cualquier cosa
  (ej.: Joe's Software and Rock Music Emporium).

  RPM tambin soporta ahora el empaquetado de paquetes para mltiples
  arquitecturas. El fichero rpmrc puede incluir una variable de opciones
  (optflags) que contiene parmetros especficos a la arquitectura.  Lea
  secciones posteriores para saber cmo usar esta variable.

  En adicin a las macros anteriores, hay disponibles unas cuantas ms.
  Puede usar:

       rpm --showrc

  para saber cul de sus etiquetas estn configuradas y cules son los
  parmetros disponibles.

  6.2.  El fichero spec

  Ahora hablaremos del fichero .spec. Estos ficheros son imprescindibles
  para construir un paquete. El fichero spec es una descripcin del
  software acompaado con instrucciones sobre cmo construirlo y una
  lista de ficheros de todos los binarios instalados.

  Debera nombrar a sus ficheros spec de acuerdo a una convencin
  estndar.  Tal como nombre de paquete-guin-nmero de versin-guin-
  nmero de publicacin-punto-spec.

  A continuacin, un pequeo fichero spec (eject-1.4.spec):

       Summary: ejects ejectable media and controls auto ejection
       Name: eject
       Version: 1.4
       Release: 3
       Copyright: GPL
       Group: Utilities/System
       Source: sunsite.unc.edu:/pub/Linux/utils/disk-management/eject-1.4.tar.gz
       Patch: eject-1.4-make.patch
       Patch1: eject-1.4-jaz.patch
       %description
       This program allows the user to eject media that is autoejecting like
       CD-ROMs, Jaz and Zip drives, and floppy drives on SPARC machines.

       %prep
       %setup
       %patch -p1
       %patch1 -p1

       %build
       make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"

       %install
       install -s -m 755 -o 0 -g 0 eject /usr/bin/eject
       install -m 644 -o 0 -g 0 eject.1 /usr/man/man1

       %files
       %doc README COPYING ChangeLog

       /usr/bin/eject
       /usr/man/man1/eject.1

  6.3.  La Cabecera

  La cabecera tiene unos cuantos campos estndar que usted necesita
  rellenar.  Tambin hay unas cuantas advertencias. Los campos deben ser
  rellenados tal como sigue:

    Summary: Descripcin en una sla lnea del paquete.

    Name: La cadena que vaya a servir de nombre para el fichero rpm.

    Version: La cadena que vaya a ser el nmero de versin para el
     fichero rpm.

    Release: El nmero de publicacin para un paquete dentro de un
     mismo nmero de versin (ej.: si crea un paquete y lo encuentra
     ligeramente defectuoso y necesita generarlo de nuevo, el siguiente
     paquete debera tener 2 como nmero de publicacin).

    Icon: El nombre del icono que podrn usar interfaces de instalacin
     alto nivel (como Red Hat `glint''). Debe ser un fichero

    Source: Esta lnea apunta a la localizacin HOME del fichero de
     fuentes original. Se usa si alguna vez quiere tener los fuentes de
     nuevo o chequear para nuevas versiones. Precaucin: el nombre del
     fichero en esta lnea DEBE coincidir con el nombre que tiene tal
     fichero en su sistema (ej.: no se haga con el fichero fuente y le
     cambie el nombre). Puede especificar ms de un fichero fuente de
     esta forma:

       Source0: blah-0.tar.gz
       Source1: blah-1.tar.gz
       Source2: fooblah.tar.gz

  Estos ficheros deben residir en el directorio SOURCES. (La estructura
  de directorios es discutida en una seccin posterior, ``El rbol de
  Directorios de las Fuentes'', ``'').

    Patch: El lugar donde podrn encontrarse los parches si los
     necesita de nuevo. Precaucin: el nombre debe coincidir con el de
     SUS propios parches. Puede especificar ms de un fichero de parches
     de esta forma:

       Patch0: blah-0.patch
       Patch1: blah-1.patch
       Patch2: fooblah.patch

  Estos ficheros deben residir en el directorio SOURCES.

    Copyright: Hace referencia al modelo de copyright al que se acoje
     el paquete. Puede tratarse de algo al estilo de GPL, BSD, MIT,
     public domain (-- N.T.: dominio pblico--) , distributable (--
     N.T.: distribuible--) o commercial (-- N.T.: comercial--) .

    BuildRoot: Hace referencia a un directorio que simular el raz (/)
     para la construccin e instalacin de un nuevo paquete. Puede
     usarlo para probar su paquete antes de instalarlo en su mquina.

    Group: Informa a un programa de instalacin de alto nivel (como Red
     Hat `glint'') dnde situar este paquete en particular dentro de la
     jerarqua de rpm. Actualmente, esta jerarqua viene a ser:

  Applications            (aplicaciones)
      Communications      (comunicaciones)
      Editors             (editores)
          Emacs           (Emacs)
      Engineering         (ingenieria)
      Spreadsheets        (hojas de calculo)
      Databases           (bases de datos)
      Graphics            (graficos)
      Networking          (redes de comunicaciones)
      Mail                (correo smtp)
      Math                (matematicas)
      News                (noticias nntp)
      Publishing          (edicion)
          TeX             (TeX)
  Base                    (basico)
      Kernel              (nucleo)
  Utilities               (utilidades)
      Archiving           (archivo)
      Console             (consola)
      File                (ficheros)
      System              (sistema)
      Terminal            (terminales)
      Text                (texto)
  Daemons                 (demonios)
  Documentation           (documentacion)
  X11                     (X11)
      XFree86             (XFree86)
          Servers         (servidores)
      Applications        (aplicaciones)
          Graphics        (graficos)
          Networking      (redes de comunicaciones)
      Games               (juegos)
          Strategy        (estrategia)
          Video           (video juegos)
      Amusements          (entretenimientos)
      Utilities           (utilidades)
      Libraries           (librerias)
      Window Managers     (gestores de ventana)
  Libraries               (librerias)
  Networking              (redes de comunicaciones)
      Admin               (administracion)
      Daemons             (demonios)
      News                (noticias nntp)
      Utilities           (utilidades)
  Development             (desarrollo)
      Debuggers           (depuradores)
      Libraries           (librerias)
          Libc            (libreria C)
      Languages           (lenguajes)
          Fortran         (fortran)
          Tcl             (tcl)
      Building            (Compilacion)
      Version Control     (control de versiones)
      Tools               (utiles)
  Shells                  (interpretes de comandos)
  Games                   (juegos)

    %description En realidad no es un elemento de la cabecera, pero
     debe ser descrito junto a sus otras partes. Necesita una etiqueta
     de descripcin por cada paquete o subpaquete. Se trata de un campo
     multilnea que debe ser usado para proporcionar una descripcin
     comprensible del paquete.
  6.4.  %prep

  Esta es la segunda seccin del fichero spec. Se usa para tener las
  fuentas listas para compilar. Aqu necesita hacer todo lo necesario
  para obtener los fuentes parcheadas y configuradas para ejecutar un
  make con ellas.

  Una cosa a sealar: Cada una de estas secciones es slo un lugar para
  ejecutar guiones de intrprete de comandos (-- N.T.: shell scripts en
  el original.--) . As podr crear un script simple para sh y colocarlo
  tras la etiqueta %prep para desempaquetar y parchear sus fuentes. En
  cualquier caso, hemos creado unas macros para ayudar en esto.

  La primera de estas macros es %setup. En su forma ms simple (sin
  parmetros en la lnea de comandos), se limita a desempaquetar los
  fuentes y cambiar el directorio actual al de los fuentes. Puede tener
  alguna de las siguientes opciones:

    -n nombre asignar el nombre del directorio en construccin.  Por
     defecto es $NAME-$VERSIN. Otras posibilidades incluyen $NAME,
     ${NAME}${VERSIN}, o cualquiera que use el fichero tar principal.
     (Apercbese de que estas variables ``$'' no son variables reales
     dentro del fichero spec.  Slo se usan aqu en lugar de un nombre
     ejemplo. Necesitar usar el nombre real y la versin de su paquete,
     no una variable).

    -c crear y cambiar al directorio nombrado antes de desempaquetar
     con tar.

    -b # desempaquetar con tar el fichero fuente # antes de cambiar al
     directorio (y esto no tiene sentido con -c, as que no lo haga).
     Slo es til cuando se usan varios archivos fuente.

    -a # desempaquetar el fichero fuente # despus de cambiar al
     directorio.

    -T Este parmetro anula la accin por defecto de desempaquetar el
     fichero fuente y requiere
     el fichero fuente principal. Necesitar esto cuando hayan fuentes
     secundarias.

    -D No borra el directorio antes de desempaquetar.  Slo resulta
     til cuando tenga ms de una macro de configuracin. Debera ser
     usado solamente en macros de configuracin despus de la primera
     (pero nunca en la primera).

  La siguiente de las macros disponibles es %patch. Esta macro ayuda a
  automatizar el proceso de aplicacin de parches a los fuentes.
  Necesita de varios parmetros, listadas a continuacin:

    # aplicar el parche Patch#.

    -p # especifica el nmero de directorios a evitar por el comando
     patch(1).

    -P La accin por defecto es aplicar Patch (o Patch0).  Este
     parmetro inhibe dicha accin y requiere un 0 para tener
     desempaquetado el fichero fuente principal. Esta opcin resulta
     til en una segunda (o posterior) macro %patch que requiera
     parmetros distintos a la primera macro.

    Tambin puede hacer %patch# en lugar de hacer el comando real:
     %patch # -P
  Estas deberan ser todas las macros que necesite. En cuanto las tenga
  claras, podr crear cualquier otra configuracin que necesite mediante
  guiones sh. Todo lo que incluya hasta la macro %build (discutida en la
  siguiente seccin) es ejecutado va sh. Busque en el ejemplo anterior
  el tipo de cosas que puede querer incluir all.

  6.5.  %build

  En realidad no hay ninguna macro en esta seccin. Solamente debe
  incluir todos los comandos que necesitara para construir y/o compilar
  el software una vez que haya desempaquetado y parcheado los fuentes, y
  se haya movido al directorio correcto. Es pues otra serie de comandos
  pasados a sh, as que cualquier comando aceptable por sh podr ir aqu
  (incluidos los comentarios). El directorio actual es reajustado en
  cada una de estas secciones al de mayor nivel en el directorio de
  fuentes, as que tngalo en cuenta. Puede moverse a travs de los
  subdirectorios si resultase necesario.

  6.6.  %install

  En realidad no hay ninguna macro en esta seccin.  Bsicamente debe
  incluir aqu cualquier comando necesario para instalar. Si el paquete
  a construir tiene disponible un comando make install, inclyalo aqu.
  Si no, o bien puede parchear el fichero Makefile y aadirle la
  funcionalidad make install e incluir dicha sentencia en esta seccin o
  bien instalarlo a mano mediante comandos sh. Puede considerar su
  directorio actual como el directorio superior del directorio de
  fuentes.

  6.7.  Guiones opcionales pre y post Install/Uninstall

  Puede incluir guiones que seran ejecutados antes y despus de la
  instalacin o desinstalacin de paquetes binarios. Una razn
  importante para esto es hacer cosas como ejecutar ldconfig tras la
  instalacin o eliminar paquetes que contienen libreras compartidas.
  Las macros para cada uno de los guiones son:

    %pre es la macro para los guiones pre-instalacin.

    %post es la macro para los guiones post-instalacin.

    %preun es la macro para los guiones pre-desinstalacin.

    %postun es la macro para los guiones post-desinstalacin.

  Los contenidos de estas secciones deben ser solamente guiones sh,
  luego no resulta necesaria la lnea #!/bin/sh.

  6.8.  %files

  Esta es la seccin donde debe listar los ficheros del paquete binario.
  RPM no tiene forma de saber qu ficheros binarios se han instalado
  tras ejecutar make install. NO hay forma de saberlo.

  Algunos han sugerido ejecutar un comando find antes y despus de la
  instalacin del paquete. En un sistema multiusuario, esto es
  inaceptable ya que pueden crearse otros ficheros durante la
  construccin del paquete que no tienen nada que ver con el mismo.

  Tambin hay algunas macros disponibles para hacer cosas especiales.
  Son las listadas a continuacin:

    %doc se usa para sealar los ficheros de documentacin del paquete
     fuente que desea que sean instalados en una instalacin binaria. La
     documentacin ser instalada en
     /usr/doc/$NOMBRE-$VERSIN-$PUBLICACIN.  La lista podr incluir
     varios ficheros en una sla lnea o puede listarlos de forma
     separada con una macro para cada uno de ellos.

    %config se usa para sealar los ficheros de configuracin en un
     paquete. Ficheros as pueden ser sendmail.cf, passwd, etc. Si
     posteriormente desinstala un paquete que incluye ficheros de
     configuracin, todos los ficheros sin modificar sern borrados y
     todos los ficheros modificados sern movidos a su nombre antiguo
     con el sufijo .rpmsave aadido a su nombre. Tambin puede incluir
     mltiples ficheros con esta macro.

    %dir seala a un nico directorio en la lista como propiedad de un
     paquete. Por defecto, si incluye en la lista un nombre de
     directorio SIN una macro %dir, TODO el contenido de ese directorio
     es incluido en la lista de ficheros y posteriormente instalado como
     parte del paquete.

    %files -f <nombredefichero> le permitir tener la lista de ficheros
     contenida en un fichero situado en el directorio de las fuentes.
     Resulta til en los casos en los que un paquete puede crear su
     propia lista de ficheros por s mismo. En ese caso slo tendr que
     incluir el nombre de ese fichero aqu y no necesitar especificar
     nada ms.

  La mayor precacucin que debe tener en cuenta en la lista de ficheros
  es la inclusin de directorios. Si por accidente incluye /usr/bin, su
  paquete binario contendr todos los ficheros contenidos en el
  directorio /usr/bin en su sistema.

  6.9.  Construccin

  6.9.1.  ``El rbol de Directorios de los Fuentes''

  Lo primero que necesita es un rbol de directorios de compilacin
  configurado de forma apropiada. Esto se puede hacer mediante el
  fichero /etc/rpmrc. La mayora de la gente slo usar /usr/src.

  Puede que necesite crear los siguientes directorios para organizar un
  rbol de construccin:

    BUILD es el directorio donde RPM lleva a cabo toda la construccin.
     No tiene que llevar a cabo su prueba de construccin en ningn
     sitio en particular; aqu es donde RPM llevar a cabo la
     compilacin y empaquetamiento.

    SOURCES es el directorio donde debe situar los ficheros fuente
     originales y los correspondientes parches. Es donde RPM buscar por
     defecto.

    SPECS es el directorio donde deben ir situados los ficheros spec.

    RPMS es donde RPM dejar los paquetes RPM binarios una vez
     construidos.

    SRPMS es donde RPM dejar los paquetes RPM fuentes.

  6.9.2.  Prueba de construccin

  Lo primero que querr hacer es asegurarse que los fuentes se
  construyen adecuadamente sin usar RPM. Para ello, desempaquete los
  fuentes, sitese en el directorio $NAME.orig. De nuevo desempaquete
  los fuentes. Use stos para compilar. Vaya al directorio de los
  fuentes y siga las instrucciones para construirlo. Si necesita editar
  algo, necesitar un parche. Una vez que lo tenga compilado, limpie el
  directorio fuentes.

  Asegrese que borra todos los ficheros creados por algn guin de
  configuracin. Haga entonces un cd hacia arriba, al directorio
  paterno. Deber hacer algo como:

       diff -uNr nombredirectorio.orig nombredirectorio > ../SOURCES/nombredirectorio-linux.patch

  Lo que crear un parche que podr usar en su fichero spec. Advierta
  que el ``linux'' que aparece en el nombre del parche es slo un
  identificador.  Usted probablemente querr usar algo ms descriptivo
  como ``config'' o ``bugs'' para describir el porqu del parche.
  Tambin es buena idea examinar el fichero parche que ha creado antes
  de usarlo para asegurarse de que no se han incluido binarios por
  error.

  6.9.3.  Creacin de la Lista de Ficheros

  Ahora que tiene los fuentes listos para construir y sabe cmo hacerlo,
  constryalo e instlelo. Examine la salida de la secuencia de
  instalacin y construya su lista de ficheros a partir de ah para
  incluirla en el fichero spec. Normalmente nosotros construimos el
  fichero spec en paralelo a todos estos pasos. Usted puede crear uno
  inicial y rellenar las partes sencillas e ir rellenando el resto
  conforme vaya completando los diferentes pasos.

  6.9.4.  Construyendo el paquete con RPM

  Una vez que tenga su fichero spec, est listo para intentar construir
  su paquete. La forma ms til de hacerlo es con un comando como el
  siguiente:

               rpm -ba foobar-1.0.spec

  Hay otras opciones tiles con el parmetro -b tales como:

    p obliga a ejecutar solamente la seccin prep del fichero spec.

    l efecta algunos chequeos en %files.

    c ejecuta la seccin %prep y compila. Resulta til cuando no est
     seguro de si sus fuentes compilan completamente. Puede parecer
     intil porque usted tal vez quiera jugar solamente con los fuentes
     hasta que compilen y usar entonces RPM, pero una vez que se haya
     acostumbrado a usar RPM, encontrar ocasiones en las que podr
     usarla.

    i ejecuta las secciones prep, compile e install.

    b ejecuta las secciones prep, compile e install y construye el
     paquete binario.

    a ejecuta las secciones prep, compile e install y construye los
     paquetes binario y fuentes.

  Hay varios modificadores para el parmetro -b. Son los siguientes:

    --short-circuit El proceso de construccin comenzar directamente
     por la fase especificada, saltndose las previas a la indicada.
     (Slo puede ser empleado en conjuncin con c e i).

    --clean elimina el rbol de construccin una vez que ha concluido.

    --keep-temps mantendr todos los ficheros temporales y los guiones
     que estuvieran en /tmp. Podr saber qu ficheros fueron creados
     all usando el parmetro -v.

    --test No lleva a cabo ninguna fase realmente, pero mantiene todos
     los ficheros temporales.

  6.10.  Probndolo

  Una vez que tenga los paquetes rpm binario y fuentes, necesitar
  probarlos.  La mejor forma y la ms sencilla es usar para el test una
  mquina completamente diferente de la que us para la construccin.
  Despus de todo, ha hecho un montn de make install en su mquina por
  lo que debera haber quedado instalado de forma aceptable.

  Puede ejecutar un rpm -u nombredepaquete al paquete a probar, pero
  puede ser decepcionante porque en la construccin del paquete usted
  hizo un make install. Si se dej algo fuera de la lista de ficheros,
  no ser desinstalado. Reinstale entonces el paquete binario y su
  sistema estar completo de nuevo, aunque no el paquete rpm.  Asegrese
  y tenga en mente que slo porque usted hace rpm -ba package; la
  mayora de la gente instalar su paquete slo con rpm -i package.

  Asegrese tambin de que no hace nada en las secciones build o install
  que necesite hacerse cuando los binarios se instalan por s mismos.

  6.11.  Qu hacer con los nuevos paquetes RPM?

  Una vez que ha hecho su propio RPM de algo (asumiendo que no ha sido
  empaquetado en RPM con anterioridad), puede contribuir con su trabajo
  a otras personas (asumiendo igualmente que el paquete en RPM es
  libremente distribuible). Para hacerlo, puede querer subirlo a
  ftp.redhat.com.

  6.12.  Y ahora qu?

  Por favor mire las secciones anteriores sobre pruebas y qu hacer con
  los nuevos RPM. Queremos todos los paquetes RPM disponibles que
  podamos conseguir, y queremos que estn correctamente empaquetados.
  Por favor, tmese el tiempo de probarlos adecuadamente y de subirlos
  para el beneficio de todos.

  Tambin, por favor asegrese de que no est haciendo llegar solamente
  software de libre disposicin. Software comercial y shareware (--
  N.T.: Probar antes de comprar--) no deberan ser subidos a menos que
  est claramente permitido en alguna clusula de su licencia. Esto
  incluye el software de Netscape, ssh, pgp, etc.

  7.  Construccin multi-arquitectura de paquetes RPM

  Ahora puede usarse RPM para construir paquetes para Intel i386,
  Digital Alpha ejecutando Linux y Sparc. Tambin se ha informado de su
  funcionamiento en estaciones de trabajo SGI y HP. Hay varias
  caractersticas que hacen que la construccin de paquetes para todas
  las plataformas sea fcil.  La primera de stas es la directiva
  ``optflags'' del fichero /etc/rpmrc.  Puede usarse para asignar las
  opciones usadas durante la construccin del software con valores
  especficos de cada arquitectura.  Otras son las macros ``arch'' en el
  fichero spec. Pueden usarse para diferentes cosas, en funcin de la
  arquitectura para la que se est construyendo. Otra ms, es la
  directiva ``Exclude'' de la cabecera.

  7.1.  Ejemplo de fichero spec

  El siguiente es parte del fichero spec para el paquete ``fileutils''.
  Est configurado para compilar en Alpha e Intel.

  Summary: GNU File Utilities
  Name: fileutils
  Version: 3.16
  Release: 1
  Copyright: GPL
  Group: Utilities/File
  Source0: prep.ai.mit.edu:/pub/gnu/fileutils-3.16.tar.gz
  Source1: DIR_COLORS
  Patch: fileutils-3.16-mktime.patch

  %description
  These are the GNU file management utilities.  It includes programs
  to copy, move, list, etc, files.

  The ls program in this package now incorporates color ls!

  %prep
  %setup

  %ifarch alpha
  %patch -p1
  autoconf
  %endif
  %build
  configure --prefix=/usr --exec-prefix=/
  make CFLAGS="$RPM_OPT_FLAGS" LDFLAGS=-s

  %install
  rm -f /usr/info/fileutils*
  make install
  gzip -9nf /usr/info/fileutils*

  7.2.  Optflags

  En este ejemplo puede ver cmo se usa la directiva ``optflags'' desde
  el fichero /etc/rpmrc. En funcin de la arquitectura para la que est
  construyendo, el valor adecuado lo proporciona RPM_OPT_FLAGS.  Debe
  parchear el fichero Makefile de su paquete para usar esta variable en
  lugar de las directivas normales que puede usar (como -m486 y -O2).
  Tendr una mejor perspectiva de lo que necesita hacer instalando este
  paquete de fuentes, desempaquetando el fichero tar con los fuentes y
  examinando el fichero Makefile. Examine el parche para el Makefile y
  compruebe qu cambios son necesarios realizar.

  7.3.  Macros

  La macro %ifarch es muy importante para todo esto. La mayora de las
  veces necesitar hacer un parche o dos especficos para una sla
  arquitectura. En ese caso, RPM le permitir aplicar ese parche slo
  para una arquitectura.

  En el ejemplo anterior, fileutils tiene un parche para mquinas de 64
  bits.  Obviamente, slo tiene aplicacin en Alpha, por el momento.
  Entonces, aadimos una macro %ifarch al parche de 64 tal como:

  %ifarch axp
  %patch1 -p1
  %endif

  Esto asegurar que el parche no es aplicado en cualquier arquitectura
  excepto en Alpha.

  7.4.  Excluyendo arquitectura de los paquetes.

  A la vez que puede tener fuentes RPM en un slo directorio para todas
  las plataformas, hemos implementado la posibilidad de ``excluir''
  paquetes para que no sean construidos en ciertas arquitecturas. Debido
  a esto, puede hacer cosas como:

       rpm --rebuild /usr/src/SRPMS/*.rpm

  y conseguir construir los paquetes adecuados. Si todava no ha portado
  una aplicacin a una determinada plataforma, todo lo que tiene que
  hacer es aadir una lnea como:

       ExcludeArch: axp

  a la cabecera del fichero spec del paquete de fuentes. Reconstruya
  entonces el paquete sobre la plataforma para la que est preparado.
  Como resultado tendr disponible un paquete compilable sobre Intel
  pero que es fcilmente omitible sobre Alpha.

  7.5.  Acabando

  Usar RPM para crear paquetes para mltiples arquitecturas es
  generalmente ms sencillo de hacer que conseguir que el paquete
  compile por s mismo en todos los casos. Como siempre, la mejor ayuda
  disponible cuando uno se queda bloqueado al construir un paquete RPM
  es examinar un paquete de fuentes similar.

  8.  Copyright

  Este documento y sus contenidos estn protegidos por las leyes de
  propiedad intelectual. Se permite la redistribucin de este documento
  siempre que sus contenidos permanezcan intactos y sin cambios. En
  otras palabras, solamente lo puede reformatear, reimprimir o
  redistribuir.

  9.  Anexo: El INSFLUG

  El INSFLUG forma parte del grupo internacional Linux Documentation
  Project, encargndose de las traducciones al castellano de los Howtos
  (Comos), as como la produccin de documentos originales en aquellos
  casos en los que no existe anlogo en ingls.

  En el INSFLUG se orienta preferentemente a la traduccin de documentos
  breves, como los COMOs y PUFs (Preguntas de Uso Frecuente, las FAQs.
  :) ), etc.

  Dirjase a la sede del INSFLUG para ms informacin al respecto.

  En la sede del INSFLUG encontrar siempre las ltimas versiones de las
  traducciones:  www.insflug.org. Asegrese de comprobar cul es la
  ltima versin disponible en el Insflug antes de bajar un documento de
  un servidor rplica.

  Se proporciona tambin una lista de los servidores rplica (mirror)
  del Insflug ms cercanos a Vd., e informacin relativa a otros
  recursos en castellano.

  Francisco Jos Montilla, pacopepe@insflug.org.

