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)
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
