Table des matières

Le TotemFon

Pour à peine 80 euros, moins cher qu'un NSLU2 aujourd'hui, la Fonera 2.0n devient LA plateforme intéressante qu'on peut utiliser sous un système GNU/Linux comme OpenWRT. Elle à un switch 4 ports, un chipset WIFI et même si son CPU ne tourne qu'à 300MHz? c'est déja le top !

Les logiciels de base sur le firmware sont fait pour permettre à la communauté société Fon de vivre. Ce n'est pas notre but, non pas que nous travaillons contre, tout au contraire, mais nous recherchons autre chose: bâtir nos propres communautés et permettre à qui veut de le faire. Au lieu d'avoir besoin de serveur distant pour s'organiser, pour s'exprimer et échanger, nous prônons ici l'autonomie et l'auto-organisation.

Nous ne pouvons pas compter aujourd'hui sur les institutions pour organiser la vie numérique des citoyens (expérience de l'association CMS et de nantes-wireless), elles n'ont plus les capacités techniques, enlisées dans le besoin de contrôle, et se sont tournées vers une gestion identique à celle de l'entreprise, vers des visions à cours termes, dans d'unique souci de rentabilité, voir spéculatives. Ou elles sont bloquées par la peur d'une législation obscure et mal adaptée aux grand changement sociaux. Il y a des moyens de connexions partout en ville mais aucun partage autorisé, c'est la distopie d'Orwell qui se réalise.

Le temps des data-centers, du cloud computing à la microsoft est celui des dinosaures, lourds, immobilisant, anti-écologique, voir dangereux pour la liberté du citoyen.

Pensez que si vous faites héberger votre site sur une machine d'une ferme de site, non seulement vous participez à l'existence de milliers de Km de câbles, de routeurs, d'ordinateurs, de systèmes de climatisations, d'infra-structures utiles au seul fonctionnement, mais vous n'avez aucun mot à dire sur leurs installations et la pollution engendrée, voir sur l'éthique, le social, le profit. Bien sur l'ordinateur d'une ferme héberge souvent à lui seul plusieurs centaines voir milliers de sites, sont impacte ramené à votre usage est minime, mais quand même supérieur à celui d'un micro-tout-petit serveur à la maison.

Bien souvent les visites des sites qui participent à la vie locale sont…locales et la fréquentation ne dépasse pas 20000 visites par mois, c'est plutôt 1000/mois. Et dans le monde virtuel, point de distance… Utilisez des outils comme traceroute ou xtraceroute pour vous rendre compte du gâchis. De toute manière vous utilisez déjà une machine pour rester connecter, profitez de sa présence pour lui confier tout l'interfaçage à l'espace numérique et la gestion de vos données personnelles ou collectives, chez vous. On est jamais si bien servi que par soi même ;-)

Il y aura plusieurs niveau d'accès au TotemFon, un privé local, un ou plusieurs groupes (famille,potes etc), un publique. Chaque niveau privé/groupes/publique est étanches aux autres.

Voici donc nos perspectives

Destinations Internet:

Solutions envisagées:

Ainsi soit la page sur le TotemFon alpha, soit à la suite de notre petit atelier de fonosfera, montrant notre progression et nos problèmes avant de commencer la version alpha.

Premier contact

J'ai une fonera 2303a (2.0n) depuis ce matin.

On connecte la fiche internet au serveur de la maison qui lui est connecté à Internet, et un pc sur le switch, le dhcp de la fonera lui attribu l'ip 192.168.10.156

En suivant la documentation, laisser faire, repondre skip partout et aller dans Dashboard»Settings» System : Firmware Update

Je récupere sur mon pc le firmware DEV ici http://download.fonosfera.org/LATEST/fonera2.0n-FON2303/ afin d'avoir plus d'entrée sur la fon : un ssh ;-)

après 5 min j'ai un nouveau dashboard et un accès ssh par 192.168.10.1 :)))

ssh 192.168.10.1

Host '192.168.10.1' is not in the trusted hosts file.
(fingerprint md5 75:02:64:77:3a:37:65:13:28:7a:c1:04:25:06:7a:98)
Do you want to continue connecting? (y/n) yes
root@192.168.10.1's password: 

