…e Repository fu (anche opkg)

Dunque… alla fine sono riuscito nel mio intento, creare un pacchetto opkg e mettere in piedi un repository funzionante. Ma procediamo per gradi

Come fare un pacchetto opkg.

E’ piu’ o meno semplice ma partiamo da un esempio concreto: il mio gpsdcontrol.

Per punzionare ha bisogno, in sostanza di 3 file (attenzione che dalla versione 0.1 i nomi dei file sono diversi):

/usr/bin/gpsdcontrol.py
/usr/share/pixmaps/gpsdcontrol.png
/usr/share/applications/gpsdcontrol.desktop

Appurato che questi 3 file sono quelli che dobbiamo andare a mettere nel nostro pacchetto, noi adesso ci creiamo una directory temporanea dove al suo interno ci ricreiamo la struttura delle directory. Tipo cosi:

/home/root/tmp/usr/bin/gpsdcontrol.py
/home/root/tmp/usr/share/pixmaps/gpsdcontrol.png
/home/root/tmp/usr/share/applications/gpsdcontrol.desktop

e da ora in poi agiremo all’interno della directory /home/root/tmp

oltre a ricreare questa struttura dobbiamo creare un’altra directory chiamata CONTROL, quindi diventa /home/root/tmp/CONTROL/ e dentro questa bisogna creare un file chiamato control e al suo interno andranno scritte le varie robe del pacchetto. Ecco il contenuto del mio file control:

Package: gpsdcontrol
Priority: optional
Section: Misc
Version: 0.2
Architecture: all
Maintainer: Carlo Minucci gecco@napodano.com
Depends: gpsd
Source: http://minucci.net/file/gpsdcontrol.tar.gz
Description: Simple python script for start/stop gpsd daemon.

La sintassi e’ piuttosto chiara, bisogna solo fare attenzione a specificare l’architettura, il mio essendo in python gira su tutte le architetture e quindi ho messo all. Poi le dipendenze che se non ci sono va lasciato vuoto. Inoltre a quanto pare bisogna per forza specificare l’url del sorgente.

Una volta fatto questo file bisogna creare un altro file, nella radice della nostra directory temporanea, chiamato debian-binary dove al suo interno ci deve essere scritto semplicemente 2.0. Quindi basta dare echo “2.0″ > debian-binary

Alla fine avremo una struttura di questo tipo:

# ls -l
totale 12
drwxr-xr-x 2 carlo carlo 4096 2008-10-15 12:36 CONTROL
-rw-r–r– 1 carlo carlo    4 2008-10-15 12:27 debian-binary
drwxr-xr-x 4 carlo carlo 4096 2008-10-15 11:35 usr

A questo punto arriva la fase della realizzazione vera e propria del pacchetto.

Il formato opk e’ derivato direttamente da ipk, tant’e’ che molti usano lo script di ipkg per creare i pacchetti.

Il formato opk, come ipk, non e’ altro un file targizzato che al suo interno ha altri due file targizzati delle nostre due directory. Cerchero’ di essere piu’ chiaro.

Ritornmiamo all’interno della nostra directory temporanea e poi diamo il comando tar -czvf control.tar.gz CONTROL e tar -czvf data.tar.gz usr/ e quindi ci ritroveremo quei due file. A questo punto il passaggio finale: tar -czvf gpsdcontrol_0.2_all.tar.gz control.tar.gz data.tar.gz debian-binary

questo in pratica unire i nostri 3 file in un unico file compresso che ora andremo a rinominare in gpsdcontrol_0.2_all.opk. Attenzione perche’ il numero di versione e dell’architettura, _0.2_all, deve coincidere con quanto scritto precedentemente dentro il file control.

A questo punto, volendo, possiamo installarlo nell’openmoko semplicemente col comando opkg install gpsdcontrol_0.2_all.opk ma quello che vogliamo fare noi e’ installarlo da un repository.

Mettere in piedi un repository.

Un repository non e’ altro che una directory in un serve web che contiene i nostri pacchetti. Io ho riservato una directory apposta in http://minucci.net/file/opkg/

Qua dentro, oltre al nostro pacchetto .opk, vanno inseriti altri due file, uno e’ chiamato Packages che contiene la descrizione dei pacchetti, e’ l’altro e’ Packages.gz che e’ lo stesso file ma compresso.

Dentro Packages in pratica va copiato il contenuto di CONTROL/control aggiungendo delle informazioni in piu’, ecco http://minucci.net/file/opkg/Packages come si presenta ora:
Package: gpsdcontrol
Priority: optional
Section: Misc
Version: 0.2
Architecture: all
Maintainer: Carlo Minucci gecco@napodano.com
MD5Sum: 1061549db79cc2aaa6a8dd09d35d749d
Size: 6696
Filename: gpsdcontrol_0.2_all.opk
Depends: gpsd
Source: http://minucci.net/file/gpsdcontrol.tar.gz
Description: Simple python script for start/stop gpsd daemon.
OE: base-files
Homepage: unknow
Priority: required

Sostanzialmente e’ uguale ma vanno aggiunte, come potete vedere se fate il contrfronto, alcune voci tra cui le piu’ importanti sono Filename e MD5Sum. Filename mi sembra superfluo spiegarlo ma MD5Sum non e’ altro che il risultato del comando md5sum sul pacchetto opk. Quindi diamo il comando md5sum gpsdcontrol_0.2_all.opk che come risultato ci restituisce proprio quel numero. Questo serve ad avere una conferma che il pacchetto che abbiamo scarica non sia arrivato corrotto o con degli errori. Le altre voci, ad essere sincero, non so a cosa servano ma io le ho messe e non ho avuto problemi, quindi presumo che servano a qualcosa :) io le ho copiate da un’altro file.

Nel caso avessimo piu’ pacchetti, bisogna aggiungere a Packages le informazioni riguardo tutti i pacchetti.

E ora arriviamo alle fine

Configuriamo un repository sull’openmoko

Dentro l’openmoko c’e’ una directory chiama /etc/opkg dove al suo interno troviamo vari file, ogni file contiene il link ai vari repository. Io ho aggiunto un file chiamato gecco-feed.conf e al suo interno c’e’ una riga di testo cosi’: src/gz daily-gecco http://minucci.net/file/opkg

Inoltre bisogna editare il file arch.conf e aggiungere in fondo la riga arch gecco 40.

Ora possiamo da un opkg update e vedremo che si e’ aggiunto un repositori nuovo, con opkg list | grep gpsdcontrol ci dice che il pacchetto e’ disponibile e con opkg install gpsdcontrol lo possiamo installare.

Conclusioni

Ci sono in giro degli script gia’ fatti e automatizzati che fanno tutto questo lavoro, ma io ho avuto alcuni problemi ad utilizzarli (senza entrare nei dettagli) e comunque cosi’ tutto a manina e’ stato piu’ divertente :)

Lo script più comodo che mi hanno consigliato è questo.

About these ads

»

  1. Pingback: gtkaddpoi « Carlo Minucci a.k.a. Gecco

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...