Come costruire un pacchetto

From Paldo

Jump to: navigation, search

Contents

[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 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:

Personal tools