Archivio per Luglio 2007

Fonera with OpenWrt – Python & Gpio powered.

Luglio 27, 2007

Oggi, durante la mia vacanza da Dak ho deciso, nonostante le prove già fatte senza successo, di far funzionare Python sulla mia Fonera riscutendo grande successo, ed ho quindi deciso di riassumervi tutti i passi che mi hanno portato da qualche mese fa fino ad oggi a completare questa procedura.

La Fonera è un piccolo router che possiede wireless integrato, connettore ethernet e porte di espansione chiamate GPIO. In realtà bisognerebbe chiamarlo Atheros, dato che quello è il nome della marca che lo produce, ma viene chiamato così poichè viene commercializzato in una versione di una società “Fon”. In poche parole questa società “Fon” vuole rendere internet libero e displnibile ovunque, e ha quindi diffuso degli access point chiamati “Fonera” che collegati alla rete di casa permettono di condividerla via wireless a chi è iscritto a Fon. Una specie di club di condivisione internet mondiale, infatti è possibile vedere su una mappa dedicata la posizione dell’ access point Fonera disponibile per la connessione più vicino a casa.

Questi access point in realtà nascondono una grande potenzialità: sono piccoli,veloci, espanbili, potenti sul wireless e molto economici. Si, infatti un fonera può costare solo 20€/$ compresa spedizione con appositi buoni che vengono dati per la prima registrazione, altrimenti costerebbe 35€ spedizione esclusa; prezzo comunque molto basso per un access point. Inoltre questi access point hanno una scheda madre embedded con un processore da 300mhtz , 16 mb di ram(espandibile con un hack) e 8 mb di memoria flash integrata.

Ovviamente siamo hackers e di certo se troviamo una meraviglia tecnologica così economica ci affrettiamo a comprarla, così io e dak la abbiamo comprata, in tempi e modi separati ma alla fine la abbiamo tutti e due. Il passo successivo è stato prendere il controllo a basso livello del router e successivamente l’installazione di OpenWrt Kamikaze 7.06 per Atheros tramite questa guida .

Una volta con linux che gira e può essere controllato sul nostro fonera possiamo lavorare un po’.
Come secondo passo abbiamo potenziato il wireless aggiungendo queste righe in /etc/sysctl.conf

dev.wifi0.diversity=0

dev.wifi0.rxantenna=1

dev.wifi0.txantenna=1



dev.wifi0.ctstimeout = 25



dev.wifi0.acktimeout = 25



dev.wifi0.slottime = 11

In questo modo si aumenta abbastanza la portata del segnale.
Successivamente abbiamo pensato di portare il wireless in modalità client al posto di utilizzarlo in modalità access point, in modo da poter usare la fonera per scannare e collegarci a reti wireless, per farlo abbiamo modificato in /etc/config/wireless

option mode     ap

in

option mode     sta

