Traccia: smesh

Compilazione di Smesh per architettura MIPS

b

Toolchain

Questo sarà lo strumento essenziale per poter compilare i sorgenti per architettura MIPS. L'ho ricavato da una compilazione di OpenWrt, quindi è testato e funzionante ed in più sfrutta le uClibc generando eseguibili molto contenuti. Lo allego qui così che sia già disponibile senza dover ricompilare OpenWrt.

Preparazione alla compilazione

  • Creare una cartella ed estrarci il toolchain
  • Estrarre anche SMesh e all'interno della sua cartella estrarre Spines rinominando la cartella in 'spines'
  • Ora ci serve anche libpcap che non ha bisogno di modifiche dall'originale perciò si può copiare già compilato direttamente nella cartella di Smesh
  • Per chiarezza ecco come devono essere le cartelle:

  • Copiare questa patch in 'smesh_proxy' e testarla
patch --dry-run --verbose -p1 -i build.patch

se questo è l'output

Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- smesh-src-v2.3-ORIG/build	2008-05-16 23:19:34.000000000 +0200
|+++ smesh_proxy/build	2010-06-14 10:18:22.142070306 +0200
--------------------------
Patching file build using Plan A...
Hunk #1 succeeded at 16.
Hunk #2 succeeded at 30.
Hunk #3 succeeded at 209.
done

allora possiamo dare il comando non in dry-mode

patch --verbose -p1 -i build.patch
  • Ora bisogna apportare un'ulteriore modifica al file build

export CROSS=“/INSERIRE_PATH_ASSOLUTA/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin” dove in INSERIRE_PATH_ASSOLUTA si deve inserire la path completa del toolchain scaricato prima

Modifica dei sorgenti

Ora dobbiamo applicare le nostre modifiche per poter far girare le trame di controllo di SMesh e Spines su un'interfaccia diversa dal wifi, mentre Smesh continua a gestire i suoi client su wifi.

  • Scaricare le nostre patches e copiare smesh.patch in smesh-src-v2.3 e spines.patch in spines
  • Ora entrare rispettivamente in smesh-src-v2.3 e poi in spines per testare le patches con i seguenti comandi

patch –dry-run –verbose -p1 -i smesh.patch

patch --dry-run --verbose -p1 -i spines.patch
  • Se l'output è questo
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- smesh-src-v2.3-ORIG/smesh_proxy/smesh_proxy.c	2008-05-17 00:05:37.000000000 +0200
|+++ smesh_proxy/smesh_proxy/smesh_proxy.c	2010-06-04 10:16:46.000000000 +0200
--------------------------
Patching file smesh_proxy/smesh_proxy.c using Plan A...
Hunk #1 succeeded at 78.
Hunk #2 succeeded at 93.
Hunk #3 succeeded at 233.
Hunk #4 succeeded at 875.
Hunk #5 succeeded at 1344.
Hunk #6 succeeded at 1387.
Hunk #7 succeeded at 1501.
done

e questo

Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff -Naur spines-src-3.2-ORIG/configure spines/configure
|--- spines-src-3.2-ORIG/configure	2008-11-18 02:10:11.000000000 +0100
|+++ spines/configure	2010-06-03 09:56:37.171851000 +0200
--------------------------
Patching file configure using Plan A...
Hunk #1 succeeded at 6090.
Hmm...  The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff -Naur spines-src-3.2-ORIG/daemon/kernel_routing.c spines/daemon/kernel_routing.c
|--- spines-src-3.2-ORIG/daemon/kernel_routing.c	2009-05-13 21:05:52.000000000 +0200
|+++ spines/daemon/kernel_routing.c	2010-06-10 10:49:55.351420000 +0200
--------------------------
Patching file daemon/kernel_routing.c using Plan A...
Hunk #1 succeeded at 62.
Hunk #2 succeeded at 85.
Hunk #3 succeeded at 145.
Hmm...  The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff -Naur spines-src-3.2-ORIG/daemon/spines.c spines/daemon/spines.c
|--- spines-src-3.2-ORIG/daemon/spines.c	2009-05-13 21:05:52.000000000 +0200
|+++ spines/daemon/spines.c	2010-06-10 11:21:08.646420000 +0200
--------------------------
Patching file daemon/spines.c using Plan A...
Hunk #1 succeeded at 95.
Hunk #2 succeeded at 608.
done

allora possiamo eseguire il comando non in dry-mode

patch --verbose -p1 -i smesh.patch
patch --verbose -p1 -i spines.patch

Compilazione

  • A questo punto dobbiamo compilare prima Spines. Modifichiamo il file build in
BUILD_SMESH=1
BUILD_SPINES=1

dove BUILD_SMESH va messo a 0

  • Compiliamo Spines
cd smesh_proxy/
./build

la compilazione dovrebbe concludersi così

SMesh build is ready on install directory
  • Dobbiamo linkare le librerie di Spines prima di compilare SMesh in modo che vengano trovate durante la compilazione
cd spines/libspines/
ln -s PATH_ASSOLUTA/smesh_proxy/spines/libspines/* ../
  • Torniamo al file build e lo modifichiamo così
BUILD_SMESH=1
BUILD_SPINES=0
  • Compiliamo Smesh
./build

la compilazione dovrebbe concludersi così

SMesh build is ready on install directory
  • Nella cartella 'install' troveremo quindi i 2 eseguibili ed i files di configurazione

Files di configurazione

Ora sia Spines che SMesh supportano l'aggiunta di un parametro chiamato 'ctrl_if'. Questa opzione dice ai 2 programmi su quale interfaccia scambiarsi le trame di controllo. Modifichiamo quindi i files di configurazione e di avvio all'occorrenza

  • Copiare questa patch nella cartella 'install' poi dare il solito comando

cd install/

patch --dry-run --verbose -i conf.patch

se ok dare

patch --verbose -i conf.patch

Copiare Smesh

  • Di seguito i file da copiare nelle rispettive cartelle nella RSpro
install/config.wireless > /etc/config.wireless
install/runSmesh > /etc/runSmesh
install/smesh > /etc/init.d/smesh
install/smesh.conf > /etc/smesh.conf
install/smesh_proxy > /usr/sbin/smesh_proxy
install/spines > /usr/sbin/spines
  • Rendere eseguibili i binari e lo script di avvio con
chmod +x 'file'

Lanciare Smesh

  • Ora c'è tutto il necessario per lanciare Smesh su una board MIPS (es. Ubiquiti RouterStationPro)

con il comando

/etc/init.d/smesh start
  • Per abilitarlo all'avvio di Openwrt
/etc/init.d/smesh enable

Note x compilazione alix

iproute dà errore nella compilazione, per eliminarlo bisogna modificare il file

i486-openwrt-linux-uclibc/sys-include/linux/if_packet.h

che si trova all'interno del tool chain aggiungendo le seguenti righe

/* types.h does not always (?) inlucde aligned_u64 */ #ifndef aligned_u64

#define aligned_u64 u64 attribute1))

# endif

1)
aligned(8