Transformer un vieux portable en cadre numérique wifi

Le projet : Génèse

À la base, ce devait être une excuse pour réutiliser un vieux portable qui traîne dans un coin ( un Digital HiNote Ultra II, avec 24 mo de RAM et 133mhz sous le capot, sans réseau, ni CD). Bien des distributions Linux fonctionnent sur cette config, mais c'est souvent l'étape de l'installation qui pose problème. Pour ceux qu'une distribution orientée vieilles configs intéresse, il faut chercher du côté de DSL, Deli(cate), Feather, et autres Puppy... Après bien des essais, j'ai abandonné avec cette machine, pour me tourner vers un Acer TravelMate 512T, une bête de course en comparaison, avec ses 366 Mhz et ses 64 Mo de RAM). La principale difficulté avec les ordinateurs portables de cette époque (1995 à 2000), c'est l'absence de carte réseau. Comme j'ai quelques cartes Wifi sous la main, j'ai pu résoudre le problème.

Le projet : À quoi ça sert-y ?

Le but de mes pérégrinations, c'est de transformer un vieil ordi portable en cadre numérique.Wifi. Tout ça, c'est pour ma chère et tendre, qui de part son activité d'artisanat d'art fait pas mal de marchés et foires d'expo. Une façon de présenter ses produits de façon moderne, mais qui ne jure pas avec le reste en étant adapté techniquement.

De visu, ce sera un cadre de 31x28cm, avec un écran de 21x25, qui sera en béton pour d'évidentes raisons esthétiques. L'ordi est planqué dedans.

Comme c'est la personne sus-mentionnée qui devra gérer ça toute seule, il faut un truc simple : on appuie sur le bouton, ça s'allume et ça lance le diaporama qui tourne en boucle. Point.

Et puis pour le fun, et vu que j'ai le matériel qui traîne sous la main, je me suis dit "tiens, si j'en faisais en plus un point d'accès Wifi ?"

Les gens qui traînent dans le salon avec leur smartphone voient un réseau ouvert, ils s'y connectent, et on accès à du contenu supplémentaire comme un plan de l'expo pour retrouver le stand, des photos et des infos diverses.

Ça permet accessoirement de s'y connecter pour mettre à jour le contenu du diaporama et du site.

Plan d'attaque

Logiciel :

Il va nous falloir un système d'exploitation bien sûr -- une Debian 6 dans notre cas -- et un logiciel qui permet d'afficher un diaporama. Si j'arrive à activer le framebuffer sur la vieille carte vidéo du TravelMate, ce sera fbi, et ça me permettra d'économiser sur mon empreinte mémoire en ayant pas à faire tourner le serveur vidéo Xorg et un logiciel comme 'feh'.

Pour notre point d'accès, il faut bien sûr configurer une carte réseau Wifi. Celle que j'utilise est une vieille carte PCMCIA Sagem distribuée avec une box adsl il y a quelques années (~2003). Le chipset est un bcm4306 de Broadcom, qui n'est pas réputé pour faciliter la tâche des développeurs Open Source, ce qui promet des heures d'amusement pour faire fonctionner la carte ( hint : b43-fwcutter et cd de drivers) Entre temps, je me suis rendu compte que cette machine possède un port PCI, ce qui m'a permis de gagner de la place en utilisant une carte interne dont le chipset est un Broadcom également, mais bcm4318. Par chance, c'est le même pilote qui est utilisé. Par contre, l'ordre de l'interface est différent, et il m'a fallu remplacer toutes les occurrences de 'wlan0' par wlan1'. Une fois connecté ( Wouhou!), une petite mise à jour, quelques outils comme htop, wireless-tools et fbi plus tard, il nous faudra de quoi configurer un point d'accès Wifi, un serveur DHCP qui distribuera des IPs aux clients qui se connectent, un p'tit DNS pour rediriger toutes les requêtes vers un seul site, et puis quelques redirections sur notre serveur HTTP, pour peaufiner tout ça.

