sabato, ottobre 08, 2011

Compilare una libreria per MODFS

Scarico una distribuzione linux dove farò la compilazione.

Es. Ubuntu 11.04 Ubuntu 11.10 (Ho fatto l’errore di accettare l’aggiornamento proposto dalla 11.04, macchina virtuale persa!!! RIP). Per comodità la userò virtualizzata quindi mi scarico anche VirtualBox 4.1.4.

Creo una nuova vm creando un disco dinamico da 8 giga, 1 giga di ram. Aggiungo quindi il cd appena scaricato di Ubuntu.

Faccio partire la macchina che esegue l’installazione di Ubuntu sull’hard disk. La installo in inglese per velocizzare la ricerca di eventuali problemi.

Una volta installata faccio tutti gli aggiornamenti che mi propone.

La libreria che voglio compilare è TcpDump e quella da cui dipende ovvero libpcap.

Seguo questo link e quello ufficiale delle librerie.

Apro una terminal window e mi scarico il programma git (per recuperare i sorgenti)

  1. cd $home
  2. mkdir sorgenti
  3. cd sorgenti
  4. mkdir MODFS
  5. cd MODFS
  6. sudo apt-get install git
  7. git clone git://bpf.tcpdump.org/tcpdump
  8. git clone git://bpf.tcpdump.org/libpcap
ok… ora ho tutti i sorgenti.

Per compilare devo prendere la toolchain di MODFS….

La scompatto in “opt/toolchains/uclibc-crosstools-gcc-4.2.3-3” con

  1. sudo file-roller toolchain_fedora6.tar.gz

Quindi uso lo script di Parnas72 per configurare la cross compilazione, mettendolo nella stessa directory dove è stato scompattata la toolchain.

Imposto il PATH sulla stessa directory

export PATH="$PATH://opt/toolchains/uclibc-crosstools-gcc-4.2.3-3"

Creare il file e dargli i permessi di esecuzione

  1. sudo gedit impostaCC.sh
  2. chmod 777 -R impostaCC.sh

 

quindi copiare il seguente contenuto all’interno

  1. #!/bin/bash
  2.       
  3. BASEDIR=$(readlink -f $0)
  4. BASEDIR=$(dirname $BASEDIR)
  5. export PATH="$BASEDIR/usr/bin:$PATH"
  6. export CC="mips-linux-gcc"
  7. export CXX="mips-linux-g++"
  8. export ac_cv_linux_vers=2
  9. cd
  10. bash

Dovendo fare delle manovre come root (tipo copiare il file di cui sopra nella cartella corretta) ho creato una entry nel menu per lanciare il file manager (nautilus) come root (administrator) usando il trucchetto 9.8.

Mentre per far diventare root il Terminal corrente

sudo -s –H

Mi costruisco un semplice programmino con

$home/MODFS/HelloWorld.c

  1. #include <stdio.h>
  2.  
  3. int main ()
  4. {
  5.   printf ("Hello World!\n");
  6. }

 

Che compilo con

  1. $CC HelloWorld.c -o HelloWorld.out

 

La compilazione fallisce con un errore “mips-linux-gcc: No such file or directory”

Dopo un po’ di ricerche scopro che il problema era dovuto alla mancanza delle librerie 32 bit sul mio sistema a 64… quindi me le scarico…

  1. apt-get install ia32-libs

 

Prendo HelloWorld.out e lo copio sul DGN (attivando la share MODFS).

Ora cerco di configurare la libpcap con

  1. impostaCC.sh
  2. cd sorgenti/MODFS/libpcap/
  3. ./configure --host=mips-linux --with-pcap=linux

 

  1. configure: error: Your operating system's lex is insufficient to compile libpcap.  flex is a lex replacement that has many advantages, including being able to compile libpcap.  For more information, see http://www.gnu.org/software/flex/flex.html .

 

Per risolvere il problema aggiorno la libreria flex

  1. apt-get install flex

