21 luglio 2008

JHbuild delle mie brame - parte 2

È arrivato l'atteso momento. Non fatevi cogliere impreparati, ma non abbiate nemmeno troppa ansia. È una cosa naturale e bellissima voler scoprire sensazioni nuove eppur conosciute (ma di cosa sto parlando!!??!!??!!)

I preliminari sono SEMPRE importanti¹

La prima azione da intraprendere è creare un nuovo utente; se le vostra distribuzione usa sudo invece di attivare l'utente root, può essere utile dargli i permessi adeguati per operare da amministratore.
Tale passo non è strettamente necessario, ma di recente JHbuild ha smesso di installare il proprio omonimo comando sotto /urs, preferendo $HOME/bin, per cui a mio avviso è meglio "confinare" JHbuild a un solo utente senza sporcare la propria home di produzione. Inoltre sarebbe abbastanza complicato per me starvi a spiegare come sia possibile compilare come un utente ed eseguire la sessione come altro utente. Quindi fatelo.

Ovviamente non vi spiego come si crea un nuovo utente. Insomma, state tentando di usare JHbuild, se non sapete creare un nuovo utente rinunciate. Ah, se vi interessa, il mio utente di prova si chiama Beta Tester e ha come login betatester.

In secondo luogo bisogna installare una serie di pacchetti necessari per avere gli strumenti di base: compilatore, programmi per il controllo di versione, strumenti vari per poter configurare, librerie per compilare al meglio il moduleset bootstrap.

Aprire quindi il vostro bel Terminale, cambiate la vostra identità in quella del nuovo utente creato appositamente 2 paragrafi prima e date il comando:
sudo apt-get install automake build-essential docbook docbook-utils docbook-xsl docbook2x doxygen bison flex libpopt-dev cvs subversion git-core jade texinfo libgdbm-dev libgmp3-dev libltdl3-dev libreadline5-dev libbz2-dev libx11-dev libssl-dev libxt6
(o analogo per distribuzioni basate su RPM) che provvederà a installare un bel po' di cosette che sembrano più o meno utili, ma fidatevi, sono necessarie (tra l'altro, il dover installare alcuni pacchetti è il motivo per cui dicevo prima che è meglio dare i permessi di amministratore al nuovo utente).

A questo punto si può procedere con i penultimi due passi preliminari, cioè:
  1. la creazione di una directory /opt/gnome2 in cui installare quanto compilato, directory che deve poter essere scrivibile dall'utente che esegue la compilazione;
  2. la creazione di una directory $HOME/svn/gnome2 in cui verranno scaricati e compilati i vari moduli scelti.
Sempre nel Terminale, quindi:
$ sudo mkdir -p /opt/gnome2
$ sudo chown `whoami`:`whoami` /opt/gnome2
$ mkdir -p ~/svn/gnome2
Nota: quando nel blocco c'è più di un comando, metto $ per indicare dove inizia ciascuno ed evitare problemi di trabocco. Ah, ovviamente potete usare nomi diversi per le directory, ma poi dovete ricordarvelo quando scriverete il file .jhbuildrc.

L'ultimo passo preliminare è scaricare JHbuild stesso con la semplice sequenza:
$ cd ~/svn/gnome2
$ svn checkout http://svn.gnome.org/svn/jhbuild/trunk jhbuild
per poi "installarlo" con l'altrettanto semplice sequenza:
$ cd jhbuild
$ make -f Makefile.plain install
Con l'ultimo comando viene creata una directory $HOME/bin in cui viene copiato lo script python jhbuild e a questo punto si è pronti per cominciare.

Duraturo piacere

E invece no. I preliminari vanno fatti per bene e devono essere una piacevole tortura. Per cui non è ancora il momento di dare il via alla lunga ed estenuante fase di compilazione.

