Table of Contents

Cómo crear paquetes RPM, DEB y PKGBUILD para instalar scripts

Dependiendo de lo que se quiera empaquetar, la creación de paquetes para GNU/Linux puede ser algo tedioso. Este no es el caso cuando se quieren empaquetar pequeños programas / scripts que solo requieren que se copien un par de archivos dentro de unas determinadas rutas del sistema. Esta guía muestra de manera práctica como empaquetar un script (dumpzilla.py) y su fichero de configuración para autocompletado en bash en formato RPM, DEB y PKGBUILD (Arch GNU/Linux).

Elementos a conocer para la creación del paquete.

Crear un paquete RPM

Documentación: https://fedoraproject.org/wiki/How_to_create_an_RPM_package/es

Instalamos las herramientas pertinentes para la creación de paquetes RPM.

yum install rpm-build rpmdevtools -y

Se crea un directorio donde deben copiarse los ficheros del paquete más un fichero configure que para nuestro ejemplo debe estar vacío.

mkdir dumpzilla-26.11.2014/
ls dumpzilla-26.11.2014/
configure  dumpzilla  dumpzilla.py

Creamos (en $HOME por defecto) el árbol de directorios necesario para la creación del paquete RPM.

rpmdev-setuptree
 
ls  rpmbuild/
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS

Creamos un paquete tar.gz que debe estar dentro de “$HOME/rpmbuild/SOURCES”.

tar -czvf dumpzilla-26.11.2014.tar.gz dumpzilla-26.11.2014/
cp dumpzilla-26.11.2014.tar.gz rpmbuild/SOURCES/

Creamos el fichero “.spec” donde se definirá, entre otras cosas, qué y cómo debe de instalarse el paquete.

cd rpmbuild/SOURCES/
rpmdev-newspec
mv newpackage.spec dumpzilla.spec

Editar el fichero “dumpzilla.spec”.

%define release 1
 
Name:		dumpzilla
Version:        26.11.2014
#Release:        1%{?dist}
Release:	%{release}
Summary:        RPM-based Linux distributions: Dumpzilla python script + dumpzilla bash-autocomplete file.
 
License:        GPLv3+
URL:            https://www.dumpzilla.org
Source0:        dumpzilla-26.11.2014.tar.gz 
Requires:       bash-completion
BuildArch:      noarch
Packager:       NOMBRE <usuario@correo.com>
 
%description
Dumpzilla application is developed in Python 3.x and has as purpose extract all forensic interesting information of Firefox, Iceweasel and Seamonkey browsers to be analyzed.
 
%prep
%setup -q
 
%build
#%configure
#make %{?_smp_mflags}
 
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p "$RPM_BUILD_ROOT/usr/bin"
mkdir -p "$RPM_BUILD_ROOT/usr/share/bash-completion/completions"
 
cp  dumpzilla.py  "$RPM_BUILD_ROOT/usr/bin/dumpzilla"
cp  dumpzilla "$RPM_BUILD_ROOT/usr/share/bash-completion/completions"
 
%files
%defattr(0644, root,root)
%attr(755, root, root) /usr/bin/dumpzilla
%attr(0644, root, root) /usr/share/bash-completion/completions/dumpzilla
%doc
 
%changelog
* Sat Nov 26 2014 NOMBRE <usuario@correo.com>
-        First public release.

Generar el paquete RPM, la última linea de la salida del siguiente comando debería ser “exit 0”.

rpmbuild -ba rpmbuild/SOURCES/dumpzilla.spec

Visualizar la información del paquete generado.

rpmbuild -ba rpmbuild/SOURCES/test-package.spec 

Name        : dumpzilla
Version     : 26.11.2014
Release     : 1
Architecture: noarch
Install Date: (not installed)
Group       : Unspecified
Size        : 121583
License     : GPLv3
Signature   : (none)
Source RPM  : dumpzilla-26.11.2014-1.src.rpm
Build Date  : Sat 26 Nov 2014 01:01:07 PM EST
Build Host  : localhost
Relocations : (not relocatable)
Packager    : NOMBRE <usuario@correo.com>
URL         : https://www.dumpzilla.org
Summary     : RPM-based Linux distributions: Dumpzilla python script + dumpzilla bash-autocomplete file.
Description :
Dumpzilla application is developed in Python 3.x and has as purpose extract all forensic interesting information of Firefox, Iceweasel and Seamonkey browsers to be analyzed.

