Programmare Linux: Guida alla programmazione C in ambiente GNU/Linux | ||
---|---|---|
Indietro | Capitolo 2. Strumenti di programmazione | Avanti |
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 :
Assicurarsi che il file /etc/rpmrc sia impostato in maniera corretta
Creare un file di specifiche sul pacchetto
Creare il pacchetto mediante tale file di specifiche
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.
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:
Summary. Contiene una descrizione riassuntiva del pacchetto
Name. É la label che verrá assegnata al pacchetto all'interno del database dopo l'installazione.
Version. Versione del software.
Release. Numero di versione indicante il numero di volte che il pacchetto é stato impacchettato per questa versione.
Copyright. Indica chi detiene il copyright su quel determinato pacchetto.
Group. Indica a quale gruppo deve appartenere il pacchetto.
Source. Serve per indicare l'URL in cui é possibile reperire il pacchetto.
Description Da una generale panoramica sull'utilizzo del pacchetto.
Files Indica quali siano i file che fanno parte del pacchetto. Ogni file di configurazione é necessario farlo precedere dal %config.
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
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:
%prep. Forse in cui il file deve essere decomposto e preparato per la compilazione. Di solito é composta semplicemente da una sottosezione %setup, che vediamo sotto e che ha come compito principale di scompattare il sorgente, eseguendo il tar sul file, il cui nome é ricavato dal tag Source, posto all'interno del file matrix-0.2.SPEC stesso.
%build. Qui l'RPM, configura e compila il pacchetto, dopo averlo scompattato. Nel nostro esempio abbiamo supposto di aver creato il tarball via autoconf. La directory di lavoro, dove RPM compila e configura é:/usr/src/redhat/BUILD.
%install. Dopo la compilazione i file vanno copiati nelle posizioni adeguate, e per far ció basta fare il comando make install. Si noti che anche qui non avessimo usato i Makefile, si sarebbe dovuto usare il comando install o un semplice cp. La directory du lavoro é anche qui /usr/src/redhat/BUILD.
%clean. Vengono eliminati i vecchi dati della directory /usr/src/rpm/BUILD, e per far cio :rm -fr nomepacchetto.
%files. Dopo aver svolto le sessioni precedenti, i files sono posizionati sul disco rigido, ma non sono posti come dovrebbero. Bisogna dire all'RPM dove trovare i file, siccome durante l'esecuzione delle sezioni precedenti l'RPM non ne ha tenuto traccia. E questa operazione viene svolta mediante la sezione %files. I file di configurazione vanno specificati nella direttiva %config e quelli di documentazione con la direttiva %doc. L'RPM copia automaticamente quest'ultimi nella directory /usr/doc/nome-pacchetto, ovvero nel nostro caso /usr/doc/matrix-0.2.
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
Sezione | Descrizione |
---|---|
Summary: testo | Panoramica sul pacchetto. |
Nome: pacchetto | Nome del pacchetto. |
Versione: versione | Versione del pacchetto. |
Release: release | Release 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. |
Sezione | Descrizione |