BusyBox v1.11.1 (2009-08-24 09:46:24 CEST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

                                      _.--"""--,    
                                    .'          `\  
  .-""""""-.                      .'              | 
 /          '.                   /            .-._/ 
|             `.                |             |     
 \              \          .-._ |          _   \    
  `""'-.         \_.-.     \   `          ( \__/    
        |             )     '=.       .,   \        
       /             (         \     /  \  /        
     /`               `\        |   /    `'         
     '..-`\        _.-. `\ _.__/   .=.              
          |  _    / \  '.-`    `-.'  /              
          \_/ |  |   './ _     _  \.'               
               '-'    | /       \ |                 
                      |  .-. .-.  |                 
                      \ / o| |o \ /                 
                       |   / \   |                  
                      / `"`   `"` \                 
                     /             \                
                    | '._.'         \               
                    |  /             |              
                     \ |             |              
                      ||    _    _   /              
                      /|\  (_\  /_) /               
              jgs     \ \'._  ` '_.'                
                       `""` `"""`                   
                                                    
                       Elan the Elk                 
                                                    
--------  Fonera 20n Firmware (v2.3.0.0) -----------
      * Based on OpenWrt - http://openwrt.org       
      * Powered by FON - http://www.fon.com         
----------------------------------------------------
root@Fonera:~# 

Bon ,maintenant je fais le point et je vais parcourir http://trac.fonosfera.org/fon-ng

Premières modifications

mkdir /usr/lib/opkg
cp /etc/opkg.conf /etc/opkg.conf.origin
echo "
src snapshots http://flash.fonera.be/FON2303/packages/mipsel/
src snapshots2 http://downloads.openwrt.org/kamikaze/8.09.2/rb532/packages/
src snapshots3 http://downloads.x-wrt.org/xwrt/kamikaze/8.09/rb532/packages/

dest root /
dest ram /tmp
dest usb /opt                
lists_dir ext /var/opkg-lists
" > /etc/opkg.conf
opkg update
opkg list
mv /etc/config/fstab /config/fstab.std
echo "
config mount
	option target	/opt
	option device	/dev/sda2
	option fstype	ext3
	option options	rw,sync
	option enabled	0

config swap
	option device	/dev/sda1
	option enabled	0
" > /etc/config/fstab
echo "#!/bin/sh /etc/rc.common
START=99
start() {
# fstab, /etc/config/fstab => /dev/sda2	/opt ext noauto,rw,sync 0 0
	mount /opt
}">/etc/init.d/fini
ln -s /etc/init.d/fini /etc/rc.d/S99fini
opkg install lighttpd lighttpd-mod-simple_vhost lighttpd-mod-status lighttpd-mod-cgi -d usb 
ln -s /opt/etc/default /etc/
ln -s /opt/etc/init.d/lighttpd /etc/init.d/
ln -s /opt/etc/lighttpd.conf /etc/
ln -s /etc/init.d/lighttpd /etc/rc.d/S99lighttpd
mkdir -p /opt/www
ln -s /opt/www /www
echo "
export LD_LIBRARY_PATH=/lib:/usr/lib:/opt/lib:/opt/usr/lib
export PATH=$PATH:/opt/usr/sbin:/opt/usr/bin              
" >> /etc/profile
export LD_LIBRARY_PATH=/lib:/usr/lib:/opt/lib:/opt/usr/lib
export PATH=$PATH:/opt/usr/sbin:/opt/usr/bin
server.modules = (
#       "mod_rewrite",
#       "mod_redirect",
#       "mod_alias",
        "mod_auth",
        "mod_status",
#       "mod_setenv",
#       "mod_fastcgi",
#       "mod_proxy",
        "mod_simple_vhost",
        "mod_cgi",
#       "mod_ssi",
#       "mod_usertrack",
#       "mod_expire"
)

OK jusque la ça roule

opkg install -d usb php5-cgi
opkg install -d usb php5-mod-gd php5-mod php5-mod-session php5-mod-pcre php5-mod-auth
opkg install -d usb lighttpd-mod-fastcgi  
opkg install -d usb  php5-mod-sockets # ?
#php5-mod-mysql # vers mysql non , pas de server !
opkg install -d usb php5-mod-pgsql pgsql-server pgsql-cli

Resultats

  1. il faut passer par la phase de cross-compilation si on veut faire l'installation d'un blog genre dotclear ou autre bidule utilisant une base de donnée.
  2. garde ton le firmware fon ?
  3. pour une utilisation simple pas de pb c'est openwrt…
  4. pour creer un mesh, des sites etc.. ca fait beaucoup de modif avec le fait d'enlever ce qui ne sert pas selon notre ethique: acces youtube,facebook,twitter,flickrs; du coup il ne reste pas grand chose de la fon,
  5. ⇒ autant refaire un firmware entier 8-)

test de cross-compilation

Recuperation de gcc4.4, il semble que ce soit le 4.2 qui soit utilise sur ma machine?

Et cf http://trac.fonosfera.org/fon-ng/wiki/build

 svn co http://svn.fonosfera.org/fon-ng/trunk/ 
# defile le téléchargement
# réponse en fin : Révision 1519 extraite.
cd trunk
chmod +x install.sh
./install.sh
cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig

j'ai trouve ça http://vivekian2.wordpress.com/2007/03/28/building-your-own-package-for-openwrt

1. Write the OpenWRT makefile : This is a special makefile which OpenWRT uses. The Makefile is listed and explained at the end of this post. Understanding how to write this makefile is the key to building packages on OpenWRT.

2. Copy this makefile in the appropriate folder : This should be package/<packageName>/Makefile within your buildroot system.

3. make menuconfig : Once the makefile has been placed in the appropriate directory, calling make menuconfig in the buildroot system should show the package in the appropriate section. The package should be selected.

4. make package/<package name>-compile V=99 : This does two things — downloads your package from the URL you specified and compiles the package as well. By default the compilation is done as per the “normal” makefile. You should be able to see the package source code in the dl folder and the compiled images in build_i386/<package-name>.
5. make package/<package name>-install V=99 : This should create the appropriate ipkg package in /bin/packages. Now you can go ahead and port the ipkg to your wrap board and install it using ipkg install <package name>

Faire attention à la documentation, le passage d'openwrt à la version 8 est aussi un changement de syntaxe des Makefile !!

Si vous lancer le make comme ça, prévoyez une occupation pour les prochains jours…

le lendemain :-\

cà marche pô.. pb de compilation

meilleurs test de cross-compilation

Tentative d'obtenir une base sans ajout ou modifications des modules

Revenir au fichier fonosfera_GPL, trouvé par là :http://download.fonosfera.org/Elan/20090921_fonosfera_GPL_tar.bz2 voici par ICI

La première fois j'ai fais une fois decompresse qlq modifs ;-)

  1. lien symbolique ln -sf /usr/src/fonosfera_2.3.0.0_GPL/openwrt/staging_dir/host/bin/mksquashfs-lzma /opt/buildroot-gcc342/bin/mksquashfs_lzma-3.2 sinon la generation du kernel se plante, relocaliser le lien en fonction de votre repertoire.
  2. enlever -Werrors dans mon fichier /usr/src/fonosfera_2.3.0.0_GPL/openwrt/build_dir/mipsel/uci-0.7.4/Makefile.inc sinon il y a arret sur erreur de cc1.
  3. mettre à 1 l'option dev dans le fichier fon-ng/trunk/fon/fonbase/files/etc/config/registered afin d'avoir le ssh ouvert.

La 2eme fois pour la même manip ( apparemment …) ça a fonctionner directement . ensuite

./install.sh
cd openwrt
make menuconfig
  1. mettre Target System (La Fonera2.0N [2.6])
  2. cocher SDK
  3. RIEN D'AUTRE ! juste Exit Save .
  4. lancez la compilation par un make V=99

C'est passé !, plus de 1 h de compilation sur ma petite jetway 1GHz 8-).

J'ai une image bin/openwrt-fonera2n-squashfs.img et toute une floppé de paquets .ipk dans bin/packages :-D

Modifications, ajouter/enlever des modules

  1. ./scripts/feeds update -a
    ./scripts/feeds install -a

Puis j'ai suivi la doc http://wiki.fon.com/wiki/Fonera_Development poru compiler des paquets séparément

si ensuite le menumakeconfig donne :

tmp/.config-package.in:26106: invalid option
tmp/.config-package.in:30136: invalid option
tmp/.config-package.in:30238: invalid option
tmp/.config-package.in:30240: invalid option
tmp/.config-package.in:30374: invalid option

Il faut modifier le fichier tmp/.config-package.in aux lignes désignées et bricoler . J'y ai collé: select PACKAGE_libmysqlclient, select PACKAGE_libffi, select PACKAGE_pycairo, select PACKAGE_python-gtk, select PACKAGE_python-gtk en espérant ne pas en avoir besoin . Et pour que ca ne recommence plus les fichiers feeds/packages/hippo-canvas/Makefile

  1. ajout dans la section lang de tout php5 pour test et make V=99 a suivre …
  2. ajout de mysql, qui va servir pour pas mal de services ?
  3. il manque libreadline …je copie des sources de kamikaze
cd /usr/src
cp -a openwrt-dev/kamikaze_8.09/package/libreadline fonosfera_2.3.0.0_GPL/openwrt/package/ 
cd fonosfera_2.3.0.0_GPL/openwrt
./scripts/feeds install libreadline
make package/libreadline/compile V=99
  1. compilation de mysql-5.0.18, qui marche du coup par make package/mysql/compile V=99, il faut toujours passer par le make menuconfig … avec une modif du Makefile enlever with_embedded_server=no –without-server –> ca marche pas ! touours des problemes, même apres de nombreuses corrections .. et postgres ? il y a un paquet serveur 8-)
  2. modif du fichier feeds/packages/lang/php5/Makefile –enable-mbstring au lieu du disable

comme j'ai déjà la toolchain teste export PATH=$PATH:/usr/src/fonosfera_2.3.0.0_GPL/openwrt/staging_dir/toolchain-mips_gcc4.1.2/bin pour lancer mipsel-linux-uclibc-gcc avec le make ?

bon aujourd'hui j'ai un php5 avec les lib qui vont et du coup fastcgi fonctionne, a tester dotclear …demain.

Un peu laborieux le machin, vient une idée: Le but est non pas d'utiliser absolument la fonera, mais d'avoir un système portable,ouvert,libre et tout, qu'on utilisera dans un premier lieu sur la fonera ensuite sur autre chose genre NSLU2 ou autre … Donc il semblerait plus logique de partir d'openwrt pour ajouter les spécificités selon le matériel. Ne pas partir du fonera…GPL mais s'en inspirer pour rester sur une base openwrt et utiliser le programme openwrt scripts/env

D'openwrt vers l'environnement fonerera 2.0n

https://forum.openwrt.org/viewtopic.php?id=9180

  1. make prepare met tout d'aplomb pour commencer
  2. Il y a un répertoire openwrt/target/linux qui contient tout ce qu'il faut pour les fonera dans l'archive 20090921_fonosfera_GPL_tar.bz2, on récupère son contenu dans openwrt/target/linux pour avoir le choix de la fon dans le menuconfig ( make menuconfig )
  3. un autre répertoire fon dans la racine, on le copie dans notre racine aussi
  4. ajout echo “src-link fon ${PWD}/fon” » openwrt/feeds.conf
  5. un dernier répertoire different luci à copier sir on veut garder cette interface utilisateur ?? en principe non ?
  6. recherche des différences dans l'arbre des paquets
    • madwifi/patches semble la plus importante, ajouts.
    • 371-wds_sta_separation.patch
    • 400-changeset_r3402.patch
    • 450-new_hal.patch
    • 500-bssid_incr.patch
    • 500-noderef_test.patch
  7. on choisi de laisser faire les scripts scripts/feeds update et install en concidérant que pour cette plateforme cible(target) fon le fichier openwrt/feeds.conf a été modifié, dans le cas d'une autre cible matérielle , nous aviserons . donc ici option pour feeds= -p fon .
  8.  ./scripts/feeds update -a ; ./scripts/feeds install -a -p fon 
  9. make menuconfig, on choisi fonera 2.0n dans target pour voir
  10. make V=99 pour voir

autre piste : vers une simplification sans cross-compilation

On constate que la fonera est assez rapide, que l'environnement de cross compilation est aussi un environnement de complication…, nécessaire pour de petit processeurs, mais peut être plus pour la fon.

L'idée est d'installer un compilateur,make, autoconfig, etc directement sur la cleUSB sur la fonera.

Ainsi : plus de problème liée à la lourdeur de la cross-compilation, on retrouve une compilation plus simple et directe. tar configure make .

Ce sera un peu plus lent mais le jeu en vaut la chandelle ;-)

1ère constatation : il n'y a pas de paquet gcc. Doit on l'extraire de la chaîne de compilation ? ou le refaire ?

j'ai trouvé le fichier Makefile : https://dev.openwrt.org/browser/packages/devel/gcc/Makefile

On le colle dans le répertoire packages/gcc du SDK pour faire un make V=99

continuation avec la création d'une image système

Revenons au 'classique' outil fonosfera gpl. but: installer et tester un serveur postegres avec dotclear.

On commence par la première solution. un make menuconfig en cochant dans base/busybox/ su, sudo,adduser,deluser,addgroup,delgroup,shadow passwd et ensuite make V=99 pour générer une image complète. et recuperer busybox dans le repertoire bin/package

d'un coté : scp busybox_1.11.1-1_mipsel.ipk root@192.168.10.1:/opt/tmp

de l'autre :

cd /opt/tmp
opkg install ./busybox_1.11.1-1_mipsel.ipk
opkg install -d usb pgsql-cli pgsql-server
adduser postgres
mkdir -p /opt/postgresql/data
chown postgres /opt/postgresql/data
su - postgres
LC_COLLATE="C" initdb --pwprompt -D /opt/postgresql/data
/etc/init.d/postgresql start
/etc/init.d/postgresql enable

Le serveur postgres fonctionne, mais un top me dit que 3 processus occupent plus de 55% du CPU… a vide … peut être que l'idée de gérer une base de donnée n'est pas bonne :-(

Nous pourrions nous contenter de dokuwiki avec quelques thèmes bien choisis et communiquer sur komposer ou amaya pour des pages statiques ;-)

Des trucs: