Posts tagged provisioning

[XiVO] SCCP et provisioning sur téléphones non supportés et DHCP désactivé (MàJ des greffons)

3

Va falloir penser à contacter WordPress pour mettre des titres de 1000 caractères tant je traite de cas particuliers…

Bonjour tout le monde !

Encore un cas ultra particulier avec XiVO. Comme d’habitude, je vous explique.

Préambule

Cisco 7941Nous avons l’immense joie d’utiliser au quotidien XiVO, une solution de téléphonie IP open source de qualité, performante et complète. Ses développeurs sont très sympa et répondent à toutes nos questions. Heureusement, car nous avons l’indélicatesse et le mauvais goût d’infliger à notre valeureux serveur la gestion de téléphones Cisco IP Phones 7900 Series, dont le fonctionnement est presque aussi obscur à comprendre que la physique quantique, l’intérêt en moins.

Cependant nous aimons beaucoup XiVO, et nous aimons beaucoup nos téléphones et je me sentirai comme une âme en peine si je devais me passer d’un de ces bidules (dont nous avons possédé plus d’un quarantaine).

Dans la suite de cet article, lorsque je parle de téléphone Cisco IP Phone 794x (prévus pour gérer jusqu’à deux lignes), comprenez que c’est valable également pour les modèles 796x (qui eux sont prévus pour gérer jusqu’à six lignes). Il est important de bien comprendre également la différence entre l’enregistrement (le fait qu’un téléphone sache se connecter au serveur pour passer des appels) et l’approvisionnement (ou provisioning, soit le fait qu’un téléphone reçoive ses paramètres depuis le serveur). De plus, il serait de bon ton pour parvenir à effectuer les manipulations que vous sachiez utiliser un peu la ligne de commande Linux, même si je vais tenter d’être le plus didactique possible. De plus les manipulation ont été effectuées avec la version 15.02 et 15.03 de XiVO. Elles devraient fonctionner avec des versions plus anciennes ou plus récentes.

Entrons donc dans le vif du sujet.

1. L’existant

  • Nous avons des téléphones Cisco IP Phone 7940 et 7960, ainsi que des 7941 tous supportés mais nous commençons la mise à jour du parc avec des 7945, plus modernes, et également des 7970. Ces modèles ne sont pas supportés par XiVO. Les Cisco ne peuvent être provisionnés qu’en SCCP donc nous les utiliserons tous sur ce protocole, sur nos différents sites à travers nos VPN.

Explication: Pour qu’un modèle puisse s’enregistrer, il faut recompiler le module xivo-libsccp en précisant les modèles à supporter en éditant trois fichiers. C’est rapide à faire et c’est très simple en se connectant au serveur en SSH. Si on ne le fait pas, les modèles non supportés ne pourront qu’afficher « Enregistrement » indéfiniment et seront rejetés par le serveur, les laissant inopérants.

  • Nous avons fait le choix de complètement nous passer d’un VLAN dédié à la téléphonie ainsi que du serveur DHCP intégré de XiVO. Nous préférons en effet gérer l’attribution des adresses de manière globale sur le routeur de chaque site. Dans la mesure où nous utilisons des VPN nous ne souhaitons pas compliquer davantage la configuration de chaque routeur afin de limiter les erreurs et simplifier les diagnostics.

Explication: Cela n’empêche pas le fonctionnement du provisioning mais il y a un problème. XiVO, dans cette configuration, se trouve incapable de déterminer automatiquement le modèle de téléphone, impliquant de devoir sélectionner manuellement le greffon pour chaque téléphone (c’est une archive contenant ce qu’il faut pour générer un fichier de configuration pour chaque terminaison, c’est également là que l’on place les fichiers de firmware Cisco, plus d’informations ici).

Un autre problème, c’est que dans un greffon se trouve la gestion de plusieurs téléphones. Sauf que si XiVO ne sait pas précisément quel modèle on veut provisionner, alors il créera seulement un fichier générique qui ne contient pas les spécificités de chaque modèle. Ça fonctionnera quand même pratiquement à tous les coups mais ce n’est pas idéal.

  • Comme le 7945 et le 7970 ne sont pas du tout supportés, si on modifie le module xivo-libsccp, ils seront capables de s’enregistrer, mais encore faut il un greffon pour les provisionner!

