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.
- Fichero dumpzilla.py (/usr/bin).
- Fichero dumpzilla (/usr/share/bash-completion/completions/).
- Arquitectura: Todas, al ser un script en python es independiente de la arquitectura: i686, i386, x86_64, ARM, etc.
- Dependencias: “Python” y “bash-completion”.
- Distribuciones: Al ser scripts en python cada paquete debería funcionar en cualquier distribución. Es decir, el paquete .deb debería funcionar tanto en Debian, como en Ubuntu, LinuxMint, kali Linux, etc. El fichero RPM debería ser válido para RedHat, Centos, Fedora y cualquier otra distribución basada en RPM.
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