Une MakerBox est un boitier autonome qui joue le rôle d'un point d'accès sans-fil, un commutateur téléphonique IP et un serveur multimédia. La MakerBox est réalisée à partir d'un routeur sans-fil TP-Link MR3020 alimenté par une batterie à chargeur solaire.
Le choix du routeur TP-Link MR3020 est dû à son succès croissant. Ce routeur portable met en place les standards IEEE 802.11 b/g/n et dispose d'un port LAN/WAN à 100 Mbps, un port USB 2.0 pour un modem 3G/4G, et un port mini-USB pour l'alimentation électrique. La portabilité du routeur MR-3020 en a fait la solution de choix pour le projet PirateBox ou la nouvelle sonde de mesure du projet ATLAS.
Pour fabriquer votre MakerBox, vous avez besoin du matériel suivant:
Commencez par télécharger la distribution Attitude Adjustment du firmware OpenWRT et procédez comme suit. Connectez votre ordinateur au routeur TL-MR3020 avec un câble Ethernet. Par défaut, le routeur est configuré avec l'adresse IP 192.168.0.254/24. Attribuez donc une adresse de la même plage à votre ordinateur, par exemple 192.168.0.1. Ouvrez votre navigateur préféré et saisissez l'adresse du routeur (par défaut login = admin et mot de passe = admin). Mettez à jour le firmware de votre routeur avec le firmware Attitude Adjustment nouvellement téléchargé. Attendez deux défilements successifs de l'indicateur de progression (le routeur redémarrera entretemps) et procédez à une configuration basique pour connecter votre routeur à Internet.
Si vous partez d'une ancienne version OpenWrt et que vous souhaitez mettre à jour votre routeur avec la distribution Attitude Adjustment, vous pouvez suivre ce tutoriel.
Avec OpenWrt l'adresse IP configurée initialement sur votre routeur est 192.168.1.1. Modifiez donc l'adresse de votre ordinateur en mettant une adresse dans le même réseau, par exemple 192.168.1.2 comme indiqué sur la figure 2. Connectez vous au routeur avec un câble Ethernet et lancez une session telnet. L'exemple suivant suppose que vous disposez d'une passerelle vers internet. Il s'agit typiquement du boitier ADSL de votre opérateur. L'adresse IP de votre routeur MR3020 est 192.168.1.1, celle de la passerelle par défaut est 192.168.1.100.
La distribution OpenWrt dispose d'une interface de configuration graphique appelée LuCI. Il est donc possible de configurer votre routeur en saisissant son adresse IP dans votre navigateur et en se laissant guider par les menus de l'interface graphique.
Modifiez le contenu du fichier /etc/config/network
en tapant la commande vi /etc/config/network
sur votre MR3020 et en suivant l'exemple ci-dessous:
config interface 'lan' option ifname 'eth0' option type 'bridge' option proto 'static' option ipaddr '192.168.1.1' option netmask '255.255.255.0' option gateway '192.168.1.100' list dns '192.168.1.100' list dns '8.8.8.8'
Modifiez les paramètres sans-fil du MR3020 en activant l'interface radio et en déclarant un nouveau SSID appelé MakerFaire. Le chiffrement WPA2-PSK est choisi dans l'exemple ci-dessous, mais sachez que votre routeur supporte les chiffrements WPA/WPA2 PSK (“WPA Personal”), 802.11i (“WPA Enterprise”), et le chiffrement WEP.
config wifi-device 'radio0' option type 'mac80211' option channel '11' option macaddr 'f8:d1:11:bd:62:ce' option hwmode '11ng' option htmode 'HT20' list ht_capab 'SHORT-GI-20' list ht_capab 'SHORT-GI-40' list ht_capab 'RX-STBC1' list ht_capab 'DSSS_CCK-40' option disabled '0' option txpower '27' option country 'FR' config wifi-iface option device 'radio0' option network 'lan' option mode 'ap' option ssid 'MakerFaire' option encryption 'psk2' option key 'makerfaire'
Redémarrez votre routeur en tapant reboot
ou tout simplement en débranchant le câble d'alimentation USB. Branchez maintenant votre routeur à la passerelle par défaut comme indiqué sur la figure 3. Connectez votre ordinateur au réseau sans-fil MakerFaire et lancez une session SSH vers votre routeur. Vérifiez que la connexion Internet est établie.
En cas de problème, il est possible de revenir sur une configuration d'usine de votre routeur en utilisant le mode failsafe. Pour cela, démarrez le TL MR-3020. Lorsque le bouton WPS commence à clignoter, appuyez jusqu'au clignotement rapide. Le routeur est maintenant passé en mode failsafe. Vous pouvez y accéder par telnet à l'adresse 192.168.1.1 et effacer toute installation de paquets en tapant mount_root
et puis firstboot
. Votre routeur est maintenant en configuration usine !
Votre routeur MR3020 dispose de 4 MB de mémoire flash. Cet espace est suffisant pour une installation OpenWrt basique. Cependant, comme il s'agit d'intégrer des applications supplémentaires sur votre MakerBox, une extension de l'espace de stockage s'impose. En utilisant le mécanisme extroot
de OpenWrt, vous avez la possibilité d'étendre l'espace de stockage de votre système de fichier root en utilisant la clé USB.
Commencez par supprimer l'interface graphique LuCI dans le but de libérer l'espace de stockage pour les prochaines mises à jour. Pour cela, il est indispensable de saisir la commande suivante plusieurs fois afin de supprimer toutes les dépendances:
root@MakerFaire:~# opkg remove luci* --force-removal-of-dependent-packages
Installez les paquets nécessaire pour le montage de la clé USB et pour créer les partitions. Les manipulations suivantes supposent bien évidemment que votre routeur est toujours connecté à Internet pour télécharger les paquets correspondants.
root@MakerFaire:~# opkg update && opkg install kmod-usb-storage fdisk kmod-usb-uhci kmod-usb-ohci root@MakerFaire:~# insmod usbcore root@MakerFaire:~# insmod uhci root@MakerFaire:~# insmod usb-ohci
Branchez votre clé USB sur le routeur MR3020. En général, le périphérique correspondant se trouve dans /dev/sda
, pour en être sûr n'hésitez pas à consulter le journal des messages obtenu en tapant la commande dmesg
.
Effacez les partitions du périphérique /dev/sda
:
root@MakerFaire:~# dd if=/dev/zero of=/dev/sda bs=64k count=1
Créez maintenant de nouvelles partitions: 64 MB swap, 256 MB root et le reste dans une partition séparée:
root@MakerFaire:~# cat <<'__EOF__' | fdisk /dev/sda n p 1 +64M t 82 n p 2 +256M n p 3 w q __EOF__
Il est possible de créer les partitions sur votre clé USB en mode interactif. Commencez par saisir la commande fdisk /dev/sda
et puis laissez vous guider. Les commandes que vous devez utiliser sont mentionnées successivement dans l'extrait précédent, y compris les entrées.
Vérifiez maintenant les partitions créées:
root@MakerFaire:~# fdisk -l /dev/sda Disk /dev/sda: 8044 MB, 8044675072 bytes 248 heads, 62 sectors/track, 1021 cylinders, total 15712256 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x290acc44 Device Boot Start End Blocks Id System /dev/sda1 2048 133119 65536 82 Linux swap / Solaris /dev/sda2 133120 657407 262144 83 Linux /dev/sda3 657408 15712255 7527424 83 Linux
Supprimez fdisk
pour libérer l'espace de stockage:
root@MakerFaire:~# opkg remove fdisk root@MakerFaire:~# opkg install e2fsprogs
Créez les systèmes de fichier root
et data
:
root@MakerFaire:~# mkfs.ext3 /dev/sda2 -L openwrt-extroot root@MakerFaire:~# mkfs.ext3 /dev/sda3 -L openwrt-data
Supprimez e2fsprogs
et installez mkswap
:
root@MakerFaire:~# opkg --force-removal-of-essential-packages remove e2fsprogs libext2fs libcom_err libpthread root@MakerFaire:~# opkg install swap-utils
Activez le swap:
root@MakerFaire:~# mkswap /dev/sda1 -L openwrt-swap
Installez blkid
, block-mount
et les pilotes ext2/ext3/ext4 pour le support extroot
:
root@MakerFaire:~# opkg install blkid block-mount kmod-fs-ext4
Vérifiez le résultat avec blkid
:
root@MakerFaire:~# blkid /dev/mtdblock2: TYPE="squashfs" /dev/sda1: LABEL="openwrt-swap" UUID="cdc553ad-b2d8-4d1c-9290-7b8119b5078e" TYPE="swap" /dev/sda2: LABEL="openwrt-extroot" UUID="410340e0-958b-4aee-920f-6fca68aca1ce" TYPE="ext3" /dev/sda3: LABEL="openwrt-data" UUID="688cdbd1-e288-4128-9582-a134a1710c54" TYPE="ext3"
Effacez les précédentes configurations fstab
:
root@MakerFaire:~# /etc/init.d/fstab stop root@MakerFaire:~# uci delete fstab.@swap[0] root@MakerFaire:~# uci delete fstab.@mount[0] root@MakerFaire:~# uci commit fstab
Activez le swap au prochain démarrage:
root@MakerFaire:~# uci add fstab swap root@MakerFaire:~# uci set fstab.@swap[-1].uuid=`blkid -s UUID /dev/sda1 | cut -d\" -f2` root@MakerFaire:~# uci set fstab.@swap[-1].enabled=1 root@MakerFaire:~# uci commit fstab
Activez extroot
au prochain démarrage:
root@MakerFaire:~# uci add fstab mount root@MakerFaire:~# uci set fstab.@mount[-1].uuid=`blkid -s UUID /dev/sda2 | cut -d\" -f2` root@MakerFaire:~# uci set fstab.@mount[-1].options=rw,sync,noatime root@MakerFaire:~# uci set fstab.@mount[-1].fstype=ext3 root@MakerFaire:~# uci set fstab.@mount[-1].enabled_fsck=1 root@MakerFaire:~# uci set fstab.@mount[-1].enabled=1 root@MakerFaire:~# uci set fstab.@mount[-1].target=/
Activez la partition data
au prochain démarrage:
root@MakerFaire:~# mkdir -p /mnt/data root@MakerFaire:~# uci add fstab mount root@MakerFaire:~# uci set fstab.@mount[-1].uuid=`blkid -s UUID /dev/sda3 | cut -d\" -f2` root@MakerFaire:~# uci set fstab.@mount[-1].options=rw,sync,noatime root@MakerFaire:~# uci set fstab.@mount[-1].fstype=ext3 root@MakerFaire:~# uci set fstab.@mount[-1].enabled_fsck=1 root@MakerFaire:~# uci set fstab.@mount[-1].enabled=1 root@MakerFaire:~# uci set fstab.@mount[-1].target=/mnt/data root@MakerFaire:~# uci commit fstab
Désactive l'option anon_mount
:
root@MakerFaire:~# uci set fstab.automount.anon_mount=0 root@MakerFaire:~# uci commit fstab
Vérifiez le résultat dans le fichier /etc/config/fstab
qui doit être similaire à l'extrait suivant:
config global 'automount' option from_fstab '1' option anon_mount '0' config global 'autoswap' option from_fstab '1' option anon_swap '0' config swap option uuid 'cdc553ad-b2d8-4d1c-9290-7b8119b5078e' option enabled '1' config mount option uuid '410340e0-958b-4aee-920f-6fca68aca1ce' option options 'rw,sync,noatime' option fstype 'ext3' option enabled_fsck '1' option enabled '1' option target '/' config mount option uuid '688cdbd1-e288-4128-9582-a134a1710c54' option options 'rw,sync,noatime' option fstype 'ext3' option enabled_fsck '1' option enabled '1' option target '/mnt/data'
Copiez le contenu du répertoire racine:
root@MakerFaire:~# mkdir -p /mnt/sda2 /tmp/cproot root@MakerFaire:~# mount --bind / /tmp/cproot root@MakerFaire:~# mount /dev/sda2 /mnt/sda2 root@MakerFaire:~# tar -C /tmp/cproot -cvf - . | tar -C /mnt/sda2 -xf - root@MakerFaire:~# sync root@MakerFaire:~# umount /mnt/sda2 root@MakerFaire:~# umount /tmp/cproot
Activez extroot
au prochain démarrage:
root@MakerFaire:~# /etc/init.d/fstab enable root@MakerFaire:~# /etc/init.d/fstab start root@MakerFaire:~# /etc/init.d/fstab whole_root_enable
Redémarrez votre routeur, … Vérifiez que tout est en place (attendez un instant pour le montage de /dev/sda3
soit effectué):
root@MakerFaire:~# df -h Filesystem Size Used Available Use% Mounted on rootfs 246.0M 19.8M 213.4M 8% / /dev/root 2.0M 2.0M 0 100% /rom tmpfs 14.3M 1.8M 12.5M 13% /tmp tmpfs 512.0K 0 512.0K 0% /dev /dev/sda2 246.0M 19.8M 213.4M 8% / /dev/sda3 7.1G 130.5M 6.6G 2% /mnt/data
root@MakerFaire:~# free total used free shared buffers Mem: 29220 23268 5952 0 3088 -/+ buffers: 20180 9040 Swap: 65532 0 65532
Maintenant que l'espace de stockage est étendu, remettez en place quelques outils intéressants:
root@MakerFaire:~# opkg update && opkg install luci fdisk e2fsprogs tcpdump screen mtr wget luci-app-samba openssh-sftp-server
Commencez par installer Asterisk sur votre routeur:
root@MakerFaire:~# opkg update && opkg install asterisk18
Editez le contenu du fichier /etc/hosts
pour ajouter une équivalence entre 127.0.0.1 et le nom de votre routeur:
127.0.0.1 MakerFaire
Dans le fichier /etc/asterisk/sip.conf
, déclarez les paramètres des utilisateurs SIP. Deux utilisateurs, appelés Alice et Bob sont déclarés dans l'exemple qui suit. Un mot de passe est aussi attribué à chaque utilisateur secret=100
.
[alice] type=friend secret=100 host=dynamic context=default allow=all [bob] type=friend secret=100 host=dynamic context=default allow=all
Dans le fichier /etc/asterisk/extensions.conf
, déclarez les extensions 100 et 200 qui permettent de joindre Bob et Alice respectivement. Il est aussi possible de déclarer l'extension 600 qui permet de tester la latence du système avec un mécanisme d'écho. Ces directives sont déclarées dans la rubrique default
. Il ne faut pas oublier de supprimer la ligne include ⇒ demo.
[default] exten => 100,1,Dial(SIP/bob) exten => 200,1,Dial(SIP/alice) exten => 600,1,Echo
Pour noter ou changer les modules utilisés par Asterisk, vous pouvez consulter le fichier /etc/asterisk/modules.conf
. Dans ce fichier, vous avez la possibilité de configurer les modules de la musique d'attente, de chiffrement, de l'encodage de la voix, …
Dans le fichier /etc/asterisk/asterisk.conf
, supprimez le commentaire (!)
qui figure à côté de [directories]
.
[directories] astetcdir => /etc/asterisk astmoddir => /usr/lib/asterisk/modules astvarlibdir => /usr/lib/asterisk astdbdir => /usr/lib/asterisk astkeydir => /usr/lib/asterisk astdatadir => /usr/lib/asterisk astagidir => /usr/lib/asterisk/agi-bin astspooldir => /var/spool/asterisk astrundir => /var/run/asterisk astlogdir => /var/log/asterisk
Démarrez Asterisk et activez le au prochain démarrage:
root@MakerFaire:~# /etc/init.d/asterisk start root@MakerFaire:~# /etc/init.d/asterisk enable
Le journal de messages d'Asterisk se trouve dans le fichier /var/log/asterisk/messages. Consultez ce fichier pour identifier tout problème de démarrage ou de fonctionnement de votre serveur téléphonique.
Le serveur Asterisk que vous venez d'installer permet aussi la visioconférence. L'activation de la visioconférence est très simple: dans le fichier /etc/asterisk/sip.conf
supprimez le commentaire devant ;videosupport=yes
.
videosupport=yes ; Turn on support for SIP video. You need to turn this ; on in this section to get any video support at all. ; You can turn it off on a per peer basis if the general ; video support is enabled, but you can't enable it for ; one peer only without enabling in the general section. ; If you set videosupport to "always", then RTP ports will ; always be set up for video, even on clients that don't ; support it. This assists callfile-derived calls and ; certain transferred calls to use always use video when ; available. [yes|NO|always]
L'utilisation de la visioconférence est un peu plus subtile. Comme Asterisk ne supporte pas le transcodage (cf. https://wiki.asterisk.org/wiki/display/AST/Video+Telephony), il est donc indispensable d'utiliser le même encodage aux deux bouts de la communication. A titre d'exemple, vous pouvez établir une visioconférence entre:
Cliquez pour visualiser la partie optionnelle
Pour établir des communications téléphoniques avec le serveur téléphonique Asterisk que vous venez d'installer sur le routeur MR3020, deux types de terminaux peuvent être utilisés: des téléphones IP (par exemple les téléphones AASTRA 6757i), ou des téléphones logiciels disponibles pratiquement pour tout type de système d'exploitation (une liste non exhaustive est disponible sur wikipedia).
La configuration d'un softphone est très simple: il suffit de renseigner le nom de l'utilisateur, son mot de passe, et l'adresse du serveur Asterisk, généralement appelé domaine. La figure 4 présente une capture d'écran de la configuration du logiciel X-Lite sous Mac OS X.
Un serveur multimédia vous permet de partager sur le réseau de votre MakerBox vos photos, musiques, ou vidéos. Un grand nombre de clients existent pour consulter le contenu multimédia diffusé par votre serveur (cf. liste de clients UPnP par Wikipedia). Commencez donc par installer un serveur multimédia sur le MR3020. La distribution choisie est miniDLNA:
root@MakerFaire:~# opkg install minidlna root@MakerFaire:~# opkg install luci-app-minidlna
L'installation de l'interface LuCI est optionnelle mais vous permettra de configurer votre serveur multimédia via une interface graphique simplifiée. Créez maintenant des répertoires pour stocker le contenu multimédia.
root@MakerFaire:~# cd /mnt/data root@MakerFaire:~# mkdir music root@MakerFaire:~# mkdir video root@MakerFaire:~# mkdir picture
Modifiez le fichier de configuration de miniDLNA pour prendre en compte les répertoires de stockage déjà créés:
config minidlna config option 'enabled' '1' option port '8200' option interface 'br-lan' option friendly_name 'MakerFaire JukeBox' option db_dir '/var/run/minidlna' option log_dir '/var/log' option inotify '1' option enable_tivo '0' option strict_dlna '0' option presentation_url '' option notify_interval '900' option serial '12345678' option model_number '1' option root_container '.' list media_dir 'A,/mnt/data/music' list media_dir 'P,/mnt/data/picture' list media_dir 'V,/mnt/data/video' option album_art_names 'Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg /Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg'
Enrichissez maintenant votre bibliothèque multimédia avec de la musique ou des vidéos libres de droits (par exemple des films réalisés avec Blender ou de la musique sous licence CC du Free Music Archive). Pour une démonstration placez vous dans le répertoire /mnt/data/video
et saisissez la commande suivante pour télécharger la fameuse vidéo du Big Buck Bunny:
root@MakerFaire:~# wget http://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_320x180.mp4
Pour relancer l'indexage de votre bibliothèque multimédia, vous pouvez supprimer la base de données en saisissant: rm /var/run/mindlna/file.db
. Pour une solution pérenne, modifiez le fichier /etc/init.d/minidlna
et ajoutez l'option -R
au démarrage de miniDLNA: service_start /usr/bin/minidlna -R -f “$MINIDLNA_CONFIG_FILE”
. Un simple redémarrage /etc/init.d/minidlna restart
mettra à jour votre base de données multimédia.
Pour profiter de votre contenu multimédia partagé sur le réseau, il suffit de lancer le logiciel VLC sur l'un des ordinateurs connectés au même réseau. La MakerBox apparaît automatiquement dans l'onglet réseau local
de votre liste de lecture. Sur Android, vous pouvez opter pour des logiciels comme MediaHouse ou Pixel Media controller.