From Mageia wiki
Jump to: navigation, search
Drakconf multiflag.png
Otros idiomas
Deutsch ; English ; Español ; Français
Esta pagina es un borrador..
Requiere mejoras. Si quiere mejorarla, solo ingrese y presione en la pestaña Edit.

Por favor quite {{Draft-es}}, cuando este seguro de que la pagina esta completa y correcta.


Vea otras paginas consideradas como borradores, u otras paginas que se necesitan mejorar y revisar

¿Por qué empaquetar?

Las personas que escriben software normalmente lo ponen en su sitio web y le dicen a los usuarios como compilarlo. Posteriormente, introducen nuevas funcionalidades, algunas veces opcionales (lo que introduce nuevas dependencias), y entender como compilar de la forma que se necesita se va haciendo cada vez más difícil. Aquí es donde los mantenedores de paquetes intervienen. En una distribución binaria, empaquetamos los programas compilados, algunas veces los dividimos en partes para las funcionalidades opcionales, de este modo las personas solo tienen que instalar el paquete y el programa funcionara (asumiendo que hemos realizado nuestro trabajo correctamente).

Empaquetar no es un trabajo simple y el paquete configura la aplicación de modo que sea aceptable para la mayoría de los usuarios de alguna distribución GNU/Linux en particular, lo que significa que , de ser posible, siempre es mejor instalar paquetes creados específicamente para su distribución.

Si desea conocer más sobre el empaquetado, y tal vez sobre como empaquetar su propia aplicación, ¡continué leyendo!

Entendiendo el empaquetado

En términos generales, empaquetar es el proceso de automatizar el trabajo de compilación, con todo lo que implica como el enlace de dependencias. En términos prácticos se compila una aplicación y se empaqueta junto con scripts y otras informaciones requeridas para instalarse en el sistema sin requerir conocimientos especializados en software.

Términos específicos

En orden alfabético:

arch arquitectura del procesador, p. ej: i586 (32bit) o x86_64 (64bit)
build (compilar) el proceso de convertir un paquete rpm fuente (SRPM) en un paquete RPM instalable.
buildrequires palabra clave en el archivo spec para designar los paquetes requeridos para compilar (build) un paquete.
p.ej. las bibliotecas gtk para las aplicaciones Gnome
dependencies (dependencias) todos los paquetes requeridos para construir un paquete RPM (buildrequires), o para ejecutar un paquete RPM instalado (requires)
desktop file (archivo desktop) un formato de archivo que define los objetos para el menú de aplicaciones
patch (parche) un archivo que lista los cambios que serán aplicados a otro(s) archivo(s) en el SRPM, para solucionar problemas o añadir nuevas características
provides (proporciona) palabra clave en el archivo spec para las funciones proporcionadas por el paquete RPM, normalmente el nombre de algún paquete (casi siempre obsoleto) RPM.
RPM un formato de empaquetado (originalmente Redhat Package Manager -Administrador de Paquetes de Redhat-, actualmente administrado de paquetes RPM).
Un archivo RPM contiene todo lo necesario para instalar algún software en particular. Tienen el sufijo .rpm.
requires (requisitos) una palabra clave del archivo spec para paquetes o funciones requeridos para que el paquete RPM funcione adecuadamente tras instalarlo.
spec el archivo .spec dentro del SRPM contiene instrucciones sobre como construir uno o más paquetes RPM
SRPM o src.rpm paquete rpm funte, solo contiene fuentes + parches + archivo .spec . Es utilizado para generar (build) uno o más archivos RPM instalables.
suggests (sugerencias) palabra clave del archivo spec para designar a otros paquetes que se sugiere instalar junto con otro paquete
tarball un archivo con las fuentes. Originalmente se encontraban en formato 'tar'
upstream los desarrolladores (o el sitio web) actuales (generalmente los originales) del software que esta empaquetando

¿Que es un paquete RPM?

Generalmente una biblioteca y/o un programa, alguna documentación, pagina del manual, etc...

P. ej.

  • /usr/lib64/libfoo.so
  • /usr/bin/foo
  • /usr/share/doc/foo/README
  • /usr/share/man/man1/foo.1

¿Que es un paquete SRPM?