Enfin, il sera temps de s'intéresser au site, en installant un CMS léger qui permet de mettre à jour les infos.

Pour des raisons pratiques, on peut aussi installer un serveur SSH et FTP à faire tourner en cas de besoin, pour faciliter les opérations de webdesign et autres maintenances.

Le tout au final amène l'empreinte mémoire à 30 Mo, ce qui est pas mal !

Pour résumer :

Matériel :

Bien que fonctionnel, notre cadre numérique pour vraiment remplir sa fonction doit obéir à deux contraintes : être beau et être silencieux.

Pour ce qui est d'être beau, le plan est de démonter l'écran et de le coller au dos du portable, ce permettra au clavier de rester accessible une fois monté dans le cadre. Le tout sera caché dans une coque de béton, et posé sur un support en acier. Le plus simple est de vous imaginer un iMac en béton dont le pied est en fer à béton.

Pour ce qui est d'être silencieux, pas de gros soucis. La plupart des portables de cette époque ont un refroidissement passif, avec un ventilateur optionnel qui se charge d'évacuer la chaleur du boitier quand vraiment ça chauffe.

Non, ce qui fait vraiment du bruit dans ces ordis, c'est le disque dur! Un bon vieux disque dur IDE de 1.4 Go, de 1995, ça fait du boucan. Il sera à terme remplacé par un adaptateur IDE > carte SD. Ça aura l'avantage également d'alléger le tout, et de prévoir un jeu de cartes SD avec différent contenus en fonction des évènements, sans parler de la facilité de backup, etc.

En options, on peut ajouter la déportation de l'interrupteur sur le cadre externe, l'ajout d'une antenne Wifi à la carte PCMCIA pour améliorer la portée du réseau, l'ajout d'un interrupteur pour le Wifi et l'intégration de l'alimentation électrique dans le boitier.

Pour résumer

Partie logicielle du Cadre Numérique

Ça, c'est les plus rapide à mettre en place et le plus facile. On va utiliser 'uvesafb', le framebuffer qui est intégré au noyau depuis la version 2.6.26 pour afficher des images directement en mode console. On économise ainsi l'installation d'un serveur graphique et de nombreuses librairies, ainsi que de la mémoire !

On installe les logiciels :

apt-get install v86d fbida

Configuration du Framebuffer


1.  on recupere les modes dispo avec :
2.  modprobe uvesafb
3.  cat /sys/bus/platform/drivers/uvesafb/uvesafb.0/vbe_modes

echo options uvesafb mode_option=1024x768-24 scroll=ypan >
/etc/modprobe.d/uvesafb.conf update-initramfs -k all -u ``` 

Un p'tit redémarrage par la dessus, et on est bon !

Source :
### Test de fbida 

Pour afficher une image (jpeg, png et gif) :

 fbi /chemin/vers/mon/image.jpg 

Si ça marche, on saute de joie.

Pour faire un diaporama sur un dossier plein d'images :
 fbi -t 8 -a -noverbose -blend 500 /chemin/de/mon/dossier/plein/dimages/* 
Options utilisées :

  * -t : durée de chaque image 
  * -a : autozoom 
  * -noverbose : on cache le nom de l'image 
  * -blend : durée de la transition en ms 

### Ouverture de session automatique et lancement du diaporama 

##### Installation du nécessaire 

 apt-get install mingetty 

##### Modification de */etc/inittab* 

Dans le fichier */etc/inittab* , trouver la ligne :

``` ## 1:2345:respawn:/sbin/getty 38400 tty1

et la remplacer par
 1:2345:respawn:/sbin/mingetty --autologin LOGIN_UTILISATEUR tty1 
Lancement de fbi au démarrage

