ACTOS

Un article de EoleWiki.

Asterisk Configuration Tool Open Source

Official page : http://www.derrier.com/pierre/code/actos.html


NEW : Russian version of this documentation ! (thanks to Yuri Karavaev)



Sommaire

INTRODUCTION

Principe d'ASTERISK

ASTERISK est un PBX logiciel open-source pour Linux comportant toutes les fonctionnalités que l'on peut attendre d'un PBX intégré ordinaire. Voir http://www.asterisk.org/ pour plus de détails.

Un contrôleur PBX tel ASTERISK sert essentiellement à commuter les appels téléphoniques entre plusieurs postes IP. Il permet également de contrôler les accès et les autorisations d'appel, ou de rendre transparente la liaison entre un réseau IP et le réseau téléphonique traditionnel (RPC). ASTERISK est sans aucun doute le plus prometteur des contrôleurs PBX et évolue constamment grâce à une grande communauté de développeurs. (Voir channel #asterisk sur FreeNode)


Identification du besoin

Nous avons cependant identifié un certain manque en ce qui concerne les outils de configuration.

En effet, ASTERISK est configuré grâce à de nombreux fichiers textes dont la syntaxe est peu lisible et peu documentée. La quantité incroyable de fonctionnalités et d'options possibles rend la configuration du logiciel assez pénible.

C'est dans cette optique qu'ACTOS à été développé : permettre une configuration simple et intuitive, en guidant si possible l'utilisateur dans le choix des options et dans la création des règles de commutation.


ROADMAP DU PROJET (new)

Version courante : 2.1 Actuellement ACTOS est utilisé par plus de 1500 utilisateurs partout dans le monde (Etats-Unis, France, Allemagne, Turquie, Japon....)

De nombreux contributeurs participent à l'élaboration du projet

EN COURS DE REALISATION :

  • configuration des queues d'appel
  • configuration du matériel
  • Version Néerlandaise et Espagnole en cours d'élaboration.
  • Nouveaux Wizards pour la conception des dial-plan
  • Compatibilité d'ACTOS avec DESTAR
  • Tests en cours sur RedHat 7.3, Fedora, Mandrake 10... et Ouinedoz
  • ajout des nouvelles fonctions disponibles dans les dernières versions d'asterisk

DOCUMENTATION d'ACTOS

Principe d'ACTOS

ACTOS est avant tout un GUI, basé sur GTK et Glade.

Son interface permet de créer et d'éditer simplement tous les aspects d'une configuration ASTERISK (utilisateurs, contextes d'appel, protocoles...)

Grâce à un parseur dédié, ACTOS peut importer une configuration existante, ou exporter une configuration dans le format standard ASTERISK. Une extension est prévue pour exporter dans le format DeStar (DeStar est un backend de configuration développé en même temps qu'ACTOS et les auteurs ont tenu à rendre les deux outils compatibles).

Les fichiers ASTERISK édités par ACTOS sont essentiellement :

Les paramètres des protocoles : sip.conf, iax.conf,...

Le Dial-Plan ou Plan de commutation des appels (vive l'anglais...) : extensions.conf

Les fichiers de configuration du matériel : zaptel.conf,...

Les fichiers de gestion des queues d'appels et des agents : agents.conf, queues.conf


Architecture générale des modules

ACTOS est structuré en plusieurs fichiers et modules.

actos.py : Programme principal. Charge les paramètres de l'interface, initialise le langage et le mode de log, et lance le GUI.

actos.conf : Fichier de configuration d'ACTOS. Contient les paramètres de l'interface, le langage, les différentes options...

Les autres modules sont stockés dans le sous-répertoire actos_modules:

Global.py : Contient toutes les variables globales, les dictionnaires de traduction, les options possibles, etc... C'est le fichier à éditer pour mettre à jour ACTOS en fonction des avancées du développement d'ASTERISK.

Interface.py : Contient la classe de gestion de l'interface graphique GLADE/GTK

Windows.py : Module principal de gestion des fenêtres. Contient la classe générique WindowCtrl d'où dérivent les classes spécifiques à chaque fenêtre (une classe par fenêtre).

User.py : Gestion des utilisateurs

Context.py : Gestion des contextes d'appel. Contient le parseur permettant de charger le fichier "extensions.conf"

Filesystem.py : Gestion des fichiers (importation/exportation des fichiers .conf, lecture du fichier de configuration d'ACTOS, outils divers d'accès fichier)

ConfFilesDef.py : Définition de la structure des fichiers .conf à exporter

Tools.py : Utilitaires divers utilisés dans les autres modules. Gestion du débogage, traitements divers sur les modèles de données, classes de gestion des combos Glade ou des groupes de widgets.

Com.py : Client simple pour communiquer avec ACTOS_SERVER (exportation d'une configuration sur une machine distante)


Le package ACTOS_SERVER contient un serveur XMLRPC à installer sur une machine ASTERISK, permettant de mettre à jour la configuration depuis une machine distante. Le code du serveur se trouve essentiellement dans le fichier Server.py


Les scripts launch_me_to_install et setup.py permettent d'installer automatiquement ACTOS.

les fichiers .def contiennent des données importées par ACTOS au démarrage. Ce sont les données qui doivent être mises à jour à chaque nouvelle version d'ASTERISK (liste des commandes disponibles, variables prédéfinies dans ASTERISK, etc...)

Variables globales

Les variables globales sont stockées dans le module Global.py et sont accessible via l'instance "GLOBAL"


GLOBAL.LANGUAGES Nom des langues disponibles et leur abréviation associée

GLOBAL.PREFIXDIR Répertoire de données d'ACTOS (/usr/share/actos). En cas de modification, penser à changer aussi les scripts d'installation.

GLOBAL.GLADE_FILE Nom des fichiers GLADE pour chaque langue

GLOBAL.LOGFILE Handler du fichier de log. Initialisé par actos.py

GLOBAL.ListeUsers et GLOBAL.ListeContextes Listes des utilisateurs et des contextes : ces deux listes contiennent l'ensemble de la configuration à éditer/exporter (sauf les paramètres généraux des protocoles)

GLOBAL.PROTOCOLS Paramètres généraux des protocoles.

GLOBAL.TEMP_PROTOCOLS Copie temporaire des paramètres généraux des protocoles pour permettre l'annulation des changements effectués.

GLOBAL.CONFROOMS Liste des salles de conférences avec leur mot de passe

GLOBAL.GLOBAL_PARAMS Paramètres d'ACTOS chargés depuis actos.conf

GLOBAL.TOREGISTER Liste des requêtes d'enregistrement chargées depuis les fichiers lors d'une importation et non associées automatiquement à un utilisateur.

GLOBAL.USER_TYPES Types possibles d'utilisateurs (friend,user,peer,agent,...)

GLOBAL.AUTH_TYPES Types possibles d'authentification (plaintext,md5,rsa,...)

GLOBAL.TOS_TYPES Types possibles de qualité de service (none,lowdelay,throughput,reliability,mincost,...)

GLOBAL.DMTF_MODES Modes DMTF possibles (default,inband,rfc2833,info,...)

GLOBAL.COLUMN_OF_TABLE_USERS Colonnes à afficher dans la fenêtre EDIT_USER

GLOBAL.OPTIONS_USER Liste des options secondaires disponibles dans la fenêtre EDIT_USER

GLOBAL.DEFAULT_QUALIFY_MS Temps par défaut en milliseconde pour la scrutation des postes connectés

GLOBAL.DEFAULT_CONTEXTS Contextes créés par défaut si aucun n'est défini au démarrage

GLOBAL.DEFAULTS_NEW_USER Valeurs par défaut à donner aux options de création d'un nouvel utilisateur

GLOBAL.DEFAULT_EXTENSIONS Extensions spéciales prédéfinies dans ASTERISK

GLOBAL.CODECS Liste des codecs possibles selon la bande passante

GLOBAL.ACTIONS Dictionnaire des commandes (actions) possibles dans un Plan de commutation d'appel avec la documentation associée

GLOBAL.ACTIONS_AVAILABLE_WIZARD Actions pour lesquelles une fenêtre assistant à été créée

GLOBAL.ACTIONS_WITHOUT_PARAMS Liste des actions ne nécessitant pas de paramètres


GLOBAL.ACTIONS_MOSTUSED Liste des actions les plus utilisées

GLOBAL.VARIABLES Contient les variables globales définies par l'utilisateur

GLOBAL.CHANNEL_VARS Variables spéciales de canal prédéfinies dans ASTERISK avec la documentation associée


GLOBAL.WORDS Traductions de quelques mots isolés pour les besoins du programme

Gestion des traductions

Pour alléger le programme, le choix a été fait de ne pas intégrer gettext.

La gestion des traductions se fait grâce au dictionnaire DICO situé dans Global.py et la méthode _() qui prend en paramètre l'id du message + éventuellement les occurrences à remplacer dans le texte à la place des numéros %x%

(voir le fichier pour comprendre, c'est très simple)


Classes de gestion des fenêtres

A chaque fenêtre glade est associée une classe dans le fichier Windows.py

Ces classes dérivent toutes de WindowCtrl qui contient les méthodes de bases pour la gestion d'une fenêtre GLADE.

Les principales méthodes sont (les paramètres varient d'une fenêtre à l'autre)

update() : affichage et mise à jour de la fenêtre

valide() : validation de la fenêtre

close() : fermeture de la fenêtre

update_parent() : mise à jour de la fenêtre parent, procédure appelée automatiquement à la fermeture ...

Classe de gestion des utilisateurs

Tout se trouve dans le fichier User.py


Classes de gestion des contextes d'appel

Tout se trouve dans le fichier Context.py


Interface fichiers

Tout se trouve dans le fichier Filesystem.py


Interface client/serveur

Tout se trouve dans le fichier Com.py

Pour éviter d'ajouter de nouveaux modules à ACTOS, un protocole spécifique a été développé, basé sur la techno XMLRPC.

Le principe est le suivant :

Le serveur (ACTOS_SERVER) connait une liste de mots de passes valides associés chacun à un chemin d'accès. Il ne l'a bien sûr pas appris tout seul, il a été CONFIGURE (ouaaah fanstastique)

Exemples :

motdepasse1 -> /etc/asterisk/

motdepasse2 -> /etc/configuration_temporaire/


Ces mots de passes et chemins sont cryptés dans le fichier /usr/share/actos/passwd avec un algorithme de cryptage non réversible (impossible de retrouver les mots de passes originaux à partir du cryptogramme)

Le client doit donc crypter le mot de passe et l'envoyer au serveur avec le chemin d'accès.

Pour une meilleure sécurité, cette "clé" est transmise à chaque appel d'une méthode du serveur.

Les méthodes possibles (voir Server.py) sont :

serveur.getfile(clé, chemin, fichier) : ouvre une session FTP (un peu spéciale) avec le serveur et transmet le fichier donné en paramètre (client vers serveur)

serveur.getfilelist(clé,chemin) : récupère la liste des fichiers disponibles à transmettre.

serveur.sendfile(clé, chemin, fichier) : ouvre une session FTP (un peu spéciale) avec le serveur et transmet le fichier donné en paramètre (serveur vers client)

serveur.ping() : permet de vérifier la connection

serveur.identify(clé,chemin) : permet de vérifier l'autorisation en début de session. Cette méthode est appelée à chaque transfert de fichier pour éviter toute faille de sécurité.



ACTOS_SERVER est lancé en tant qu'utilisateur "actos" sur la machine cible, il faut donc veiller à ce que cet utilisateur aie les droits d'accès aux répertoires associés aux mots de passes pour qu'il puisse mettre à jour les fichiers de configuration et relancer asterisk (via un sudo : voir scripts d'installation pour plus de détails)

Outils divers

Tout est dans le fichier Tools.py



PLATEFORME DE TEST

Exemple d'architecture

-> Voir Maquette_VoIP



Installation d'ASTERISK

Téléchargement de la dernière version : http://www.asterisk.org/index.php?menu=download

Packages nécessaires :

- Linux Kernel Sources package installed

- bison

- readline

- readline-devel

- openssl

- openssl-devel

- libtermcap

- libtermcap-devel

- newt

- newt-devel

- ncurses

- ncurses-devel


Installation d'ACTOS

Téléchargement de la dernière version : http://www.derrier.com/pierre/code/actos.html

Packages nécessaires :

- Python >=2.3

- Python-devel >=2.3

- GLib >=2.0

- GTK+ >=2.0

- pyGTK >=2.0

- libGlade


Tout est dans le fichier INSTALL du package

AUTEUR

Pierre Derrier

pierre.derrier@laposte.net

http://www.derrier.com/pierre