Un paquete SRPM frecuentemente contiene un tarball, y un spec, posiblemente parches, y algunas veces archivos adicionales (p. ej: archivos desktop o iconos)

P. ej.

  • SPECS/foo.spec
  • SOURCES/foo-2.3.5.tar.bz2
  • SOURCES/foo-2.3.5-path-to-fix-specific-bug.patch
  • SOURCES/foo.desktop
  • SOURCES/foo.png

Fácil y Rápido: Como obtener un RPM de un SRPM

Un paquete SRPM son las fuentes sin compilar y es independiente de la arquitectura, mientras que los RPM son binarios compilados y por lo general son dependientes de la arquitectura.

rpmbuild --rebuild file.src.rpm

Esto no instala las buildrequires, necesitara instalarlas manualmente.

Información útil

Un archivo RPM normalmente luce así: foo-2.3.5-2.mga1.x86_64.rpm

  • name: foo
  • version: 2.3.5
  • release: 2
  • disttag: mga
  • distrelease: 1
  • arch: x86_64
  • extension: rpm

Un archivo SRPM generalmente luce así: foo-2.3.5-1.mga1.src.rpm

  • name: foo
  • version: 2.3.5
  • release: 1
  • disttag: mga
  • distrelease: 1
  • extension: src.rpm

(o podría verlo como arch == src)

Un tarball nomalmente luce así: foo-2.3.5.tar.bz2

  • name: foo
  • version: 2.3.5
  • extension: tar.bz2

Como podrá ver el nombre (name) y la versión provienen directamente del proyecto (upstream), nosotros no modificamos esto de ninguna manera. release (numero de publicación) es un numero que empieza en 1 y se incrementa si publicamos una actualización con la misma versión.

Un SRPM puede producir más de un RPM

Por ejemplo, el paquete foo-2.3.5-2.mga1.src.rpm puede producir:

  • foo-2.3.5-2.mga1.x86_64.rpm : paquete principal que contiene un binario
  • lib64foo2-2.3.5-2.mga1.x86_64.rpm : un paquete que contiene un biblioteca necesaria
  • foo-data-2.3.5-2.mga1.noarch.rpm : un paquete (independiente de arquitectura) que contiene datos tales como ejemplos del uso del paquete foo
  • foo-qt4-2.3.5-2.mga1.x86_64.rpm : un paquete opcional para soporte a Qt4 (KDE)
  • foo-gtk-2.3.5-2.mga1.x86_64.rpm : un paquete opcional para soporte a GTK (Gnome)
  • foo-devel-2.3.5-2.mga1.x86_64.rpm : un paquete que contiene cabeceras (header) (normalmente son dependencias de construcción -buildrequires- de otros paquetes)
  • foo-debug-2.3.5-2.mga1.x86_64.rpm : un paquete generado autmaticamente para depurar foo

Ejemplo A: Preparativos y construcción de su primer rpm

Esto es lo que proponemos:

  • comenzar con un paquete existente en su distribución (por ejemplo, la más reciente versión de Mageia).
  • Tomemos por ejemplo, 'TeXworks' que es un IDE de LaTeX .

Al terminar esta sección sera capaz de:

  • verificar si un software ya esta empaquetado
  • tener un ambiente de empaquetado funcional
  • crear exitosamente un paquete
  • adquirir algo de comprensión sobre las dependencias de construcción y los prerequisitos (utilizando rpm, urpmq y entendiendo la estructura de directorios)
  • crear un ambiente para empaquetar software para su actual distribución. El siguiente paso es hacer que lo revisen y enviarlo para poder tener acceso posteriormente al sistema de construcción(build-system)

Preparación preliminar

Por favor siga esta guía para los preparativos preliminares.

Encontrar .rpm y src.rpm

A partir del nombre de la aplicación "TeXworks" encontrar el nombre del rpm:

  • Ya sea mediante rpmdrake (en el cuadro de busqueda)
    • rápidamente encontrara que el nombre del paquete es texworks
  • o utilizando urpmq (o rpm si lo tiene instalado) para encontrar paquetes con nombres similares:
urpmq -a -y TeX
  • Si se produce una larga lista de paquetes o no produce ningun resultado, pruebe modificar la búsqueda a una más precisa o más entendible:
urpmq -a -y works

Encontrar el archivo src.rpm:

  • Ya sea mediante rpmdrake (si ha configurado el repositorio src)
  • o tecleando
    urpmq -i texworks
    en la ventana de una terminal. Utilizar la linea de comandos no es tan difícil como parece e incluso puede copiar y pegar los comandos que aparecen en esta guía para facilitarle las cosas
    • asumiremos que ha encontrado esto Source RPM  : texworks-0.4.5-1.mga4.src.rpm

Crear el entorno para empaquetar

Si esta intentando construir un paquete para un software escrito en c, necesitara instalar el paquete task-c-devel . Si el software esta escrito en c++ necesitara instalar el paquete task-c++-devel . Al instalar estos paquetes se instalaran también varios más.

Instale el paquete rpm-build :

[root@localhost ~]# urpmi rpm-build

Esto pedirá un montón de dependencias, solo conteste "S" .

También puede instalar bm un administrador de empaquetado más amigable.

Ahora a crear la estructura de directorios:

mkdir -p ~/rpmbuild/{SRPMS,SOURCES,SPECS,tmp}

Posteriormente al instalar un paquete fuente (.src.rpm) o al construir un paquete, se crearan algunos directorios como BUILD, BUILDROOT y RPM.

Entender la estructura de directorios

Una vez obtenido el nombre del src.rpm puede descargarlo de alguno de nuestros repositorios:

cd ~/rpmbuild/SRPMS

wget ftp://ftp.mirrorservice.org/pub/mageia/distrib/cauldron/SRPMS/core/release/texworks-0.4.5-1.mga4.src.rpm

rpm -ivh texworks-0.4.5-1.mga4.src.rpm

Advertencia, esto no instala los binarios; extrae el spec/tarball+parches en los directorios apropiados.

Instalar las dependencias de construcción

Los paquetes dependen de otros paquetes en varias formas. Para poder construir un paquete debería tener instalados los paquetes requeridos para ello. En muchos casos esos paquetes tendrán el sufijo -devel lo que los identifica como la versión para 'desarrollo' del paquete. Si alguno de los paquetes necesarios no esta instalado cundo (re)construya el paquete vera un mensaje que identifica la causa del problema. En muchos casos estos mensajes diran explicitamente que paquete falta, pero en ocasiones el mensaje puede ser bastante críptico. Afortunadamente es bastante facil instalar los paquetes necesarios.

cd ~/rpmbuild/SPECS
su
urpmi texworks.spec
exit

El comando 'su' le dara permisos de administrador(root), 'urpmi nombre-paqute.spec' instalara los paquetes necesarios. El comando exit lo regresara a su sesión de usuario.

(Re)Construir el src.rpm para crear un rpm

cd ~/rpmbuild/SPECS
rpmbuild -ba texworks.spec

Revise ~/rpmbuild/RPMS/i586 (o x86_64 según la arquitectura de su sistema): encontrara los paquetes creados.

 bm -l 

también reconstruirá el paquete si esta en le directorio actual.

Ejemplo B: Actualizar una RPM a la versión más reciente

Encontrar la versión más reciente del software

Siguiendo con el ejemplo anterior:

  • urpmq -i texworks # muestra lo siguiente:
    URL        : http://www.tug.org/texworks/
  • revise la versión estable (stable) más reciente, el sitio muestra 0.4.X?

Construir el paquete para la nueva versión

De la sección anterior ya cuenta con:

  • un archivo .spec
  • una archivo tarball
  • tal vez algunos parches (compruebe si los desarrolladores los han tomado en cuenta)
  • (detalles sobre directorios y contenido con algo más de explicación)

Para continuar,

  • realice los cambios apropiados (actualice la versión del software y del paquete en el spec, coloque el tarball más reciente en el directorio SOURCES)
  • e intente reconstruir hasta que no se generen errores ni advertencias(errors / warnings)
  • ya con el .spec actualizado ejecute
    rpmbuild -ba texworks.spec
    hasta que se construya el archivo RPM
  • ¡No olvide hacer una instalación de prueba para asegurarse de que funciona!