Ora però ci sentivamo senza la possibilità di agire su questo graal tecnologico, quindi avevamo inizialmente pensato e provato che non era possibile mettere python sulla fonera senza una memoria esterna. Siamo giunti a ciò poichè la memoria da 8 mb della fonera resta libera di 5 mb dopo l’installazione di linux e ci troviamo quindi con 5 mb su cui dover mettere python, allora avevamo pensato inizialmente che fosse impossibile dato che la versione completa di python 2.3 occupa circa 35 mb, senza contare che andrebbe estratta. Successivamente abbiamo rivalutato la cosa vedendo che esisteva una versione da circa 4 mb, che forse poteva starci, però non avremmo avuto lo spazio per estrarre l’archivio, allora abbiamo visto che forse era possibile spostare l’archivio nella ram ed estrarlo, e solo successivamente mettere i file binari sul fonera. Nonostante questa intuizione sono state tante le prove ma nessuno il risultato, alla fine abbiamo pensato di collegarci un con filesystem ssh a un pc con decisamente molto spazio e provare a installare l’archivio da lì, però questa possibilità non ha funzionato. A questo punto io avevo deciso di abbandonare tutti questi hack mettendo una memoria esterna MMC da 256 mb e collegandola ai pin di espansione appositi sulla scheda, ma dopo varie prove e varie schede ho visto che senza avere una scheda sicuramente funzionante e un driver già testato e fili perfettamente saldati è un po’ difficile far funzionare la memoria. Quando ormai avevo abbandonato le speranze Dak ha riprovato a mettere l’archivio nella ram senza successo e ha avuto l’intuizione di provare a estrarre il file binario dell’ interprete python dall’ archivio e a metterlo nella cartella /usr/bin/. Per farlo però non potevamo utilizzare nessun programma di estrazione su linux, quindi abbiamo prima di tutto trasferito l’ archivio dal pc nella cartella tmp del fonera(che in realtà risiede nella ram) con scp e poi abbiamo impostato ipkg, installatore di archivi di quel tipo, in modo che mettesse i file temporanei nella cartella principale  “/” con la opzione -t . Dopo qualche minuto abbiamo bloccato il processo e siamo andati nella cartella principale, dove si era formata una cartella ipkg-numerorandom che al suo interno conteneva  il file binario dell’ interprete di python. Lo abbiamo trasferto quindi in /usr/bin/ e abbiamo provato ad avviarlo ma abbiamo avuto qualche problema di librerie mancanti, nonostante non ne avessimo importate, abbiamo dunque creato una cartella /usr/lib/python2.5 (da chiamare in questo modo anche se si mette il binario di python 2.3 o 2.4) e abbiamo inserito i file mancanti. Finalmente abbiamo avuto il nostro interprete funzionante con tutti i comandi di base(split print open ecc). Successivamente, visto il grande successo, abbiamo pensato di mettere qualche libreria (solo lo stretto necessario per non occupare spazio). Alcune librerie possono essere installare semplicemente copiandone la cartella o il file relativo dalla relativa cartella nell’ archivio , altre necessitano anche di file compilati , ad esempio per abilitare la libreria socket è necessario copiare il file socket.py nella directory principale delle librerie , ma anche _socket.so dalla cartella dei file compliati chiamata lib-dynload nella gemella sul fonera. Noi abbiamo copiato i file dalla cartella di python del nostro computer.
Una volta installate e provate alcune librerie principali(sys,os, socket, thread) abbiamo provato a fare un rudimentale programma di scanning delle reti wireless servendoci di iwlist tramite la libreria os. Questo programma memorizzava semplicemente in un file di log i nomi delle reti.
Successivamente abbiamo pensato che oltre alla possibilità di usare il nostro fonera “dall’ interno” dobbiamo anche avere qualche segnale del suo funzionamento o una sua interazione con l’esterno, e ci è sembrato quindi necessario abilitare le porte GPIO. Le porte Gpio non sono altro che dei punti riempiti di stagno sulla scheda messi in vari punti, ai quali è possibile collegare qualche periferica in input o output, solitamente in analogico(per il seriale si usa logicamente la porta seriale che c’è, anche se non in forma classica, ed è separata dalle porte gpio). Abbiamo quindi cercato invano di installare un programma, che avremmo poi controllato tramite os da python per controllare le porte gpio. Infatti abbiamo scoperto che il programma che cercavamo non funzionava con la fonera, quindi dopo un pomeriggio passato a chiedere e cercare abbiamo trovato questo modulo che una volta dato in pasto a insmod crea in /proc/ una cartella “gpio” al cui interno crea 3 file per ogni porta gpio, uno di input, uno di output e uno chiamato “dir” di cui ignoro lo scopo.
Però siamo venuti a conoscenza di una sconcertante verità: una volta riavviato tutto la cartella scompare e il modulo non è + caricato, questa doveva essere una cosa ovvia per qualcuno un minimo esperto di linux. Infatti era necessario copiare il modulo in /lib/modules/%versione del kernel%/ e successivamente aggiungerre in /etc/modules.d/ un file del tipo Numero-nome contentente solo il nome del modulo, senza estensione, in questo modo si avrà il modulo caricato all’ avvio.
Come colpo finale abbiamo scoperto questa mappa di dove si trovano tutti i pin gpio, e abbiamo letto che un pin gpio è un led del fonera, il che significa che attivando quel pin si accende la luce del led.
Abbiamo dunque deciso di sfruttare questa possibilità per segnale la scoperta di una rete wireless, facendo accendere per un secondo la luce tramite il comando

echo 1 > /proc/gpio/2_dir; echo 1 > /proc/gpio/2_out

e per sepgnerlo

echo 0 > /proc/gpio/2_dir; echo 0 > /proc/gpio/2_out

Ovviamente poi scritto in python con un delay.

Possiamo quindi ritenerci ufficialmente soddisfatti e sognare futuri sviluppi robotici e/o sistemistici, domotici.

Ci tenevo a fare questo post, soprattuto dopo che:
-Mi hanno detto che non era possibile mettere senza mmc card python sul fonera e che era anche inutile
-Mi hanno detto che non esisteva driver per le porte gpio sul fonera controllate da shell

E quindi, ricordando che sto sempre lavorando alla stesura di un libro di etica hacker, è stato un hack poichè ho affrontato uan sfida intellettuale proposta da me stesso e incitata da altre persone, conclusa con successo. :D

Qualcosa di nuovo

Luglio 21, 2007

Come forse avevo già detto ho accettato di collaborare alla stesura di un libro di hacking, una specie di enciclopedia. Alla fine abbiamo attivato il server creato il dominio e la wiki e stiamo lavorando a http://hacknowledge.nocopy-group.org/ e abbiamo deciso di chiamare il libro “HacKnowledge” con un gioco di parole Hack e Knowledge che significa conoscenza, quindi sarebbe “conoscenza dell’ hack” ed è ovvio che con hack in questo caso si intende hacking.
Abbiamo raggiunto l’incredibile numero di 17 persone per questo progetto, abbiamo creato un indice che verrà ampliato e aggiornato che collega a tutte le pagine sparse della wiki, inoltre c’è una sorta di sottoindice ovvero: ci si collega all’ indice, si vedono le varie parti(programmazione, etica ecc…), sotto ognuna c’è prima una introduzione sull’argomento e poi una parte specifica ,nelle parti  specifiche poi si trova spesso un sottoindice della parte. Ad esempio per imparare python bisognerà leggere Indice->programmazione->introduzione e Indice->programmazione->python e a questa ultima voce si troverà un sottoindice che guiderà nelle varie parti dell’ argomento specifico, ovvero dalle variabili alle librerie.

Io sto attualmente portando avanti la wiki e sistemandola man mano e poi sto pian piano scrivendo e riguardando la parte etica e di cultura dell’ introduzione.

Nocopy nel frattempo è stato un po’ ripulito, membri ufficiali ora sono solo Otacon22, Dak, Tyrion e amds. Questo è dovuto al fatto che :

Scacco – Separa il suo  progetto dal resto del gruppo limitando a noi la possibilità di aiutarlo e quindi dimostra di non avere interessi collaborativi, scopo  del gruppo, poi viene cancellato il suo progetto come ufficiale per tale motivo e viene in seguito cacciato per aver ostacolato e dato problemi  al nostro server dimostrando di non avere interesse a un servizio che noi abbiamo faticato per creare solo per lui e gli altri, quindi è stato cacciato.

Worm – È stato introdotto nel team in modo sbagliato senza sapere di esserci quando i canali #tux e #nocopy sono stati rimescolati da me e otacon7b, e in seguito ha dato scarsa dimostrazione di essere interessato alla collaborazione ma solo allo sfruttare i canali di comunicazioni privati del gruppo. Dopo una notifica di tali atti nella mailing list si è ritenuto offeso sostentendo che aveva il diritto di programmare quando voleva, senza notare che non aveva conseguito nulla fine allo scopo del gruppo

Xero – Introdotto dopo una attesa per verificare le sue capacità ha lavorato in modo indipendente e nascosto, senza pubblicare e tantomeno collaborare in nessun modo, in seguito alla mail  di notifica  e a varie discussioni ha sostenuto di non avere obblighi di programmare, anche se anche lui ignorava di non aver ancora fatto nulla fine allo scopo del gruppo, e senza aver fatto altro che parlare sul canale e senza aver pubblicato ne parlato lontanamente di nessun suo progetto o qualche cui collaborava per diversi mesi.

Ekoes – Introdotto a insaputa dei fondatori come da accordi da Scacco qualche mese fa non ha mai fatto parte del  gruppo ed è sempre rimasto nel canale solo per sfruttarlo come mezzo comunicativo con i membri, pur essendo a conoscenza del fatto che era un canale privato(notificato dalla stesura dello statuto)

Non mi è sembrato per nulla giusto lasciare nel canale persone non aderenti allo scopo del gruppo che ospita e per tale motivo ho preferito lasciarle fuori, anche perchè non è un canale pubblico  come già deciso da qualche mese dalla sua creazione in decisione da Tyrion, concordato con i fondatori e notificato nello statuto.

Molti si sono lamentati dello statuto e del fatto che faceva diventare un gruppo di amici programmatori uno  stato, mentre non hanno capito che esso è stato introdotto solo per causa loro e anche per chiarire lo scopo del gruppo, che forse non era chiaro, in modo che chi non avesse avuto ben chiaro e non aderisse avesse la possibilità di andarsene subito.

Skirk in quanto hoster e nulla altro è  rimasto nel canale per comunicare con noi e attendiamo che si decida ad imparare a programmare se vuole entrare nel gruppo.

In accordo con Tyrion e successiva discussione con Dak decideremo definitivamente che fare di SteelWar e SteelWarPy, prensando a una unificazione in modo da permettere a tutti i membri rimanenti  una collaborazione stretta al fine di sviluppare questo grande progetto, non che grande hack.

Io sarò dal 23 Luglio al 17 Agosto vicino a Cagliari in compagnia di Dak, dove incontrerò forse anche Wicker25, collaboratore del libro hacknowledge.