Barra laterale

sistema:creare_pacchetti_di_installazione

Creare pacchetti di installazione per sistemi GNU/Linux

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.

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

Debian

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.

Spunti: Creare un pacchetto deb contenente script personali

Fedora

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


sistema/creare_pacchetti_di_installazione.txt · Ultima modifica: 15/03/2019 - 13:43 da Fabio Di Matteo