Explication: Au départ, j’avais modifié le greffon qui gère entre autres les Cisco 7941 et 7942 pour lui faire accepter les 7945 et 7970, ces dernier étant simplement des nouvelles versions du 7941. Et cela fonctionnait correctement. Rapidement j’ai découvert que les fichiers de configuration permettaient bien de faire fonctionner indifféremment un 7941 ou un 7945, mais les options spécifiques à chaque modèle n’étaient pas renseignées dans les fichiers générés. Une option dans XiVO permettant d’effectuer ce choix était vraisemblablement présente mais elle a été retirée, selon les dires d’un développeur.

J’ai alors décidé de rétablir ce choix manuel grâce à une petite astuce. Puisque l’on peut toujours choisir manuellement un greffon, j’ai créé des greffons dédiés modèle par modèle à partir des greffons officiels fournis par XiVO. Ainsi, lorsque l’on se trouve dans la même configuration, il suffit d’ajouter un de nos greffons modifiés et l’attribuer à une terminaison, un téléphone.

J’ai souhaité rendre cela facile d’accès pour tout le monde, il suffit de savoir manipuler un peu la ligne de commande sous Linux et comprendre un peu le fonctionnement des greffons et de XiVO. Attention tout de même, les greffons Cisco sont fournis sans les fichiers firmware à l’intérieur, il faut donc se les procurer séparément, comme pour les greffons officiels.

2. Modification et recompilation du module xivo-libsccp pour supporter le Cisco 7945 et le 7970

C’est presque l’étape la moins risquée, mais tout de même assez sensible. De mauvaises manipulations pourraient entraîner un fonctionnement erratique. J’ai choisi d’ajouter deux modèles pour vous montrer la marche à suivre mais il est tout à fait possible d’en ajouter d’autres.

On va donc commencer par accéder au serveur, dans mon cas en SSH.

ssh -l root IP.DE.VOTRE.XIVO

Puis, une fois le mot de passe saisi et validé, on entre la commande suivante:

apt-get update && apt-get install build-essential asterisk-dev git-core

Acceptez ce qui est proposé. Puis nous allons entrer successivement :

git clone https://github.com/xivo-pbx/xivo-libsccp.git
cd xivo-libsccp/xivo-libsccp/

C’est là que le plus risqué doit être fait. La documentation officielle indique qu’il faut compiler. Dans notre cas, nous allons préalablement éditer trois fichiers à l’aide de nano: sccp_device.csccp_msg.c ainsi que sccp_msg.h.

On va s’en occuper dans l’ordre:

nano sccp_device.c

On va d’abord rechercher l’emplacement où se trouvent les modèles supportés. On utilise la commande Control-W pour cela, puis on tape le texte à chercher et on valide en appuyant sur la touche Entrée. Ici on va rechercher par exemple case SCCP_DEVICE_7942, car on sait qu’il est déjà dedans. Note : Il est possible que l’on trouve déjà dans le fichier les informations pour le 7970.

Cela renvoie vers une liste qui ressemble à ceci (en gras, ce que l’on ajoute):

 case SCCP_DEVICE_7941:
 case SCCP_DEVICE_7941GE:
 case SCCP_DEVICE_7942:
 case SCCP_DEVICE_7945:
 case SCCP_DEVICE_7960:
 case SCCP_DEVICE_7961:
 case SCCP_DEVICE_7962:
 case SCCP_DEVICE_7970:

On va maintenant enregistrer les modifications en utilisant la commande Control-X, et on valide lorsqu’il nous est demandé si on veut enregistrer les changements.

On vient de s’occuper du premier fichier, il en reste deux autres. Ce ne sera pas plus compliqué. Je vais abréger un peu, il suffit de reproduire ces étapes pour chaque fichier.

