5.2 Creare pacchetti RPM

Il formato RPM viene usato da molte popolari distribuzioni Linux, incluse Red Hat, SuSE, e Mandrake. Se una di queste (o una tra le altre distribuzioni Linux basate su RPM) distribuzioni è il vostro ambiente abituale, creare package RPM per altri utenti della propria distribuzione è semplice. In base alla complessità della propria distribuzione di moduli e le differenza tra le distribuzioni Linux, si potrebbe essere in grado di creare degli RPM che lavorano su differenti distribuzioni basate su RPM.

Il classico metodo per creare un RPM della propria distribuzione di moduli è di eseguire il comando bdist _rpm:

python setup.py bdist_rpm

oppure il comando bdist con l'opzione --format:

python setup.py bdist --formats=rpm

Il primo permette di specificare opzioni RPM specifiche: il secondo consente di specificare con facilità diversi formati in una singola esecuzione. Se si ha bisogno di entrambi, si possono esplicitamente specificare comandi multipli bdist_* e le loro opzioni:

python setup.py bdist_rpm --packager="John Doe <jdoe@example.org>" \
                bdist_wininst --target_version="2.0"

La creazione di pacchetti RPM è guidata dal file .spec, tanto quanto le distutils vengono controllate dallo script di setup. Per rendere la vita facile, il comando bdist_rpm crea normalmente un file .spec basato sulle informazioni fornite nello script di setup, da riga di comando ed in ogni file di configurazione delle Distutils. Diverse opzioni e sezioni nel file .spec sono derivate dalle opzioni presenti nello script di setup:

Opzioni del file .spec RPM o sezione  Opzioni Distutils per lo script di setup 
Nome nome
Sommario (nel preambolo) description
Versione version
Produttore author e author_email o
& maintainer e maintainer_email
Copyright licence
Url url
%descrizione (sezione) long_description

Inoltre, ci sono molte opzioni nei file .spec che non hanno una corrispondente opzione nello script di setup. Molte di queste vengono gestite attraverso le opzioni del comando bdist_rpm come segue:

Opzioni del file .spec RPM o sezione  bdist_rpm opzione  default value 
Release release ``1''
Group group ``Development/Libraries''
Produttore vendor (vedete dopo)
Packager packager (none)
Fornisce provides (none)
Richieste requires (none)
Confligge conflicts (none)
Obsolete obsoletes (none)
Distribuzione distribution_name (none)
Opzioni richieste dalla compilazione build_requires (none)
Icone icon (none)

Ovviamente, fornire anche poche di queste opzioni da riga di comando sarebbe noioso e non esente da errori, così è preferibile inserirle nel file di configurazione di setup, setup.cfg--vedete la sezione 3. Se si distribuiscono o si creano package con molte distribuzioni di moduli Python, si possono inserire le opzioni comuni da applicare nel proprio personale file di configurazione di Distutils ((~/.pydistutils.cfg).

Ci sono tre passi per costruire un package RPM binario e vengono gestiti automaticamente da Distutils:

  1. creare un file .spec, che descrive il package (analogamente allo script di setup delle distutils; infatti, molte delle informazioni nello script di setup corrispondono al file .spec)
  2. creare il sorgente RPM
  3. creare il ``binario'' RPM (che potrebbe o non potrebbe contenere codice binario, a seconda di come sia composta la vostra distribuzione di moduli, se contiene o meno estensioni Python)

Normalmente, gli RPM raggruppano gli ultimi due passaggi, quando si usano le Distutils, tutti e tre i passaggi vengono tipicamente raggruppati assieme.

Invece, se lo si desidera, si possono separare questi tre passaggi. Si può usare l'opzione --spec-only per eseguire bdist_rpm solo per creare il file .spec ed uscire; in questo caso il file .spec verrà scritto nella ``directory di distribuzione''--solitamente dist/, ma personalizzabile con l'opzione --dist-dir. (Normalmente il file .spec finisce in fondo all'``albero di compilazione'' in una directory temporanea creata da bdist_rpm.)

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.