Le Minitel est un terminal exploité commercialement jusqu'en 2012 pour accéder à des services via le réseau téléphonique de France Télécom. Le réseau supportant les services commerciaux du Minitel ayant été définitivement stoppé, ceux-ci ne sont plus disponibles. Cependant, il reste possible d'utiliser ces terminaux, en se connectant sur un service compatible.

Dans cet article, j'explique la manière dont j'ai installé et configuré mon serveur Minitel. Outre le défi technique, j'avais aussi comme objectif de préserver le fonctionnement d'origine du service. Cela induit donc quelques contraintes :

  • N'effectuer aucune modification matérielle du Minitel.
  • Utiliser la prise en T pour le connecter à un PBX.
  • Le service doit accepter la connexion de plusieurs Minitels en parallèle sur un même numéro.

D'autres ont déjà atteint ces objectifs, comme Jelora, Christian Quest ou encore x0r. De mon coté, afin de simplifier la mise en place du système et pour permettre d'installer le tout sur une machine comme un Raspberry Pi, j'ai décidé que la partie serveur de mon installation serait entièrement logicielle :

  • Un serveur Asterisk, pour recevoir l'appel du Minitel
  • Un modem logiciel sous forme de module Asterisk
  • Une application serveur que je développe

Note : Pour donner un aspect concret à ce projet, le service mis en place est prévu pour être utilisé lors des événements publics de l'association de retrogaming Retrotaku, dont je suis membre. La mise à disposition du service sur une ligne téléphonique accessible publiquement ne fait pas partie de mes projets.

Mise à jour 08/07/2018 : Ajout du lien vers les sources de l'application Python.

Installation et configuration d'Asterisk

L'installation et la configuration de base du serveur Asterisk sont décrites dans l'article Installation d'un serveur téléphonique local avec Asterisk. Cet article couvre également la configuration d'une carte analogique et d'un boitier ATA, nécessaires pour connecter un Minitel sur Asterisk.

En plus des configurations basiques expliquées dans le précédent article, il est préférable de définir ces paramètres :

  • Utiliser le codec G711u (ulaw), qui effectue une compression sans perte.
  • Désactiver l'annulation de l'echo, pour éviter de perturber la communication entre le Minitel et le serveur.

Modem

Comme déjà précisé, afin de simplifier l'installation, j'ai décidé de ne pas utiliser de modem matériel pour le serveur. J'ai donc utilisé un module Softmodem pour Asterisk, permettant d'établir une connection entre Asterisk et une application quelconque via un simple socket TCP.

Comme ce module n'est pas distribué sous forme binaire, je l'ai compilé en suivant les instructions données par le développeur. J'aurais préféré pouvoir compiler uniquement ce module, mais je n'ai pas trouvé comment faire.

$ sudo apt install --no-install-recommends dpkg-dev wget ca-certificates g++ libncurses5-dev uuid-dev libjansson-dev libxml2-dev libsqlite3-dev libspandsp-dev
$ apt source asterisk
$ cd asterisk-*
$ wget https://raw.githubusercontent.com/proquar/asterisk-Softmodem/ba032c312d7a66171414285d27dbecf9908f5b3a/app_softmodem.c -O apps/app_softmodem.c
$ ./configure
$ make apps
$ sudo cp apps/app_softmodem.so /usr/lib/asterisk/modules/
$ # We need to restart Asterisk to load the new module
$ sudo asterisk -rx "core restart when convenient"

Note : L'utilisation de la commande apt source nécessite l'activation des dépôts source de Debian :

deb-src http://httpredir.debian.org/debian stretch main

Il est ensuite nécessaire de déclarer la connexion à l'application dans le fichier /etc/asterisk/extensions.conf. Par exemple, voilà la configuration présente sur mon serveur :

[default]
exten => _36XX,1,Softmodem(127.0.0.1,${EXTEN},ld(8)s(1))

Cette configuration utilise un numéro générique (signalé par le préfixe _), permettant de faire correspondre tous les numéros composés de quatre chiffres commençant par 36 au port TCP équivalent (paramètre ${EXTEN}). De cette manière, il n'est pas nécessaire de modifier la configuration d'Asterisk pour proposer un nouveau service, lancer une nouvelle application suffit.

Serveur applicatif

La connexion effectuée par le modem logiciel est une simple connexion TCP, ce qui permet d'écrire l'application dans n'importe quel langage.

La seule limitation du modem utilisé est qu'il ne calcule pas le bit de parité. J'ai d'abord pensé à le modifier pour ajouter cette fonctionnalité, mais je me suis perdu dans le code, et j'ai finalement décidé de gérer cette partie directement dans mon application.

