| Donaciones a La Comunidad | |
|
|
| Usuarios | Selecciona Idioma de la Interfaz:
Usuarios:
Ultimo: PatrickGreen
Hoy: 3
Ayer: 8
Total: 18684
En Línea:
Visitantes: 15
Usuarios: 0
Total: 15
 Eres un usuario anónimo. Puedes registrarte aquí
 Hemos recibido 5731733 Visitas En Todas Las Páginas desde Junio 2003 Gracias Por Tu Visita Monitor externo |
|
 | |
Creación de paquetes RPM
1. Introducción
Existen diferentes distribuciones de GNU/Linux y cada una tiene su manejador de paquetes, es decir, la forma en que se instalarán nuevas aplicaciones.
Pueden ser instalados desde las fuentes de la aplicación, es decir compilarlo a "mano" e instalarlo; o pueden ser desde un paquete para la distribución que se tenga en uso.
En este documento se tratará de explicar como compilar paquetes RPM, esto no te convertirá en Dios, un Gurú ni nada por el estilo, solo te ayudará a hacer más fácil la instalación de alguna aplicación
2. Preparación
Antes de empezar a compilar paquetes, debes configurar tu sistema para realizar dichas compilaciones, y de eso trata este punto.
La primer regla de oro en la construcción de paquetes RPM es que nunca se deben de construir como root, siempre se deben construir como usuario normal y la segunda regla es que siempre instales mediante el manejador de paquetes de la distribución que uses, es decir que si usas paquetes RPM siempre instales mediante RPM, si usas fuentes siempre uses fuentes para instalar la aplicación y no mezclar RPM con fuentes, aunque los path de los archivos quedan en la misma ubicación, no suelen encontrarse entre ellos.
Nuestro primero paso es crear un archivo llamado rpmmacros en nuestro directorio HOME:
$ touch .rpmmacros
Lo editas con tu editor favorito:
$ nano .rpmmacros
Y pegas las siguientes líneas:
%_topdir %(echo $HOME)/rpmbuild
%debug_package %{nil}
%packager Garsan
%distribution BasicosFC
%vendor garsan.ws
%_tmppath %{_topdir}/tmp
%_builddir %{_tmppath}
%_rpmtopdir %{_topdir}/%{name}
%_sourcedir %{_rpmtopdir}
%_specdir %{_rpmtopdir}
%_rpmdir %{_topdir}/RPMS
%_srcrpmdir %{_topdir}/SRPMS
%_rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm
%_signature gpg
%_gpg_path ~/.gnupg
%_gpg_name Garsan (GarsanWS)
%_gpgbin /usr/bin/gpg
De estas líneas lo más conveniente cambiar a tu preferencia son:
%packager - Puedes poner tu nombre o nick
%distribution - Puedes poner el nombre de tu repositorio o la distribución para la cual estas compilando
%vendor - Puedes poner tu correo o URL
Si no piensas firmar tus paquetes con GPG puedes quitar las siguientes líneas, si piensas firmar tus paquetes tendrias que modificar esas líneas para que se adapten a tus necesidades
%_signature gpg
%_gpg_path ~/.gnupg
%_gpg_name Garsan (GarsanWS)
%_gpgbin /usr/bin/gpg
Con este archivo estamos especificando en que directorios queremos que coloque los temporales mientras compila, los RPM terminados y los SRPMS. Su función no termina ahí, puedes agregar más opciones como el tipo de procesador en que se está compilando y varias más; en este documento solo manejaremos lo básico para que construyas un paquete básico.
Ya que tenemos el archivo .rpmmacros en nuestro HOME, copiamos la estructura que viene por default para root en nuestro HOME:
$ mkdir /home/tu_usuario/rpmbuild
$ cd /usr/src/redhat/
$ cp -r * /home/tu_usuario/rpmbuild/
$ cd /home/tu_usuario/
$ chmod 755 rpmbuild/* -R
3. Compilación
Llegamos a la parte buena, la compilación de los paquetes.
Antes de que inicies, debes revisar que tu sistema cuente con las librerias de desarrollo (paquete-devel.rpm) que necesita la aplicación que quieres compilar.
Si quieres compilar una aplicación que no tiene un paquete SRPM tienes que hacer una compilación previa al empaquetado, en los siguientes pasos te explico por que tienes que hacer esto.
Los RPM contienen un archivo en el cual especificas el modo de compilación, que cambios haz hecho, los archivos que tiene la aplicación ya compilada, dependecias y otras opciones.
Un archivo .spec puede ser como el siguiente:
Summary : Breve descripción de la aplicación
Name : El nombre de la aplicación
Version : La versión
Release : Sub-versión o numero de parche
License : La licencia
Group : El grupo de aplicaciones al que pertenece
Source : El nombre del archivo fuente
URL : La URL de la aplicación
BuildRoot : %{_tmppath}/%{name}-root
BuildRequires : Librerías de desarrollo que requiere al momento de compilar
Requires : Librerias o aplicaciones de las cuales depende
%description
Aqui puedes poner una descripción un poco más larga,
en donde expliques que es lo que hace esta aplicación, por ejemplo.
%prep
%setup -q
%build
%configure
make
%makeinstall
%clean
rm -rf %{buildroot}
%files
/bin/aplicacion
/usr/lib/aplicacion/lo_que_contenga
%changelog
* Wed Feb 24 2004 Garsan (garsan_AT_garsan.ws) - 2.4.2-3.garsan
- Construcción inicial para Fedora Core 1
Ya tienes tu HOME lista, tu archivo fuente comprimido y tu fichero .spec listo, pero... ¿Cómo sabes que archivos poner en %files? Pues para eso necesitas hacer una compilación previa como indiqué en pasos anteriores.
Primero tienes que descomprimir tus fuentes y hacer una compilación casi normal:
$ ./configure
$ make
Si no te marca ningún error ahora tienes que redirigir la instalación a un directorio:
$ make DESTDIR=/home/tu_usuario/rpmbuild/tmp/aplicacion install
Con esto hace una instalación dirigida a el directorio que le especificamos, de esta forma podemos ver que es lo que crea al momento de instalar, por ejemplo:
$ tmp/aplicacion/usr/lib/aplicacion/libreria1
$ tmp/aplicacion/usr/bin/aplicacion-bin
$ tmp/aplicacion/usr/share/man/aplicacion
Podemos incluir toda la lista de archivos o podemos usar comodines, por ejemplo:
%files
%{_libdir}/aplicacion/*
%{_bindir}/*
%{_mandir}/*
O sin comodines sería:
%files
%{_libdir}/aplicacion/libreria1
%{_libdir}/aplicacion/libreria2
%{_libdir}/aplicacion/libreria3
%{_bindir}/aplicacion-bin
%{_mandir}/aplicacion
¿Qué rayos son esas cosas que tienen %?
Son MACROS que se usan para especificar los directorios por defecto, para hacerlo un poco más uniforme y que tu paquete sea compatible con versiones anteriores o futuras, puedes poner el patch completo hacia el archivo que quieres incluir o bien usar un MACRO, lo más recomendable es un MACRO. También puedes usar MACROS para copiar, mover, borrar, etc.
Ahora si, ya tienes tus fuentes, tu HOME preparado y tu .spec listo ¿Qué sigue?
¡¡¡La compilación del RPM!!!
Dentro del directorio rpmbuild deberás hacer un directorio con el nombre de la aplicación, por ejemplo:
$ cd rpmbuild
$ mkdir aplicacion
Y dentro de este directorio colocar el .spec y la fuente de la aplicación que quieres compliar, por ejemplo:
$ cd rpmbuild/aplicacion
$ ls
aplicacion.tar.bz2 aplicacion.spec
Ya no te mareo tanto y vamos a la hora de la verdad, al momento en que verás si lo que haz hecho está bien. En una consola como usuario normal,escribes lo siguiente:
NOTA
Recuerda que no debes hacer la compilación como root sino como usuario normal.
$ cd rpmbuild/aplicacion
$ rpmbuild -ba aplicacion.spec
Si quieres firmar tu paquete (debes hacer modificaciones al .rpmmacros) sería:
$ cd rpmbuild/aplicacion
$ rpmbuild -ba --sign aplicacion.spec
Y empieza la preparación y compilación de tu aplicación, verás algo como esto:
$ rpmbuild -ba --sign xmule.spec
Enter pass phrase:
Pass phrase is good.
Executing(%prep): /bin/sh -e /home/jorge/rpmbuild/tmp/rpm-tmp.54455
+ umask 022
+ cd /home/jorge/rpmbuild/tmp
+ LANG=C
+ export LANG
+ unset DISPLAY
+ cd /home/jorge/rpmbuild/tmp
+ rm -rf xmule-1.7.4b
+ /usr/bin/bzip2 -dc /home/jorge/rpmbuild/xmule/xmule-1.7.4b.tar.bz2
+ tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd xmule-1.7.4b
++ /usr/bin/id -u
+ '[' 500 = 0 ']'
++ /usr/bin/id -u
+ '[' 500 = 0 ']'
+ /bin/chmod -Rf a+rX,g-w,o-w .
Executing(%build): /bin/sh -e /home/jorge/rpmbuild/tmp/rpm-tmp.24968
+ umask 022
+ cd /home/jorge/rpmbuild/tmp
+ cd xmule-1.7.4b
+ LANG=C
+ export LANG
+ unset DISPLAY
+ CFLAGS=-march=pentium4 -O3 -pipe -fomit-frame-pointer
+ export CFLAGS
+ CXXFLAGS=-march=pentium4 -O3 -pipe -fomit-frame-pointer
+ export CXXFLAGS
+ FFLAGS=-O2 -g -pipe -march=i386 -mcpu=i686
+ export FFLAGS
++ find . -name config.guess -o -name config.sub
++ basename ./config.guess
+ '[' -f /usr/lib/rpm/redhat/config.guess ']'
+ /bin/rm -f ./config.guess
++ basename ./config.guess
+ /bin/cp -
fv /usr/lib/rpm/redhat/config.guess ./config.guess
`/usr/lib/rpm/redhat/config.guess' -> `./config.guess'
++ basename ./config.sub
+ '[' -f /usr/lib/rpm/redhat/config.sub ']'
+ /bin/rm -f ./config.sub
++ basename ./config.sub
+ /bin/cp -fv /usr/lib/rpm/redhat/config.sub ./config.sub
`/usr/lib/rpm/redhat/config.sub' -> `./config.sub'
+ ./configure --host=i686-pc-linux-gnu
--build=i686-pc-linux-gnu
--target=i386-redhat-linux-gnu
--program-prefix=
--prefix=/usr
--exec-prefix=/usr
--bindir=/usr/bin
--sbindir=/usr/sbin
--sysconfdir=/etc
--datadir=/usr/share
--includedir=/usr/include
--libdir=/usr/lib
--libexecdir=/usr/libexec
--localstatedir=/var
--sharedstatedir=/usr/com
--mandir=/usr/share/man
--infodir=/usr/share/info
.........................................
Si no hay ningún error al momento de compilar, verás algo como esto:
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/jorge/rpmbuild/tmp/xmule-1.7.4b-2.garsan-root
Generating signature: 1005
Wrote: /home/jorge/rpmbuild/SRPMS/xmule-1.7.4b-2.garsan.src.rpm
Generating signature: 1005
Wrote: /home/jorge/rpmbuild/RPMS/xmule-1.7.4b-2.garsan.i386.rpm
Executing(%clean): /bin/sh -e /home/jorge/rpmbuild/tmp/rpm-tmp.34717
+ umask 022
+ cd /home/jorge/rpmbuild/tmp
+ cd xmule-1.7.4b
+ rm -rf /home/jorge/rpmbuild/tmp/xmule-1.7.4b-2.garsan-root
+ exit 0
Si ves las líneas que dicen Wrote: xxxxxxxxxxxxxxxxxx.rpm.........
¡¡¡FELICIDADES!!! tu paquete RPM está listo, solo te queda instalarlo y probarlo durante un tiempo, sino tienes errores y funciona como debería de funcionar, pues puedes empezar a distribuirlo en repositorios, anunciarlo en listas o como tu quieras. Si quieres ver un poco de información de tu paquete puedes hacerlo así:
$ cd rpmbuild/RPMS
$ rpm -qip paquete.rpm
Y la salida sería como esta:
Name : xmule
Relocations: (not relocateable)
Version : 1.7.4b
Vendor: garsan.ws
Release : 2.garsan
Build Date: vie 05 mar 2004 23:31:08 CST
Install Date: (not installed)
Build Host: garsan.garsan.ws
Group : Applications/Internet
Source RPM: xmule-1.7.4b-2.garsan.src.rpm
Size : 3814899
License: GPL
Signature : DSA/SHA1, vie 05 mar 2004 23:31:14 CST, Key ID 947e16e7475c436e
Packager : Garsan
URL : http://www.xmule.org/
Summary : Easy to use client for ED2K Peer-to-Peer Network based on eMule
Description :
xMule is an easy to use multi-platform client for ED2K Peer-to-Peer Network.
It is originally based on eMule, the popular windows-only client for the
same network.
Si quieres ver los archivos que tiene el RPM puedes hacerlo así:
$ rpm -qlp archivo.rpm
Y la salida sería:
/usr/bin/ed2k.xmule
/usr/bin/xmule
/usr/share/applications/xmule.desktop
/usr/share/doc/xmule-1.7.4b
/usr/share/doc/xmule-1.7.4b/AUTHORS
/usr/share/doc/xmule-1.7.4b/COPYING
/usr/share/doc/xmule-1.7.4b/ChangeLog
/usr/share/doc/xmule-1.7.4b/README
/usr/share/doc/xmule-1.7.4b/TODO
/usr/share/locale/de/LC_MESSAGES/xmule.mo
/usr/share/locale/ee/LC_MESSAGES/xmule.mo
/usr/share/locale/es/LC_MESSAGES/xmule.mo
/usr/share/locale/es_MX/LC_MESSAGES/xmule.mo
/usr/share/locale/fr/LC_MESSAGES/xmule.mo
/usr/share/locale/it/LC_MESSAGES/xmule.mo
/usr/share/locale/ko/LC_MESSAGES/xmule.mo
/usr/share/locale/pl/LC_MESSAGES/xmule.mo
/usr/share/locale/tr/LC_MESSAGES/xmule.mo
/usr/share/pixmaps/xmule.xpm
4. Macros
Los macros son muy útiles al momento de hacer un paquete RPM ya que nos ahorran trabajo.
Por ejemplo, si tenemos que escribir el nombre de la aplicación varias veces podemos usar el macro name:
%{name}
O podemos definir nuestros macros con variables que se usan varias veces en nuestro .spec; esto de hace en el principio de nuestro .spec
%define _kde_applnk /usr/share/applnk
Name : amsn
Version : 0_90
Release : 1.garsan
Group : Internet
Summary : Clon de Messenger
Source : %{name}-%{version}.tar.gz
URL: http://amsn.sf.net
Copyright : GPL
BuildRoot: %{_tmppath}/%{name}-root
BuildRequires: tcl-devel imlib-devel tk-devel
Requires: tcl tk imlib
Con las primeras lineas que tienen "%define" estamos indicando que macro definimos, por ejemplo estamos especificando que "_kde_applnk" corresponde a "/usr/share/applnk" y lo usamos como "%{_kde_applnk}"
mkdir -p $RPM_BUILD_ROOT%{_kde_applnk}
Algunas macros mas usadas en el empaquetado de RPMs son las siguientes:
Macros para directorios del sistema
MACRO DIRECTORIO
--------------------------------------------------
%{_sysconfdir} /etc/
%{_bindir} /usr/bin/
%{_libdir} /usr/lib/
%{_datadir} /usr/share/
%{_mandir} /usr/share/man/
%{_includedir} /usr/include/
%{_infodir} /usr/share/info/
%{_localstatedir} /var/
%{_libexecdir} /usr/lib/exec/
%{_prefix} /usr/
%{_sbindir} /usr/sbin/
Macros para comandos del sistema
MACRO COMANDO
--------------------------------------------------
%{__cat} /bin/cat
%{__perl} /usr/bin/perl
%{__rm} /bin/rm
%{__make} /usr/bin/make
%{__install} /usr/bin/install
%{__mkdir} /bin/mkdir
%{__mv} /bin/mv
%{__cp} /bin/cp
%configure ./configure
%makeinstall make install
Copyright © por .::Comunidad Songohack-Descargas, Phpnuke,php,recursos gratis::. Derechos Reservados. Publicado en: 2004-06-04 (3689 Lecturas) [ Volver Atrás ] |
|
|
|