Dans le fichier ~/.bash_login, on met la commande suivante :


  ## une commande  
  fbi -t 8 -a -noverbose -blend 500 /chemin/de/mon/dossier/plein/dimages/* 
  ## quand la commande se termine ( touche "Echap" sous fbi) le systeme s'eteint 
  /sbin/halt 

fi ``` 

Source :
## Partie logicielle du Point d'Accès Sans Fil 

### Système de base 

L'installation de Debian nécessite au moins 48 Mo de RAM, et n'ayant
pas de réseau configuré, il m'a fallu installer à partir d'une image
disque complète ( i.e : pas netinstall ). Autrement, l'installation est
classique, on installe le système de base sans environnement de bureau.

##### Optimiser le nombre de paquets installés 

La seule manipulation à faire une fois le système installé, c'est de
configurer l'outil 'Apt' pour qu'il ne nous installe pas une tartine
de logiciels suggérés et recommandés à chaque fois qu'on installe
quelque chose. Pour ça :

 echo ' [ APT::Install-Recommends ](APT::Install-Recommends)  "0";APT::Install-Suggests "0";' | tee -a /etc/apt/apt.conf 

### Installation de la carte réseau 

Pour la carte réseau Broadcom, qui fait partis des moins bien supportés,
il faut extraire [le pilote qui va
bien](http://mirror2.openwrt.org/sources/broadcom-wl-5.10.56.27.3_mipsel.tar.bz2)
avec l'utilitaire *b43-fwcutter*.

Pour installer ce dernier, on l'installe depuis le CD. ``` 

1.  'sudo' avant la commande si on execute en tant qu'utilisateur

$apt-get install b43-fwcutter ``` 

Si la distribution que vous utilisez ne propose pas "b43-fwcutter"
comme paquet pré-compilé, il faudra le faire vous même ! C'est facile,
et c'est décris dans le lien suivant, on ne s'inquiète pas !

Les manipulations pour extraire le pilote et l'installer sont décrites
ici :
Comme il n'y avait pas de connexion réseau sur l'ordinateur, j'ai du
télécharger les fichiers depuis une autre station et faire le transfert
via une clé USB.

On peut savoir si l'interface réseau sans fil supporte le mode AP (
pour //Access Point//) en utilisant la commande suivante :
  1. apt-get install iw

iw list | grep --color AP ```

Si AP sort, c'est gagné ! À noter que même les cartes qui ne 'supportent' pas ce mode peuvent être configurées comme point d'accès. C'est juste que la connexion sera moins stable.

Configuration du réseau

Une fois que c'est fait, on configure l'interface dans /etc/network/interfaces pour avoir accès à Internet. Ça nous permet de faire quelques mises à jour, et d'installer les logiciels nécessaires. Bien sût, ça suppose d'avoir un modem/routeur/box wifi qui est connecté à Internet.

Fichier /etc/network/interfaces pour l'accès à Internet

1.  This file describes the network interfaces available on your system
2.  and how to activate them. For more information, see interfaces(5).
1.  The loopback network interface

auto lo iface lo inet loopback

auto wlan0

iface wlan0 inet dhcp

    wpa-ap-scan 1                   ## Pour se connecter a un reseau dont le SSID est cache 
    wpa-scan-ssid 1                  ## Cf.au dessus 
    wpa-ssid NomDuRéseauWifi ## Nom du réseau wifi auquel on veux se connecter 
    wpa-bssid 11:22:33:44:aa:bb   ## MAC du point d'accès wifi 
    wpa-psk "MaSuperCléScrète"    ## la cle du reseau  auquel on veut se connecter 

Le fait de laisser la clé (PSK) en clair dans le fichier est une mauvaise pratique en terme de sécurité. N'importe qui peut lire le fichier et la récupérer. Cette configuration n'est à utilisé que dans un environnement de développement, et il doit être clair que ce n'est pas sécurisé ! Vue qu'une loi exprès pour punir ce défaut à été votée en France, mieux vaux être sérieux ( poke @Hadopi ;) ).

Au minimum, on change les permissions sur le fichier en question :

chmod 0600 /etc/network/interfaces

Au mieux, on utilisera wpa_supplicant avec la configuration qui va bien. Autres liens intéressants :

Fichier /etc/network/interfaces pour créer un réseau local

On utilise cette version du fichier pour attribuer une IP fixe au cadre/serveur avant de lancer les différents services.


1.  This file describes the network interfaces available on your system
2.  and how to activate them. For more information, see interfaces(5).
1.  The loopback network interface

auto lo iface lo inet loopback

auto wlan0

iface wlan0 inet static

    address 10.0.0.1     ## on definit l'IP fixe du point d'acces 
    netmask 255.255.255.0  
Appliquer la configuration du réseau

Pour alterner les configurations réseau, on modifie le fichier /etc/network/interfaces, puis on lance la commande suivante :

ifdown wlan0 && ifup wlan0

Pour que ce soit plus rapide, on peut créer deux fichiers interfaces.NET et interfaces.AP dans lesquels on place les configurations ci-dessus, puis on utilise les lignes de commandes suivantes pour alterner :


1.  on passe de la config Internet a Point d'Acces

cp /etc/network/interfaces.AP /etc/network/interfaces && ifdown wlan0 &&
ifup wlan0

1.  on passe de la config Point d'Acces a Internet

cp /etc/network/interfaces.NET /etc/network/interfaces && ifdown wlan0
&& ifup wlan0 ``` 

Autres liens intéressants :

  *  [ http://sirlagz.net/2012/08/09/how-to-use-the-raspberry-pi-as-a-wireless-access-pointrouter-part-1/ ](http://sirlagz.net/2012/08/09/how-to-use-the-raspberry-pi-as-a-wireless-access-pointrouter-part-1/)

### Création du point d'accès : hostapd 

##### Installation

 apt-get install hostapd 

##### Configuration

*/etc/default/hostapd*

 DAEMON_CONF="/etc/hostapd/hostapd.conf" 

