Differenze tra le versioni di "Autospec"

Da Wiki :: openmamba.
Jump to navigation Jump to search
 
(12 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
 
== Pre-requisiti ==
 
== Pre-requisiti ==
  
* l'utente che utilizza autospec deve fare parte del '''packager'''. Normalmente l'utente creato durante l'installazione di openmamba fa già parte di questo gruppo.
+
* l'utente che utilizza autospec deve fare parte del gruppo '''packager'''. Normalmente l'utente creato durante l'installazione di openmamba fa già parte di questo gruppo.
  
 
== Installazione ==
 
== Installazione ==
  
Installare il pacchetto denominato '''autospec''' utilizzando [[synaptic]] oppure con il seguente comando:
+
Installare il pacchetto denominato '''autospec''' utilizzando [[smart --gui]] oppure con il seguente comando:
  
<pre>sudo apt-get install autospec</pre>
+
<pre>sudo smart install autospec</pre>
  
 
== Configurazione ==
 
== Configurazione ==
Riga 24: Riga 24:
 
packager_email="<inserisci il tuo indirizzo e-mail>"
 
packager_email="<inserisci il tuo indirizzo e-mail>"
  
 +
ftp_alias[0]="devel"
 
ftpurl_ro_rpms[0]="http://www.openmamba.org/pub/openmamba/devel/RPMS.@arch@"
 
ftpurl_ro_rpms[0]="http://www.openmamba.org/pub/openmamba/devel/RPMS.@arch@"
ftpurl_ro_srpms[0]="http://www.openmamba.org/pub/openmamba/devel/SRPMS.base"
+
ftpurl_ro_srpms[0]="http://www.openmamba.org"
 +
ftp_rw_server[0]="ftp://ftp.openmamba.org/"
 +
ftp_rw_port[0]=
 +
ftp_rw_passive_mode[0]=on
 +
ftp_rw_user[0]=
 +
ftp_rw_passwd[0]=""
 +
ftp_rw_rpms_dir[0]="/RPMS.@arch@"
 +
ftp_rw_srpms_dir[0]="/SRPMS.base"
 +
ftp_rw_server[0]=""
 +
ftp_rw_port[0]=
 +
ftp_rw_passive_mode[0]=on
 +
ftp_rw_user[0]=
 +
ftp_rw_passwd[0]=""
 +
ftp_rw_rpms_dir[0]="/RPMS.@arch@"
 +
ftp_rw_srpms_dir[0]="/SRPMS.base"
 +
arch_list[0]="i586"
 +
arch_noarch_upload[0]="${arch_list[0]}"
 +
ftpdir_rw_old[0]="/old"
 +
 
 +
ftp_alias[1]="devel-games"
 
ftpurl_ro_rpms[1]="http://www.openmamba.org/pub/openmamba/devel-games/RPMS.@arch@"
 
ftpurl_ro_rpms[1]="http://www.openmamba.org/pub/openmamba/devel-games/RPMS.@arch@"
 
ftpurl_ro_srpms[1]="http://www.openmamba.org/pub/openmamba/devel-games/SRPMS.base"
 
ftpurl_ro_srpms[1]="http://www.openmamba.org/pub/openmamba/devel-games/SRPMS.base"
 
+
ftp_rw_server[0]="ftp://ftp.openmamba.org/"
ftp_rw_server[0]=""
 
 
ftp_rw_port[0]=
 
ftp_rw_port[0]=
 
ftp_rw_passive_mode[0]=on
 
ftp_rw_passive_mode[0]=on
Riga 36: Riga 55:
 
ftp_rw_rpms_dir[0]="/RPMS.@arch@"
 
ftp_rw_rpms_dir[0]="/RPMS.@arch@"
 
ftp_rw_srpms_dir[0]="/SRPMS.base"
 
ftp_rw_srpms_dir[0]="/SRPMS.base"
 
 
ftp_rw_server[0]=""
 
ftp_rw_server[0]=""
 
ftp_rw_port[0]=
 
ftp_rw_port[0]=
Riga 44: Riga 62:
 
ftp_rw_rpms_dir[0]="/RPMS.@arch@"
 
ftp_rw_rpms_dir[0]="/RPMS.@arch@"
 
ftp_rw_srpms_dir[0]="/SRPMS.base"
 
ftp_rw_srpms_dir[0]="/SRPMS.base"
 
arch_list[0]="i586"
 
 
arch_list[1]="i586"
 
arch_list[1]="i586"
 +
arch_noarch_upload[1]="${arch_list[1]}"
 +
ftpdir_rw_old[1]="/old"
  
arch_noarch_upload[0]="${arch_list[0]}"
+
ftp_rw_server_num_default=0
arch_noarch_upload[1]="${arch_list[0]}"
+
format_description_width=0
 +
</pre>
 +
Questa configurazione fornisce l'accesso in sola lettura ai repository [[devel]][http://www.openmamba.org/distribution/distromatic.html?tag=devel] e [[devel-games]] [http://www.openmamba.org/distribution/distromatic.html?tag=devel-games].
  
ftp_rw_server_num_default=0
+
=== Configurare un proxy in Autospec ===
  
ftpdir_rw_old[0]="/old"
+
Nel file .autospec della propria home inserire la riga
ftpdir_rw_old[1]="/old"
+
proxy="indirizzoproxy:porta" ad esempio : proxy="10.12.111.10:3128"
  
format_description_width=0
+
ed effettuare queste modifiche per ogni repository (sostituire [0] con il numero del repository desiderato ed effettuare le modifiche per tutti i repository):
 +
<pre>
 +
ftp_rw_server[0]="http://www.openmamba.org"
 +
ftp_rw_rpms_dir[0]="/pub/openmamba/<inserisci il nome del repository>/RPMS.@arch@"
 +
ftp_rw_srpms_dir[0]="/pub/openmamba/<inserisci il nome del repository>/SRPMS.base"
 +
ftpurl_ro_rpms[0]="ftp://ftpaccounts.openmamba.org/pub/openmamba/<inserisci il nome del
 +
repository>/RPMS.@arch@"
 +
ftpurl_ro_srpms[0]="ftp://ftpaccounts.openmamba.org/pub/openmamba/<inserisci il nome del
 +
repository>/SRPMS.base"
 
</pre>
 
</pre>
Questa configurazione fornisce l'accesso in sola lettura ai repository [[devel]] e [[devel-games]].
 
  
 
== Creazione di un nuovo pacchetto RPM ==
 
== Creazione di un nuovo pacchetto RPM ==
Riga 69: Riga 96:
 
digitare il seguente comando:
 
digitare il seguente comando:
  
  autospec -s <url archivio sorgente> -o <nome pacchetto>.spec
+
  autospec -s url_archivio_sorgente -o nome_pacchetto.spec
  
 
Se non ci sono stati problemi viene creato il seguente file anche denomianto specfile:
 
Se non ci sono stati problemi viene creato il seguente file anche denomianto specfile:
  /usr/src/RPM/SPEC/<nome pacchetto>.spec
+
  /usr/src/RPM/SPEC/nome_pacchetto.spec
  
 
prima di procedere occorre editare questo file occorre ed immettere alcune informazioni quali:
 
prima di procedere occorre editare questo file occorre ed immettere alcune informazioni quali:
Riga 87: Riga 114:
 
Digitare il seguente comando:
 
Digitare il seguente comando:
  
  autospec -u <nome pacchetto> -a1:4
+
  autospec -u nome_pacchetto -a1:4
  
 
Se non viene identificato il nuovo numero di versione, oppure è stata individuata una versione instabile, si può specificare manualmente la versione a cui aggiornare con il comando:
 
Se non viene identificato il nuovo numero di versione, oppure è stata individuata una versione instabile, si può specificare manualmente la versione a cui aggiornare con il comando:
  
  autospec -u <nome pacchetto> -a1,3,4 <numero nuova versione>
+
  autospec -u nome_pacchetto -a1,3,4 numero_nuova_versione
  
 
== Compilazione e pacchettizzazione ==
 
== Compilazione e pacchettizzazione ==
Riga 97: Riga 124:
 
Per effettuare la compilazione del componente software e creare i pacchetti RPM binari digitare il comando:
 
Per effettuare la compilazione del componente software e creare i pacchetti RPM binari digitare il comando:
  
  autospec -u <nome pacchetto> -a5
+
  autospec -u nome_pacchetto -a5
 +
 
 +
Questa operazione può richiedere un tempo variabile. In alcuni casi la pacchettizzazione consiste solo nella copia di files e può richiedere pochi secondi,  in altri si tratta di compilare migliaia di righe di codice sorgente e questa operazione può richiedere un tempo variabile tra alcuni minuti ed alcune ore a seconda della dimensione del software.
 +
 
 +
=== Raggruppamento dei file ===
 +
Il risultato normalmente ottenuto, se l'operazione è andata a buon fine, è di ottenere un output che contiene un elenco di file come nell'esempio seguente:
 +
<pre>
 +
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/libz-root
 +
error: Installed (but unpackaged) file(s) found:
 +
  /lib/libz.so.1
 +
  /lib/libz.so.1.2.3
 +
  /usr/include/zconf.h
 +
  /usr/include/zlib.h
 +
  /usr/include/zutil.h
 +
  /usr/lib/libz.a
 +
  /usr/lib/libz.so
 +
  /usr/share/man/man3/zlib.3.gz
 +
 
 +
 
 +
RPM build errors:
 +
    Installed (but unpackaged) file(s) found:
 +
  /lib/libz.so.1
 +
  /lib/libz.so.1.2.3
 +
  /usr/include/zconf.h
 +
  /usr/include/zlib.h
 +
  /usr/include/zutil.h
 +
  /usr/lib/libz.a
 +
  /usr/lib/libz.so
 +
  /usr/share/man/man3/zlib.3.gz
 +
</pre>
 +
I files elencati andranno inseriti nel pacchetto principale oppure in sottopacchetti del pacchetto principale. Nel caso di questo esempio, la libreria ''zlib'', il pacchetto principale si chiamerà ''libz'' e si aggiungerà un sottopacchetto denominato ''libz-devel''. Il sottopacchetto ''-devel'' contiene tutti i file che servono solo per lo sviluppo di altri software che utilizzano questa libreria come ''dipendenza''. Esempi di file sono:
 +
* %{_includedir}/*.h, %{_includedir}/*.hpp: prototipi di librerie
 +
* %{_libdir}/*.so: collegamento alla libreria utilizzato dal linker in fase di compilazione
 +
* %{_libdir}/*.la: file contenente informazioni per il linking della libreria
 +
* %{_libdir}/*.a: libreria statica utilizzata per la creazione di applicazioni che non dipendono dinamicamente dalla libreria dinamica
 +
* %{_libdir}/pkgconfig/*.pc: file contenente i flag da passare al compilatore/linker per l'utilizzo di questa libreria
  
 +
Una volta aggiornato lo specfile, prima di rilanciare la compilazione, è possibile verificare che tutti i file siano stati inclusi correttamente negli elenchi ''%files'' con:
 +
 +
rpmbuild -bl nome_pacchetto.spec
 +
 +
Se questa operazione non restituisce errori o file non inclusi si può di nuovo lanciare la compilazione e questa volta al termine dell'operazione saranno prodotti i pacchetti attesi.
 +
 +
=== Posizionamento dei pacchetti prodotti ===
 
Se l'operazione è andata a buon fine nella directory
 
Se l'operazione è andata a buon fine nella directory
  
Riga 112: Riga 181:
  
 
== Problemi di compilazione e/o pacchettizzazione ==
 
== Problemi di compilazione e/o pacchettizzazione ==
Questa è la fase più complessa di tutto il procedimento, si tratta di una situazione equivalente al ``centro della partita`` nel gioco degli scacchi, è il momento in cui occorre applicare doti quali l'ingegno, l'esperienza, l'intuito, l'estro ecc. per giungere al risultato desiderato!
+
Questa è la fase più complessa di tutto il procedimento, si tratta di una situazione equivalente al ''centro della partita'' nel gioco degli scacchi, è il momento in cui occorre applicare doti quali l'ingegno, l'esperienza, l'intuito, l'estro ecc. per giungere al risultato desiderato!
  
 
Normalmente la prima cosa da fare è cercare, tra i molti messaggi che compaiono a video, qual è stato l'errore che ha causato la terminazione del processo. Normalmente in presenza di molti errori è sufficiente iniziare a considerare soltanto il primo, perché i successivi potrebbero esserne una conseguenza.
 
Normalmente la prima cosa da fare è cercare, tra i molti messaggi che compaiono a video, qual è stato l'errore che ha causato la terminazione del processo. Normalmente in presenza di molti errori è sufficiente iniziare a considerare soltanto il primo, perché i successivi potrebbero esserne una conseguenza.
  
Solitamente occorre effettuare modifiche nello ``specfile`` e/o applicare delle [[patch]] al codice sorgente.  
+
Solitamente occorre effettuare modifiche nello ''specfile'' e/o applicare delle [[patch]] al codice sorgente.  
  
 
In ogni caso ci sono diverse possibilità per agire ed arrivare ad un risultato funzionante, ed è buona norma scegliere il metodo che tenga in considazione il più possibile i seguenti aspetti:
 
In ogni caso ci sono diverse possibilità per agire ed arrivare ad un risultato funzionante, ed è buona norma scegliere il metodo che tenga in considazione il più possibile i seguenti aspetti:
Riga 129: Riga 198:
 
autospec permette di identicare automaticamente la maggior parte dei build requirements con il comando:
 
autospec permette di identicare automaticamente la maggior parte dei build requirements con il comando:
  
  autospec -u <nome pacchetto> -a6
+
  autospec -u nome_pacchetto -a6
  
 
ad esempio:
 
ad esempio:
Riga 153: Riga 222:
 
Copiare o modificare il testo compreso tra '''##AUTOBUILDREQ-BEGIN''' e '''##AUTOBUILDREQ-END''' (comprese queste due righe) nello ''specfile'' ed aggiungere eventuali altri build requirements mancanti noti.
 
Copiare o modificare il testo compreso tra '''##AUTOBUILDREQ-BEGIN''' e '''##AUTOBUILDREQ-END''' (comprese queste due righe) nello ''specfile'' ed aggiungere eventuali altri build requirements mancanti noti.
  
Non è necessario effettuare il build ma basta ricreare il pacchetto sorgente con il comando:
+
Non è necessario effettuare di nuovo il build ma basta ricreare il pacchetto sorgente con il comando:
 +
 
 +
autospec -u nome_pacchetto -a5 --norpm --force
 +
 
 +
== Test di installazione ==
 +
Una volta completato il processo di pacchettizzazione è opportuno effettuare un test di quanto realizzato effettuando l'installazione dei pacchetti RPM che sono stati creati. I pacchetti creati saranno disponibili nelle seguenti cartelle:
 +
 
 +
{| border="1" class="wikitable"
 +
|+ '''Percorsi di RPM'''
 +
|-
 +
! Percorso
 +
! Contenuto
 +
! Estensione
 +
|-
 +
|/usr/src/RPM/SRPMS
 +
|Sorgenti
 +
|.src.rpm
 +
|-
 +
|/usr/src/RPM/RPMS/noarch
 +
|Pacchetto installabile per tutte le architetture
 +
|.noarch.rpm
 +
|-
 +
|/usr/src/RPM/RPMS/i586
 +
|Pacchetto installabile per architetture i586 e compatibili
 +
|.i586.rpm
 +
|-
 +
|/usr/src/RPM/RPMS/SOURCES
 +
|Archivi sorgenti, patch e altri file sorgenti
 +
|.tar.gz .tar.bz2 .zip e altre
 +
|-
 +
|/usr/src/RPM/RPMS/SPEC
 +
|Script di pacchettizzazione (specfiles)
 +
|.spec
 +
|}
 +
 
 +
Per installare i pacchetti realizzati è possibile utilizzare il comando '''rpm''':
 +
 
 +
sudo rpm -i nome_pacchetto1 nome_pacchetto2 ...
 +
 
 +
oppure '''autospec''' che effettuerà l'installazione di tutti i pacchetti disponibili:
 +
 
 +
autospec -u nome_pacchetto -a11
 +
 
 +
== Invio del pacchetto in un repository ==
 +
L'invio dei pacchetti prodotti richiede di avere l'autorizzazione per l'accesso ftp in upload.
 +
Normalmente questo avviene utilizzando il proprio [[Repository personali|repository personale]] che può essere richiesto [mailto:info@openmamba.org contattando] i manutentori della distribuzione.
 +
 
 +
Il proprio repository dev'essere configurato aggiungendo le righe sottostanti al file '''~/.autospec'''. In questo esempio è riportata la configurazione per un ipotetico repository '''devel-john''' dell'utente '''john''' e supponendo che il primo vettore di configurazione libero sia il numero 2:
 +
 
 +
<pre>
 +
# Repository personale
 +
 
 +
ftpurl_ro_rpms[2]="http://www.openmamba.org/pub/openmamba/devel-john/RPMS.@arch@"
 +
ftpurl_ro_srpms[2]="http://www.openmamba.org/pub/openmamba/devel-john/SRPMS.base"
 +
 
 +
ftp_rw_server[2]="ftp://ftpaccounts.openmamba.org"
 +
ftp_rw_port[2]=
 +
ftp_rw_passive_mode[2]=on
 +
ftp_rw_user[2]=john
 +
ftp_rw_passwd[2]="password"
 +
ftp_rw_rpms_dir[2]="/RPMS.@arch@"
 +
ftp_rw_srpms_dir[2]="/SRPMS.base"
 +
 
 +
arch_list[2]="i586"
 +
 
 +
arch_noarch_upload[2]="${arch_list[0]}"
 +
 
 +
ftpdir_rw_old[2]="/old"
 +
</pre>
 +
 
 +
L'invio avviene con il seguente comando:
  
  autospec -u <nome pacchetto> -a5 --norpm
+
  autospec -u nome_pacchetto -a10 --server 2

Versione attuale delle 20:49, 15 nov 2011

Pre-requisiti

  • l'utente che utilizza autospec deve fare parte del gruppo packager. Normalmente l'utente creato durante l'installazione di openmamba fa già parte di questo gruppo.

Installazione

Installare il pacchetto denominato autospec utilizzando smart --gui oppure con il seguente comando:

sudo smart install autospec

Configurazione

Nella propria home creare un file denominato

.autospec

con contenuto simile al seguente:

# [configuration file for `autospec']

DISTRO="openmamba"
VENDOR="openmamba"

packager_fullname="<inserisci il tuo nome e cognome>"
packager_email="<inserisci il tuo indirizzo e-mail>"

ftp_alias[0]="devel"
ftpurl_ro_rpms[0]="http://www.openmamba.org/pub/openmamba/devel/RPMS.@arch@"
ftpurl_ro_srpms[0]="http://www.openmamba.org"
ftp_rw_server[0]="ftp://ftp.openmamba.org/"
ftp_rw_port[0]=
ftp_rw_passive_mode[0]=on
ftp_rw_user[0]=
ftp_rw_passwd[0]=""
ftp_rw_rpms_dir[0]="/RPMS.@arch@"
ftp_rw_srpms_dir[0]="/SRPMS.base"
ftp_rw_server[0]=""
ftp_rw_port[0]=
ftp_rw_passive_mode[0]=on
ftp_rw_user[0]=
ftp_rw_passwd[0]=""
ftp_rw_rpms_dir[0]="/RPMS.@arch@"
ftp_rw_srpms_dir[0]="/SRPMS.base"
arch_list[0]="i586"
arch_noarch_upload[0]="${arch_list[0]}"
ftpdir_rw_old[0]="/old"

ftp_alias[1]="devel-games"
ftpurl_ro_rpms[1]="http://www.openmamba.org/pub/openmamba/devel-games/RPMS.@arch@"
ftpurl_ro_srpms[1]="http://www.openmamba.org/pub/openmamba/devel-games/SRPMS.base"
ftp_rw_server[0]="ftp://ftp.openmamba.org/"
ftp_rw_port[0]=
ftp_rw_passive_mode[0]=on
ftp_rw_user[0]=
ftp_rw_passwd[0]=""
ftp_rw_rpms_dir[0]="/RPMS.@arch@"
ftp_rw_srpms_dir[0]="/SRPMS.base"
ftp_rw_server[0]=""
ftp_rw_port[0]=
ftp_rw_passive_mode[0]=on
ftp_rw_user[0]=
ftp_rw_passwd[0]=""
ftp_rw_rpms_dir[0]="/RPMS.@arch@"
ftp_rw_srpms_dir[0]="/SRPMS.base"
arch_list[1]="i586"
arch_noarch_upload[1]="${arch_list[1]}"
ftpdir_rw_old[1]="/old"

ftp_rw_server_num_default=0
format_description_width=0

Questa configurazione fornisce l'accesso in sola lettura ai repository devel[1] e devel-games [2].

Configurare un proxy in Autospec

Nel file .autospec della propria home inserire la riga proxy="indirizzoproxy:porta" ad esempio : proxy="10.12.111.10:3128"

ed effettuare queste modifiche per ogni repository (sostituire [0] con il numero del repository desiderato ed effettuare le modifiche per tutti i repository):

ftp_rw_server[0]="http://www.openmamba.org"
ftp_rw_rpms_dir[0]="/pub/openmamba/<inserisci il nome del repository>/RPMS.@arch@"
ftp_rw_srpms_dir[0]="/pub/openmamba/<inserisci il nome del repository>/SRPMS.base"
ftpurl_ro_rpms[0]="ftp://ftpaccounts.openmamba.org/pub/openmamba/<inserisci il nome del 
repository>/RPMS.@arch@"
ftpurl_ro_srpms[0]="ftp://ftpaccounts.openmamba.org/pub/openmamba/<inserisci il nome del 
repository>/SRPMS.base"

Creazione di un nuovo pacchetto RPM

Partendo dalle seguenti informazioni:

  • url archivio sorgente: l'indirizzo internet da cui è possibile scaricare l'archivio
  • nome pacchetto: il nome del pacchetto, solitamente la prima parte del nome dell'<url archivio sorgente>

digitare il seguente comando:

autospec -s url_archivio_sorgente -o nome_pacchetto.spec

Se non ci sono stati problemi viene creato il seguente file anche denomianto specfile:

/usr/src/RPM/SPEC/nome_pacchetto.spec

prima di procedere occorre editare questo file occorre ed immettere alcune informazioni quali:

  • Summary: una descrizione breve del componente software
  • Group: un gruppo tra quelli definiti in openmamba
  • URL: l'indirizzo internet della pagina principale che descrive questo componente software
  • License: la licenza con cui viene rilasciato il componente software

Aggiornamento di un pacchetto RPM

autospec permette l'aggiornamento semi-automatico di un pacchetto software, ricavando automaticamente per molti di questi il numero dell'ultima versione disponibile.

Digitare il seguente comando:

autospec -u nome_pacchetto -a1:4

Se non viene identificato il nuovo numero di versione, oppure è stata individuata una versione instabile, si può specificare manualmente la versione a cui aggiornare con il comando:

autospec -u nome_pacchetto -a1,3,4 numero_nuova_versione

Compilazione e pacchettizzazione

Per effettuare la compilazione del componente software e creare i pacchetti RPM binari digitare il comando:

autospec -u nome_pacchetto -a5

Questa operazione può richiedere un tempo variabile. In alcuni casi la pacchettizzazione consiste solo nella copia di files e può richiedere pochi secondi, in altri si tratta di compilare migliaia di righe di codice sorgente e questa operazione può richiedere un tempo variabile tra alcuni minuti ed alcune ore a seconda della dimensione del software.

Raggruppamento dei file

Il risultato normalmente ottenuto, se l'operazione è andata a buon fine, è di ottenere un output che contiene un elenco di file come nell'esempio seguente:

Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/libz-root
error: Installed (but unpackaged) file(s) found:
   /lib/libz.so.1
   /lib/libz.so.1.2.3
   /usr/include/zconf.h
   /usr/include/zlib.h
   /usr/include/zutil.h
   /usr/lib/libz.a
   /usr/lib/libz.so
   /usr/share/man/man3/zlib.3.gz


RPM build errors:
    Installed (but unpackaged) file(s) found:
   /lib/libz.so.1
   /lib/libz.so.1.2.3
   /usr/include/zconf.h
   /usr/include/zlib.h
   /usr/include/zutil.h
   /usr/lib/libz.a
   /usr/lib/libz.so
   /usr/share/man/man3/zlib.3.gz

I files elencati andranno inseriti nel pacchetto principale oppure in sottopacchetti del pacchetto principale. Nel caso di questo esempio, la libreria zlib, il pacchetto principale si chiamerà libz e si aggiungerà un sottopacchetto denominato libz-devel. Il sottopacchetto -devel contiene tutti i file che servono solo per lo sviluppo di altri software che utilizzano questa libreria come dipendenza. Esempi di file sono:

  •  %{_includedir}/*.h, %{_includedir}/*.hpp: prototipi di librerie
  •  %{_libdir}/*.so: collegamento alla libreria utilizzato dal linker in fase di compilazione
  •  %{_libdir}/*.la: file contenente informazioni per il linking della libreria
  •  %{_libdir}/*.a: libreria statica utilizzata per la creazione di applicazioni che non dipendono dinamicamente dalla libreria dinamica
  •  %{_libdir}/pkgconfig/*.pc: file contenente i flag da passare al compilatore/linker per l'utilizzo di questa libreria

Una volta aggiornato lo specfile, prima di rilanciare la compilazione, è possibile verificare che tutti i file siano stati inclusi correttamente negli elenchi %files con:

rpmbuild -bl nome_pacchetto.spec

Se questa operazione non restituisce errori o file non inclusi si può di nuovo lanciare la compilazione e questa volta al termine dell'operazione saranno prodotti i pacchetti attesi.

Posizionamento dei pacchetti prodotti

Se l'operazione è andata a buon fine nella directory

/usr/src/RPM/RPMS/i586

oppure

/usr/SRC/RPM/RPMS/noarch

saranno disponibili i pacchetti installabili, mentre il pacchetto sorgente sarà in:

/usr/SRC/RPM/SRPMS

Problemi di compilazione e/o pacchettizzazione

Questa è la fase più complessa di tutto il procedimento, si tratta di una situazione equivalente al centro della partita nel gioco degli scacchi, è il momento in cui occorre applicare doti quali l'ingegno, l'esperienza, l'intuito, l'estro ecc. per giungere al risultato desiderato!

Normalmente la prima cosa da fare è cercare, tra i molti messaggi che compaiono a video, qual è stato l'errore che ha causato la terminazione del processo. Normalmente in presenza di molti errori è sufficiente iniziare a considerare soltanto il primo, perché i successivi potrebbero esserne una conseguenza.

Solitamente occorre effettuare modifiche nello specfile e/o applicare delle patch al codice sorgente.

In ogni caso ci sono diverse possibilità per agire ed arrivare ad un risultato funzionante, ed è buona norma scegliere il metodo che tenga in considazione il più possibile i seguenti aspetti:

  • il modo in cui il software viene sviluppato e mantenuto dai suoi sviluppatori. Poiché saranno disponibili nuove versioni che occorrerà aggiornare in openmamba è bene applicare modifiche che si può presumere che funzioneranno anche nelle versioni successive
  • che ciò che è stato fatto sia chiaro ad altri manutentori del pacchetto
  • in nessun caso rimuovere da uno specfile qualcosa se non si è chiaro di cosa faccia e perchè lo faccia
  • evitare di introdurre problemi di regressione delle funzionalità del componente software: dopo un aggiornamento la nuova versione del pacchetto deve mantenere almeno le stesse funzionalità della versione precedente

Verifica dei build requirements

Dopo che i pacchetti sono stati creati con successo, occorre verificare che siano stati specificati tutti i build requirements necessari. autospec permette di identicare automaticamente la maggior parte dei build requirements con il comando:

autospec -u nome_pacchetto -a6

ad esempio:

[silvan@openmamba SPECS]$ autospec -u mediawiki -a6
aggiornamento del pacchetto mediawiki alla versione [?]...
[step 6] -- creazione della lista dei build requirement
 * /usr/src/RPM/RPMS/noarch/mediawiki-1.10.2-3mamba.noarch.rpm
 * /usr/src/RPM/RPMS/noarch/mediawiki-theme-openmamba-1.10.2-3mamba.noarch.rpm
## AUTOBUILDREQ-BEGIN
BuildRequires: apache-mod_php
BuildRequires: bash
BuildRequires: diffutils
BuildRequires: ImageMagick-devel
BuildRequires: mysql
BuildRequires: php-apc
BuildRequires: php-devel
BuildRequires: php-mysql
## AUTOBUILDREQ-END

Copiare o modificare il testo compreso tra ##AUTOBUILDREQ-BEGIN e ##AUTOBUILDREQ-END (comprese queste due righe) nello specfile ed aggiungere eventuali altri build requirements mancanti noti.

Non è necessario effettuare di nuovo il build ma basta ricreare il pacchetto sorgente con il comando:

autospec -u nome_pacchetto -a5 --norpm --force

Test di installazione

Una volta completato il processo di pacchettizzazione è opportuno effettuare un test di quanto realizzato effettuando l'installazione dei pacchetti RPM che sono stati creati. I pacchetti creati saranno disponibili nelle seguenti cartelle:

Percorsi di RPM
Percorso Contenuto Estensione
/usr/src/RPM/SRPMS Sorgenti .src.rpm
/usr/src/RPM/RPMS/noarch Pacchetto installabile per tutte le architetture .noarch.rpm
/usr/src/RPM/RPMS/i586 Pacchetto installabile per architetture i586 e compatibili .i586.rpm
/usr/src/RPM/RPMS/SOURCES Archivi sorgenti, patch e altri file sorgenti .tar.gz .tar.bz2 .zip e altre
/usr/src/RPM/RPMS/SPEC Script di pacchettizzazione (specfiles) .spec

Per installare i pacchetti realizzati è possibile utilizzare il comando rpm:

sudo rpm -i nome_pacchetto1 nome_pacchetto2 ...

oppure autospec che effettuerà l'installazione di tutti i pacchetti disponibili:

autospec -u nome_pacchetto -a11

Invio del pacchetto in un repository

L'invio dei pacchetti prodotti richiede di avere l'autorizzazione per l'accesso ftp in upload. Normalmente questo avviene utilizzando il proprio repository personale che può essere richiesto contattando i manutentori della distribuzione.

Il proprio repository dev'essere configurato aggiungendo le righe sottostanti al file ~/.autospec. In questo esempio è riportata la configurazione per un ipotetico repository devel-john dell'utente john e supponendo che il primo vettore di configurazione libero sia il numero 2:

# Repository personale

ftpurl_ro_rpms[2]="http://www.openmamba.org/pub/openmamba/devel-john/RPMS.@arch@"
ftpurl_ro_srpms[2]="http://www.openmamba.org/pub/openmamba/devel-john/SRPMS.base"

ftp_rw_server[2]="ftp://ftpaccounts.openmamba.org"
ftp_rw_port[2]=
ftp_rw_passive_mode[2]=on
ftp_rw_user[2]=john
ftp_rw_passwd[2]="password"
ftp_rw_rpms_dir[2]="/RPMS.@arch@"
ftp_rw_srpms_dir[2]="/SRPMS.base"

arch_list[2]="i586"

arch_noarch_upload[2]="${arch_list[0]}"

ftpdir_rw_old[2]="/old"

L'invio avviene con il seguente comando:

autospec -u nome_pacchetto -a10 --server 2