Tutorial SUSE Build
De openSUSE, la enciclopedia libre.
| Si desea información acerca de «OpenSUSE Build Service», el equivalente online de este procedimiento, vea Build Service/Tutorial. |
Tabla de contenidos |
Introducción
Este documento es un resumen de la estructura del programa «build» de SUSE y de cómo construir paquetes RPM para openSUSE. Esta información le ayudará a configurar su propio entorno de construcción temporal. Las primeras cuatro partes de este documento muestran el funcionamiento de forma general, seguidos de varios ejemplos que podrá probar..
Tenga cuidado. Esto no es lo mismo que usar el servicio «build» en sí. Para esto vea Build_Service.
Prerequisitos
Debería tener un buen conocimiento acerca de la creación de RPMs. La intención de este documento no es la de reemplazar la documentación de RPM. Ya hay muchos documentos HOWTO, guías y libros que cumplen este propósito, vea el párrafo de recursos para obtener enlaces relacionados con «RPM».
También debería tener alguna experiencia con las herramientas relacionadas con PGP, especialmente GNU Privacy Guard (gpg) ya que es la implementación más utilizada de OpenPGP. Explicaremos por qué PGP es tan importante más adelante cuando se hablemos de la firma de paquetes. Para firmar paquetes necesitará su propia clave PGP antes de poder utilizar el entorno de construcción de paquetes de openSUSE.
Y por supuesto deberá estar familiarizado con el entorno de código fuente que su proyecto utiliza para su paquete. La estructura de openSUSE build es capaz de evitar y «rodear» algunos errores habituales de los mantenedores de paquetes, pero conocer las herramientas make, autoconf, imake u otros mecanismos de configuración de código fuente será de gran ayuda a la hora de trabajar con paquetes.
Requirements
Es sencillo. Necesitara 3GB de espacio de disco duro y nuestra herramienta «build». Es todo.
Necesitará 3 GB de espacio en disco porque la estructura build de SUSE utilizará una instalación separada de linux en su disco duro como entorno para construir su paquete. Este entorno aislado tiene una gran ventaja: la construcción de un paquete no interferirá con su instalación actual de linux. La única desventaja es que necesitará 3 GB de espacio (temporal) en disco para cada entorno de construcción. Pero con los tamaños de disco actuales, esto no debería ser un problema.
La herramienta build configura un entorno de construcción en un lugar dado y luego construye el paquete en ese entorno. El entorno de construcción consiste de un sistema base y cualquier paquete adicional que indique el archivo spec del RPM.
Flujo de trabajo
Los siguientes pasos son un esquema de un flujo de trabajo habitual para la construcción de un paquete. Por supuesto que un ejemplo de la vida real fallaría en alguno de los pasos y tendría que repetirlo hasta que funcione correctamente. Este esquema simplemente le dará una visión global de lo que intentamos hacer.
Paso uno - Instalar los requisitos
Instale los siguientes paquetes, si no los tiene ya instalados, de su origen de instalación openSUSE mediante YaST:
- build
- gpg
Paso dos - Configurar build
Configure la herramienta build. Hay algunos ajustes que tendrá que retocar para que coincidan con su entorno local, por ejemplo:
- de dónde obtener los paquetes RPM para montar el entorno de construcción
- cuál es el nombre del directorio raíz de build
y cosas similares.
Paso tres - Crear el directorio de origen
Cree un directorio en algún lugar que esté accesible a usted y a root. Este será el lugar en el que dejará los archivos utilizados para construir el paquete. Puede utilizar cualquier lugar. Sin embargo debe ser accesible también para root ya que solamente root puede iniciar la configuración del entorno de build. Pero no quiere trabajar siempre como root en el paquete, por lo que necesita un lugar compartido.
Paso cuatro - Obtener los archivos fuente del proyecto
Obtenga los archivos fuente necesarios para construir el paquete. La mayoría de los proyectos proporcionan archivos fuente en archivos tar comprimidos.
Paso cinco - Crear el archivo spec
Ahora que dispone de los archivos fuente deberá seguir el proceso habitual de creación de RPMs. Cree un archivo spec para el paquete.
Paso seis - Construir el paquete
Después de que haya creado el archivo spec es el momento de probar si funciona. Cámbiese a la cuenta root y acceda al directorio en el que están sus archivos spec, código fuente y parches. Ahora inice «build».
Paso siete - Comprobar el paquete
Después de que «build» haya tenido éxito, deberá comprobar la funcionalidad de su paquete.
Archivos spec
Los archivos spec de RPM deberán cumplir las Convenciones de paquetes de openSUSE. Puesto que esto es un asunto bastante complejo de por sí existe un documento aparte acerca de él. Siga las instrucciones de este documento con detenimiento cuando cree su archivo spec.
Encontrará algunos archivos spec de ejemplo en el SVN de Build Service.
También encontrará algún documento en IBM developerWorks acerca de este tema: Parte 1 y Parte 2.
Configuración
Variables de entorno de «build»
- BUILD_DIST
La distribución para la que desea construir paquetes
- BUILD_RPMS
Indica dónde se supone que están los RPMs de openSUSE: si solamente ha montado el DVD de openSUSE, esta variable debería contener «<punto_de_montaje del_DVD>/suse». Si el DVD ha sido copiado a un directorio, esta variable debería contener «<ese_directory>/suse».
El valor predeterminado de BUILD_RPMS es /media/dvd/suse
- BUILD_ROOT
El directorio chroot aislado en el que se construirá el paquete rpm.
El valor predeterminado de BUILD_ROOT es /var/tmp/build-root
- BUILD_RPM_BUILD_STAGE
Estas son las opciones reales que se pasarán a «rpmbuild» (consulte la página man de rpmbuild para obtener una lista completa de estas opciones)
El valor predeterminado de BUILD_RPM_BUILD_STAGE es '-ba' (es decir, (build all) construir paquetes binarios y de código fuente después de realizar los pasos %prep, %build e %install).
Ejemplos
Vea a continuación unos ejemplos reales de diferentes grupos de paquetes de ejemplo y de características concretas de paquetes.
Paquetes KDE
BuildRequires: kdelibs3-devel update-desktop-files
Name: kvpnc License: GPL Group: Productivity/Networking/System Summary: GUI frontend for openswan and vpnc Version: 0.7.2 Release: 1 URL: http://home.gna.org/kvpnc/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Source0: %name-%{version}.tar.bz2
%description The application can create configurations for various kinds of VPN connections. You should install also the "vpnc" or "openswan" package.
%prep # extract the source and go into the kvpnc-0.7.2 directory %setup -q # source the standard build enviroment as defined in kdelibs3 package . /etc/opt/kde3/common_options # replace the admin/ folder with the version from kdelibs3 (will work for sure with # current autoconf and automake) and create Makefile.in and configure script. update_admin --no-unsermake
%build # source the standard build enviroment as defined in kdelibs3 package . /etc/opt/kde3/common_options ./configure $configkde --disable-final # do compile with the number of jobs given to the --jobs parameter of the build script. make %{?jobs:-j%jobs}
%install iconv -f iso8859-1 -t utf-8 src/kvpnc.desktop > w && mv w src/kvpnc.desktop # install all files into the BuildRoot make DESTDIR=$RPM_BUILD_ROOT install rm -rf $RPM_BUILD_ROOT/opt/kde3/share/doc/HTML/kvpnc # updates the .desktop file. It applys additional translations and Categories for a # proper position in the KDE menu %suse_update_desktop_file %name System Network # does find all localisation files and adds proper database attributes to them %find_lang %name
%clean # clean up the hard disc after build rm -rf $RPM_BUILD_ROOT
%files -f %name.lang %defattr(-,root,root) %dir /opt/kde3/share/icons/hicolor/16x16/apps %dir /opt/kde3/share/icons/hicolor/32x32/apps /opt/kde3/bin/kvpnc /opt/kde3/share/appl*/*/kvpnc.desktop /opt/kde3/share/apps/kvpnc /opt/kde3/share/icons/*/*/*/kvpnc*.png
Paquetes Gnome
Las directrices de creación de paquetes Gnome se han movido a la página de empaquetado Gnome.
Paquetes Perl
Los paquetes Perl son bastante sencillos y parecidos de empaquetar porque prácticamente están preparados para el archivo CPAN.
Name: perl-Curses
Version: 1.12
Release: 1
# define the name from CPAN
%define cpan_name Curses
# do this package was known as "perl_cur" in old times. So we do need to Provide and Obsolete
# this package. YaST will install this package during update instead of the old one in this way.
Provides: %cpan_name
# we better require the exact perl version, which was used to create this package
Requires: perl = %{perl_version}
Group: Development/Libraries/Perl
License: Artistic License, Other License(s), see package
URL: http://cpan.org/modules/by-module/Curses/
Summary: A Dynamic Loadable Curses Module for Perl5
Source: %cpan_name-%{version}.tar.bz2
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
This is a dynamic loadable curses module for Perl5. This package can
be found at any CPAN archive.
%prep
%setup -q -n %cpan_name-%{version}
%build
perl Makefile.PL OPTIMIZE="$RPM_OPT_FLAGS -Wall"
make
make test
%install
make DESTDIR=$RPM_BUILD_ROOT install_vendor
%perl_process_packlist
%clean
# clean up the hard disc after build
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
%doc Artistic Copying README
%doc %{_mandir}/man3/*
%{perl_vendorarch}/%cpan_name.pm
%{perl_vendorarch}/auto/%cpan_name
/var/adm/perl-modules/%{name}
Recursos
- Package Conventions
- Maximum RPM - A book about the RPM Package Manager
- RPM HOWTO
- RPM Guide by Eric Foster-Johnson
- build HOWTO By Paul MacKay
- RPM install/uninstall script reference
- Presentation containing a good overview about make and autoconf by Stefan Hundhammer
- rpmbuild(8) man pages
- build(1) man pageses:Tutorial SUSE Build

