jump to navigation

Compilare con Ubuntu: 5) Creare pacchetti a partire da “setup.py”

felipe in: Articoli, Guide e HowTo, Avanzati, per Guru! il 21/03/07 @ 15:38 , trackback
0 votes, average: 0 out of 50 votes, average: 0 out of 50 votes, average: 0 out of 50 votes, average: 0 out of 50 votes, average: 0 out of 5 (media: 0, registrati per votare)
Loading ... Loading ...

Nella mia guida “Compilare con Ubuntu: 4) Creare pacchetti Debian con dh_make” descrivevo il tipico caso di creazione di pacchetti a partire da sorgenti abbastanza “standard” che fanno uso degli “autotools” (il 90% dei casi). Quella guida resta il punto di riferimento per compilare la stragrande maggioranza dei pacchetti, quindi prima di tutto quasi sicuramente vorrete dare un occhio a quella :)

deb.png

Oggi invece tratto un esempio differente. Capita sempre più spesso di trovare sorgenti che vengono distribuiti con un sistema di compilazione basato interamente su python e che non prevede l’uso dei classici “autotools”, questo significa che nei sorgenti non c’è nessun “configure“, “Makefile” o “autogen.sh“. In questi casi la guida sopra citata non va bene, e bisogna usare qualche scorciatoia. Come vedrete non è niente di complicato, anche se forse un po’ macchinoso…


Ci sono diversi metodi, ma quello che sto per descrivere mi sembra il più naturale, almeno per me. Consiste nel compilare il pacchetto usando setup.py, creare una distribuzione binaria del pacchetto e successivamente “debianizzarla”. Per mostrarvi l’intero procedimento senza rischiare i conati di vomito userò un pacchetto che ho appena compilato, di un’app che volevo recensire. Si tratta di deluge, il mio client torrent preferito. Ecco i semplici passi:

A questo punto abbiamo già pronto il pacchetto, che non è altro che un albero delle directory compresso, contenente ad esempio usr/bin/deluge e altri file. Questo pacchetto viene creato nella sottodirectory “dist” all’interno dei sorgenti in cui stiamo lavorando.

Non ci resta a questo punto che trasformare quel pacchetto “neutro” in un pacchetto debian, in modo da poterlo installare. Per fare ciò:

A questo punto resta solo l’ultima parte, la più importante e potenzialmente complicata da compiere: bisogna creare un file “control” secondo gli standard adottati in Debian. La cosa non è così difficile e volendo si può prendere spunto da altri pacchetti, ecco in questo caso cosa bisogna fare:

Al solito, nessuno vi vieta di studiarvi la documentazione ufficiale per imparare a mettere tutte le informazioni al loro posto ;) La parte potenzialmente complicata è quella relativa all’elenco delle dipendenze, ma in tutta onestà ve ne potreste anche sbattere se non volete diventare mantainer Debian/Ubuntu e se il pacchetto serve per uso personale (dove l’ho sentita questa…?)

Con un po’ di fortuna l’ultimo comando creerà istantaneamente un pacchetto debian che voi potrete installare con un bel doppio click

…quando ci vuole, ci vuole :D

Etichette:

Commenti»

1. Neo - 21/03/07 @ 16:03

Ottima guida! Anche se mi sarebbe stata utile qualche mese fa… :D

2. Deluge 0.5.0, qualità confermate [deb] « pollycoke :) - 21/03/07 @ 18:17

[...] pacchetto deb di Deluge 0.5 per Ubuntu Edgy, seguendo le istruzioni della mia recente guida “Compilare con Ubuntu: 5) Creare pacchetti a partire da “setup.py”“, dovrebbe funzionare senza problemi ma vi avverto che è un po’ sperimentale [...]

3. edo - 21/03/07 @ 19:41

Guarda che caso!!
Proprio oggi mi stavo studiando come creare un installer per un programma che sto scrivendo in Python!!
bella li ;-)

4. fede - 22/03/07 @ 1:54

Thanks…!!

L’ho appena impacchettato e installato su etch… !!

Vediamo se funge…lo lascio andare per un pò…

grazie…ciao ciao

5. Treviño - 22/03/07 @ 5:03