Les sources de cette application seront distribuées sous licence AGPLv3 et vous pouvez les récupérer avec la commande suivante :

$ git clone https://git.garamotte.net/minitel-tcp

Bien que l'URL soit en https, il n'y a aucun affichage web, le lien mène directement vers le dépôt git. La page 403 obtenue en entrant l'URL dans un navigateur web, indique juste que la génération automatique d'une page index est désactivée dans ce sous-domaine, cloner le dépôt en utilisant git fonctionnera sans problème.

Note : Les tests unitaires sont cassés, et je n'aime pas distribuer des sources dans cet état, mais je n'ai malheureusement pas le temps de les corriger actuellement. Je mets donc quand même les sources à disposition, puisque plusieurs personnes me les ont demandées.


Installation d'un serveur téléphonique local avec Asterisk

ven. 18 mai 2018 by Marmotte

Asterisk est un IPBX logiciel, permettant la communication par différents protocoles, dont le SIP.

Cet article explique la mise en place d'un serveur de téléphonie simple, permettant de communiquer au sein du réseau local au moyen d'applications SIP et de téléphones analogiques.

Installation

Sur Debian, il suffit d'installer le paquet …

read more

Sauvegarde et restauration avec Borg

jeu. 11 janv. 2018 by Marmotte

Borg est un logiciel de sauvegarde doté de fonctionnalités avancées comme la déduplication et le chiffrement.

Cet article explique la manière dont je l'utilise pour sauvegarder mes systèmes.

Pourquoi utiliser Borg ?

J'ai récemment revu l'organisation des sauvegardes de mes machines. En effet, j'utilisais jusque là un script très basique à …

read more

Limiter les attaques par force brute sur le service SSH

dim. 07 janv. 2018 by Marmotte

Le service SSH (Secure SHell) permet d'obtenir l'accès à un terminal sur une machine distante, ce qui le rend donc très pratique pour l'administration. De ce fait, il est disponible sur un grand nombre de serveurs. Malheureusement, cela le rend donc aussi très attirant pour les personnes cherchant à contrôler …

read more

Un serveur PXE pour les booter tous

sam. 06 janv. 2018 by Marmotte

Après avoir mis au point le menu de boot dynamique de ma clé USB, j'ai eu envie de faire la même chose sur mon serveur PXE. Comme j'ai déjà une configuration de grub qui le fait, j'ai donc remplacé pxelinux par grub sur le serveur PXE, puis j'ai repris la …

read more

Une clé USB pour les booter vraiment tous

sam. 30 sept. 2017 by Marmotte

Lorsqu'on bidouille des machines, il arrive que le système ne démarre plus. Que seul le boot loader soit cassé, ou que ce soit le système complet, il est donc important d'avoir à disposition un moyen de démarrer la machine, pour réparer les dégâts.

J'explique ici la manière dont j'ai configuré …

read more

LXC sur Debian Jessie

ven. 03 mars 2017 by Marmotte

LXC, pour Linux Containers, permet de lancer plusieurs environnements Linux sur une même machine, de manière isolée, comme le fait OpenVZ. Par rapport à des machines virtuelles, les performances sont donc bien meilleures, puisque les différents systèmes fonctionnent directement sur le noyau, sans couche de virtualisation intermédiaire. Cela implique aussi …

read more

Installer Debian Jessie avec debootstrap

ven. 03 mars 2017 by Marmotte

Sur la plupart de mes machines, j'utilise la version stable de Debian, soit Jessie actuellement. J'explique ici la manière dont j'installe un système avec Debootstrap.

Note : Cet article est une mise à jour de celui qui expliquait l'installation de Debian Wheezy.

Pourquoi ne pas utiliser l'installeur Debian ?

L'installeur ajoute …

read more

Le système de fichiers BTRFS

ven. 03 mars 2017 by Marmotte

BTRFS est un système de fichiers, comparable à ZFS, encore en développement très actif, mais déjà intégré au noyau Linux et considéré stable pour un bon nombre de fonctionnalités. Il est cependant conseillé d'avoir un noyau Linux le plus récent possible pour l'utiliser.

Il a un fonctionnement de type Copy-on-Write …

read more

Démarrage : BIOS ou UEFI ? MBR ou GPT ?

sam. 10 sept. 2016 by Marmotte

Après divers tests, je rassemble ici mes notes à propos de la configuration nécessaire pour démarrer un système, selon les différentes combinaisons courantes du micrologiciel de la carte mère (BIOS ou UEFI) et du format de table de partitions (MBR ou GPT) utilisées.

Descriptions

BIOS

Après l'initialisation des différents matériels …

read more