Quindi riprovo la compilazione “make”

  1. root@carlo-VirtualBox:~/sorgenti/MODFS/libpcap# make
  2. mips-linux-gcc -O2 -fpic -I.  -DHAVE_CONFIG_H  -D_U_="__attribute__((unused))" -g -O2 -c ./pcap-linux.c
  3. In file included from ./pcap-linux.c:170:
  4. /opt/toolchains/uclibc-crosstools-gcc-4.2.3-3/usr/include/linux/ethtool.h:22: error: expected specifier-qualifier-list before 'u32'

 

Nota: Ubuntu mi ha proposto l’aggiornamento alla versione 11.10. Ovviamente ho accettato… risultato: non parte più. Magari ha un problema con VirtualBox…

Nota1: La saga (sfiga?!!?) continua… Ho fatto un aggiornamento a VirtualBox per portarlo alla  versione 4.1.4… L’installazione si bloccava su un errore di registrazione della dll VboxC.dll. Quindi l’ubuntu è sparito…Dopo un po’ di verifiche con ProcMon ho scoperto che l’installazione utilizzava ancora il file StdOle2.tlb che sul mio win7 64bit non era presente. Copiato nella directory c:\windows\system32 e tutto si è sistemato. Quindi posso tornare al problema di ubuntu… chissà mai se tornerò a quello della compilazione di TCPDUMP Occhiolino

Nota2: Ho rinunciato a recuperare l’immagine Ubuntu con il tentativo di upgrade e ne ho fatta una nuova con la 11.10. C’è di buono che posso verificare se mi ero segnato tutti i passaggi fatti per arrivare all’errore di compilazione di TCPDUMP…

TBC

Grazie alle info prese dai post sul forum di harware upgrade in particolare Parnas72 e Cionci

5 commenti:

jtandrea ha detto...

ciao Carlo, sono jtandrea dal forum modfs dgn2200.
sempre per proseguire dalle tue indicazioni,
posso farti un paio di domande su ubuntu?
ho creato la VM come indichi tu, ma ad esempio, per condividere una cartella dall'host winXPsp3eng (usando Guest Additions di VirtualBox) mi vengono richiesti i privilegi di root.
io Ubuntu l'ho installato senza customizzazioni fornendo il mio nome, andrea e stop.
ora ho solo questa utenza "andrea" mentre root non so davvero come attivarla (o se c'è in questa VM).
potresti darmi un aiutino?
grazie
andrea

carlofolini ha detto...

Ciao Andrea, caschi un po' maluccio... di linux ne capisco pochino.
Direi comunque che il tuo problema deriva solo dal fatto che non hai specificato la password per il tuo utente (che è root).
Metti una password qualsiasi (es "1") e quado ti chiede la password di root dagli quella.
Se non ricordo male c'era qualche trusco per far funzionare root anche senza password, ma la via più semplice è questa.

Ciao
Carlo

jtandrea ha detto...

Ciao Carlo,
ieri mentre aspettavo una tua risposta, ho trovato infine la spiegazione.
Ubuntu in particolare, di default non rende disponibile la user root. per attivarla andrebbe fatto qualche "impiccio" (con diverse controindicazioni documentate).
ma cosa più importante sono caduto dal pero leggendo che il comando "sudo"
andrebbe letto qualcosa come Super User Do.
in sintesi, eseguendo un (credo) qualsiasi comando unix, prefissando la keyword "sudo", si abilita il comando come fosse eseguito dal super User root. ecco perché, all'atto dell'esecuzione, ci viene richiesta la password.

spero stavolta di essere stato io utile ;-)
buona giornata.
Andrea

carlofolini ha detto...

Andrea, nelle istruzioni avevo messo "sudo" e in particolare come far diventare root il terminale che stai usando. Leggiti anche il trucchetto 9.8.
Se vedi errori o cose poco chiare nel post segnalamelo. Sia mai che venga utile a qualche altro che come noi cerca di muovere i primi passi (in questo delirio!!!)

Non c’è due senza (s)tre(s) | Carlo's space ha detto...

[...] 2200: modem adsl wireless router. Fatto qualche esperimento di compilazione e di sviluppo del firmware con MODFS. Questo mi ha fatto rispolverare le conoscenze [...]