Dans le cas de sccp_msg.c on va donc rechercher quelque chose qui n’est pas en gras et ajouter ce qui l’est:

 case SCCP_DEVICE_7942:
          return "7942";
 case SCCP_DEVICE_7945:
          return "7945";
 case SCCP_DEVICE_7960:
          return "7960";
 case SCCP_DEVICE_7961:
          return "7961";
 case SCCP_DEVICE_7970:
          return "7970";

Et enfin, même opération pour le fichier sccp_msg.h:

SCCP_DEVICE_7962 = 404,
 SCCP_DEVICE_7937 = 431,
 SCCP_DEVICE_7942 = 434,
 SCCP_DEVICE_7945 = 435, SCCP_DEVICE_7905 = 20000, SCCP_DEVICE_7920 = 30002, SCCP_DEVICE_7970 = 30006,

Je ne sais pas à quoi correspond précisément la valeur à droite du numéro de modèle mais c’est nécessaire. Pour ajouter le support d’un modèle supplémentaire, il suffit de reprendre ces étapes, et pour la valeur en question, vous pouvez vous aider de ceci. Attention, un modèle non supporté pourra ainsi s’enregistrer, mais il faudra encore avoir un greffon d’approvisionnement qui le gère.

À partir de là, une fois que tous les fichiers sont modifiés et enregistrés (il est préférable de se relire), on va pouvoir compiler conformément à ce qui est expliqué dans la documentation. Pour cela, on entre l’une après l’autre les commandes suivantes:

make
make install

Quand tout est terminé, on redémarre le serveur avec la commande reboot. On entre ensuite le nom d’hôte du serveur si on est connecté en SSH.

3. Installation des greffons modifiés

On se connecte à l’interface d’administration web de XiVO, puis on choisit l’onglet Configuration, et enfin, dans la colonne de gauche, sous Approvisionnement, on clique sur Configuration.

Dans le champ URL, entrez l’adresse du dépôt de greffons que nous avons spécialement créé:

http://files.labcellar.com/xivo-provd

 

On sauvegarde la configuration, puis on se rend dans Greffons (dans la colonne de gauche), et on clique sur l’icône en haut à droite qui permet de charger les greffons. Au bout d’un instant, on peut voir apparaitre un liste de greffons nommés sous la forme xivo-cisco-sccpXX-9.0.3.

Au moment où j’écris ces lignes, j’ai préparé sept greffons (d’autres sont à venir si besoin):

  • xivo-cisco-sccp05-8.0.3 : Pour Cisco IP Phone 7905
  • xivo-cisco-sccp06-9.0.3 : Pour Cisco IP Phone 7906 et 7911
  • xivo-cisco-sccp12-8.0.4 : Pour Cisco IP Phone 7912
  • xivo-cisco-sccp20-3.0.2 : Pour Cisco IP Phone 7920
  • xivo-cisco-sccp21-1.4.5 : Pour Cisco IP Phone 7921
  • xivo-cisco-sccp31-9.0.3 : Pour Cisco IP Phone 7931
  • xivo-cisco-sccp40-8.1.2 : Pour Cisco IP Phone 7940 et 7960
  • xivo-cisco-sccp41-9.0.3 : Pour Cisco IP Phone 7941 et 7961
  • xivo-cisco-sccp42-9.0.3 : Pour Cisco IP Phone 7942 et 7962
  • xivo-cisco-sccp45-9.0.3 : Pour Cisco IP Phone 7945 et 7965
  • xivo-cisco-sccp70-9.0.3 : Pour Cisco IP Phone 7970 et 7971
  • xivo-cisco-sccp75-9.0.3 : Pour Cisco IP Phone 7975

Il n’est utile d’installer, via l’icône en regard de la ligne du tableau, que les greffons dont vous avez besoin. Quelques secondes après avoir cliqué sur l’icône, un autre tableau devrait apparaître, correspondant au contenu du greffon. Si on essaye d’installer un fichier cela ne fonctionne pas.

4. Installation des firmwares Cisco dans les greffons

En effet, nous allons devoir procéder manuellement. Je ne peux pas vous fournir les fichiers de firmware, mais ils sont téléchargeables depuis le site de Cisco. Il suffit de créer un compte pour accéder aux firmwares. Les fichiers de langues quant à eux nécessitent un contrat de racket service SMARTnet payant.

