Menú principal
Inicio
Artículos
Noticias
Histórico de la Lista
Linux IDES
Linux Week
Descargas
Video Tutoriales
Opinión Software Libre
Preguntas frecuentes
Eventos Próximos
Talleres de Linux y LaptopFest
Encuesta
¿Que sección del portal Tuxpuc te agrada más?
 
Galería TuxPuc
Últimas noticias
Sindicación
 


Este portal se ve mejor con Firefox

Firefox

Creación de Paquetes RPM y deb (2)
escrito por Dennis Stephen Cohn Muroy   
Friday, 06 de April de 2007
 



Paquetes RPM

¿Qué es un RPM?

RPM, RPM Package Manager originalmente llamado Red Hat Package Manager, es una herramienta usada para manejar software libre para Linux. Esta herramienta permite distribuir software ya compilado, permitiendo a un usuario realizar funciones administrativas como instalar, actualizar y desinstalar software.

Adicionalmente, brinda la opción de verificación y consulta, de esa forma un usuario puede conocer las características de la aplicación contenida en un paquete determinado.



Pasos Previos a la Creación de Paquetes

Previamente a la creación del paquete RPM, es necesario verificar que se cumpla cada uno de los siguientes puntos:

El Árbol de Directorios

Es importante verificar que el árbol de directorios ubicado en la ruta /usr/src/RPM/ o en /usr/src/redhat/ dependiendo de tu distribución, presente la siguiente estructura:

./SOURCES
./SPECS
./BUILD
./RPMS
./RPMS/i686
./RPMS/i586
./RPMS/i486
./RPMS/i386
./RPMS/noarch
./SRPMS


Los Paquetes de Desarrollo

En caso que el paquete a crear, tenga dependencias, es necesario tener instalado los paquetes de desarrollo (paquete - devel) de dichas dependencias.


Herramienta rpm-build

Verificar que se tenga instalada la herramienta rpm-build, que es la que llevará a cabo la creación del paquete. Para verificar si se tiene instalada, tipear en la consola el siguiente comando: rpm -q rpm-build

 

Creación del Paquete RPM 

Replicar el Árbol de Directorios en $HOME

Para ello, hay que copiar todo el árbol de directorios de /usr/src/redhat/ a $HOME/rpmbuild, quedando de la siguiente forma:


~/rpmbuild
~/rpmbuild/SOURCES
~/rpmbuild/SPECS
~/rpmbuild/BUILD
~/rpmbuild/RPMS
~/rpmbuild/RPMS/i386
~/rpmbuild/SRPMS

Luego de efectuar ambos pasos, la siguiente dificultad: Al crear paquetes RPM se lee y escribe información en los directorios ubicados en /usr/src/redhat/; pero únicamente el superusuario puede modificar contenido de ese directorio

Cambiar el Valor de la Macro %_topdir

La macro %_topdir, almacena la ruta en la cual se lleva a cabo la creación de paquetes RPM. Por defecto el valor de dicha macro es /usr/src/redhat.  Para ello crearemos un archivo al que llamaremos '.rpmmacros'.  Luego de ello, le añadiremos una línea con el nuevo valor de la macro: '%_topdir $HOME/rpmbuild'.


Creación del Archivo .spec

El archivo .spec en $HOME/rpmbuild/SPECS, contiene toda la informaciónnecesaria para poder llevar a cabo la creación del paquete. La estrucutra de este archivo es como sigue:

Cabecera
Summary: Un breve resumen del propósito del paquete.
Name: Nombre del paquete.
Version: La versión del paquete, que debe de coincidir con la versión que figura en el archivo tar.
Release: Representa el número de veces que le paquete ha sido reconstruido.
URL: La dirección web en donde puede hallarse el paquete.
Source: Representa la ruta en donde está ubicado el paquete seguido por el nombre del paquete.  Si no se coloca ninguna ruta, se asume que el paquete se halla en el directorio SOURCES.  En caso haya más de una fuente,  se indica con Source# en donde # es el número de la fuente que debe empezar en cero (0).
Patch: Nombre del parche con el que se está modificando la aplicación.  En caso haya más de un parche,  se indica con Patch# en donde # es el número del parche que debe empezar en cero (0).
License: Este campo representa la licencia del paquete.
Group: Es uno de los grupos de archivos a los cuales pertenece el programa.  La lista de grupos a los que puede pertenecer la aplicación puede hallarse en /usr/share/doc/rpm-X.X.X/GROUPS.
BuildRoot: Indica la ruta en la cual se desempacará el archivo de trabajo.
Requires: Si tu aplicación requiere de otros paquetes al momento de instalarse, es en esta sección en donde debes listarlos, separándolos por comas.
%description: Es en este lugar en donde se debe de colocar una descripción completa de la aplicación.
Shell Scripts
%prep: Extrae el código fuente y aplica cualquier parche necesario para la construcción del paquete.  Normalmente se hace uso de las siguientes macros:
%setup -q (en donde la opción q indica que sea una instalación "silenciosa"); aplicando dicha macro, se inicia el desempaquetado del paquete.
%patch#; indica el parche que se esta utilizando.
%build: Incluye los comandos necesarios para la construcción del paquete, por lo general viene acompañado de las siguientes líneas:
./configure o %configure
make
%install: Incluye los comandos necesarios para instalar el paquete
%clean: Suministra un comando para borrar el contenido del directorio BUILD.
%post: Indica el evento que debe de ocurrir una vez que el paquete ha sido instalado.
Lista de Archivos
%files: Contiene la lista de archivos que serán creados al momento de la instalación, para ello, se hace uso de las siguientes macros:
%{_bindir}: /usr/local/bin
%{_mandir}: /usr/share/man
%{_datadir}: /usr/share/info
%{_defaultdocdir}: directorio predeterminado para la documentación.
%defattr(permiso,usuario,grupo): especifica que los permisos de usuario y grupo se aplican a los archivos indicados en la sección %files.

%changelog: Suministra una sección para ingresar entradas indicando la fecha y cambios realizados en el paquete.  La sintaxis es como sigue:
* Fecha 'autor de la modificación' url
Descripción del cambio realizado.
  

Retomando el caso, se procede a crear un archivo "indent.spec" básico, que contendrá la información necesaria para que podamos crear el paquete.  La estructura del archivo es como sigue:

Summary: GNU indent
Name: indent
Version: 2.2.6
Release: 1
Source0: %{name}-%{version}.tar.gz
License: GPL
Group: Development/Tools
BuildRoot: %{_builddir}/%{name}-root

%description
The GNU indent program reformats C code to any of a variety of
formatting standards, or you can define your own.

%prep
%setup -q

%build
./configure
make

%install
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
/usr/local/bin/indent
%doc /usr/local/info/indent.info
%doc %attr(0444,root,root) /usr/local/man/man1/indent.1
%doc COPYING AUTHORS README NEWS

Copiar el Archivo indent-2.2.6.tar.gz

Se procede a copiar el archivo indent-2.2.6.tar.gz al directorio $HOME/rpmbuild/SOURCES.


Ejecutar el Comando rpmbuild -ba $HOME/rpmbuild/SPECS/indent.spec

Al ejecutar rpm-build:

- Accede al contenido del indent.spec.
- Ejecuta la sección %prep para desempacar el código fuente en un directorio temporal (por lo general ese directorio es el directorio BUILD) aplicándole cualquier parche que figure en el archivo spec.  El resultado será como sigue: $HOME/rpmbuild/BUILD/indent.2.2.6/
- Ejecuta la sección %build para compilar el código.
- Ejecuta la sección %install en donde borra el contenido del directorio definido en la sección Buildroot, para luego proceder a generar los binarios en el siguiente directorio: $HOME/rpmbuild/BUILD/indent-root/usr/local/bin.
- Lee la lista de archivos indicados en la sección %file, los procede a buscar, los agrupa y crea los paquetes RPM, tanto el binario como el de códigos.
- Ejecuta la sentencia dentro de la sección %clean para remover el contenido de los archivos instalados en el directorio temporal indicado en Buildroot.

Si no se hiciera uso del Buildroot, se estaría corriendo el riesgo de estar realizando una instalación real en tu sistema en lugar de hacer solo una instalación de prueba.


El resultado, la creación de dos (2) archivos:
- $HOME/rpmbuild/SRPMS/indent-2.2.6-1.src.rpm: Contiene el archivo spec, los archivos de código y los parches usados al momento de construir el paquete.
- $HOME/rpmbuild/RPMS/i386/indent-2.2.6-1.i386.rpm: Contiene el programa compilado y la información sobre como instalarlo.

 

Anterior: Creación de Paquetes RPM y deb (1)
Siguiente: Creación de Paquetes RPM y deb (3)


Referencias:

Wikipedia 

Plazalinux

http://www-128.ibm.com


 
< Anterior   Siguiente >