Mostrando entradas con la etiqueta rpm. Mostrar todas las entradas
Mostrando entradas con la etiqueta rpm. Mostrar todas las entradas

martes, 28 de abril de 2009

Crear RPMs, lo peor del infierno

Lo peor de la sección de RPMs es crear estos...

Para estoy hay que seguir varios pasos:

  1. Crear una firma GPG, (opcional y no necesario para el examen de RHCE)
    Hay que instalar GPG con yum install gnupg, luego hay que generar la firma GPG con gpg --gen-key, se siguen las instrucciones (es descriptivo e intuitivo), así que no hay de que quejarse). Una vez creada nuestra firma hay que exportarla con gpg --output gpgkey.gpg --armor --export "tu mail" y luegro agregarla con rpm --import gpgkey.gpg
  2. Instalar RPMbuild y preparar el entorno de construcción
    Bueno, esto es simple, es solo cuestión de instalar el programa con yum install rpm-build, y crear el archivo de configuración .rpmmacros:
    %debug_package %{nil}
    %_unpackaged_files_terminate_build 1
    %_signature gpg
    %_gpg_path %(echo "$HOME")/.gnupg
    %_gpg_name Tu nombre que pusiste al momento de generar la clave GPG (el comentario)
    %_gpgbin /usr/bin/gpg
    %_topdir %(echo "$HOME")/rpmbuild
    %_tmppath %(echo "$HOME")/rpmbuild/TMP
    %packager Nombre como quieras
    %distribution Nombre de tu distribución
    %vendor su nombre o nombre de su empresa aqu
    í
    Luego hay que crear los directorios para la construcción de RPMs
    mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SRPMS,SPECS,TMP}
    mkdir -p ~/rpmbuild/RPMS/{athlon,i386,i586,i686,noarch}
  3. Crear un archivo .spec
    Esto es lo mas complejo de todo, ya que aquí radica el conjunto de instrucciones que se ejecutan al momento de crear el RPM. Los archivos .spec contienen las siguientes secciones:
    Name: (nombre de la aplicación)
    Version: (versión)
    Release: (número de revisión)
    URL: (sitio web del programa)
    Summary: (descripción del programa)
    License: (licencia)
    Group: (categoría a la que pertenece)

    Buildroot: %{_tmppath}/%{name}-%{version}-root
    Source: (URL para descargar el paquete con el código fuente)
    BuildRequires: (paquetes necesarios durante la compilación del programa)
    BuildPreReq: (paquetes necesarios antes de la compilación del programa)
    Requires: (paquetes necesarios antes de instalar del programa)
    PreReq: (paquetes necesarios durante la instalació del programa

    %description
    (otra vez, descripción del programa)

    %prep
    (procedimientos a ejecutar antes de desempaquetar el programa)
    %setup -q
    (procedimientos después de desempaquetar el programa, como aplicar parches)

    %build
    (procedimiento para compilar el programa, usualmente las siguientes dos lineas son lo necesario)
    %configure --prefix=/usr
    %__make

    %install
    (procedimientos para instalar el programa en las carpetas que corresponden, normalmente con esto basta)
    %__make DESTDIR=%{buildroot} install

    %clean
    (procedimientos para limpiar cualquier desorden que se haga al hacer el RPM)
    %__rm -fr %{buildroot}

    %preun
    (procedimientos antes de instalar el paquete, como crear cuentas de usuario especiales para el programa)

    %post
    (procedimientos después de instalar el paquete)

    %postun
    (procedimientos que se ejecutan después de borrar un paquete para que no quede rastro)
    %files
    (archivos que forman parte del archivo

    %changelog
    (cambios que se hayan hecho, se agregan con el siguiente formato)
    * Sun Sep 25 2005 Nombre
    - Cambio
  4. Construir el RPM
    Lo siguiente es crear el RPM en si, usualmente para crear un sRPM y un RPM, además de firmarlo lo mínimo sera el comando
    rpmbuild --sign --target=(arquitectura) -ba (nombre del archivo .spec)
    Dónde arquitectura puede ser: athlon, i386, i586, i686, noarch, x86_64, ia64.
Este tutoríal fue construido gracias a:
http://www.linuxparatodos.net/portal/staticpages/index.php?page=como-rpmbuild
http://www.linuca.org/body.phtml?nIdNoticia=88
http://www.debuntu.org/how-to-import-export-gpg-key-pair

Verificar RPM

En la base de datos RPM se guarda información de todos los archivos instalados con RPMs, así que se puede verificar si un archivo ha sido modificado o todo el paquete en su totalidad con

rpm --verify


Y sus diferentes switches

Seguridad RPM

RPM tiene un mecanismo de seguridad sencillo a mi forma de verlo, se firman los paquetes con GPG y luego se verifica si es confiable un paquete con las firmas ya guardadas.

rpm --import

Sirve para guardar una firma GPG

rpm --checksig


Sirve para verificar si el paquete es confiable de cuerdo a las firmas ya guardadas.

RPM Query

RPM Query (rpm -q) es el comando que nos permite saber información de los paquetes instalados en el sistema, tiene varias opciones

  • -q
    Es solo para verificar si el paquete esta instalado y si lo esta cual es su versión
  • -qi
    Proporciona información general del paquete
  • -qf
    Verifica si un archivo es parte de algún paquete
  • -qc
    Muestra los archivos de configuración del paquete
  • -ql
    Muestra todos los archivos contenidos en el paquete
  • -qa
    Lista todos los paquetes instalados
  • -qR
    Lista las dependencias del paquete

RPM, aun ahora es un infierno

A pesar de los avances que se han hecho para evitar el dependency-hell, RPM sigue siendo algo problemático ya que es complejo una vez visto a profundidad, el hecho de instalar un paquete o actualizarlo es sencillo, pero mas alla de esto ya hay problemas.