Outils pour utilisateurs

Outils du site


transformer_un_vieux_portable_en_cadre_numerique_wifi

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 21×25, 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 :

  • Installation de Debian
  • Configuration de la carte réseau
  • Configuration du framebuffer
  • Configuration de hostapd, udhcpd, dnsmasq et lighttpd
  • Installation du CMS SuperSimpleNews

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

  • Remplacement du disque dur par une carte SD et optimisations SSD
  • Débourniguage de l'écran
  • Réalisation du cadre en béton renforcé
  • Intégration du cadre
  • Le reste c'est bonus.

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

echo "uvesafb" | tee -a /etc/initramfs-tools/modules
# on recupere les modes dispo avec :
# modprobe uvesafb 
# 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 : http://blog.samat.org/2010/11/09/High-resolution-text-console-with-uvesafb-and-Debian

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<code>

et la remplacer par

1:2345:respawn:/sbin/mingetty --autologin LOGIN_UTILISATEUR tty1
</code>

Lancement de fbi au démarrage

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

if [ $(tty) == "/dev/tty1" ]; then
  # 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 : http://it.dennyhalim.com/2008/10/linux-automatic-login-startx-and.html

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 "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 avec l'utilitaire b43-fwcutter.

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

# '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 : http://linuxwireless.org/en/users/Drivers/b43#Other_distributions_not_mentioned_above

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 :

# 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

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

# 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.

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

# 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 :

# on passe de la config Internet a Point d'Acces
cp  /etc/network/interfaces.AP /etc/network/interfaces && ifdown wlan0 && ifup wlan0
# 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 :

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

# interface reseau a utiliser ( correspond a la carte configuree a l'etape precedente )
interface=wlan0
# pilote a utiliser ( autres options : madwifi, prism54, HostAP )
driver=nl80211
# emplacement et permission du fichier d'execution
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
# Nom du reseau wifi (SSID)
ssid=MonSuperReseau
#mode : a, b ou g
#hw_mode=g
#canal de 1 à 12 / 14 selon les pays
channel=6
# diffuser ou non le SSID (0 == oui, 1 == non)
ignore_broadcast_ssid=0
# 0 pour un reseau ouvert, 1 pour utiliser le wpa, 2 pour wpa2, 3 pour wpa&wpa2
wpa=0

# autres options facultatives
# intervalle d'envoi du paquet contenant les infos du point d'acces (beacon)
beacon_int=100
# methode d'authentification (1= open, 2=PSK (wep,wpa), 3= les deux)
auth_algs=1
#Wifi MultiMedia QoS pour les clients compatibles
wmm_enabled=1

# utiliser syslog pour logger les acces
logger_syslog=-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 : http://hostap.epitest.fi/gitweb/gitweb.cgi?p=hostap.git;a=blob_plain;f=hostapd/hostapd.conf

Autres liens intéressants :

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

# etendue du pool d'IP 
start		10.0.0.2
end		10.0.0.24	
#interface d'ecoute ( correspond a la carte reseau sans fil)
interface	wlan0	
# nombre maximal d'adresses attribuees ( a adapter a votre usage)
max_leases	24
# 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

# interface a utiliser
interface=wlan0
# adresse sur laquelle on ecoute ( doit correspondre avec le reste de la configuration )
listen-address=10.0.0.1
# Optionnel : On redirige toutes les requetes HTTP vers l'IP du serveur
address=/#/10.0.0.1
#address=/example.net/10.0.0.1 # Ici on ne redirigerait que les requetes vers example.net sur l'IP du serveur.
# on ecoute que sur l'adresse definie ci-dessus ( par defaut, dnsmasq ecoute sur le wildcard *.dns )
bind-interfaces
# 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 :

#<ip-address>	<hostname.domain.org>	<hostname>
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.

# 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

# Modules
server.modules = (
	"mod_access",
	"mod_alias",
	"mod_compress",
#        "mod_rewrite",
 	"mod_redirect",
	"mod_accesslog",
	"mod_fastcgi"
)

# 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"

# Optionnel : rediriger toutes les connexions de HTTPS vers HTTP
#$SERVER ["socket"] == ":443" {
#$HTTP["scheme"] == "https" {
#    $HTTP["host"] =~ ".*" {
#        url.redirect = (".*" => "http://%0$0")
#    } } }


# on redirige toutes les requetes qui ne contiennent pas example.net vers example.net 
$HTTP["host"] !~ "example.net" {
    url.redirect = (
	".*" => "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 
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 http://example.net/ssn pour accéder à l'interface d'administration, et de vérifier le résultat dans les fichiers http://example.net/ssn/examples/. Les codes d'intégration sont dispos sur la page http://example.net/ssn/readme.html.

Autres liens intéressants :

Partie matérielle

Description des opérations

La bête

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

2013/11/05