*/etc/hostapd/hostapd.conf*



1.  interface reseau a utiliser ( correspond a la carte configuree a
    l'etape precedente )

interface=wlan0

1.  pilote a utiliser ( autres options : madwifi, prism54, HostAP )

driver=nl80211

1.  emplacement et permission du fichier d'execution

ctrl_interface=/var/run/hostapd ctrl_interface_group=0

1.  Nom du reseau wifi (SSID)

ssid=MonSuperReseau

1.  mode : a, b ou g
2.  hw_mode=g
3.  canal de 1 à 12 / 14 selon les pays

channel=6

1.  diffuser ou non le SSID (0 == oui, 1 == non)

ignore_broadcast_ssid=0

1.  0 pour un reseau ouvert, 1 pour utiliser le wpa, 2 pour wpa2, 3 pour
    wpa&wpa2

wpa=0

1.  autres options facultatives
2.  intervalle d'envoi du paquet contenant les infos du point d'acces
    (beacon)

beacon_int=100

1.  methode d'authentification (1= open, 2=PSK (wep,wpa), 3= les deux)

auth_algs=1

1.  Wifi MultiMedia QoS pour les clients compatibles

wmm_enabled=1

1.  utiliser syslog pour logger les acces

logger_syslog=-1

1.  definition du niveau de log

logger_syslog_level=2



Un fichier de configuration complet existe pour plus d'informations sur
les différentes options :
Autres liens intéressants :

  *  [ http://linuxwireless.org/en/users/Documentation/hostapd ](http://linuxwireless.org/en/users/Documentation/hostapd)
  * [[ http://blog.dmaggot.org/2010/05/setting-up-an-atheros-based-ap-using-ath5k-and-hostapd ](http://blog.dmaggot.org/2010/05/setting-up-an-atheros-based-ap-using-ath5k-and-hostapd)    (cache     google) ](https://webcache.googleusercontent.com/search?hl=en&q=cache:5Ksyut27CG8J:http://blog.dmaggot.org/2010/05/setting-up-an-atheros-based-ap-using-ath5k-and-hostapd/%2Bhostapd+opennetwork&ct=clnk)  -  [ mirroir ](http://bambou.viens.la/autres/hostapd.html)

### Serveur DHCP: udhcpd 

Quand un client se connectera au point d'accès, il faudra lui attribuer
une IP, c'est le job d'udhcpd.

 apt-get install udhcpd 

*/etc/default/udhcpd*

```  DHCPD_ENABLED="yes" DHCPD_OPTS="-S"

/etc/udhcpd.conf

  1. etendue du pool d'IP

start 10.0.0.2 end 10.0.0.24

  1. interface d'ecoute ( correspond a la carte reseau sans fil)

interface wlan0

  1. nombre maximal d'adresses attribuees ( a adapter a votre usage)

max_leases 24

  1. adresse du dns : adresse de l'interface puisqu'on va se charger de la resolution DNS

opt dns 10.0.0.1 option subnet 255.255.255.0 opt router 10.0.0.1 option domain local option lease 864000

Après cette manipulation, si on configure l'interface réseau et qu'on lance udhcp, puis hostapd, on doit pouvoir se connecter au réseau sans fil qu'on a définis dans hostapd.conf, et obtenir une IP.

Serveur DNS: dnsmasq

On va utiliser 'dnsmasq' comme serveur DNS seulement, bien qu'il soit possible de l'utiliser également en serveur DHCP. C'est selon les gôuts, et j'ai tendance à privilégier la séparation des tâches.

apt-get install dnsmasq

/etc/dnsmasq.conf

  1. interface a utiliser

interface=wlan0

  1. adresse sur laquelle on ecoute ( doit correspondre avec le reste de la configuration )

listen-address=10.0.0.1

  1. Optionnel : On redirige toutes les requetes HTTP vers l'IP du serveur

address=/##/10.0.0.1

  1. address=/example.net/10.0.0.1 ## Ici on ne redirigerait que les requetes vers example.net sur l'IP du serveur.
  2. on ecoute que sur l'adresse definie ci-dessus ( par defaut, dnsmasq ecoute sur le wildcard *.dns )

bind-interfaces

  1. on desactive le serveur DHCP de dnsmasq

no-dhcp-interface=wlan0

Autres liens intéressants :

Modification de /etc/hosts

On peut modifier /etc/hosts pour faire correspondre l'adresse du serveur ( 10.0.0.1 dans cet exemple ) avec un nom de domaine :


1.    

127.0.0.1 localhost.loc localhost

##::1 localhost.localdomain localhost 10.0.0.1 example.net

Serveur Web: lighttpd

Comme le but, c'est quand même de garder une empreinte mémoire aussi légère que possible, on va éviter d'installer les bouzins comme MySql et autres Apaches. On pourrait se contenter de mini-httpd, mais il ne gère pas les redirections et réécritures ( où alors j'ai pas trouvé ). Du coup, comme je connais bien lighttpd, c'est avec ça que je suis partis, mais Nginx pourrait être également un bon choix.

Il à fallut par la suite trouver un petit CMS léger sans dépendance à *Sql, histoire que ce soit plus user friendly pour éditer une page que vi par SSH. J'en ai trouvé deux qui me semble convenir : SuperSimpleNews (65 kb) et StaceyApp (300kb).

Le premier est un peu vieux, non maintenu et sans doute trouée ( la version date de Mars 2009), mais il est pensé pour l'intégration dans une page Web préexistante, et c'est ce qui fait son principal atout. De plus, vu l'utilisation qui va en être faite, je prend pas énormément de risque de voir le serveur piraté, et puis même, je m'en fous un peu.

Le second conviendrait parfaitement si je voulais repartir de zéro concernant le site qui sera hébergé. Dans mon cas, je pars d'une structure existante et c'est SSN qui remporte le cocotier.

Les deux logiciels ont pour qualités d'êtres libres et de ne nécessiter que PHP pour fonctionner.



1.  on procede en trois étapes pour ne pas avoir a installer apache2

apt-get install lighttpd php5-common && apt-get install php5-cgi &&
apt-get install php5 ``` 

*/etc/lighttpd/lighttpd.conf* 

1.  Modules

server.modules = (

    "mod_access", 
    "mod_alias", 
    "mod_compress", 

1.  "mod_rewrite",

    "mod_redirect", 
    "mod_accesslog", 
    "mod_fastcgi" 

)

1.  Activation de PHP

fastcgi.server = ( ".php" =>

          ( "localhost" => 
           (  
            "socket" => "/var/run/lighttpd/lighttpd-fastcgi-" + PID +".socket", 
            "bin-path" => "/usr/bin/php5-cgi" 
           ) ) ) 

server.document-root = "/var/www" server.upload-dirs = (
"/var/cache/lighttpd/uploads" ) server.errorlog =
"/var/log/lighttpd/error.log" accesslog.filename =
"/var/log/lighttpd/access.log" server.pid-file =
"/var/run/lighttpd.pid" server.username = "www-data"
server.groupname = "www-data"

index-file.names = ( "index.php", "index.html",

                                "index.htm", "default.htm", 
                               " index.lighttpd.html" ) 

url.access-deny = ( "~", ".inc" )

static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )

include_shell "/usr/share/lighttpd/use-ipv6.pl"

dir-listing.encoding = "utf-8" server.dir-listing = "enable"

compress.cache-dir = "/var/cache/lighttpd/compress/" compress.filetype
= ( "application/x-javascript", "text/css", "text/html",
"text/plain" )

include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

1.  Optionnel : rediriger toutes les connexions de HTTPS vers HTTP
2.  $SERVER ["socket"] == ":443" {
3.  $HTTP["scheme"] == "https" {
4.  $HTTP["host"] =~ ".*" {
5.  url.redirect = (".*" => "[http://%0$0](http://%0$0)")
6.  } } }
1.  on redirige toutes les requetes qui ne contiennent pas example.net
    vers example.net

$HTTP["host"] !~ "example.net" {

    url.redirect = ( 
    ".*" => " [ http://example.net ](http://example.net) " 
    ) 

}



### CMS: SuperSimpleNews 

C'est simple comme bonsoir. La racine du site étant */var/www/*, on
télécharge l'archive, on l'extrait, on édite le fichier config, et
paf, ça marche.

 apt-get install zip   mkdir /var/www/ssn 
 wget  [ http://www.monkeymatt.com/ssnews/SuperSimpleNews-1.0.zip ](http://www.monkeymatt.com/ssnews/SuperSimpleNews-1.0.zip)
 unzip SuperSimpleNews-1.0.zip -d /var/www/ssn 
 nano /var/www/ssn/includes/config.inc.php ## on fait les changements et on enregistre 

Il suffit ensuite de se rendre dans un navigateur sur
 pour accéder à l'interface d'administration,
et de vérifier le résultat dans les fichiers
. Les codes d'intégration sont dispos
sur la page .

Autres liens intéressants :

  *  [ http://www.monkeymatt.com/ssnews/ ](http://www.monkeymatt.com/ssnews/)

## Partie matérielle 

### Description des opérations 
Transformer un portable en cadre numérique c'est assez simple : on
démonte l'écran, on le retourne, et paf ça fait un cadre numérique.
Dans le cas présent, les nappes étant assez courtes, j'ai simplement
démonté l'écran pour le coller au dos de l'ordi. Au passage, j'en ai
profité pour connecter une antenne Wifi au blindage de la dalle LCD.
Pour remplacer le disque dur bruyant, un adaptateur IDE 44 pins vers
carte SD :
### Plan du cadre 
===== Autres ressources ====

  * Guide d'entretien du Acer TravelMate 510 :  [ http://www.elhvb.com/mobokive/edwin/laptops/acer/TM510SG.PDF ](http://www.elhvb.com/mobokive/edwin/laptops/acer/TM510SG.PDF)
  * Achat de l'adaptateur IDE > SD :  [ http://stores.ebay.fr/Fullspeed-IT?_trksid=p4340.l2563 ](http://stores.ebay.fr/Fullspeed-IT?_trksid=p4340.l2563)