Guide Asterisk 1.8 sur OpenWRT (backfire) par PierreDavidOriol also available in english

1. Introduction

Après avoir utilisé Asterisk 1.4 sur OpenWRT (Whiterussian) avec succès pendant presque 5 ans (c.f. Asterisk14SurOpenWRT), la maturité de ces deux produits ayant substantiellement augmenté, il était plus que temps de les mettre à jour et par le fait même de remplacer mon mon vieux routeur WL-500GP par un modèle plus récent. J'ai donc décidé d'écrire ce nouveau guide afin d'aider les personnes intéressées à installer Asterisk 1.8 sur OpenWRT Backfire 10.03.1 (rc3 au moment de la rédaction). Comme le précédent, il s'addresse à des individus ayant un minimum de connaissances informatiques, soit être à l'aise avec l'activation/désactivation d'interfaces réseaux, les commandes de base de GNU/Linux et l'édition de fichiers sous Linux/Windows.

L'infrastructure de base du réseau reste donc identique à celle décrite précédemment, seul le matériel et les versions des divers logiciels changent.

2. Matériel

Pour utiliser une connexion VoIP vous êtes libres d'installer Asterisk sur n'importe quelle plateforme connectée à internet, que ce soit une installation GNU/Linux sur un ordinateur conventionnel ou sur un routeur sur lequel vous avez installé GNU/Linux ou même encore sous Windows (Je n'ai pas lu sur des installations sous OS X, mais j'imagine que c'est éventuellement réalisable). Pour ma part, je compte installer Asterisk sur un routeur sur lequel j'aurais préalablement installé OpenWRT qui est une distribution de de GNU/Linux prévue pour les routeurs (il est aussi possible d'installer Asterisk sur d'autres distributions de GNU/Linux pour routeur, notemment DD-WRT, X-WRT etc.). Le choix de cette plateforme est plus stratégique qu'autre chose, premièrement, je n'ai pas d'ordinateur qui roule 24/7 et deuxièment, en cas de panne électrique, si vous possédez un UPS (onduleur), il sera beaucoup plus facile d'alimenter un routeur que d'alimenter un ordinateur pendant une période de temps prolongée. OpenWRT ne supporte évidemment pas tous les routeurs de la même manière, il va s'en dire que les fabriquants ne sont pas vraiment joyeux à l'idée qu'on n'utilise pas leur logiciel par défaut donc les routeurs les plus récents ont tendance à avoir des spécifications moins bonnes en terme d'espace disque. Qu'à cela ne tienne, je choisirai un routeur qui a beaucoup de RAM, et relativement suffisamment d'espace disque, ainsi qu'un ou deux ports USB si jamais je venais à manquer d'espace sur le routeur. Vous pouvez consulter la liste du matériel supporté (ou non) par OpenWRT à cet endroit: http://wiki.openwrt.org/toh/start

Le guide original était réalisé avec un WL-500GP d'Asus. Bien que ce routeur soit un modèle excellent, fiable (Sauf le PSU), solide et durable, il devenait un peu ancien comparativement aux produits actuellement disponibles : Les nouveaux routeurs ont bien souvent des CPU cadencés à 400mhz ou plus, ils possèdent plus de RAM, supportent le 802.11n (desfois dual band et MIMO), ont des switch Gigabit et sont basés sur des CPU Atheros beaucoup mieux supportés par Linux.

Il y a donc plusieurs modèles qui sont très intéressants et le rapport puissance de processeur/consommation électrique de certains routeurs en fait des plateformes de choix pour ce type d'installation. Il faut donc diriger votre choix en fonction de votre budget et du type de support qu'OpenWRT offre pour votre plateforme. Tel que mentionné, la majorité des nouveaux modèles de routeurs sont construits sur des plateforme Atheros, ce qui est une excellente nouvelle car Atheros ont une historique impressionante de développement compatible avec GNU/Linux. Je vous suggère donc d'opter pour un routeur dont le build target est ar71xx, pour les chipsets Atheros.

Il est aussi important de choisir un routeur ayant une interface réseau sans-fil Atheros, ainsi qu'une switch permettant l'administration des ports indépendemment. Toute cette information se retrouve dans la liste de matériel qu'OpenWRT fournit. Les modèles les plus dispendieux et néamoins intéressants sont par exemple le DIR-825 et le WNDR3700 qui semblent tous deux relativement convennablement supportés par OpenWRT (peut varier en fonction des versions et l'humeur du manufacturier) mais qui ont un prix quelquepeu élevé.

J'ai donc choisi le Buffalo WZR-HP-G300NH qui est substantiellement moins cher, un peu plus lent (400 vs 680mhz), et n'a pas de "Dual Band (5ghz/2.4ghz)" mais qui est un des modèles les mieux supportés par OpenWRT. En fait, Buffalo le vendent et le suppotent officiellement directement avec DD-WRT (en téléchargement sur leur site internet), ce qui en fait un des meilleurs choix économique, technique et à la rigueur politique.

<!> Attention, la durée de vie de la clef USB utilisée pour contenir votre installation d'Asterisk va être affectée (limite sur les write-cycles) et devrait se situer autour de 3-4 ans. Vous devriez donc la remplacer aux 3 ans pour éviter les problèmes.

3. Installation d'OpenWRT

Toute la documentation sur l'utilisation du routeur est disponible sur le site d'OpenwRT à cet endroit http://wiki.openwrt.org/toh/buffalo/wzr-hp-g300h

