===== 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
%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
- 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
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
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
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