Listar contenido del fichero RPM resultante.

rpm -qlpv rpmbuild/RPMS/noarch/dumpzilla-26.11.2014-1.noarch.rpm

-rwxr-xr-x    1 root    root                   117498 Nov 26 13:01 /usr/bin/dumpzilla
-rw-r--r--    1 root    root                     4085 Nov 26 13:01 /usr/share/bash-completion/completions/dumpzilla

Crear un paquete DEB

Documentación: https://wiki.debian.org/HowToPackageForDebian

Crear paquetes .deb para scripts es algo muy simple si se siguen estas directrices.

Se crea un directorio, con la sintaxis: “programa”.“versión”-“lamzamiento (release)”. El directorio debe tener los ficheros en las rutas que se quieren usar para instalar los ficheros. Se debe crear un directorio “DEBIAN”.

mkdir dumpzilla_26.11.2014-1
mkdir -p dumpzilla_26.11.2014-1/usr/bin/ dumpzilla_26.11.2014-1/usr/share/bash-completion/completions/
mkdir dumpzilla_26.11.2014-1/DEBIAN

Se crea un fichero control dentro del directorio DEBIAN (dumpzilla_26.11.2014-1/DEBIAN/control).

Package: dumpzilla
Version: 26.11.2014
Section: base
Priority: optional
Architecture: all
Essential: no
Depends: bash-completion
Maintainer: NOMBRE <usuario@correo.com>
Installed-Size: 120
Description: Dumpzilla application is developed in Python 3.x and has as purpose extract all forensic interesting information of Firefox, Iceweasel and Seamonkey browsers to be analyzed.

Dentro del directorio dumpzilla_26.11.2014-1 se generará el fichero md5sums (Optativo pero recomendable).

cd dumpzilla_26.11.2014-1
find . -type f ! -regex '.*.hg.*' ! -regex '.*?debian-binary.*' ! -regex '.*?DEBIAN.*' -printf '%P ' | xargs md5sum > DEBIAN/md5sums

Construir el paquete “.deb”.

dpkg-deb --build dumpzilla_26.11.2014-1

Instalar un paquete “.deb”.

########## Opción 1.
 
sudo dpkg -i dumpzilla_26.11.2014-1.deb
# Si se quieren instalar dependencias incumplidas.
# sudo apt-get install -f
 
########## Opción 2.
 
# Mover el paquete .deb a /var/cache/apt/archives/
apt-get install dumpzilla

Crear un PKGBUILD (Arch)

Documentación: https://wiki.archlinux.org/index.php/PKGBUILD

mkdir dumpzilla_arch

Crear el fichero “dumpzilla_arch/PKGBUILD”.

# Maintainer: NOMBRE <usuario@correo.com>

pkgname=dumpzilla
pkgver=26.11.2014
pkgrel=1
pkgdesc='Forensic command line tool for Mozilla browsers.'
arch=('any')
url='https://www.dumpzilla.org'
license=('GPL3')
depends=('python')
optdepends=('python-magic' 'bash-completion')
source=('https://raw.githubusercontent.com/onehdev/dumpzilla/master/dumpzilla'
	'https://raw.githubusercontent.com/onehdev/dumpzilla/master/dumpzilla.py')

sha512sums=('884edbce96917b4a981c9910023aaaad257ae0fdd306d6488d437c2dae46a6d66ec72823b8590d6fbe7a0751e940cdf1de6e01295c61f22a5784659accfa20f9'
            '304ca12ead8863b7c4f9b2d263532404413a5c0e33cd3ada60899062cad644efafff8c6f7be4762b33a349fd0b0c370747553869519d20e929602f4f4f2e7a0a')

package() {
    install -D -m644 dumpzilla     "${pkgdir}/usr/share/bash-completion/completions/dumpzilla"
    install -D -m755 dumpzilla.py  "${pkgdir}/usr/bin/dumpzilla"
}

Crea un paquete e instalarlo posteriormente teniendo en local el fichero PKGBUILD.

yaourt -P ./dumpzilla_arch -i

Solo crear el paquete (Opción 1).

yaourt -P ./dumpzilla_arch

Solo crear el paquete (Opción 2, sin yaourt).

cd dumpzilla_arch
makepkg -f