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://xivo-provd.nyxd.org

XiVO Configuration provisioning

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.

XiVO Greffons modifiés

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.

XiVO Greffon 7970

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.

XiVO Greffon 7945 fichiers installés

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.

pfSense DHCP Option 150

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.

Un Cisco 7970G, un 7945G et un 7941G utilisant chacun son propre greffon

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.