Mes greffons, ont été élaborés à partir des greffons officiels de XiVO, nécessitent les mêmes versions des firmwares et leur installation se fait de la même façon. En l’occurrence pour les modèles cités plus haut, il faut la version 9.0.3. Pour les fichiers networklocale et les fichiers de langage, il faudra les versions 9.0.2.

Une fois que vous avez obtenu les fichiers dont vous avez besoin, au minimum le firmware, alors mettez le en ligne quelque part, un hébergement en ligne quelconque, c’est le plus simple.

Pour la suite, je vais prendre comme exemple l’installation des fichiers pour le 7945. Il conviendra de remplacer les noms des fichiers par ce que vous avez si vous installez un autre greffon.

On se connecte en SSH au serveur:

ssh -l root IP.DE.VOTRE.XIVO

On entre le mot de passe et on valide. Puis:

cd /var/lib/xivo-provd/plugins/xivo-cisco-sccp45-9.0.3/var/cache

Puis on va télécharger ici les fichiers dont on a besoin depuis l’emplacement en ligne où on les a placé.

On a donc:

  • firmware (obligatoire) : cmterm-7945_7965-sccp.9-0-3.zip
  • langage (optionnel) : po-locale-fr_FR-9.0.2.1000-1.cop.sgn
  • network locale (optionnel) : po-locale-combined_network-9.0.2.1000-1.cop.sgn

On va donc entrer la commande wget suivie de l’URL du fichier:

wget http://mon-hebergement-web.com/fichiers/cmterm-7945_7965-sccp.9-0-3.zip

On répète ensuite l’opération pour les deux autres fichiers, si besoin.

Une fois que c’est fait, on reprend l’interface web de XiVO que l’on a laissé de côté. On retourne dans le greffon que l’on avait installé, dans notre cas celui du 7945, et on peut cliquer sur le bouton d’installation en regard de la ligne qui correspond au firmware, et on répète cette opération si besoin pour les autres fichiers.

5. Configuration du serveur DHCP du routeur

Une fois les fichiers installés, il faut s’assurer que votre serveur DHCP, sans doute votre routeur, indique aux téléphones que vous branchez où ils doivent aller chercher les infos. Je ne peux pas expliquer comment on fait avec tous les modèles de routeurs, il vous faut un modèle un peu plus évolué qu’une box. Avec pfSense, il faut se rendre dans l’interface de configuration. Une fois connecté, on se rend dans Services puis DHCP Server.

On clique ensuite sur le bouton Advanced en regard de Additional BOOTP/DHCP Options. Dans la case Number on entre 150. Dans la liste déroulante on sélectionne IP address or host et enfin on tape l’adresse IP de notre serveur dans la case Value.

On va à tout hasard cliquer sur TFTP, et entrer l’adresse IP de notre serveur.

Ensuite on clique sur Save.

6. Installation des téléphones

Maintenant on peut brancher notre téléphone. Je continue mon exemple avec le Cisco 7945. Il suffit de le relier à la prise Ethernet appelée généralement 10/100 SW. Si le switch n’est pas en mesure de fournir l’alimentation PoE, alors il faut également relier un bloc d’alimentation compatible. Le téléphone va démarrer. Note : Pour que le firmware puisse être provisionné, il faut que votre téléphone soit chargé avec la version 8.3.3 du firmware au minimum.

Pendant ce temps, on retourne dans l’interface de gestion de XiVO et dans la page des terminaisons, accessible dans la colonne de gauche de la page IPBX, on devrait pas tarder à voir apparaitre dans le tableau une nouvelle ligne, il faut parfois un peu de patience.

À gauche, l’adresse MAC indiquée correspond à celle du téléphone. À droite on peut voir quel greffon est utilisé. L’un des boutons à droite de cette ligne permet de modifier la terminaison et ainsi choisir quel greffon on lui applique. Il est important que le bon greffon soit sélectionné sans quoi le téléphone ou le système d’approvisionnement pourrait avoir un comportement erratique.

XiVO choix greffon

Si besoin, on peut remettre le téléphone en configuration d’usine en le déconnectant de son alimentation. Il suffit alors de le reconnecter et immédiatement appuyer sur la touche # et maintenir la touche enfoncée jusqu’à ce que les touches de lignes clignotent alternativement en orange. Lorsque c’est le cas, on peut relâcher la touche # et on dispose alors d’une minute pour entrer la séquence de touches 123456789*0#, et le téléphone redémarre et réclame au serveur son firmware.

Pendant ce temps, il est vital de ne pas déconnecter le téléphone sans quoi le firmware risque d’être corrompu et le téléphone inutilisable.

En attendant que le firmware se charge, dans l’interface, section IPBX, on va dans Utilisateurs, dans la colonne de gauche. On entre toutes les informations nécessaires comme indiqué dans la documentation officielle, puis dans l’onglet ligne, on clique sur l’icône +.

XiVO Utilisateur ligne SCCP

On choisit le protocole SCCP, on entre un numéro de ligne désiré. Dans le champ Terminaison on clique sur l’adresse MAC du téléphone à provisionner, et le pop-up devrait disparaître et le champ se remplir. Il ne reste maintenant plus qu’à sauvegarder.

Au bout de quelques instants, une fois le firmware chargé sur le téléphone et lors que ce dernier indique Enregistrement ou Registering, il devrait alors finir par afficher le num de l’utilisateur en haut à droite, et la première touche de ligne devrait afficher le numéro de ligne demandée.

 

Il ne reste qu’a répéter l’opération pour tous les téléphones concernés et vous aurez un serveur XiVO qui sait enregistrer et provisionner des téléphones Cisco SCCP non supportés.

Conclusion

Ce tutoriel nous est très utile car il permet de faire fonctionner nos téléphones préférés avec XiVO et il a été rédigé pour répondre à notre besoin. Certains greffons ont été réalisés à la demande d’autres utilisateurs de XiVO et toute remontée de bug ou d’information m’intéresse. Une fois toutes les manipulations effectuées il n’y a plus grand chose à faire à part en profiter. Ce tutoriel a été réalisé grâce à l’aide des développeurs de XiVO et à ce titre, je les remercie très chaleureusement.

[MISE A JOUR]

Depuis, XiVO a forké vers Wazo qui est développé par l’équipe originale, et aussi le système de répertoires a changé, ce qui implique que les greffons que l’on trouve ici ne fonctionnent plus depuis plusieurs éditions de XiVO. Si quelqu’un a le courage de les modifier nous pouvons aussi les héberger avec plaisir.

[XiVO] Problème d’affichage de l’heure sur Cisco 7941 en cas de redémarrage d’Asterisk

11

Quel plaisir d’avoir votre système de téléphonie qui marche bien, les téléphones qui se configurent sans intervention physique, des groupes, des messageries, etc.

Le problème c’est que certains détails me chagrinent parfois à en perdre le sommeil. Si vous êtes aussi névrosé que moi, je vais peut-être pouvoir vous aider.

Nous avons trois types de postes. Les Cisco IP Phone 7960, les postes des bureaux du siège, les 7940 qui sont réservés à l’infrastructure, au local technique des agences, et éventuellement pour des lignes secondaires d’utilisateurs, et enfin, les 7941, les postes utilisateurs on-site.

Nous provisionnons nos téléphones directement dans XiVO, je reviendrai la dessus dans un futur billet, et tous les paramètres sont injectés automatiquement sans intervention dans chaque téléphone. Il me suffit de dire que le téléphone X ait telle ligne, et quelques secondes plus tard, le téléphone en question se voit affublé de la ligne demandée. Quelques clics, et quel plaisir de ne plus avoir à se déplacer et configurer manuellement, et surtout sans avoir à mettre les mains dans le cambouis.

Dans les différentes pages de configuration de XiVO, on paramètre la langue et le fuseau horaire, et si on fait bien les choses, les téléphones affichent bien la date et l’heure pour la France, dans le format suivant:

Cisco-7941-24h

Cisco IP Phone 7941 avec affichage en 24h, juste après une synchronisation de la ligne

Lorsque vous provisionnez les téléphones, tout va bien, mais j’ai remarqué que de temps en temps, certains téléphones perdaient le format d’affichage de l’heure et la date. En effet, on demandait à afficher la date en français, et au bout de quelques heures (après un changement d’adresse IP WAN de l’agence ou un redémarrage d’Asterisk) l’heure se remettait à s’afficher sous la forme:

Cisco-7941-12h

Cisco IP Phone 7941 en mode 12h, après avoir redémarré Asterisk

Cela semble venir non pas de XiVO mais des téléphones eux-mêmes qui vont chercher leur configuration dans le traditionnel fichier XML généré automatiquement pour chaque téléphone et non pas la configuration que l’utilisateur a choisi dans l’interface Web de XiVO.

Pour corriger le problème, il faut déjà comprendre comment est fait le greffon Cisco, en voici l’arborescence:

Arborescence d'un greffon XiVO

Vous pouvez visualiser cela directement en console. Connectez vous en SSH à votre serveur XiVO. Puis rendez vous dans le dossier qui contient les greffons:

ssh -l root <<votre serveur>>

Puis entrez votre mot de passe. On accède ensuite au dossier du greffon:

cd /var/lib/xivo-provd/plugins/xivo-cisco-sccp-9.0.3

Maintenant qu’on est là, je vous explique. Pour générer un fichier de configuration pour les téléphones, des fichiers de template sont utilisés. Dans notre cas, pour les 7941, ce sont les fichiers 7941G.tpl et base.tpl qui sont utilisés. Ce dernier contient en effet les réglages de base. C’est lui qu’on va modifier.

Pour cela, on va utiliser nano:

nano templates/base.tpl

Voici à quoi ressemble le fichier:

Fichier base.tpl avant édition

Fichier base.tpl avant édition

On va éditer la zone entourée en rouge. Après quelques tentatives, j’ai découvert qu’il suffit de modifier la syntaxe. Pour passer de 17-02-15 à 17/02/15, il suffit tout simplement de remplacer D-M-YA par D/M/YA. En ce qui concerne l’affichage de l’heure, il est conditionné par le A final. Dans le cas présent, le A provoque l’affichage en mode 12h. Il suffit donc de le retirer comme dans la capture suivante pour passer en mode 24h.

Fichier base.tpl modifié.

Fichier base.tpl modifié.

Une fois que c’est fait, vous pouvez enregistrer. Pour cela, pressez Control X, puis la lettre O et enfin Return pour valider.

Il reste maintenant une étape. Nous avons effectivement modifié le template mais les fichiers déjà générés contiennent toujours l’erreur et provoqueront le même dysfonctionnement. On va donc les régénérer.

On va donc envoyer maintenant cette commande:

provd_pycli -c 'devices.using_plugin("xivo-cisco-sccp-9.0.3").reconfigure()'

Vous allez voir apparaître autant de lignes absconses que vous avez de ces modèles de téléphones déjà enregistrés dans XiVO. Et ensuite… C’est terminé. Faites le test à froid pour être sûr. Redémarrez tout, serveur, téléphones et laissez le tout s’initialiser. Puis redémarrez Asterisk via l’interface de XiVO, et une fois les téléphones réenregistrés, la date et l’heure devraient s’afficher correctement là où ils affichaient l’heure au format 12h avant la modification.

Cela fait maintenant quelques semaines que cette solution fonctionne chez nous. Si vous avez mieux, plus simple, plus efficace à proposer, je serai ravi de modifier ce tutoriel.

Edition du 16 février 2015 :

Comme indiqué dans les commentaires par quelqu’un de chez XiVO, que je remercie chaleureusement au passage, il est préférable de ne pas éditer directement le fichier base.tpl car une mise à jour du greffon supprimera vos modifications. Copiez donc ce fichier dans le dossier var/templates (à l’intérieur du greffon) et éditez celui-là. Les indications nécessaires sont indiquées en commentaire.

Go to Top