====== Creare pacchetti di installazione per sistemi GNU/Linux ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **// 30/01/2024 - 22:10 //** // // Di seguito alcuni concisi appunti sulla creazione di pacchetti per alcune distribuzioni GNU/Linux. Il tutto direttamente dalla mia distro Arch Linux. ===== Arch ===== Nelle distribuzioni basate su Arch Linux si usa il sistema del PKGBUILD, ovvero un file di testo contenente le direttive per scaricare i sorgenti, e da questi creare il pacchetto binario. Ecco come si presenta un PKGBUILD di una nostra applicazione: **PKGBUILD** # Maintainer: Fabio Di Matteo pkgname=pobshare-git pkgver=0.1 pkgrel=1 pkgdesc="A simple gui for share files. " arch=('any') url="https://github.com/pobfdm/pobshare.git" license=('GPL') depends=('python-wxpython' 'python-pyftpdlib') conflicts=('pobshare') source=(https://github.com/pobfdm/pobshare/archive/master.zip) md5sums=('SKIP') #generate with 'makepkg -g' package() { mkdir -p "$pkgdir/usr/bin/" mkdir -p "$pkgdir/usr/lib/pobshare/" mkdir -p "$pkgdir/usr/share/applications" cp "$srcdir/pobshare-master/pobshare" "$pkgdir/usr/bin/" cp -R "$srcdir/pobshare-master/icons/" "$pkgdir/usr/lib/pobshare/" cp -R "$srcdir/pobshare-master/locale/" "$pkgdir/usr/lib/pobshare/" cp -R "$srcdir/pobshare-master/gui/" "$pkgdir/usr/lib/pobshare/" cp "$srcdir/pobshare-master/"*.py "$pkgdir/usr/lib/pobshare/" cp "$srcdir/pobshare-master/"*.desktop "$pkgdir/usr/share/applications/" } L'archivio compresso del sorgente viene spacchettato nel path **$srcdir** e il pacchetto viene assemblato in chroot nel path **$pkgdir** . Altro esempio: **PKGBUILD** di una app che fa uso di CMake # Maintainer: Fabio Di Matteo pkgname=pobvnc pkgver=0.1 pkgrel=1 epoch= pkgdesc="Pobvnc is an application that enables you to help other people behind a firewall." arch=('i686' 'x86_64') url="https://www.freemedialab.org/pobvnc/" license=('GPL') groups=('Network') depends=('gtk2' 'x11vnc' 'tigervnc') makedepends=('cmake') checkdepends=() optdepends=('curl') provides=('pobvnc') conflicts=('pobvnc') replaces=() backup=() options=( 'strip') install= changelog= #source=($pkgname-$pkgver.tar.gz) noextract=() source=(https://github.com/pobfdm/pobvnc/archive/master.zip) md5sums=('SKIP') #generate with 'makepkg -g' build() { cd "$srcdir/pobvnc-master" cmake . make } package() { cd "$srcdir/pobvnc-master" make DESTDIR="$pkgdir/" install } Prestare particolare attenzione alle direttive **source** (da dove scaricare il sorgente), **build** le procedure necessarie alla compilazione e **package()** pacchettizza il pacchetto. Per avviare la compilazione basta lanciare ''makepkg'' o ''makepkg -s'' se vogliamo che risolva le dipendenze. [[https://wiki.archlinux.org/index.php?title=Arch_User_Repository|Arch User Repository]] ===== Debian ===== Viene creata la cartella "Piso" al suo interno la cartella "DEBIAN" col file control e a fianco di DEBIAN le cartelle del pacchetto. **makedeb.sh** #!/usr/bin/bash mkdir -p Piso/DEBIAN echo "Package: Piso Version: 0.1 Maintainer: Fabio Di Matteo Section: x11 Source: https://www.freemedialab.org/code/tmp/piso.zip Homepage: https://www.freemedialab.org/code/piso Architecture: all Priority: optional Depends: libwxgtk3.0-gtk3-0v5 (>=3.0.0),libminiupnpc17 (>=2.2.3), curl Description: Piso allows you to share files across the network without the use of external servers. " >Piso/DEBIAN/control mkdir -p Piso/opt/piso mkdir -p Piso/usr/share/applications cp ../../build/piso Piso/opt/piso/ cp ../../icon.png Piso/opt/piso/ cp ../../piso.desktop Piso/usr/share/applications/ dpkg-deb --root-owner-group --build Piso Successivamente basta avviare lo script // makedeb.sh// ===== Fedora ===== **make_rpm.sh** #!/usr/bin/env bash mkdir -p $HOME/rpmbuild/SOURCES/ mkdir -p $HOME/rpmbuild/SOURCES/usr/{bin,lib/pobhelp,share/applications} cp ../pobhelp $HOME/rpmbuild/SOURCES/usr/bin cp ../*.py $HOME/rpmbuild/SOURCES/usr/lib/pobhelp cp ../*.ovpn $HOME/rpmbuild/SOURCES/usr/lib/pobhelp cp ../*.key $HOME/rpmbuild/SOURCES/usr/lib/pobhelp cp -R ../locale $HOME/rpmbuild/SOURCES/usr/lib/pobhelp cp ../*.png $HOME/rpmbuild/SOURCES/usr/lib/pobhelp cp ../*.ico $HOME/rpmbuild/SOURCES/usr/lib/pobhelp cp ../pobhelp.desktop $HOME/rpmbuild/SOURCES/usr/share/applications chmod +x $HOME/rpmbuild/SOURCES/usr/bin/pobhelp chmod +x $HOME/rpmbuild/SOURCES/usr/lib/pobhelp/pobhelp.py tar czf $HOME/rpmbuild/SOURCES/pobhelp-0.1.tar.gz $HOME/rpmbuild/SOURCES/usr rpmbuild -ba --clean pobhelp.spec **pobhelp.spec** Name: pobhelp Version: 0.1 Release: 1_all Summary: Pobhelp is an application that enables you to help other people behind a firewall. Group: Network License: GPL URL: https://www.freemedialab.org/code/project.php?p=PobHelp Source0: pobhelp-0.1.tar.gz BuildArch: noarch Requires: python3-wxpython4 python3-pyftpdlib x11vnc tigervnc %description Pobhelp is a simple gui that allows you to establish a reverse vnc connection between two PCs. On Windows use TightVnc and on GnuLinux tigervnc and x11vnc. %install echo "Directory corrente: $PWD" cp -R %_sourcedir/usr/ %{buildroot}/ chmod +x %{buildroot}/usr/bin/pobhelp chmod +x %{buildroot}/usr/lib/pobhelp/pobhelp.py %files /usr/bin/pobhelp /usr/lib/pobhelp/client.ovpn /usr/lib/pobhelp/ftpd.py /usr/lib/pobhelp/gui.py /usr/lib/pobhelp/guiUtils.py /usr/lib/pobhelp/icon.png /usr/lib/pobhelp/lifesaver.ico /usr/lib/pobhelp/lifesaver.png /usr/lib/pobhelp/locale/it_IT/LC_MESSAGES/it.mo /usr/lib/pobhelp/locale/it_IT/LC_MESSAGES/it.po /usr/lib/pobhelp/locale/it_IT/LC_MESSAGES/pobhelp.mo /usr/lib/pobhelp/pobhelp.py /usr/lib/pobhelp/server.ovpn /usr/lib/pobhelp/static.key /usr/lib/pobhelp/vncd.py /usr/share/applications/pobhelp.desktop Una volta lanciato lo script ,se tutto รจ andato bene troveremo il pacchetto in **$HOME/rpmbuild/RPMS/**