Bienvenido(a) a Alcance Libre 06/10/2025, 10:56
Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
© 1999-2007 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.
Crear paquetería a través de rpmbuild no es tan complicado como algunos suponen. Aunque no se instala de modo predeterminado, rpmbuild es una herramienta que forma parte del paquete rpm-build y que se incluye en la mayoría de las distribuciones actuales que utilizan paquetería en formato RPM.
Este documento mostrará los procedimientos para:
Generar una clave GnuPG para firmar digitalmente los paquetes creados.
Configuración y creación de una jaula para rpmbuild.
Creación de archivos *.spec.
Uso del mandato rpmbuild.
Es indispensable contar con la paquetería de desarrollo mínima necesaria instalada en el sistema. Lamentablemente no hay recetas mágicas, si se pretende crear paquetería a partir de códigos fuente es necesario estar familiarizado con las bibliotecas compartidas necesarias, cabeceras de desarrollo, compiladores y otras herramientas de desarrollo relacionadas o requeridas por un software en particular. Un conjunto mínimo sería el siguiente:
Si utiliza Cent OS, White Box Enterprise Linux o bien Red Hat™ Enterprise Linux, necesitará correr lo siguiente para instalar el mínimo de paquetería:
yum -y install gcc* automake* autoconf* rpm-build rpm-devel gnupg
|
Si va a generar paquetería para GNOME, necesitará también instalar el mínimo de paquetería de desarrollo de GNOME:
yum -y install glib2-devel atk-devel pango-devel gtk2-devel libbonoboui-devel libgnomeui-devel gnome-vfs2-devel libwnck-devel gnome-panel-devel gnome-desktop-devel nautilus-devel gstreamer-devel gstreamer-plugins-devel
|
Si va a generar paquetería para KDE, necesitará también instalar el mínimo de paquetería de desarrollo de KDE:
yum -y install qt-devel arts-devel kdelibs-devel kdebase-devel kdenetwork-devel kdegraphics-devel kdemultimedia-devel |
Si además tiene instalado AL Desktop, puede instalar también el software restante:
yum -y install seahorse gpgme
|
Desde una sesión gráfica, inicie seahorse y de clic en en botón de «Nuevo» en el panel de «Opciones de primera vez».
Lo anterior iniciará un asistente de creación de claves.
Elija el nivel de seguridad como «Seguridad extra alta»
Especifique su nombre completo, un breve comentario opcional y su cuenta de correo electrónico permanente que se relacionará exclusivamente con la nueva clave.
Especifique una frase de paso que solo usted pueda recordar. Se recomienda utilizar espacios y signos de puntuación.
En la pantalla de «Fecha de caducidad», salvo que específicamente requiera lo contrario, especifique «Sin caducidad».
Tome nota de como parece exactamente el nombre de la llave, incluyendo paréntesis, espacios y otros símbolos, ya que se utilizarán en el siguiente procedimiento.
Jamás utilice la cuenta de root, sin importar la circunstancia, para crear o reconstruir paquetería en formato RPM. Esto puede resultar peligroso debido a que la configuración de algunos programas pueden tratar de instalar componentes en el sistema en lugar de el directorio especificado para rpmbuild, lo cual tiene diversas consecuencias de seguridad y de estabilidad para el sistema.
La jaula será creada de modo seguro dentro de una cuenta de usuario normal sin privilegios a fin de poder detectar e impedir que algunos procedimientos durante la creación de paquetes traten de instalar componentes no deseados en el sistema.
Utilizando cualquier editor de texto, genere el archivo ~/.rpmmacros, en el cual se definirán valores para algunas variables utilizadas por rpmbuild:
%debug_package: sirve para especificar si se anula o no la generación de paquetería de depuración. La paquetería de depuración solo es útil para los programadores a fin de localizar fallas en los programas empaquetados. Para la mayoría de los casos se especifica el valor %{nil} a fin de impedir se genere paquetería de depuración.
%_unpackaged_files_terminate_build: sirve para especificar si la construcción de un paquete se deberá interrumpir si hay componentes ignorados por el archivo *.spec. 0 deshabilita, 1 habilita. ¿Que valor se recomienda? la respuesta es obvia: no es deseable un paquete al cual le faltan componentes, así que se especificará 1.
%_signature: se utilizará gpg para firmar los paquetes resultantes.
%_gpg_path: ruta del directorio .gpg a utilizar. Este estará localizado dentro de la carpeta de inicio del usuario utilizado.
%_gpg_name: identidad a utilizar para firmar los paquetes resultantes. El formato utilizado es el mismo como aparece el nombre de su clave GnuPG en seahorse: Su Nombre (Breve comentario) <su cuenta de correo electrónico>
%_gpgbin: ruta del binario gpg, normalmente en /usr/bin/gpg
%_topdir: ruta donde se localiza la jaula para rpmbuild
%_tmppath: directorio de elementos temporales que será utilizado para simular instalaciones.
%packager: su nombre completo y dirección de correo electrónico o bien el URL de su sitio de red.
%distribution: nombre del producto o bien para especificar para que distribución de GNU/Linux se utilizará la paquetería.
%vendor: nombre de su empresa u organización.
%desktop_vendor: variable opcional (y no oficial) para definir el nombre de la empresa en el nombre algunos archivos, principalmente entradas de menú. Especifique el nombre corto de su empresa sin espacios.
A continuación un ejemplo del contenido del archivo ~/.rpmmacros, utilizando valores ficticios:
%debug_package %{nil}
|
Desde una terminal, genere la estructura de directorios necesaria utilizando lo siguiente:
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SRPMS,SPECS,TMP}
|
Los archivos *.spec contienen la información que utilizará rpmbuild para construir un paquete. Del contenido de estos dependerá que sea posible descomprimir, configurar, compilar, instalar virtualmente y empaquetar un software en particular a partir de un código fuente.
- Name:
- Se refiere nombre del paquete. No puede llevar espacios. Regularmente es el mismo nombre utilizado para el paquete del código fuente.
- Version:
- Se refiere al número de versión del paquete
- Release:
- número de lanzamiento o entrega
- URL:
- URL original del sitio de red del software que se va a empaquetar.
- Summary:
- Resúmen o descripción corta del paquete.
- License:
- Licencia o licencias utilizadas por el paquete.
- Group:
- Grupo o categoría de software al cual pertenece el paquete. Lista de grupos válidos:
Amusements/Games
Amusements/Graphics
Applications/Archiving
Applications/Communications
Applications/Databases
Applications/Editors
Applications/Emulators
Applications/Engineering
Applications/File
Applications/Internet
Applications/Multimedia
Applications/Productivity
Applications/Publishing
Applications/System
Applications/Text
Development/Debuggers
Development/Languages
Development/Libraries
Development/System
Development/Tools
Documentation
System Environment/Base
System Environment/Daemons
System Environment/Kernel
System Environment/Libraries
System Environment/Shells
User Interface/Desktops
User Interface/X
User Interface/X Hardware Support
- Buildroot:
- Ruta donde se realizará la instalación virtual, es decir:
%{_tmppath}/%{name}-%{version}-root
- Source:
- Se puede especificar solamente el nombre del paquete utilizado para el código fuente, aunque por norma se sugiere especificar URL exacto hacia el código fuente.
- BuildRequires:
- Lista separada por comas o espacios de componentes o paquetes requeridos para poder construir el software involucrado.
- BuildPreReq:
- Lista de componentes o paquetes que deben estar previamente instalados en el sistema antes de iniciar la compilación del software involucrado.
- Requires:
- Lista de paquetes de los cuales depende el software empaquetado para poder funcionar.
- PreReq:
- Lista de componentes o paquetes que deben estar previamente instalados en el sistema antes de iniciar la instalación del software involucrado.
- %description
- Descripción detallada acerca del paquete
- %prep
- Procedimientos, si los hubiere, requeridos antes de desempaquetar el código fuente. Regularmente no los hay.
%setup
- Procedimientos, si los hubiere, requeridos al desempaquetar o después de desempaquetar el código fuente. Regularmente aquí es donde se aplican parches y otros correctivos.
- %build
- Procedimientos necesarios para poder compilar desde el código fuente de un software en particular. Por lo general basta con un
%configure
y%__make
, pero se recomienda leer a detalle el instructivo de instalación de cada software en particular a fin de asegurar los procedimientos correctos para compilar el software.
- %install
- Procedimiento de instalación requerido para un paquete en particular. Se recomienda limpiar cualquier instalación previa utilizando
%__rm -fr %{buildroot}
. La instalación será virtual y se realizará dentro de ~/rpmbuild/TMP/ que es establecido por la variable %{buildroot}. Por lo general es suficiente%__make DESTDIR=%{buildroot} install
, sin embargo algunos software pudieran requerir instalación individual de algunos o todos sus componentes.
- %clean
- Procedimientos para limpiar aquello que ya no se necesita después de haber creado exitosamente el paquete RPM. Específicamente se refiere a la instalación virtual que se realizó dentro de ~/rpmbuild/TMP/. Para la mayoría de los casos es suficiente con utilizar
%__rm -fr %{buildroot}
.
- %preun
- Procedimientos que se deben correr justo antes de proceder a instalar un paquete. Se utiliza principalmente con paquetes que necesitan crear cuentas de sistema u otros preparativos.
- %post
- Procedimientos que se deben correr justo después de proceder a instalar un paquete. Ejemplos: Cuando los paquetes incluyen bibliotecas compartidas, se ejecuta ldconfig. Si un paquete incluye un esquema para GConf, se debe correr lo necesario para registrar el esquema.
- %postun
- Procedimientos que se deben correr justo después de proceder a desinstalar un paquete. Se utiliza principalmente con paquetes que necesitan correr tareas administrativas, como detener y/o dar de baja un servicio.
- %files
- Lista de todos los componentes del software empaquetado en sus rutas definitivas.
- %changelog
- Bitácora de cambios del archivo *.spec. Requiere un formato especial.:
* [Dia de la semana en abreviado y en inglés] [Mes abreviado en inglés] día año Nombre empaquetador <correo electrónico o URL de sitio de red>
- Algunos cambios
- Más cambios
- Otros cambios
Ejemplo:
* Sun Sep 25 2005 Fulano de Perengano <http://mi-sitio-güeb.algo/>
- Archivo *.spec inicial.
- Se añadieron cosas
- Se puso un guión para algo
Name: algo
|
Lista y descripción de opciones principales:
--sign
--clean
--target=[arquitectura]
-ba
-bb
-bp
-bc
-bi
--short-circuit
--rmspec
--rmsource
--rebuild
rpmbuild -bb algo.spec
rpmbuild -ba --clean --sign --rmspec --rmsource algo.spec
rpmbuild -bb *.spec
rpmbuild -ba --clean --sign --rmspec --rmsource *.spec
rpmbuild --rebuild cualquier-paquete.src.rpm
rpmbuild --rebuild --clean --sign --rmspec --rmsource cualquier-paquete.src.rpm
Acceda hacia http://www.nano-editor.org y descargue el código fuente de la más reciente versión estable del editor de texto Nano.
Coloque el *.tar.gz del código fuente dentro del directorio ~/rpmbuild/SOURCES/
mv nano-1.2.5.tar.gz ~/rpmbuild/SOURCES/
Cambie hacia el directorio ~/rpmbuild/SPECS/
cd ~/rpmbuild/SPECS/
Con cualquier editor de texto simple, genere el archivo ~/rpmbuild/SPECS/nano.spec con el siguiente contenido (al terminar, por favor verifique sintaxis línea por línea):
Name: nano
|
Para poder construir nano, necesitará tener instalado los paquetes ncurses-devel (cabeceras de desarrollo para ncurses), glibc-devel (cabeceras de desarrollo para C) y gcc (compilador de GNU.org). De ser necesario, proceda a instalar éstos:
yum -y install ncurses-devel glibc-devel gcc
Utilice lo siguiente para generar los paquetes correspondientes:
rpmbuild -ba nano.spec
Suponiendo que utiliza una computadora con microprocesador compatible con Intel, al terminar el proceso, encontrará el paquete binario RPM dentro del directorio ~/rpmbuild/RPMS/i386/
y el paquete *.src.rpm dentro del directorio ~/rpmbuild/SRPMS/
.
Utilizará el mismo archivo *.spec del ejercicio pasado.
Utilice lo siguiente para generar los paquetes correspondientes, ingresando la clave de acceso para GnuPG cuando le sea requerida:
rpmbuild -ba --clean --sign nano.spec
Suponiendo que utiliza una computadora con microprocesador compatible con Intel, al terminar el proceso, encontrará el paquete binario RPM dentro del directorio ~/rpmbuild/RPMS/i386/
y el paquete *.src.rpm dentro del directorio ~/rpmbuild/SRPMS/
.
Última Edición: 09/07/2007, 13:41| Hits: 31,796