En achetant mon WZR-HP-G300NH, j'étais persuadé qu'il viendrait directement avec DD-WRT mais ce n'était pas le cas. Il venait avec le firmware standard de Buffalo, mais Buffalo fournit le téléchargement et supporte DD-WRT directement sur leur site internet. Pour installer OpenWRT, j'avais donc plusieurs options : soit utiliser directement tftp pour envoyer l'image d'OpenWRT au routeur, soit passer d'abord par DD-WRT pour le remplacer par OpenWRT. Après avoir essayé de faire fonctionner tftp, atftp sans succès (avec le ARP fixe, avec la vitesse à 100mbit etc.) j'ai décidé de passer par DD-WRT d'abord, ce qui ne s'est pas avéré particulièrement compliqué. Si la méthode de flashing en utilisant tftp décrite sur la page du routeur sur le site d'OpenWRT fonctionne pour vous, tant mieux, vous sauverez une étape.

Pour faciliter l'installation, il est préférable d'avoir 2 ordinateurs (ou de gérer 2 interfaces réseau), un connecté à Internet pour vous documenter et récupérer les divers fichiers et un connecté directement au routeur (qui lui est offline) afin de pouvoir lui envoyer les fichiers nécessaires et effectuer sa configuration.

<!> Attention, avant de procéder à des mises-à-jour de firmware du routeur, assurez-vous que des pannes de courant ne peuvent pas causer de problème et briser ces mises-à-jour. Le WZR-HP-G300NH est très robuste contre le bricking mais il est préférable qu'il soit branché à un UPS et que les envois d'image soient faits à partir d'un ordinateur portable lors de ces étapes critiques.

Il faut donc aller chercher l'image .bin de DD-WRT pour flasher le routeur en utilisant son interface web en recherchant pour le modèle du routeur à cet endroit: http://www.dd-wrt.com/site/support/router-database puis en utilisant le fichier nommé Buffalo WZR-HP-G300NH: Special File for initial flashing buffalo_to_ddwrt_webflash-MULTI.bin. Après avoir téléchargé l'image .bin, utilisez la fonction de mise-à-jour du routeur dans son interface web pour lui envoyer. Le routeur devrait rebooter au moins une fois et vous devriez ensuite obtenir l'interface web de DD-WRT à la place de celle de Buffalo en vous connectant à l'addresse par défaut soit http://192.168.1.1

Une fois DD-WRT installé, vous pouvez effectuer le même genre d'opération en suivant les étapes qui indiquent comment passer de DD-WRT à OpenWRT pour ce modèle de routeur http://wiki.openwrt.org/toh/buffalo/wzr-hp-g300h#migrate.from.dd-wrt.to.openwrt

Il vous faut d'abord choisir quel type d'image vous voulez installer entre les deux systèmes de fichiers jffs2 et squashfs. J'ai choisi jffs2 car il permet d'écrire dans le système de fichiers, le routeur possédant 32MB d'espace disque, il sera donc facile d'y ajouter des données au besoin par la suite.

Suivant les indications, vous devez récupérer l'image de type "sysupgrade" pour le routeur, pour le système de fichiers jffs2, soit http://downloads.openwrt.org/backfire/10.03.1-rc3/ar71xx/openwrt-ar71xx-wzr-hp-g300nh-jffs2-sysupgrade.bin

Il vous faut ensuite envoyer l'image sur le nouveau routeur dans le répertoire /tmp : Vous pouvez faire ceci en utilisant scp (winscp) à partir de l'ordinateur connecté au routeur. Une fois l'image présente dans /tmp vous devez utiliser la commande suivante qui inscrira le tout dans la mémoire non-volatile du routeur:

mtd -r write openwrt-ar71xx-wzr-hp-g300nh-jffs2-sysupgrade.bin linux

Le routeur devrait rebooter quelques fois avant d'être accessible, il se peut que cette procédure prenne une 10aine de minutes, il est dailleurs préférable de ne pas rester à regarder l'update se faire, la tentation de débrancher quelquechose étant trop forte si le processus vous semblait faussement inactif, ce qui rendrait le routeur inopérable.

Une fois la mise-à-jour terminée, vous pourrez vous connecter à l'interface web luci d'OpenWRT à l'addresse par défaut, soit http://192.168.1.1 en utilisant le login root

Lors de mon installation précédente d'OpenWRT sous WhiteRussian, l'interface web par défaut d'OpenWRT était très peu garnie et ne permettait pas d'effectuer la majorité des opérations nécessaires à l'administration du routeur. J'avais donc suggéré d'installer X-WRT (webif2) pour palier à cet inconvénient. Ceci n'est plus le cas, luci est maintenant très complète et fonctionnelle et je vous suggère fortement de la conserver car elle offre la meilleure compatibilité avec les fichiers de configuration qu'elle modifie.

4. Configuration d'OpenWRT

Tout d'abord il vous faut changer votre mot de passe root dans luci car vous ne pourrez rien configurer si vous ne le faites pas, luci vous oblige de le faire et c'est relativement normal. Votre routeur est la première porte d'entrée de votre réseau, en prendre le contrôle (surtout si c'est aussi votre standard téléphonique) sera la source de gros ennuis, dailleurs certains botnets se spécialisent en la demeurre : http://it.slashdot.org/article.pl?sid=09/03/23/2257252

Une fois le mot de passe root changé utilisez SSH (puttysous Windows) pour vérifier que le mot de passe a bien été modifié et que vous pouvez vous connecter avec succès au routeur.

