Votre Objectif : Relier les réseaux des filiales d'une même entreprise de manière sécurisée et économique
Solution retenue : Utiliser un Réseau Privé Virtuel à travers Internet.
Shéma du réseau :
M1:eth0:192.168.1.100/24 M2:eth0:192.168.2.100/24
| |
| |
| |
| |
R1:eth0:192.168.1.1/24--------------------RWan:eth0:11.0.0.1/8----------------------R2:eth0:192.168.2.1/24
tun1:10.0.0.1/8 eth1:12.0.0.1/8 tun1:10.0.0.2/8
tun2:10.0.0.11/8 eth2:13.0.0.1/8 eth1:12.0.0.100/8
eth1:11.0.0.100/8 |
|
|
|
R3:eth0:192.168.3.1/24
tun1:10.0.0.3/8
eth1:11.0.0.100/8
|
|
|
M3:eth0:192.168.1.100/24
Explications :
M1, M2 et M3 représentent une Machine (Client et/ou Serveur) de chaque filiale.
RWAN représente le réseau public (Internet), c'est un routeur simple, sans aucun filtre.
R1, R2 et R3 représentent les Passerelles d'accès au web de chaque filiale. Ces passerelles sont des firewalls Debian GNU/Linux Iptables/NAT.
Nous allons établir un VPN entre les 3 réseaux en créant 2 tunnels OpenVPN. Un entre R1 et R2, L'autre entre R1 et R3.
Astuces :
Pour configurer M1, M2 & M3 (distribution Live GRML) Ã la main vite fait :
# loadkeys fr
# ifconfig eth0 192.168.[1,2,3].100 netmask 255.255.255.0 up
# route add -net 0.0.0.0 gateway 192.168.[1,2,3].1
Le Script Iptables de R1, R2 et R3 :
- Toutes les connexions sortantes (Lan->Wan) sont autorisées
- Ne sont autorisées en entrée (Wan->Lan) que les connexions en réponse à des requetes initiées du Lan
- Aucune requete Wan->Lan n'est autorisée
#On doit activer le "routage"
#echo 1 > /proc/sys/net/ipv4/ip_forward (A faire aussi sur RWAN)
#configuration
ext_if="eth1"
int_if="eth0"
loc_if="lo"
#on vide toutes les règles des chaines prédéfinies et personnelles
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
#on applique un NAT sur tout ce qui sort par $ext_if
iptables -t nat -A POSTROUTING -o $ext_if -j MASQUERADE
#politiques par défaut
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#regles de base
#Accepter le trafic LOCAL interne
iptables -A OUTPUT -o $loc_if -j ACCEPT
iptables -A INPUT -i $loc_if -j ACCEPT
#Accepter le trafic LOCAL vers WAN
iptables -A OUTPUT -o $ext_if -j ACCEPT
iptables -A INPUT -i $ext_if -m state --state ESTABLISHED,RELATED -j ACCEPT
#Accepter le trafic de/vers $int_if
iptables -A INPUT -i $int_if -j ACCEPT
iptables -A OUTPUT -o $int_if -j ACCEPT
#Accepter toute connexion du LAN vers le WAN
iptables -A FORWARD -i ! $ext_if -o $ext_if -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#Accepter du WAN vers le LAN les connexions déjà établies
iptables -A FORWARD -i $ext_if -o ! $ext_if -m state --state ESTABLISHED,RELATED -j ACCEPT
Installation et test d'OpenVPN
R1, R2 et R3 disposent du logiciel OpenVPN, que l'on peut installer avec la commande :
# apt-get install openvpn openssl
Quand l'architecture réseau est fonctionnelle (M1 ping R2 et M2 ping R1), on peut établir une liaison VPN de test entre R1 et R2 :
Sur R1 : openvpn --remote 12.0.0.100 --dev tun1 --ifconfig 10.0.0.1 10.0.0.2 --verb 9
Sur R2 : openvpn --remote 11.0.0.100 --dev tun1 --ifconfig 10.0.0.2 10.0.0.1 --verb 9
Le tunnel doit maintenant être fonctionnel, R1 doit pouvoir pinguer l'interface TUN de R2 et inversement.
Il reste à activer le routage entre les filiales 1 et 2 :
Sur R1 : route add -net 192.168.2.0 netmask 255.255.255.0 gw 10.0.0.2
Sur R2 : route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.0.0.1
Les machines M1 et M2 doivent maintenant pouvoir communiquer à travers le VPN.
Sécurisation des transferts de données entre les filiales : Génération de clef de chiffrement
Le dossier easy-rsa contient les scripts nécessaires à une configuration des clients et du serveur TLS. La norme TLS (Transport Layer Security) est une norme de sécurisation, par chiffrement, du transport de l'information au sein des réseaux informatiques (anciennement SSL)).
debian:~# find / -name "easy-rsa" -print
/usr/share/doc/openvpn/examples/easy-rsa
debian:~# ls /usr/share/doc/openvpn/examples/easy-rsa
build-ca build-key build-key-server clean-all openssl.cnf.gz revoke-full
build-dh build-key-pass build-req list-crl README.gz sign-req
build-inter build-key-pkcs12 build-req-pass make-crl revoke-crt vars
Il nous faut générer plusieurs types de clef et certificats :
-
une clef de pour le protocole d'échange diffie-hellman (dh1024.key)
-
une clef et un certificat pour l'autorité de certification (à moins que vous en utilisiez une officielle comme par exemple www.verisign.com ou www.freessl.com, mais cela revient cher). (ca.crt, ca.key)
-
une clef et un certificat pour le serveur (vpnserver.key, vpnserver.crt)
-
une clef et un certificat pour chaque client ([nom client].crt, [nom client].key
-
une clef qui sert à autoriser les accès au daemon (ta.key)
On désigne R1 comme serveur TLS, R2 et R3 comme client TLS ...
Editez le fichier vars de /usr/share/doc/openvpn/examples/easy-rsa/ , A titre d'exemple :
export D=/etc/openvpn export KEY_CONFIG=$D/openssl.cnf export KEY_DIR=$D/keys export KEY_SIZE=1024 export KEY_COUNTRY=FR export KEY_PROVINCE=BREIZH export KEY_CITY=RENNES export KEY_ORG="MonVPN" export KEY_EMAIL="monnom@mondomaine.com"
Ceci va charger les précédentes variables en mémoire pour que les scripts puissent les utiliser ...
cd /usr/share/doc/openvpn/examples/easy-rsa
source ./vars
mkdir keys
touch keys/index.txt
echo 01 > keys/serial
Enfin, générer les différentes clefs :
./build-dh ./build-ca ./build-key-server [NOM DE VOTRE SERVEUR]
Vous pouvez aussi dès a présent générer les clefs des clients :
./build-key [nom de votre client]
Les fichiers .key sont "top secret", ils ne doivent en aucun cas être diffusés publiquement. Enfin, il vous faut générer une clef spéciale pour éviter les attaques dites "Man in the middle" ou "homme du milieu" en français. (ce sont des attaques d'interception de clefs).
openvpn --genkey --secret keys/ta.key
chown -R nobody /etc/openvpn
Les différentes clef et certificats sont maintenant stockés dans le répertoire /etc/openvpn/keys/
Copiez les fichiers nécessaires aux clients TLS R2 et R3 dans leur dossier /etc/openvpn/keys/ (cf lignes de commandes plus bas)
Voila, vous avez généré/configuré tout ce qu'il faut, on peut passer à la configuration des clients et du serveur.
Test du VPN entre le serveur VPN R1 et les clients VPN R2 et R3 avec les clefs de chiffrement TLS
Sur R1 :
openvpn --remote 12.0.0.100 --dev tun1 --ifconfig 10.0.0.1 10.0.0.2
--tls-server --dh dh1024.pem --ca ca.crt --cert R1.crt --key R1.key --tls-auth ta.key 0
--route 192.168.2.0 255.255.255.0 10.0.0.2 &
openvpn --port 5000 --remote 13.0.0.100 --dev tun2 --ifconfig 10.0.0.11 10.0.0.3
--tls-server --dh dh1024.pem --ca ca.crt --cert R1.crt --key R1.key –tls-auth ta.key 0
--route 192.168.3.0 255.255.255.0 10.0.0.3 &
Sur R2 :
openvpn --remote 11.0.0.100 --dev tun1 --ifconfig 10.0.0.2 10.0.0.1
--tls-client --ca ca.crt --cert R2.crt --key R2.key --tls-auth ta.key 1
--route 192.168.1.0 255.255.255.0 10.0.0.1
--route 192.168.3.0 255.255.255.0 10.0.0.1 &
Sur R3 :
openvpn --port 5000 --remote 11.0.0.100 --dev tun1 --ifconfig 10.0.0.3 10.0.0.11
--tls-client --ca ca.crt --cert R3.crt --key R3.key --tls-auth ta.key 1
--route 192.168.1.0 255.255.255.0 10.0.0.11
--route 192.168.2.0 255.255.255.0 10.0.0.11 &
Automatisation du chargement du VPN
- Ecrire les commandes openvpn dans un script : /etc/init.d/vpn
- Rendre ce script exécutable : chmod +x /etc/init.d/vpn
- Planifier l'exécution du script /etc/init.d/vpn au démarrage :
update-rc.d /etc/init.d/vpn defaults
ou
Appeler /etc/init.d/vpn depuis la section start et restart de /etc/init.d/networking
Sources :
- Le man d'openvpn et openvpn.net
Fin
ps : Youpi
[ Ajouter un commentaire ] | [ 0 Trackbacks ] | Lien permanent
Sous Debian, un petit "apt-cache search kernel-image 2.6" vous donne la liste des noyaux paquetés... Mais si il vous faut un noyau récent, pour gérer un contrôleur RAID Sata 3Ware par exemple (mon cas), vous n'y trouverez vraissemblablement pas votre bonheur ...
Moi il me faut un 2.6.15 minimum, la version stable 2.6.15.4 est dispo sur kernel.org mais sur les dépots Debian Sarge la version la plus récente est un 2.6.8.2 ...
Voici les quelques lignes de commandes nécessaires à l'installation d'un noyau Linux à partir des sources dispos sur kernel.org.
En root :
apt-get install kernel-package fakeroot libncurses5 libncurses5-dev cramfsprogs initrd-tools
En user lambda :
cd /home/fred
mkdir kernel-src
cd kernel-src
wget http://www.ovh-new.lkams.kernel.org/pub/linux/kernel/v2.6/linux-2.6.15.4.tar.gz
tar zxvf linux-2.6.15.4.tar.gz
cd linux-2.6.15.4
make menuconfig
faire sa configuration ...
make-kpkg clean
make-kpkg --initrd --rootcmd fakeroot --append-to-version=.`date +%y%m%d` --revision=2.6.15.4 kernel-image
aller faire un tour dehors si il fait beau...
cd ..
En root :
dpkg -i kernel-image-2.6.15.4.060212_i386.deb
reboot
Pour vérifier la version qui tourne :
uname -a
Linux maitoumbe 2.6.15.4.060212 CET 2006 i686 GNU/Linux
Dans le fichier de conf de GRUB /boot/grub/menu.lst :
title Debian GNU/Linux, kernel 2.6.15.4.060212bis
root (hd0,0)
kernel /boot/vmlinuz-2.6.15.4.060212 root=/dev/hda1 ro
initrd /boot/initrd.img-2.6.15.4.060212
savedefault
boot
Tout a été ajouté, le bonheur ...
Youpi on a maintenant le noyau le plus récent qui soit ...
[ Ajouter un commentaire ] | [ 0 Trackbacks ] | Lien permanent
GRML est une superbe distribution linux live pour nous les administrateurs réseau, comme client d'un serveur de clonage ou système d'intervention rapide c'est top moumoute. Il faut néanmoins graver l'iso sur un CDR pour pouvoir l'utiliser :/ ... Vu qu'on a toujours un sublime serveur PXE sous Debian (running gag cf 2 posts précédents), pourquoi ne pas y faire tourner GRML ...
Je sais ... GRML propose une fonction live "grml-terminalserver" permettant cela, mais une distrib live qui distribue des clients live ouachahh c'est chaud et pas optimal... et dans mon cas, j'ai déjà un serveur PXE qui tourne sur mon réseau et on ne peut pas en avoir plus d'un sinon c'est un peu n'importe quoi ...
Booter sur GRML via PXE
Sur notre serveur PXE (192.168.1.199) :
- Créer un dossier /home/live
# mkdir /home/live
- Copier l'iso de GRML dans /home/live
# ls /home/live/
grml_0.6.iso
- Créer un dossier /home/live/grml
# mkdir /home/live/grml
- Monter l'iso de GRML dans /home/live/grml
# mount -o loop grml_0.6.iso /home/live/grml
Ici on utilise l'iso de GRML fraichement téléchargée de grml.org, sans rien décompresser, c'est pratique je trouve ...
- Installer un serveur NFS :
# apt-get install nfs-kernel-server nfs-common portmap
# /etc/init.d/nfs-common start
# /etc/init.d/nfs-kernel-server start
- On indique à NFS le dossier à rendre public pour GRML (le dossier que GRML utilisera à la place du CDROM)
# nano /etc/exports
[...]
/home/live/grml *(ro,root_squash)
[...]
# exportfs -a
- On ajoute GRML au menu de démarrage PXE :
# nano /home/tftpboot/pxelinux.cfg/default
[...]
LABEL grml
KERNEL linux26
APPEND ramdisk_size=16384 root=/dev/ram0 rw init=/etc/init nfsdir=192.168.1.199:/home/live/grml nodhcp noprompt noeject noautoconfig apm=power-off nomce initrd=minirt26.gz vga=791 ssh=123
[...]
Sur un poste booté avec GRML :
- On lance une fois le serveur PXE de GRML pour transférer les fichier de Boot sur notre serveur PXE
# grml-terminalserver
# find / -name pxelinux.0 => /ramdisk/var/lib/tftpboot
# cd /ramdisk/var/lib/tftpboot
# scp linux26 root@192.168.1.199:/home/tftpboot/linux26
# scp minirt26.gz root@192.168.1.199:/home/tftpboot/minirt26.gz
Pour peu que l'on fasse cette dernière opération sous VMWare on aura même pas besoin de graver GRML ...
Voilà c'est tout, maintenant il suffit de démarrer un client PXE et de taper GRML et ohhh ca boot sans CD youpi :) on est content ...
[ Ajouter un commentaire ] ( ( 1 vue ) ) | [ 0 Trackbacks ] | Lien permanent
Pourquoi ce post sur PXE ? Il existe effectivement des tas de tutoriels sur PXE, je le sais il m'en a fallu au moins quinze pour réussir à faire tourner une config serveur PXE qui au final est extremement simple... cela n'aurait pas dû me demander autant de lectures/temps/gros mots...
Donc au moins ici je poste ma config qui marche et ca sera ptet cinq tutoriels de gagnés pour toi lecteur qui cherche à installer PXE ;)
La théorie vite fait (bien fait ?) :
Un serveur PXE consiste en fait en deux services serveur distincts :
Un serveur DHCP et un serveur TFTP
Le serveur DHCP (paquet dhcp3-server) distribuera les adresses IP aux clients PXE (et aux autres d'ailleurs), il fournira aux clients PXE le nom du système d'exploitation à charger par le réseau.
Le serveur TFTP (paquet atftpd) hébergera et tiendra à disposition des clients PXE, les systèmes d'exploitation à charger via le réseau. On souhaite que la racine du serveur TFTP soit dans /home/tftpboot.
Syslinux (paquet syslinux) est un « bootloader » linux, également capable de charger d'autres OS. Il est souvent utilisé sur les cdrom, disques usb, disquettes et via PXE donc ...
La pratique :
Pour changer on va bosser sous Debian/Ubuntu ;) . Pour installer tout ce qu'il faut :
# apt-get install syslinux dhcp3-server atftpd pxe
Mon serveur PXE a pour IP 172.16.0.1 (c'est aussi ma passerelle), on installera la racine du serveur tftp dans /home/tftpboot, atftpd nous demande si il faut s'installer via inet.d, j'ai répondu NON. DHCP ne démarrera pas à sa première tentative et c'est normal, il faut le configurer convenablement avant via son fichier de conf ...
Voici les fichiers de conf :
/etc/pxe.conf
# which interface to use
interface=eth0
default_address=172.16.0.1# the multicast ip address to listen on
multicast_address=224.0.1.2# mtftp info
mtftp_address=224.1.5.1
mtftp_client_port=1758
mtftp_server_port=1759# the port to listen on
listen_port=4011# enable multicast?
use_multicast=1
# enable broadcast?
use_broadcast=0# user prompt
prompt=Press F8 to view menu ...
prompt_timeout=30# service=
, , , , # tftpd base dir
tftpdbase=/home/tftpboot# domain name
domain=localnet
/etc/dhcp3/dhcpd.conf
allow booting;
allow bootp;
ddns-update-style none;# option definitions common to all supported networks...
option domain-name "localnet";
option domain-name-servers 172.16.0.1;server-identifier 172.16.0.1;
next-server 172.16.0.1;
option root-path "/home/tftpboot/";
filename "/home/tftpboot/pxelinux.0";default-lease-time 36000;
max-lease-time 72000;# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.# This is a very basic subnet declaration.
subnet 172.16.0.0 netmask 255.255.0.0 {
range 172.16.8.100 172.16.8.250;
option routers 172.16.0.1;
}
/etc/default/atftpd
USE_INETD=false
OPTIONS="--daemon --port 69 --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.200-250 --mcast-ttl 1 --maxthread 100 --verbose=5 /home/tftpboot"
Que mettre à la racine du serveur tftp ?
Memdisk et pxelinux.0 que l'on trouvera sur notre machine suite à l'installation de syslinux.
Des images de systèmes d'exploitation (pas trop gros), par exemple une image d'une disquette de boot DOS générée avec la commande :
# dd if=/dev/floppy of=monimage.img
Quelques commandes pour vous faire voir ce qu'il y a à la racine du serveur tftp :
root@nono /home/tftpboot # ls -lh
total 53M
drwxr-sr-x 3 root staff 1,0K 2006-01-24 08:07 debian-installer
-rw-r--r-- 1 root staff 50M 2006-01-25 09:29 dsl21.img
-rw-r--r-- 1 root staff 3 2006-01-25 08:15 f1
-rw-r--r-- 1 root staff 3 2006-01-25 08:15 f2
-rw-r--r-- 1 root staff 3 2006-01-25 08:15 f3
-rw-r--r-- 1 root staff 23K 2006-01-23 11:49 memdisk
-rw-r--r-- 1 root staff 445 2006-01-25 08:19 messages
-rw-r--r-- 1 root staff 1,5M 2006-01-24 09:05 netboot56.img
-rw-r--r-- 1 root staff 1,5M 2006-01-24 08:28 netboot.img
-rw-r--r-- 1 root staff 12K 2006-01-23 11:12 pxelinux.0
drwxr-sr-x 2 root staff 1,0K 2006-01-23 11:32 pxelinux.cfg
drwxr-sr-x 3 root staff 1,0K 2006-01-24 09:11 ubuntu-installer
root@nono /home/tftpboot # cd pxelinux.cfg
root@nono /home/tftpboot/pxelinux.cfg # cat default
PROMPT 1
DEFAULT 1
DISPLAY messages
F1 f1
F2 f2
F3 f3
TIMEOUT 300
label 0
LOCALBOOT 0
label 1
KERNEL memdisk keeppxe
APPEND initrd=netboot56.img
label 2
KERNEL memdisk
APPEND initrd=netboot.img
label 3
kernel debian-installer/i386/linux
append vga=normal initrd=debian-installer/i386/initrd.gz ramdisk_size=9424 root=/dev/rd/0 devfs=mount,dall rw --
label 4
kernel ubuntu-installer/i386/linux
append vga=normal initrd=ubuntu-installer/i386/initrd.gz ramdisk_size=16432 root=/dev/rd/0 rw --
root@nono /home/tftpboot/pxelinux.cfg # cat ../messages
=========================== Menu ===========================
0 - local
1 - netboot ( netbootdisk 5.6 )
2 - netboot ( netboot fred )
3 - debian installer
(mirror : deb http://192.168.1.21/debian/ sarge main contrib non-free)
4 - ubuntu installer
(mirror : deb http://192.168.1.21/ubuntu/ breezy main)
===========================================================
Les fichiers texte messages, f1, f2, f3 ... s'afficheront sur les clients respectivement au démarrage du boot PXE ou en pressant la touche correspondante.
Le fichier de démarrage « pxelinux.cfg/default » peut gérer un menu, l'utilisateur choisira l'image à booter, les entrées de menu sont définies par les « labels »
Certains systèmes d'exploitation comme debian ou ubuntu fournissent des fichiers initrd.gz permettant de lancer une installation via PXE.
Les scripts de démarrage pour tout ca :
# /etc/init.d/atftpd start|stop|restart
# /etc/init.d/dhcp3-server start|stop|restart
# /etc/init.d/pxe start|stop|restart
Certifié fonctionnel par Fred.
[ Ajouter un commentaire ] ( ( 7 vues ) ) | [ 0 Trackbacks ] | Lien permanent
Ce matin j'ai eu envie de faire parler mon ordinateur, pour le faire parler anglais c'est déconcertant de simplicité, sous Debian / Ubuntu on tape juste :
apt-get install festival
puis :
echo "bonjour je suis l'ordinateur de Fred" | festival --tts
et le PC parle... mais ... avec l'accent anglais :)
Mais moi je veux qu'il me parle français ... et là ca se corse un peu... mais on y arrive ...
Il y a des tas de TTS (Text To Speach) j'ai choisi MBROLA associé à LLIAPHON ... pour leur relative simplicité tant à installer qu'à utiliser, et parce qu'ils sont plus ou moins libres :
MBROLA : code source fermé mais libre pour utilisation non commerciale et non militaire.
LLIAPHON : code source ouvert, GPL.
Mbrola et Lliaphon auront besoin l'un de l'autre, lliaphon va transformer/codifier du texte en phonèmes et latences, mbrola va transformer en son les fichiers générés par lliaphon.
Comment ca se passe ?
1. Installation d'MBROLA
J'ai téléchargé mbrola et des voix pour mbrola sur http://www.tcts.fpms.ac.be/synthesis/mbrola/ dans /home/fred/tts/mbrola/
J'ai maintenant les fichiers :
mbr301h.zip, fr1-...zip, fr2-...zip, fr3-...zip, fr4-...zip
Il faut créer le répertoire d'installation de MBROLA :
mkdir /opt/mbrola
Se placer dans ce répertoire :
cd /opt/mbrola
Décompresser les fichiers :
unzip -d .
unzip -d .
unzip -d .
unzip -d .
unzip -d .
On pourrait se contenter d'une seule voix mais ca peut etre sympa de changer ...
fr1 et fr3 sont des voix de gars et fr2, fr4 des voix de filles, enfin il parait ...
Perso j'ai renommé tout ca pour que ca soit plus "parlant" et attention il y a un piège, fr4 est compacté sans sous dossier éponyme à l'inverse de toutes les autres voix ...
pour que toutes les voix soient au même niveau (dans /opt/mbrola/) on tapera :
cd /opt/mbrola
mv ./fr1/fr1 ./bob
mv ./fr2/fr2 ./eva
mv ./fr3/fr3 ./max
mv ./fr4 ./zia
On fait un lien vers la version d'mbrola qui va bien, moi je suis sur PC donc :
ln -s mbrola-linux-i386 mbrola
Des fichiers de test sont donnés ... testons :
./mbrola zia TEST/kundera.pho kundera.wav
Si tout marche bien vous devez avoir un kundera.wav dans /opt/mbrola/
Lisons ce fichier wav, si vous avez ALSA pour gérer votre son sous linux tapez :
aplay kundera.wav
A ce stade vous devriez entendre une femme parler de philosophie ...
C'est bien sauf que si on s'amuse beaucoup on va poluer notre /opt/mbrola/ avec un tas de fichiers wav
On peut se contenter de convertir directement un fichier pho en audio sans créer de fichier audio en utilisant la sortie stdout de mbrola :
mbrola zia TEST/bonjour.pho -.au|aplay
C'est bien mais pour des feignasses comme nous c'est bien trop long à taper, on va faire un script "dire" qui va faire la même chose :
nano dire
On écrit notre ligne de commande dans "dire" :
/opt/mbrola/mbrola /opt/mbrola/bob $1 -.au|aplay
J'utilise des chemins absolus pour que ca marche de n'importe où ...
ensuite je rends mon script exécutable :
chmod +x dire
et j'utilise mon script :
./dire TEST/bonjour.pho
Bon, on est content sauf qu'on ne peut faire dire à notre ordinateur que les exemples donnés avec mbrola, c'est pas fun très longtemps ...
Ca serait bien qu'on puisse phonétiser nos propres textes, pour cela, on va installer LliaPhon.
2. Installation de LLIAPHON
J'ai téléchargé LliaPhon sur http://download.gna.org/lliaphon/ dans /home/fred/tts/lliaphon/
lliaphon-0.3.5.20041129.tar.gz
on décompresse l'archive :
tar zxvf lliaphon-0.3.5.20041129.tar.gz
on va voir ce que ca donne :
cd lliaphon-0.3.5.20041129
ls
on installe :
./configure
make
make install
en fin d'installation on voit qu'il nous a déposé lliaphon dans :
/usr/local/bin/lliaphon
Testons lliaphon :
cd /home/fred/
echo "bonjour moi c'est Fred et toi ?" > test.txt
lliaphon test.txt
Normalement lliaphon doit nous créer un fichier test.txt.ola
et ce .ola on peut le lire, comme les .pho avec Mbrola, ou avec un script qui se nomme play_ola lui aussi dans /usr/local/bin/
sauf que ce script n'est pas forcément bien configuré par défaut ...
nano /usr/local/bin/play_ola
aux environs de la ligne 15 vous avez une variable qui se nomme MBROLA_VOICE, il faut la renseigner correctement, pour nous ca sera "/opt/mbrola/bob"
et tout à la fin du script on a 2 appels au programme mbrola, on va les remplacer par "/opt/mbrola/mbrola"
(on pourrait aussi mettre mbrola dans le PATH ...)
et on a aussi un appel au programme "play" nous on utilise "aplay" donc on remplace ...
on enregistre et on ferme nano
ensuite on peut faire un play_ola :
play_ola /home/fred/test.txt.ola
bon c'est pas mal déjà mais pour faire parler mon ordi il faut que j'écrive un fichier texte, que je le donne à lliaphon et que le ola généré par lliaphon je le donne à mbrola et que mbrola donne à aplay le son à jouer.
et comme on est toujours feignasses, ca ne nous plait pas, c'est bien trop long tout ca ...
et puis nous en plus on veut pouvoir choisir la voix avec laquelle faire parler notre ordi ...
on va donc faire un petit script nommé "dire" qui marchera comme ca :
./dire "ce que je veux faire dire à mon ordinateur" eva
et comme on est vraiment des feignasses on veut avoir une voix par défaut pour pouvoir se contenter de :
./dire "ce que je veux faire dire à mon ordinateur"
notre script "dire" ressemblera à ca :
#!/bin/sh
#voix par défaut si argument 2 absent
if [ ! "$2" ]
then
DefVoice=bob
else
DefVoice=$2
fiMBROLA_VOICE=/opt/mbrola/$DefVoice
#tranformation du texte par lliaphon pour mbrola
echo $1 > /tmp/lliaphon_dire
/usr/local/bin/lliaphon /tmp/lliaphon_dire/opt/mbrola/mbrola -I /usr/local/share/lliaphon/initfile.lia \
$MBROLA_VOICE /tmp/lliaphon_dire.ola -.au |
aplay -t au -rm /tmp/lliaphon_dire
rm /tmp/lliaphon_dire.ola
ensuite je rends mon script exécutable :
chmod +x dire
et j'utilise mon script :
./dire "youpi ca marche, je parle, merci à toi humain de m'avoir donné la parole"
Et voilà on est content notre ordi nous parle, il est pas plus intelligent pour autant, il faut toujours tout lui souffler mais bon ...
[ Ajouter un commentaire ] | [ 0 Trackbacks ] | Lien permanent

Calendrier