Per evitare intoppi e rallentamenti dopo, tanto vale installare subito gli altri pacchetti necessari o opzionali a poter compilare i moduli che si vogliono compilare (quelli che, nel precedente post, avevo definito dipendenze "esterne-estern"). L'elenco dei pacchetti e il modulo da cui sono richiesti è (più o meno, magari manca qualcosa) il seguente:
  • libattr1-dev (glib)
  • libgamin-dev (glib --> perché il configure cerca libfam in /usr/)
  • libselinux-dev (glib e gnome-vfs, opzionale)
  • xorg-dev (ovvio!)
  • libfreetype6-dev (fontconfig)
  • libjpeg62-dev (GTK+)
  • libpng12-dev (GTK+)
  • libungif4-dev (GTK+)
  • libtiff4-dev (GTK+)
  • libmng-dev (GTK+)
  • libjasper-dev (GTK+)
  • libcupsys2-dev (GTK+)
  • libldap2-dev (opzionale per gconf ed evolution-data-server)
  • libffi4-dev (pygobject, opzionale)
  • lynx (libdaemon)
  • libsmbclient-dev (gvfs e gnome-vfs, opzionale)
  • libfuse-dev (gvfs, opzionale)
  • libcdio-paranoia-dev (gvfs, opzionale)
  • libgphoto2-2-dev (gvfs, opzionale)
  • libopenobex1-dev (gvfs, opzionale)
  • libssl-dev (gnome-vfs)
  • libkrb5-dev (gnome-vfs e evolution-data-server)
  • libacl1-dev (gnome-vfs e non ricordo se anche gvfs o glib/gio)
  • icon-naming-utils (icon-naming-utils :-)
  • libdb3-dev (evolution-data-server ?)
  • libelf-dev (bug-buddy)
  • libwrap0-dev (supporto a TCP in gnome-session, non so se serve ancora per la 2.23)
  • libpcre3-dev (vte)
  • check (gstreamer)
  • valgrind (gstreamer)
  • libsdl1.2-dev (gstreamer e altro)
  • libasound2-dev (gstreamer)
  • libpam0g-dev (PolicyKit e altro)
  • libncurses5-dev (vte, ma forse anche altro...)
  • libexif-dev (nautilus e eog)
  • libxkbfile-dev (libgnomekbd)
  • libgpgme11-dev (seahorse)
  • xnest (sabayon e forse gdm)
Un bel sudo apt-get install ELENCO_PACCHETTI per installare quello che serve. Non ho messo le dipendenze "esterne-esterne" necessarie ai plugin di GStreamer e quelle necessarie per compilare pacchetti non inclusi nel rilascio ufficiale dello GNOME Desktop magari le pubblico in un secondo momento. E, ripeto, potrebbe mancare qualcosa che al momento mi sfugge o potrebbe esserci qualcosa che nel tempo è diventato non utilizzato.

A questo punto possiamo procedere oltre e dirci ciao ciao, perché anche per questa volta ho scritto abbastanza e se non scrivo abbastanza stupidaggini mi annoio in fretta.

PS L'ottimo e ubiquo sqlite sta per diventare dipendenza esterna ufficiale di GNOME, richiesto da evolution-data-server. Al momento in cui scrivo non è gestito da JHbuild, ma lo sarà presto. Per cui, se la compilazione vi si blocca causa sua assenza, installatelo da pacchetto della distro in attesa di aggiornamenti.

[1] a meno che non vi saltiate letteralmente addosso a vicenda, ma quello è un caso a parte, si fanno comunque, dopo, prima di cominciare la seconda, e si definiscono intraminari.

1 commento:

loopback ha detto...

Il comando
$ sudo chown `whoami`:`whoami` /opt/gnome2
funziona su distribuzioni tipo Ubuntu, ma non e' corretto su distribuzioni in cui ogni utente appartiene ad un gruppo generico, come Slackware (qui tutti gli utenti fanno parte del gruppo 'users'). Magari in questo caso e' meglio usare id -gn al posto del secondo whoami.