Dans luci, configurez votre accès internet sur le nouveau routeur dans la section Administration (sur la droite de l'interface web), puis en choisissant Network->Interfaces->WAN sur la gauche. Vous pourrez alors choisir de vous connecter en DHCP (câble) ou PPPoE (DSL) puis utilisez les informations présentes dans votre ancien routeur pour configurer le reste des informations. Par défaut, l'interface devrait être eth1, avant de sauver et d'appliquer les changements vous pouvez connecter le port WAN du routeur à votre modem câble/DSL puis sauvez et appliquez les changements, le routeur devrait redémarrer et vous devriez être en mesure d'avoir Internet sur celui-ci et sur les ordinateurs qui y sont connectés. Il est aussi utile de conserver un ordinateur connecté à votre ancien routeur (maintenant offline) pour récupérer les diverses configurations que vous voulez porter à la nouvelle installation.

Une fois la connexion Internet active sur le routeur, reconnectez-vous par SSH et mettez à jour la liste des paquets opkg à l'aide de la commande

opkg update

opkg remplace ipkg dans les versions d'OpenWRT suivant WhiteRussian. La syntaxe des commandes est globalement la même, vous pouvez la voir à l'aide de

opkg help

Si la mise-à-jour d' opkg ne fonctionne pas, vérifiez que le fichier /etc/opkg.conf fait bien référence à un URL de source valide. Il devrait ressembler à ceci:

src/gz packages http://downloads.openwrt.org/backfire/10.03.1-rc3/ar71xx/packages
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay

Vous pouvez utiliser vi (guide rapide de vi) pour éditer des fichiers sous OpenWRT.

4.1. Configuration des ports de la switch

Si vous désirez sortir des ports de la switch ou du moins les configurer pour gérer des VLAN indépendants, il y a une petite subtilité à ne pas manquer avec ce routeur, lisez ceci

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

Apparemment fixé dans le prochain release d'OpenWRT 10.03.1: https://dev.openwrt.org/ticket/7168

Pour obtenir de l'information sur le fonctionnement du fichier de configuration de vlan/switch /etc/config/network, réferrez-vous à la documentation d'OpenWRT:

http://wiki.openwrt.org/doc/uci/network/switch

4.2. Installation du support USB et utilisation comme disque supplémentaire

Lorsque la liste des paquets d' opkg aura été mise-à-jour correctement, vous serez en mesure d'installer ce qui est nécessaire afin de supporter les clés USB supportant divers formats de système de fichiers. Vous pouvez choisir uniquement les systèmes de fichiers que vous désirez supporter, mais avec 32MB d'espace disque on peut aussi être plus généreux...

Voici la commande nécessaire pour installer le support kernel pour les systèmes de fichiers:

opkg install kmod-fs-btrfs kmod-fs-ext2 kmod-fs-ext3 kmod-fs-ext4 kmod-fs-isofs kmod-fs-vfat

Afin de supporter divers formats d'encodage/langue OpenWRT suggèrent aussi d'installer les modules kernel suivants:

opkg install kmod-nls-cp1250 kmod-nls-cp1251 kmod-nls-cp437 kmod-nls-cp775 kmod-nls-cp850 kmod-nls-cp852 kmod-nls-cp866 kmod-nls-iso8859-1 kmod-nls-iso8859-13 kmod-nls-iso8859-15 kmod-nls-iso8859-2 kmod-nls-koi8r kmod-nls-utf8 

Suite à l'installation de ces modules, il ne vous restera plus qu'à ajouter le support USB/hotplug:

opkg install kmod-usb2 kmod-usb-storage kmod-usb-storage-extras block-hotplug block-mount hotplug2

Vous pouvez tenter de faire toutes ces installations en une seule commande opkg mais l'interprêteur de commande par défaut ash a un maximum (pénible) de 512 caractères par commande.

Si vous aviez déjà une installation d'OpenWRT avec une clé USB formattée en ext2/3/4, conservez un backup de vos fichiers de configuration d'Asterisk pour les réutiliser car il est préférable de reformatter la clé USB avant de la réutiliser (les modules installés sur la clé USB pourraient ne pas fonctionner avec le nouveau OpenWRT de toutes façons).

Vous pouvez formatter votre clé USB en format ext3 ou ext4 directement sur le routeur, d'abord en installant le paquet e2fsprogs

opkg install e2fsprogs

puis en branchant votre clé USB, en vérifiant quel nom elle porte (généralement /dev/sda), et en formattant sa partition principale avec la commande suivante :

mkfs.ext3 /dev/sda1

(Attention à bien utiliser /dev/sda1)

La clé USB formattée, il faut maintenant ajouter les instructions pour le mount afin qu'OpenWRT vous la rende disponible à chaque démarrage au même endroit. Pour ce faire, créez un répertoire /mnt/usb

mkdir /mnt/usb -p

puis ajoutez les instructions de mount dans la nvram du routeur (ajustez /dev/sda1 en fonction de la configuration de votre clé USB):

uci set fstab.@mount[0].target=/mnt/usb
uci set fstab.@mount[0].device=/dev/sda1 
uci set fstab.@mount[0].fstype=auto
uci set fstab.@mount[0].enabled=1
uci set fstab.@mount[0].options=rw,sync,noatime,nodiratime
uci commit fstab

vous pouvez directement vérifier que tout fonctionne correctement en exécutant les deux commandes suivantes:

/etc/init.d/fstab enable
/etc/init.d/fstab restart

puis procédez à un redémarrage pour confirmer que votre clé USB est bien disponible au bon endroit (/mnt/usb).

Pour être en mesure d'installer des paquest opkg sur la clé USB, il faut l'enregistrer comme destination dans /etc/opkg.conf, en dessous des autres lignes commençant par dest, ajoutez la ligne suivante

dest usb /mnt/usb

puis procédez à un

opkg update

pour la bonne cause.

<!> Attention, cette clé USB contiendra toute votre nouvelle configuration d'Asterisk et des modules nécessaires, il est important d'en avoir une copie de sauvegarde sur une autre clé USB.

4.3. Applications personnalisées au démarrage

L'ancienne installation d'OpenWRT nécessitant l'ajout d'X-WRT, celle-ci amenait un script de démarrage personnalisable qui n'est pas présent dans OpenWRT Backfire. vous pouvez donc recréer ce fichier de démarrage personnalisé de la façon suivante:

touch /etc/init.d/custom-user-startup

vérifiez quel contenu vous désirez porter à partir de l'ancien fichier dans votre ancien routeur /etc/init.d/S95custom-user-startup, une fois le contenu inscrit dans /etc/init.d/custom-user-startup du nouveau routeur créez un lien vers ce fichier à partir de /etc/rc.d/:

ln -s ../init.d/custom-user-startup /etc/rc.d/S94custom-user-startup

Dans le même ordre d'idée vous pouvez porter votre ancien contenu du crontab dans le nouveau routeur à l'aide de

crontab -l

sur l'ancien routeur suivi de

crontab -e

sur le nouveau.

4.4. Date et Heure

Normalement, l'interface web luci vous permet de configurer les fuseaux horaires comme il faut, mais il n'y a plus les fichiers zoneinfo dans les paquets pour installation.

<!> Il faut donc que vous récupériez le fichier de zoneinfo correspondant à votre fuseau horaire sur une autre plateforme Linux (peut importe l'architecture) ou sur internet, et que vous l'envoyez sur le routeur par SCP ou en utilisant la clé USB.

Une fois que vous avez créé votre fichier de zone /usr/share/zoneinfo/America/New_York (Ou un autre selon le pays/ville pour lequel vous voulez installer le fuseau horaire par défaut) pour aider Asterisk à identifier la zone du fuseau horaire, créez un lien de /etc/localtime vers ce fichier.

ln -s /usr/share/zoneinfo/America/New_York /etc/localtime

Normalement OpenWRT crée un lien nommé /etc/TZ vers un fichier de zone, mais dans un format différent, et malheureusement Asterisk (et peut-être d'autres utilitaires) a du mal à utiliser ce format.

Vous pourrez par la suite redémarrer le routeur pour vérifier que la zone du fuseau horaire est bien la bonne à l'aide de la commande

date

qui devrait vous indiquer la bonne heure.

Si OpenWRT a encore du mal à obtenir la bonne heure vous pouvez vérifier que le fichier de configuration /etc/config/system contient bien les lignes suivantes

        option 'zonename' 'America/New York'
        option 'timezone' 'EST5EDT,M3.2.0,M11.1.0'

dans la section

config 'system'

Vous pouvez (devriez) aussi ajuster ces paramètres par luci.

luci contient aussi une gestion de serveurs ntp automatique, vous pouvez aussi ajouter votre propre commande ntp au fichier de démarrage personnalisé créé ci-haut /etc/init.d/custom-user-startup :

/usr/sbin/ntpclient -l -h 0.north-america.pool.ntp.org -c 1 -s &

Assurez-vous que ntpclient est bien installé:

opkg install ntpclient

4.5. Firewall

La configuration du firewall sous OpenWRT 8.09+ est incroyablement améliorée, mais par conséquent il est impossible de réutiliser les mêmes fichiers de configurations tel quels. Vous devrez donc migrer vos ports forwards en passant par luci dans la section Essentials puis dans Network->Port Forwarding. Ceci aura pour effet d'ajouter des règles de type redirect dans le fichier /etc/config/firewall.

Pour ce qui est des ouvertures de ports sur le routeur directement (de type rule), il faut encore passer par l'édition du fichier /etc/config/firewall, luci ne permettait pas de le faire avec succès lors de l'écriture de cet article. Éditer le fichier /etc/config/firewall reste très simple, par exemple pour accepter des connexions SSH par internet sur le routeur (pas recommandé) vous devez ajouter ce qui suit au fichier:

config 'rule'
        option 'src' 'wan'
        option 'proto' 'tcp'
        option 'dest_port' '22'
        option 'target' 'ACCEPT'

puis recharger le firewall à l'aide de la commande

/etc/init.d/firewall restart

<!> Attention, ne pas enlever la règle qui autorise les connexions sur le port 68 en UDP, elle est utile pour corriger un bug toujours présent dans udhcpc: https://dev.openwrt.org/ticket/4108

4.6. Variables d'environnement

Étant donné que ce tutoriel vous indique comment installer Asterisk et d'autres programmes sur la clé USB, il est important que le système soit en mesure d'y retrouver toutes les librairies nécessaires. Il faut donc ajouter les chemins de librairies et d'exécutables de la clé USB aux variables d'environnement permettant de les retrouver.

Éditez donc le fichier /etc/init.d/custom-user-startup et ajoutez-y les lignes suivantes au début :

export PATH='/bin:/sbin:/usr/bin:/usr/sbin:/mnt/usb/bin:/mnt/usb/sbin:/mnt/usb/usr/bin:/mnt/usb/usr/sbin'
export LD_LIBRARY_PATH='/lib:/usr/lib:/mnt/usb/lib:/mnt/usb/usr/lib'

<!> Pour que votre environnement SSH y ait aussi accès quand vous vous connectez au routeur, ajoutez ces deux-mêmes lignes dans le fichier /root/.profile (créez le au besoin).

4.7. LEDs

Dans OpenWRT, vous pouvez contrôler les LED du routeur pour qu'elles clignotent selon du traffic sur les interfaces de votre choix, tout ceci est configurable par luci et la configuration se retrouve dans le fichier /etc/config/system.

À titre d'information, voilà ce que j'ai pour les miennes pour le moment mais certains modules d' iptables pourraient vous permettre d'identifier du traffic sur un port spécifique, etc.

config 'led'
        option 'default' '1'
        option 'name' 'wifi_traffic'
        option 'sysfs' 'wzr-hp-g300nh:green:wireless'
        option 'dev' 'wlan0'
        option 'trigger' 'netdev'
        option 'mode' 'link tx rx'

config 'led'
        option 'default' '1'
        option 'name' 'lan_traffic'
        option 'sysfs' 'wzr-hp-g300nh:green:router'
        option 'dev' 'eth0'
        option 'trigger' 'netdev'
        option 'mode' 'link tx rx'

config 'led'
        option 'default' '1'
        option 'name' 'nand_disk'
        option 'sysfs' 'wzr-hp-g300nh:red:diag'
        option 'trigger' 'heartbeat'

config 'led'
        option 'name' 'wan_sec'
        option 'sysfs' 'wzr-hp-g300nh:orange:security'
        option 'trigger' 'netdev'
        option 'mode' 'link tx rx'
        option 'default' '1'
        option 'dev' 'mon.wlan0'

4.8. Fichier hosts pour Asterisk 1.8

Pour qu'Asterisk 1.8 soit fonctionnel sous OpenWRT 10.03.1-rc3, j'ai du ajuster le fichier /etc/hosts pour qu'il pointe au nom de la machine locale en plus de localhost pour l'addresse 127.0.0.1, modifiez la première ligne comme suit (remplacez <NOM_MACHINE> par le nom de votre machine roulant OpenWRT).

127.0.0.1 localhost <NOM_MACHINE> localhost.

<!> Attention au point "." à la fin après localhost, il est très important et rendra udhcpc disfonctionnel si retiré.

Vous pouvez trouver votre nom de machine dans la variable uci suivante system.@system[0].hostname en utilisant la commande

uci show | grep -i hostname

Ou dans luci dans la section System.

5. Installation d'Asterisk

Un build récent d'Asterisk 1.8 sous OpenWRT disponible ici http://arctangent.net/~superm1/openwrt/ar71xx permet de l'utiliser avec succès, mais il faut d'abord ajouter le référentiel de paquets au fichier /etc/opkg.conf avec la ligne suivante:

src/gz packages-asterisk18 http://arctangent.net/~superm1/openwrt/ar71xx

suivi de

opkg update

Asterisk 1.8 sera certainement ajouté aux sources standard d'OpenWRt sous peu, d'abord dans les build de nuits, il suffira donc d'ajouter http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages de la même manière à /etc/opkg.conf.

Une fois cet ajout effectué, vous pourrez procéder à l'installation d'Aterisk et des modules que vous désirez. Vérifiez la liste des modules disponibles avec la commande

opkg list | grep -i asterisk18

Étant donné que la destination d'installation est la clé USB, je me suis permis d'installer tous les modules disponibles pour ne pas avoir à me soucier de retrouver ce qu'il me manque si je veux utiliser une nouvelle fonction dans le futur. La limite de 512 caractères par commande d' ash nous oblige à le faire en 3 commandes :

opkg install -d usb asterisk18 asterisk18-app-alarmreceiver asterisk18-app-authenticate asterisk18-app-chanisavail asterisk18-app-chanspy asterisk18-app-directed-pickup asterisk18-app-exec asterisk18-app-minivm asterisk18-app-read asterisk18-app-readexten asterisk18-app-sayunixtime asterisk18-app-setcallerid asterisk18-app-sms asterisk18-app-stack asterisk18-app-system asterisk18-app-talkdetect asterisk18-app-verbose asterisk18-app-waituntil asterisk18-app-while asterisk18-cdr asterisk18-chan-agent 
opkg install -d usb asterisk18-chan-gtalk asterisk18-chan-iax2 asterisk18-chan-local asterisk18-codec-a-mu asterisk18-codec-g726 asterisk18-codec-ulaw asterisk18-curl asterisk18-format-g726 asterisk18-format-g729 asterisk18-format-sln asterisk18-format-sln16 asterisk18-func-blacklist asterisk18-func-channel asterisk18-func-db asterisk18-func-devstate asterisk18-func-extstate asterisk18-func-global asterisk18-func-shell asterisk18-func-vmcount asterisk18-pbx-ael asterisk18-pbx-spool 
opkg install -d usb asterisk18-res-ael-share asterisk18-res-agi asterisk18-res-musiconhold asterisk18-sounds asterisk18-voicemail asterisk18-res-rtp-asterisk

NB le -d usb afin de préciser que la destination ajoutée précédemment à /etc/opkg.conf qui pointe vers /mnt/usb doit être utilisée.

6. Configuration d'Asterisk

Ceci vous installera tous les packages et les fichiers de configuration par défaut répartis dans les répertoires suivants

/mnt/usb/etc/asterisk
/mnt/usb/usr/lib/asterisk
/mnt/usb/var/log/asterisk
/mnt/usb/var/lib/asterisk/
/mnt/usb/var/spool/asterisk

Il faut donc ajuster certains paramètres afin que le fonctionnement à partir de la clé USB reste isolé sur la clé USB et qu'Asterisk trouve toutes les configurations dont il a besoin sur celle-ci.

D'abord, ajoutez le script de démarrage d'Asterisk au script de démarrage personnalisé ajouté ci-haut /etc/init.d/custom-user-startup à la suite des commandes EXPORT.....

/mnt/usb/etc/init.d/asterisk start&

Ensuite éditez le fichier /mnt/usb/etc/init.d/asterisk pour vous assurer qu'Asterisk travaille presque au complet sur la clé USB:

modifiez la ligne

DEST=/mnt/usb/

Si vous observez les lignes de démarrage qui suivent vous comprendrez que tous les chemins nécessaires à Asterisk sont ajustés en fonction de $DEST (sauf la DB qui reste dans /var/spool/astdb mais qui a un lien créé vers $DEST/usr/lib/asterisk/astdb).

L'autre ligne que vous devriez modifier est

OPTIONS="-C /mnt/usb/etc/asterisk/asterisk.conf"

pour être bien certain que le bon fichier de configuration est chargé.

Afin de démarrer asterisk il faut donc exécuter le script /mnt/usb/etc/init.d/asterisk start, ce qui sera fait automatiquement par /etc/init.d/custom-user-startup.

Vous pouvez aussi temporairement modifier la ligne de démarrage d'asterisk dans le script /mnt/usb/etc/init.d/asterisk temporairement pour qu'il parte en foreground et que vous n'ayez pas à vous rattacher à lui après, vous verrez ainsi toutes les erreurs potentielles de démarrage (modules manquants, désuets, fichiers de configuration manquants etc). Changez donc ceci:

$DEST/usr/sbin/asterisk $OPTIONS

pour ceci

$DEST/usr/sbin/asterisk -cvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv $OPTIONS      

Tel qu'indiqué dans mon ancien guide, si vous partez Asterisk en background (avec le script sans modifier la ligne de commande de démarrage), utilisez

asterisk -rvvvvvvvvvvvvvv

pour vous y rattacher et voir le log courant (Augmentez le nombre de "v" pour augmenter la quantité d'information visible).

6.1. Modules

Contrairement à Asterisk 1.4, la version 1.8 charge automatiquement les modules nécessaires et donc le fichier de configuration modules.conf peut rester intact tel qu'installé par opkg. Vérifiez simplement que vous avez bien

autoload=yes

dans la section [modules].

À titre d'information, voici une liste exhaustive de modules que vous pouvez retrouver dans le répertoire /mnt/usb/usr/lib/asterisk/modules:

app_alarmreceiver.so    app_exec.so             app_setcallerid.so      app_while.so            chan_sip.so             format_pcm.so           func_channel.so         func_strings.so         res_agi.so
app_authenticate.so     app_forkcdr.so          app_sms.so              cdr_csv.so              codec_a_mu.so           format_sln.so           func_curl.so            func_timeout.so         res_curl.so
app_cdr.so              app_macro.so            app_stack.so            cdr_custom.so           codec_g726.so           format_sln16.so         func_db.so              func_vmcount.so         res_musiconhold.so
app_chanisavail.so      app_minivm.so           app_system.so           cdr_manager.so          codec_gsm.so            format_wav.so           func_devstate.so        pbx_ael.so              res_rtp_asterisk.so
app_chanspy.so          app_playback.so         app_talkdetect.so       cdr_syslog.so           codec_ulaw.so           format_wav_gsm.so       func_extstate.so        pbx_config.so           res_rtp_multicast.so
app_dial.so             app_read.so             app_verbose.so          chan_agent.so           format_g726.so          func_blacklist.so       func_global.so          pbx_spool.so
app_directed_pickup.so  app_readexten.so        app_voicemail.so        chan_iax2.so            format_g729.so          func_callerid.so        func_logic.so           res_adsi.so
app_echo.so             app_sayunixtime.so      app_waituntil.so        chan_local.so           format_gsm.so           func_cdr.so             func_shell.so           res_ael_share.so

6.2. Configuration IAX

La configuration IAX ne change pas par rapport à Asterisk 1.4 pour le peu d'options qu'on y retrouve, et peut rester telle qu'indiqué dans mon guide antécédent.

[general]
disallow=lpc10
allow=all
allow=ulaw
register => <NUMTELEPHONE>:<MOTDEPASSE_IAX>@<SERVEUR_IAX>
[<NUMTELEPHONE>]
type=user
context=<CONTEXTE_ENTRANT>
language=fr ; ajustez en fonction de vos besoins, voir aussi sip.conf

Vous pouvez aussi ajouter des nouvelles options du genre dans la section [general]:

jitterbuffer=no
forcejitterbuffer=no
encryption=yes
forceencryption=no

mais je doute qu'elles fonctionnent vraiment avec un fournisseur IAX actuel...

<!> Attention à ne pas utiliser deny= au lieu de disallow= ' vous pourrez obtenir des comportements étranges.

6.3. Configuration dialplan

À part les 2-3 appels à Set(LANGUAGE()=fr) qui doivent être remplacés par Set(CHANNEL(language)=fr) et la gestion de la liste noire qui est légèrement différente, les paramètres des fonctions qui ne peuvent plus être séparés par des pipes("|") mais qui doivent être séparés par des virgules (",") rien de majeur ne devrait changer dans le dialplan que vous aviez configuré avec l'ancien guide.

Vérifiez le log d'Asterisk quand vous le partez (partez-le avec l'option -c qu'il reste en premier plan, et -vvvvvvvvvvvvvvvvvvvvvv pour avoir des détails d'exécution: modifiez le fichier /mnt/usb/etc/init.d/asterisk pour ajouter l'option) pour savoir s'il vous utilisez des options/fonctions désuettes et tentez de trouver un remplacement en utilisant google.

6.4. Configuration clients SIP

Le fichier sip.conf ne change pas beaucoup par rapport à ce qui est mentionné dans l'ancien guide, voici un exemple fonctionnel avec Asterisk 1.8.

[general]
context=default
bindaddr=0.0.0.0                ; Pourrait être changé pour cibler une interface en particulier
maxexpirey=3600
defaultexpirey=3600
engine=asterisk                 ; Pas obligatoire mais avec Asterisk 1.8 les engines RTP sont isolés dans leur modules, pourrait vous rendre service
notifymimetype=text/plain
autoframing=yes
rtptimeout=60
rtpholdtimeout=300
disallow=all
allow=ulaw
allow=alaw
allowguest=yes
country=fr
language=fr                      ; Vous aide à choisir les messages dans un langage par défaut

[SPA2102]
type=friend
username=SPA2102
md5secret=******                 ; Voir l'ancien guide pour savoir comment configurer ceci
host=dynamic
disallow=all
allow=alaw
allow=ulaw
dtmfmode=rfc2833                 ; Choisissez en fonction de ce que votre ATA/Softphone supporte, rfc2833 (AVT) par défaut ou info (rfc2976)ou Inband pour des fax/alarmes etc.
mailbox=<>@default               ; Dépend du dialplan et de voicemail.conf
context=<CONTEXTE_SORTANT>
language=fr                      ; Permet de choisir les messages dans un langage par défaut

Dans Asterisk 1.6+ la fonction LANGUAGE n'existe plus, donc le code {X}

Set(LANGUAGE()=fr)

est invalide. Il faut donc soit utiliser la fuction CHANNEL, si vous possédez le module func_chan (./)

Set(CHANNEL(language)=fr)

ou vous pouvez simplement inscrire language=fr dans chacun des channels SIP configurés dans sip.conf.

6.5. Boîte vocale

Portez simplement votre fichier voicemail.conf créé avec l'ancien guide (ou intégrez vos changements au nouveau fichier voicemail.conf) et tout devrait fonctionner normalement.

Ce qui n'était pas mentionné dans le guide initial est la configuration nécessaire afin de vous faire suivre vos messages par courriel sous la forme d'un fichier .wav attaché.

Pour faire ceci, sous OpenWRT, il vous faut tout d'abord installer un client SMTP capable d'envoyer les courriels. J'ai choisi mini_sendmail mais vous pourriez en utiliser un autre et adapter la configuration en conséquence...

Installez donc mini_sendmail :

opkg update
opkg install mini_sendmail

Puis modifiez la configuration voicemail.conf pour qu'elle possède les paramètres suivants dans la section

[general]

Assurez-vous d'avoir wav ou wav49 comme format d'enregistrement de message, attention cependant si vous comptez vérifier vos messages par téléphone intelligent certains ne supportent pas le wav49. Le format wav est bien mieux supporté mais fait des plus gros fichiers (vous devriez vous en tirer en dessous de 10MB pour un très très long message).

Vous pouvez évidemment ajuster le format du message emailsubject et emailbody par défaut, en utilisant les variables qui vous sont rendues disponibles par l'application. Le message ci-bas est celui par défaut d'Asterisk.

format=wav|wav49
serveremail=<email_source>        ; Ce paramètre sera écrasé par les paramètres envoyés à mini_sendmail, il est donc semi-utile
attach=yes                        ; Attach the voicemail to the notification email *NOT* the pager email
emailsubject=[PBX]: New message ${VM_MSGNUM} in mailbox ${VM_MAILBOX}
emailbody=Dear ${VM_NAME}:\n\n\tjust wanted to let you know you were just left a ${VM_DUR} long message (number ${VM_MSGNUM})\nin mailbox ${VM_MAILBOX} from ${VM_CALLERID}, on ${VM_DATE}, so you might\nwant to check it when you get a chance.  Thanks!\n\n\t\t\t\t--Asterisk\n
emaildateformat=%A, %d %B %Y at %H:%M:%S
attachfmt=wav                     ; Quel format attacher, voir mon commentaire ci-haut

Puis dans le même fichier, configurez la commande d'envoi de courriel pour le client à utiliser, vous pouvez par exemple utiliser le serveur SMTP de votre fournisseur d'accès. Si celui-ci supporte/force l'authentification, il vous faudra trouver comment paramétriser celle-ci avec mini_sendmail ou un autre client SMTP.

<!> Attention à ne pas mettre d'espaces entre -f/-s et la valeur de l'option

mailcmd=/usr/sbin/mini_sendmail -t -f<COURRIEL_SOURCE> -s<SERVEUR_SMTP>

Puis au niveau de la configuration de votre boîte vocale en tant que telle, toujours dans voicemail.conf dans la section

[default]

Modifiez la ligne correspondant à votre boîte vocale pour que <COURRIEL_DESTINATION> soit votre addresse de courriel à laquelle vous voulez recevoir vos messages:

<IDENTIFIANT_BV> =>  <MOTDEPASSE_BV>,<NOM_BV>,<COURRIEL_DESTINATION>,,attach=yes|tz=eastern

Ceci aura pour effet d'envoyer des courriels par défaut pour toutes les boîtes vocales configurées, vous pouvez toujours écraser/changer ces paramètres sur la ligne de configuration de chacune des boîtes vocales i.e.

<IDENTIFIANT_BV> =>  <MOTDEPASSE_BV>,<NOM_BV>,<COURRIEL_DESTINATION>,,attach=no|mailcmd=<COMMANDE_INVALIDE>|serveremail=<COURRIEL_INVALIDE>|tz=eastern

6.6. Appels en attente

Idem ancien guide.

6.7. Vive le français libre

Idem ancien guide.

6.8. Liste noire

La fonction LookupBlackList a été dépréciée en faveur d'une fonction BLACKLIST plus standard. Si vous ne voulez pas gérer vous-même la base de données de liste noire et laisser ces fonctions le faire pour vous, il faut donc changer le code de l'ancien guide de ceci : {X}

exten => s,1,LookupBlacklist(j)
exten => s,102,Goto(blacklisted,s,1)

à ceci (./)

exten => s,n,GotoIf(${BLACKLIST()}?blacklisted,s,1)

6.9. Suivi d'appel

Idem ancien guide.

6.10. CDR-CSV

Si vous utilisiez la fonction cdr_csv, n'oubliez pas de recréer le fichier /mnt/usb/var/log/asterisk/cdr-csv/Master.csv, vérifiez que le contenu des CDR s'y retrouve bien.

7. Quality of Service (QoS)

Dans les anciennes distributions d'OpenWRT, le seul script de QoS fonctionnel était le rudy's script. J'ai essayé tant bien que mal de le migrer à OpenWRT et presque tous les modules kernel étaient présents (sauf le ipp2p) mais le résultat était très mauvais (tout était vraiment lent). Ceci est probablement dû à certains modules qui ne fonctionnent plus exactement de la même façon ou qui ont encore certains bugs...

Bref, la bonne nouvelle c'est que les scripts par défaut d'OpenWRT sont maintenant très fonctionnels, et permettent en plus la configuration par l'interface web luci.

Il vous faut donc installer les deux paquets nécessaires pour effectuer cette configuration, soit :

opkg install qos-scripts luci-app-qos

Ceci vous installera les scripts /usr/bin/qos-start,/usr/bin/qos-stop,/usr/bin/qos-stat, /etc/init.d/qos et la configuration dans /etc/config/qos, mais le tout est configurable par luci dans la section Administration puis dans Network->QoS.

Vous pouvez donc mettre les paquets IAX (TCP/UDP port 4569-4674) ou SIP (TCP/UDP port 5060-5065) en Express, ou tout ce qui vient de votre SPA, et mettre en "Normal" ou "Bulk" tout ce qui passe sur "21,25,80,443" etc. Bref tous les autres ports que vous utilisez ou pour lesquels vous avez ouvert un port dans la configuration du firewall ci-haut.

Ceci aura pour effet de modifier le fichier de configuration avec vos préférences et au final aura un impact sur la table d' iptables nommée Mangle, vous pouvez donc vérifier que vos paquets sont correctement marqués pour la nouvelle interface virtuelle créée imq0 à l'aide de la commande suivante :

iptables -nv -l -T mangle

Vous pouvez aussi facilement utiliser du marquage de paquet L7 qui tente de découvrir le type de protocole automatiquement et le marque en fonction de vos règlez choisies dans luci (c'est ce que l'option service vous montre dans luci), par défaut il y a quelques types de patterns L7 installés dans /etc/l7-protocols.

Vous pouvez rajouter des patterns L7 en les téléchargeant sur ce site http://l7-filter.sourceforge.net/ qui vous indique aussi si le filtre marche bien et s'il est intensif sur le CPU.

8. Statistiques collectd/rrdtool

Ne fonctionne pas dans 10.03.1-rc3, enfin collectd roule comme il faut, rrdtool fonctionne aussi correctement en command-line, mais luci ne l'appelle pas correctement et il ne génère pas les images comme il faut.

Voir pourquoi ou essayer 10.03.1 officiel lors de sa sortie.

9. Script watchdog pour Asterisk

Voici un script watchdog pour Asterisk: il supervise la présence de pid d'asterisk et tente de le partir le cas échéant.

Si il doit repartir Asterisk, il l'inscrira dans le log dans /mnt/usb/var/log/asterisk/watchdog.log :

   1 #!/bin/sh
   2 
   3 export DEST=/mnt/usb/
   4 
   5 if [ -z "$(pidof asterisk)" ]; then
   6 
   7         echo "Asterisk not running at $(date)" >> $DEST/var/log/asterisk/watchdog.log
   8 
   9         $DEST/etc/init.d/asterisk start
  10 
  11 fi
  12 
  13 exit 0

Vous pouvez créer ce script dans /mnt/usb/usr/bin/ et ajouter ce script à votre crontab pour qu'il s'exécute chaque 2 minutes par exemple en faisant :

crontab -e

puis en ajoutant la ligne suivante au crontab :

*/2 * * * * /mnt/usb/usr/bin/watchdog.sh &

10. Problèmes ?

Vous avez des problèmes de son lors de l'enregistrement de vos messages (audio découpé) ? Des problèmes de plantage aléatoire d'asterisk (segfault) ?

Il y a de fortes chances que ceux-ci soient dus au fait que votre clef USB ait atteint sa durée de vie effective (3-4 ans max selon mon expérience)...

Malheureusement il vous faut la changer, et fort probablement réinstaller tout ce qui était dessus au risque d'avoir des fichiers corrompus (vous pouvez probablement migrer toute votre configuration directement en prenant soin de vérifier que son contenu est encore intègre).

Have you got problems while recording your messages (choppy audio) ? Random Asterisk crashes (segfaults) ?

This probably means that your USB key has reached its effective lifespan (3-4 years in my own experience)...

Unfortunately, not only must you change it, you should also reinstall everything that was on it because of the high risk of corruption that could've happened while the system was trying to write on it (you can still migrate all your configuration directly, making sure the files still are intact).

11. Et après ?

Si vous voyez des erreurs/omissions, n'hésitez pas à modifier le wiki, c'est un wiki et donc l'objectif est d'obtenir une documentation collaborative correcte.

Asterisk18SurOpenWRT (last edited 2012-02-24 17:45:58 by MathieuLutfy)