Pasos Previos a la Creación de PaquetesPreviamente a la creación del paquete RPM, es necesario verificar que se cumpla cada uno de los siguientes puntos: El Árbol de DirectoriosEs 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-buildVerificar 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 $HOMEPara 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 %_topdirLa 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 .specEl 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.gzSe 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.specAl 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
|