Come costruire un pacchetto
From Paldo
[edit] Come costruire un pacchetto usando upkg (gestore pacchetti Paldo)
Scritto da Paolo Stivanin nel dicembre 2008
[edit] Premessa
Questo howto dovrebbe aiutarti a ottenre un pacchetto sorgenti costruito usando upkg. Upkg è il gestore pacchetti e il tool che si usa per pacchettizzare su Paldo Linux distribution. Vedremo ora come fare per fare ciò!
[edit] Creare il repository locale di Paldo
Prima di tutto dobbiamo creare un posto dove mettere le sorgenti dei pacchetti. Non importa dove crei il repository locale. Io, per esempio, ho messo il mio nella home:
[pol@pol-laptop:~]$mkdir PaldoRepo
[pol@pol-laptop:~]$mkdir PaldoRepo/binaries
[pol@pol-laptop:~]$mkdir PaldoRepo/sources
[pol@pol-laptop:~]$mkdir PaldoRepo/specs
Ora dobbiamo far vedere a upkg il nostro nuovo repository locale. Per fare ciò editiamo da root il file /etc/upkg.conf e aggiungiamo il nostro repository locale. Il contenuto del file sarà qualcosa che assomiglia a questo:
<?xml version="1.0" encoding="UTF-8"?>
<local>
<cachedir>/var/cache/upkg</cachedir>
<repositories>
<repository>http://www.paldo.org/paldo</repository>
<repository>/home/pol/PaldoRepo/</repository>
</repositories>
<branch>testing</branch>
<arch>x86</arch>
</local>
[edit] Prendiamo i sorgenti
Ora scarichiamo i sorgenti dell'applicazione che vogliamo installare. Nel mio caso ho scaricato i tarball da http://gnomebaker.sourceforge.net/ . Upkg ha bisogno che i sorgenti siano compressi con tar (tar file), o tar.bz2 file (compressione bzip2). Assicurati che i tuoi sorgenti siano nel formato corretto quindi copia o muovili nella sources dir del tuo repository. Mi raccomando che i file devono lo stesso nome che userai più tardi per il nome del pacchetto. Guarda il <package name>-tag nel file spec del capitolo successivo.
upkg troverà solo i sorgenti che salverai sotto $REPODIR/sources/$PACKAGENAME
[pol@pol-laptop:~/temp/gnome-baker]ls gnome-baker-0.5.0.tar.bz2 [pol@pol-laptop:~/temp/gnome-baker]mv gnome-baker-0.5.0.tar.bz2 ~/PaldoRepo/sources/gnome-baker/
N.B: Se preferisci usare un tar.gz file, dovrai aggiungere queste linee nel file spec: <archive name="...." compression="gz">
[edit] Creare un file Spec per UPKG
Ora dobbiamo dire a Upkg come deve gestire i sorgenti. Lo faremo usando un semplice file XML. Dovrai creare questo file nella directory specs del tuo repository. Il nome del file (e pertanto il nome del pacchetto) deve seguire queste regole:
- usare il nome del pkg-config se possibile
- per i pacchetti senza il file pkg-config usare il nome del tarball (archivio sorgenti)
Spesso puoi trovare il file pkg-config nella source directory (controlla anche le subdirectory) del pacchetto. Il pkg-config può essere sostituito anche da un file chiamato packagename.pc.in. Esempio redland.pc.in. Comunque gnome-baker non da un file simile. Pertanto io userò lo stesso nome del tarball e chiamerò il file gnome-baker.xml. Il contenuto del file di un eventuale pacchetto diverso da gnome-baker, somiglierà a questo:
<?xml version="1.0"?>
<package name="gnome-baker">
<description>gnome cd burning application</description>
<releases>
<release version="0.5.0" revision="1" branch="testing">
<deps>
<dep name="libgnomeui-2.0"/>
<dep name="gtk+-2.0"/>
<dep name="glib-2.0"/>
<dep name="libglade-2.0"/>
<dep name="gstreamer-0.8"/>
</deps>
<build>
<script>
<archive name="gnome-baker-$VERSION">
<cmd>./configure --prefix=/usr \
--infodir=/usr/share/info \
--mandir=/usr/share/man \
--sysconfdir=/etc</cmd>
<cmd>make -j 2</cmd>
<cmd>make install</cmd>
</archive>
</script>
</build>
</release>
</releases>
</package>
Molte parti di questo file sono descritte da sole; la parte "difficile" penso sia quella di scrivere le dipendenze. Per fare in modo che Upkg risolva automaticamente le dipendenze devi dirgli quali pacchetti hai bisogno di compilare. Per i pacchetti di cui hai bisogno puoi provare i seguenti modi:
- Leggere il file configure.in o configure.ac nella cartella dei sorgenti. Probabilmente troverai qualcosa di simile: PKG_CHECK_MODULES(GNOME, libgnomeui-2.0 gtk+-2.0 >= 2.4.0 glib-2.0 >= 2.4.0 libglade-2.0 gstreamer-0.8,,exit) in questo caso probabilmente è facile trovare i pacchetti necessari. Basta usare le librerie descritte nel PKG_CHECK_MODULES-list. In molti casi Paldo usa i medesimi nomi. Per esempio libgnomeui-2.0 è chiamata libgnomeui-2.0 anche nel repository di Paldo. Comunque usa http://www.paldo.org/index-section-packages.html per avere il nome esatto.
- Controllare i files README, INSTALL,... Alcuni progetti indicano le dipendenze in uno di quei file.
- Copia da un'altra distribuzione. Se niente ti aiuta, puoi dare un'occhiata su alle altre distro per vedere che dipendenze mettono.
Questa è una lista non ufficiale del build essentials:
- glibc
- gcc
- binutils
- make
- coreutils
- bzip2
- gzip
- patch
- tar
- bash
Non devi specificare queste dipendenze perchè questi pacchetti sono installati in qualsiasi Paldo-boxes.
[edit] Come Paldo gestisce i repository principali
Paldo ha 4 differenti repository principali:
- experimental
- unstable
- testing
- stable
Essi hanno queste finalità:
[edit] experimental
Questo è il repository delle ultime novità, sia per quanto riguarda i software, sia per quanto riguarda le librerie, ecc...che probabilmente hanno dipendenze non integre. Potrebbe essere per esempio un svn, git.. snapshot di un tool,lib,...
[edit] unstable
Software, librerie, ecc, più testati ma non rilasciati come stabili. Per esempio una beta potrebbe essere aggiunta al ramo unstable.
[edit] testing
Quando software, librerie, ecc, vengono rilasciati come stabili allora vengono aggiunti al ramo testing.
[edit] stable
Quando esce una nuova release di Paldo i pacchetti del ramo testing vengono passati a stable.
Puoi usare come principali o il ramo stable o il ramo testing. Benchè faccia voglia a molto, i rami unstable e experimental sono davvero parecchio instabili (soprattutto l'experimental) in quanto essi contengo le ultimissime novità!
Se tu aggiungi il tuo pacchetto nel ramo testing, esso sarà automaticamente disponibile negli altri repository ("unstable" & "experimental"). Pertanto non devi aggiungere <release>...</release> per tutti i rami, basta aggiungere solo quello inferiore.
[edit] Cominciare a compilare e installare
Ora devi compilare e installare il tuo pacchetto. I seguenti comandi invocheranno tutto:
[pol@pol-laptop:~]# upkg-build gnome-baker
Generating script...
Writing script...
Executing script...
The following extra packages will be installed:
gnome-baker
The following packages will be built from source:
gnome-baker
Do you want to continue? [Y/n]
Building gnome-baker-0.5.0-1 (testing)...
[pol@pol-laptop:~]#
Se vuoi vedere cosa succede basta aggiungere l'opzione --verbose al comando upkg-build:
[pol@pol-laptop:~]# upkg-build --verbose gnome-baker
Ora potrai usare la tua applicazione :-)
[edit] Files di log di Upkg
Se vuoi vedere cosa Upkg fa esattamente, basta che guardi il file /var/lib/upkg/logs/PACKAGE-VERSION.log.bz2. Nel mio caso vedo tutti i passaggi che Upkg ha fatto nel file /var/lib/upkg/logs/gnome-baker-x86-glibc-2.3-gcc-4.0-1-0.5.0-1.log.bz2
[edit] Rimuovere il pacchetto
Se vuoi rimuovere il pacchetto da te installato, basta usare questo comando:
[pol@pol-laptop:~]# upkg-remove gnome-baker
Questo cancellerà tutti i file del pacchetto precedentemente installato!
[edit] Tips / tricks
- In alcuni casi gli errori di un comando specifico non sono fatali al fine di costruire il pacchetto. In queste situazioni puoi usare <cmd check="no">...</cmd> il quale ti assicurerà che Upkg non si fermerà se uno dei comandi fallirà.
[edit] Spec-Template
<?xml version="1.0"?>
<package name="PACKAGE NAME">
<description>PACKAGE DESCRIPTION</description>
<releases>
<release version="RLS VERSIONS NUMBER" revision="1" branch="testing">
<deps>
<dep name="DEPENDENCY NAME"/>
<dep name="DEPENDENCY NAME"/>
</deps>
<build>
<script>
<archive name="PACKAGE NAME-$VERSION">
<cmd>./configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --sysconfdir=/etc</cmd>
<cmd>make -j 2</cmd>
<cmd>make install</cmd>
</archive>
</script>
</build>
</release>
</releases>
</package>
[edit] Spec gen
Kim88 ha scritto un generatore di file-spec, ecco il link:

