Autore: Fabio Di Matteo
Ultima revisione: 15/03/2019 - 13:27
Di seguito alcuni concisi appunti sulla creazione di pacchetti per alcune distribuzioni GNU/Linux.
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 <pobfdm@gmail.com> 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 <pobfdm@gmail.com> 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="http://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.
Arch User Repository
Installiamo tutto il software necessario alla pacchettizzazione:
apt-get install dh-make build-essential devscripts fakeroot
Prepariamo una cartella di lavoro, chiamiamola per esempio “pacchetti” .
mkdir pacchetti cd pacchetti
Copiamo dentro pacchetti la cartella con i nostri file da installare nel pacchetto:
cp -R mioprog-1.0 pacchetti cd mioprog-1.0
E' indispensabile che la cartella segui la nomenclatura <nome programma>-<numero di versione>
Adesso creiamo lo scheletro con :
dh_make -n
Verra' creata la cartella “debian” con dentro alcuni file con le direttive per la creazione del pacchetto. I file che interessano a noi e che andremo ad editare sono control e install (creare se non esiste). In control ci sono informazioni sul pacchetto e le sue dipendenze. Ecco un esempio
control
Source: mioprog Section: Network Priority: optional Maintainer: Fabio DM <mia@email.com> Build-Depends: debhelper (>= 8.0.0) Standards-Version: 3.9.4 Homepage: Package: mioprog Architecture: amd64 Depends: x11vnc, tigervnc Description: Pacchetto di prova
Di seguito invece il file “install” con le direttive per la scompattazione dei file nel sistema. Nel caso di cmake o altri sistemi per la configurazione dei sorgenti ignorare il file “install”, anzi se presente, cancellarlo. Per ricavare i percorsi di installazione fara' uso della direttiva make install
install
bin/* /usr/bin/ share/* /usr/share/
Fatto cio' possiamo lanciare
dpkg-buildpackage -uc -us
che creera' il nostro pacchetto.
Come prima cosa installiamo gli strumenti necessari:
dnf install @development-tools dnf install fedora-packager dnf install rpmdevtools
Proseguiamo creando la struttura delle cartelle necessarie alla pacchettizzazione:
rpmdev-setuptree
Mettiamo il pacchetto compresso (zip, tar.gz , bjz etc… ) nella cartella SOURCES , assicuriamoci che il nome del pacchetto abbia la seguente forma <nome>-<versione> . Fatto cio' entriamo nella cartella SPECS e creiamo il file <nome>.spec dove nome è il nome del nostro rpm. Ecco un esempio di un file .spec:
Name: pobvnc Version: 0.1 Release: 1%{?dist} Summary: Pobvnc is an application that enables you to help other people behind a firewall. Group: Network License: GPL URL: http://www.freemedialab.org/pobvnc/ Source0: %{name}-%{version}.zip BuildRequires: cmake gtk2-devel Requires: gtk2 x11vnc tigervnc %description Pobvnc is an application that enables you to help other people behind a firewall. %prep %autosetup %build cmake . make %install %make_install %files /usr/bin/pobvnc /usr/share/applications/pobvnc.desktop /usr/share/icons/lifesaver.svg
Si possono distinguere tra le tante le direttive per le dipendenze in fase di compilazione(BuildRequires), quelle del futuro RPM (Requires) e piu' in basso le macro per la compilazione del nostro progetto (%build), che in questo caso usa cmake, quelle relative all'installazione (%install), e infine l'elenco dei file generati da cmake che devono essere inclusi del nostro pacchetto RPM (%files). Scritto il nostro file .spec impartiamo il seguente comando dalla cartella SPECS :
rpmbuild -ba NAME.spec
dove NAME è il nome del file.
A questo punto se non ci sono stati errori dovrebbe generarsi il pacchetto rpm nella cartella RPMS Spunti: How_to_create_an_RPM_package
Il nostro wiki installa solamente cookie tecnici necessari al funzionamento della piattaforma "Dokuwiki". Niente analitics, statistiche, tracciamenti o altro.