Empaquetado RPM. Parte 3: empaquetando LÖVE

Efectuaremos la primera práctica de empaquetar con RPM, y será empaquetando el motor del juego que queremos jugar. Sin él, el juego no funcionaría.

All you need is LÖVE

LÖVE es un motor para juegos 2D escritos en Lua, y Not Tetris 2 es un juego hecho para dicho motor. Debido a dependencias basadas en libmpg123 no se encuentran en los repositorios oficiales, así que es idóneo para el tutorial.

Los ficheros SPEC disponibles en openSUSE me han servido de inspiración.

Descargar el código fuente

Habrá que descargar las fuentes y meterlas en la carpeta SOURCES.

cd ~/rpmbuild/SOURCES
wget https://bitbucket.org/rude/love/downloads/love-0.7.2-linux-src.tar.gz

Crear una plantilla de spec en blanco

Este comando creará love.spec. En RPM es bastante importante el nombre de los ficheros, ya que su nomenclatura está estandarizada para que indique muchas cosas, como su arquitectura, versión, lanzamiento, distro, etc.

cd ~/rpmbuild/SPECS
rpmdev-newspec love

Abriremos el recién creado fichero ~/rpmbuild/SPECS/love.spec. Veréis que es una plantilla en blanco. La primera parte creo que es bastante autoexplicativa. La rellenaremos con la información que se encuentra en su página oficial.

Rellenar la plantilla y crear nuestro primer SPEC

Os pongo cómo queda el fichero completo con un montón de comentarios que os explican cada sección:

# Nombre del paquete.
# De acuerdo al estándar, quitamos la diéresis a la "o".
Name: love

# Versión según el autor original del paquete (upstream)
Version: 0.7.2

# Versión de empaquetado. Cada vez que modificamos el paquete, sumamos uno a
# este número. De este modo, yum sabe que debe actualizarlo.
Release: 1%{?dist}

# Descripción breve del paquete
Summary: LÖVE is a free 2D game engine for easy game creation in Lua


# Licencia (tan solo el nombre)
License: ZLIB

# Web del programa
URL: http://love2d.org/

# URL exacta desde la que se descargan las fuentes originales, normalmente
# en un archivador .tar.gz, .zip, o algo parecido.
#
# Como veis, usamos macros para que si actualizamos el paquete no haya que
# modificar esta línea. Las macros "name" y "version" provienen de lo que
# hemos indicado anteriormente.
Source0: https://bitbucket.org/rude/%name/downloads/%name-%version-linux-src.tar.gz


# Dependencias requeridas para construir el paquete.
# Esto lo sabemos porque lo pone en su web.
BuildRequires: flac-devel
BuildRequires: freetype-devel
BuildRequires: glibc-devel
BuildRequires: libmpg123-devel
BuildRequires: libmodplug-devel
BuildRequires: physfs-devel
BuildRequires: mesa-libGL-devel
BuildRequires: openal-soft-devel
BuildRequires: DevIL-devel
BuildRequires: libvorbis-devel
BuildRequires: SDL-devel
BuildRequires: libmng-devel
BuildRequires: libtiff-devel
BuildRequires: lua-devel


##########
# Descripción larga del paquete
%description
LÖVE is an unquestionably awesome 2D game engine, which allows rapid game
development and prototyping in Lua.

This project is constantly evolving and changes come and go, sometimes initiated
by us and sometimes by the recommendations of others. If you have an idea on how
to make the game engine better, it is greatly desired that you contact us and
let us know what you think.


##########
# En esta sección prepararemos las fuentes para compilar y aplicaríamos los
# parches en caso de tener alguno
%prep

# Esta macro es una función que descomprime las fuentes originales.
# Indicamos 2 parámetros:
# -q: Modo calladito. No mandar mensajes por cada fichero
# descomprimido.
# -n %name-HEAD: En este caso al descomprimir se crea un directorio llamado
# %name-HEAD. Si no indicáramos esto, el programa buscaría
# uno llamado %name-%version y, al no hallarlo, daría error.
%setup -q -n %name-HEAD

# Como sabréis, los ficheros de texto creados en Windows terminan en rn,
# mientras que en *nix terminan tan solo en n. Por eso, para mejor
# compatibilidad, suprimiremos los r en la documentación incluida.
sed -i 's/r//' *.txt


##########
# En esta sección compilaremos el código fuente
%build

# Esto es lo mismo que hacer `./configure` con un montón de parámetros extra que
# facilitan que no cometamos errores.
%configure

# Añade las opciones predeterminadas a make, en caso de haberlas.
# En mi caso, esto se expande a `make -j3`.
make %{?_smp_mflags}


##########
# Aquí instalaremos el programa dentro de %buildroot.
%install

# Como `make install` con muchos parámetros necesarios predefinidos.
%make_install


##########
# Aquí auditamos los ficheros instalados
%files

# Indicaremos los ficheros que son de documentación con esta función
%doc changes.txt license.txt readme.txt

# A continuación hay que listar todos los ficheros que se instalarán.
# El único fichero que instalará esto es /usr/bin/love, o lo que es lo mismo:
%_bindir/%name


##########
# Por último, hay que cumplimentar el registro de cambios en el paquete
%changelog
* Fri Nov 18 2011 Jairot Llopis 0.7.2-1
- Initial release
@dominio.com>

Nos queda un último paso antes de crear el paquete: instalar las dependencias. Usaremos una utilidad del paquete yum-utils para leerlas directamente del fichero que acabamos de crear.

sudo yum-builddep ~/rpmbuild/SPECS/love.spec

Con eso debería bastar. A continuación crearemos el paquete.

rpmbuild -ba ~/rpmbuild/SPECS/love.spec

¡Listo! Ya tenemos nuestro paquete repartido en el árbol de directorios. Tendremos:

  • ~/rpmbuild/RPMS/x86_64/love-0.7.2-1.fc16.x86_64.rpm: RPM listo para instalar.
  • ~/rpmbuild/SRPMS/love-0.7.2-1.fc16.src.rpm: Source RPM listo para modificar el paquete con facilidad. Incluye el fichero SPEC, el código fuente y los parches.
Sin embargo, tener el motor del juego no nos servirá de nada por sí solo. En la próxima entrega veremos cómo construir el juego en sí.


3 comentarios

  1.   Swatch dijo

    podias hacer un tuto para empaquetado .deb

  2.   Lucas Matias Gomez dijo

    Que buen tutorial, me gustaria tambien que hagas uno para .deb

  3.   portaro dijo

    muy bueno

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *