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