Creiamo un RPM.

Supponete ora di aver fatto la vostra applicazione, e volete che oltre al tarball, sia disponibile in formato RPM, ad uso e consumo degli utenti Linux, che usino il Red Hat Package Manager, cosa fareste? In questo paragrafo vediamo come creare un file RPM contentente i vostri eseguibili, e un RPM contenente i sorgenti.

Supponiamo di aver creato il nostro programma di elaborazioni di matrici, che chiameremo matrix, e questo programma abbia una man page e un file di configurazione, chiamato matrix.cfg, che va posto nella directory /etc. Per poter creare un rpm, contentente tali file é necessario :

Esempio di /etc/rpmrc.

Vediamo come puo essere settato il file di configurazione di RPM:

       require_vendor: 1
         distribution: Red Hat 
         require_distribution: 1
         topdir: /usr/src/packs
         vendor: NerSoft
         packager: NerSoft Gestione Software <nrsof@soft.it>

         optflags: i386 -O2 -m486
         optflags: alpha -O2
         optflags: sparc -O2

         signature: pgp
         pgp_name: 
         pgp_path: /home/packages/.pgp

         tmppath: /tmp

La linea 1, obbliga RPM a trovare una linea vendor, dove si specifica di solito il produttore del pacchetto. Le linee:


        distribution: Red Hat
         require_distribution: 1

Sono direttamente collegate poiché se la seconda é settata a 0, nella prima non é necessario specificare per quale distribuzione debba essere creato il pacchetto. Tralasciamo le due linee successive, che sembrano abbastanza chiare e passiamo ad optflags, li vengono specificati i flag da passare al compilatore per rendere il programma ottimizzato per la data piattaforma, l'ottimizzazione viene fatta durante la compilazione del pacchetto stesso. Le restanti linee servono per l'autenticazione del pacchetto. Oltre a queste opzioni per il file /etc/rpmrc, ne esistono altre che potete scoprire con il comando : rpm --showrc.

Creiamo il file di specifiche.

Dopo aver settato a modo l'rpm, creiamo il nostro file di specifiche, matrix-1.0.SPEC:

       Summary:Pacchetto di elaborazione matematica matrix
       Name: matrix
       Version: 1.0
       Release: 1
       Copyright: GPL
       Group: Utility
       Source: ftp://ftp.techno.it/matrix.tar.gz

       %description
       Progetto di Laboratorio. Parser per l'elaborazioni di matrici.
       %files
       %config /etc/matrix.cfg
       /usr/bin/matrix
       /usr/man/man4/matrix.4

Cerchiamo di descrivere a modo questo file, e i suoi campi:

Creiamo il pacchetto RPM

Ora copiamo i file nelle posizioni specificate dal file .SPEC nel nostro sistema (tanto per intenderci l'eseguibile matrix va in /usr/bin,la man page in /usr/man/man4, il file di configurazione matrix.cfg in /etc). A questo punto possiamo fare la creazione del pacchetto con il comando:

       cyberspace.org:~# rpm -bb matrix-0.1.SPEC
       Processing files: matrix
       Finding provides...
       Finding requires...
       Requires: ld-linux.so.2 libc.so.6 libc.so.6(GLIBC_2.0)
       Wrote: /usr/src/rpm/RPMS/i386/matrix-0.1-1.i386.rpm

Abbiamo ora ottenuto il nostro pacchetto, installiamolo:

cyberspace.org:/usr/src/rpm/RPMS/i386 # rpm -i matrix-0.1-1.i386.rpm

E interroghiamolo:

cyberspace.org:~# rpm -qi matrix
Name        : matrix                     Relocations: (not relocateable)
Version     : 0.1                        Vendor: NerSoft
Release     : 1                          Build Date: Thu Feb 10 20:41:11 2000
Install date: Fri Feb 11 11:54:55 2000   Build Host: liz.cyberspace.org
Group       : Utility                    Source RPM: matrix-0.1-1.src.rpm
Size        : 25168                      License: GPL
Summary     : Pacchetto di elaborazione matrici matrix
Description : Pacchetto di elaborazioni di semplici matrici

Un pacchetto contenente i sorgenti

Creare un pacchetto, che contenga solo binari, é abbastanza riduttivo per le caratteristiche che l'RPM stesso fornisce. Editiamo allora in maniera opportuna il nostro file matrix-0.2.SPEC:

       Summary: Pacchetto di elaborazione matrici matrix
       Name: matrix
       Version: 0.2
       Release: 2
       Copyright: GPL
       Group: Utility
       Source: ftp://ftp.techoz.it/matrix-0.2/matrix-0.2.tar.gz

       %description
       Pacchetto di elaborazioni di semplici matrici
       %prep
       %setup
       %build
       configure --prefix=/usr/bin
       make
       %install
       make install
       %clean
       rm -fr matrix-0.2
       %files
       %config /etc/matrix.cfg
       /usr/bin/matrix
       /usr/man/man4/matrix.4
       %doc NEWS
       %doc README
       %doc AUTHORS
       %doc INSTALL
       %doc ChangeLog

Il file matrix-0.2.SPEC,che deve essere posto nella directory /usr/src/rpm/SPECS, é composto da differenti sezioni, che analizziamo:

Da notare che la struttura del tarball, che andrá poi posto nella directory /usr/src/rpm/SOURCES deve essere il tarball di una directory contenete il pacchetto avente come nome, quello indicato nel .SPEC, alla direttiva Source. Sia matrix-0.2 il nome del pacchetto, la directory che contiene i file del pacchetto deve essere matrix-0.2. Procediamo quindi nel seguente modo:

       mkdir matrix-0.2 
       tar cfvz matrix.tar.gz matrix-0.2 
       mv matrix.tar.gz /usr/src/rpm/SOURCES 

       A questo punto per compilare e ottenere il tutto basta fare: 
       cd /usr/src/rpm/SPECS 
       rpm -bb matrix-0.2.SPEC 

Nell'esempio presentato sopra abbiamo tralasciato alcune sezioni, che possono essere utili nella creazione di un pacchetto. Presentiamole nella tabella sottostante seguendo l'ordine in cui vanno poste.

Tabella 2-12. Sezione dei file di specifica RPM

SezioneDescrizione
Summary: testo Panoramica sul pacchetto.
Nome: pacchettoNome del pacchetto.
Versione: versioneVersione del pacchetto.
Release: releaseRelease del pacchetto
Source: file File sorgente.
Patch: file Patch di applicare.
Copyright: Testo Tipo di licenza
BuildRoot: directory Directory temporanea di installazione.
%define nomevalore Definizione di una macro.
%description Segue descrizione
%prep Segue fase di preparazione.
%setup Scompatta il pacchetto.
%patch Applica la patch indicata.
%build Segue istruzioni per la compilazione.
%install Segue istruzioni per l'installazione.
%clean Segue fase rimozione fine lavoro
%pre Segue script di pre-installazione.
%post Segue script di post-installazione.
%preun Segue script di pre-disintallazione.
%postun Segue script di post-disinstallazione.
%files Segue elenco files.
%config Segue file di configurazione.
%doc Segue file di documentazione.
SezioneDescrizione