Mhmhmh…. felipe non mi torna molto il procedimento a dire il vero :P
Intendo dire, funziona ma è tutto molto spartano e non c’è un eventuale controllo delle dipendenze; inoltre non è “universale”…

In realtà i “setup.py” forniti molto spesso con i sw in python sono molto più potenti e anzi ci permettono di fare pacchetti in modo molto semplice, senza dover far grandi modifiche e cmq sfruttando sempre il dh_make (o meglio la struttura debian/ che ci crea lui) possiamo fare una cosa ben più pulita e sicuramente più rapida (anche in caso di nuove versioni).

Per farlo fondamentalmente bisogna usare i comandi che sono forniti da «python setup.py –help-commands» e sopratutto le opzioni di “install” (python setup.py –help install).

Per tanto i passi fonamentalmente sono…

- dh_make
- editare i files debian/control (e debian/changelog), quindi il più importante: debian/rules; in questo si devono fondamentalmente rimuovere i riferimenti a make ($(MAKE) ) aggiungendovi quelli a setup.py.
Eccovi un esempio per questo caso specifico: http://pastebin.ca/406121
- Fatto, eventualmente giocate con i vari tool dh_python* o cmq sistemate le varie dipenenze
- debuild binary ed è fatta :)

Bye!!

6. felipe - 22/03/07 @ 12:10

@Treviño:
Sì effettivamente il processo è molto spartano, ma alla fine leggendo un po’ di documentazione si trova il modo di integrare il file “control” in maniera degna.

Grazie della procedura, ma piuttosto sai niente del “target” bdist_deb per setup.py? Non ho ben capito se farebbe al caso nostro…

7. fede - 22/03/07 @ 14:50

funziona…ed è anche molto + leggero di azureus !! Purtroppo è un pò scarno di opzioni e settings quindi rimango fedele ad azureus !!

per il metodo di pacchettizazione, sincerramente non ci vedo nulla di male a creare pacchetti funzionanti a scopo personale “buildati” un pò a “kazzo” :D !!!

i miei pacchetti ad esempio sono un insulto alla “Debian New Maintainers’ Guide” :D ma funzionano, l’importante è quello !!! ^__^

ciao ciao

8. Treviño - 22/03/07 @ 18:27

bdist_deb non esiste, c’è bdist_dumb ma non penso faccia al caso nostro, a noi bastano –prefix= o –root= uniti ad install.

Cmq, fede il fatto è che non devono solo funzionare ma anche essere ben “ambientati” in un sistema di dipenenze ben complesso come quello di apt… Quindi specie se uno ridistribuisce i pacchetti è bene che sia tutto fatto come è giusto; poi anche io mi sono fatto degli script che spacchettano e generano pacchetti a partire da un debian/ tree.

Più che altro io non lo dicevo perché sono fatti “male” ma quanto perché il metodo è più veloce ed universale… Insomma, è il modo con cui si pacchettizzano normalmente i “setup.py”-based in ambienti debian/Ubuntu/….

9. felipe - 22/03/07 @ 18:38

@Treviño:
“bdist_deb” non esiste ufficialmente ma si trova qualche info a riguardo in rete, non ho capito se lo si sta implementando e ti chiedevo se ne sapessi qualcosa.

10. Treviño - 23/03/07 @ 5:35

Ah, ok… Non avevo inteso… No, non ne sapevo molto devo dire…
Mi informerò :)

Bye

11. Attorianzo - 24/03/07 @ 0:25

Ho scoperto che la riga in cui scrivi:

$: sudo apt-get install libboost-filesystem-dev libboost-serialization-dev libboost-program-options-dev libboost-regex-dev libboost-date-time-dev libboost-thread-dev

Non è visibile nella sua interezza con internet explorer, in quanto non compare lo scroll orizzontale..

12. TK - 18/07/07 @ 11:58

Immagino la stessa procedura sia adattabile ad applicazioni Java, vero?

E a questo punto, la seconda domanda: non è che si potrebbe avere un piccolo howto :-) ?

Grazie mille a Felipe e a tutti quelli che contribuiscono a Pollycoke. Ormai questo è il primo posto dove vengo a cercare se ho dei problemi (e non è una sviolinata gratuita).

(commentando accetti implicitamente le Regole di pollycoke, leggile!)