<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RS232 on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/rs232/</link><description>Recent content in RS232 on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Sat, 26 Mar 2016 11:30:39 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/rs232/index.xml" rel="self" type="application/rss+xml"/><item><title>[Tutoriel] Modem GSM RS232 via convertisseur USB dans une VM VMware</title><link>https://blog.zwindler.fr/2016/03/26/modem-gsm-rs232-convertisseur-usb-vm-vmware/</link><pubDate>Sat, 26 Mar 2016 11:30:39 +0000</pubDate><guid>https://blog.zwindler.fr/2016/03/26/modem-gsm-rs232-convertisseur-usb-vm-vmware/</guid><description>&lt;img src="https://blog.zwindler.fr/2016/02/233_800.webp" alt="Featured image of post [Tutoriel] Modem GSM RS232 via convertisseur USB dans une VM VMware" /&gt;&lt;p&gt;Cet article fait suite à mon précédent article dans lequel j’expliquais pas à pas &lt;a class="link" href="https://blog.zwindler.fr/2016/02/27/tutoriel-ajout-dun-modem-gsm-port-serie-machine-virtuelle-vmware/" &gt;comment ajouter un modem port série connecté à l’hyperviseur dans un machine virtuelle VMware.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sauf qu’il n’est pas rare que les serveurs n’aient pas de port RS232 !&lt;/p&gt;
&lt;p&gt;Pour pouvoir ajouter quand même ce modem à une VM (car il y en a peu voire pas en USB directement, bizarrement), on peut alors passer par un convertisseur USB/RS232.&lt;/p&gt;
&lt;h2 id="transfert-du-port-usb-du-convertisseur-de-lhôte-physique-vers-la-machine-virtuelle"&gt;Transfert du port USB du convertisseur de l’hôte physique vers la machine virtuelle
&lt;/h2&gt;&lt;p&gt;Une fois le module GSM installé sur le port série du convertisseur  &lt;strong&gt;et&lt;/strong&gt; le port USB connecté à l’hyperviseur, l’ajout du port USB se fait machine virtuelle arrêtée. Ouvrir le menu de modification de la machine virtuelle et ajouter d’abord un contrôleur USB.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/03/usbsms1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/03/usbsms2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;En l’état, le contrôleur permet maintenant de connecter des périphériques USB provenant du client sur lequel vous êtes connecté (vSphere Client ou Web client). C’est utile pour passer des fichiers aux machines virtuelles depuis une clé USB sur votre poste.&lt;/p&gt;
&lt;p&gt;Dans notre cas, on veut ajouter un périphérique qui est sur l’ESXi pour qu’il soit connecté de manière permanente. Ouvrir le menu de modification de la machine virtuelle et ajouter maintenant le convertisseur USB/RS232.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/03/usbsms3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/03/usbsms4.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Ici je n’ai pas choisi de valider le support du vMotion. La machine ne pourra donc pas être basculée tant que le périphérique est « passé » à la VM.&lt;/p&gt;
&lt;p&gt;Cette option n’était pas disponible dans les précédentes versions de VMware. Pour autant, j’imagine que ça doit bien fonctionner : en cas de bascule, la machine perd juste l’accès à son périphérique USB ce qui peut ne pas être grave en soit (à vous de le dire).&lt;/p&gt;
&lt;p&gt;Démarrez la machine virtuelle.&lt;/p&gt;
&lt;h2 id="configuration-de-smsd"&gt;Configuration de smsd
&lt;/h2&gt;&lt;p&gt;L’installation de smsd a été réalisée dans &lt;a class="link" href="https://blog.zwindler.fr/2016/02/27/tutoriel-ajout-dun-modem-gsm-port-serie-machine-virtuelle-vmware/" &gt;l’article précédent&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;De la même manière que pour les ports séries, les ports USB ne sont utilisables que par root et les utilisateurs du groupe &lt;em&gt;dialout&lt;/em&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ll /dev/ttyUSB*
crw-rw----. 1 root dialout 188, 0 22 mars 16:03 ttyUSB0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Configurez le fichier smsd.conf pour qu’il n’utilise plus ttyS0 mais ttyUSB0 !&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vi /etc/smsd.conf
[GSM1]
device = /dev/ttyUSB0
incoming = yes
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Démarrez le démon et le mettre en démarrage automatique&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;systemctl daemon-reload
systemctl start smsd
systemctl enable smsd
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On fait maintenant un test d’envoi de SMS&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;./sendsms +33XXXXXXXXX &amp;#34;Test 1 2 1 2&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On peut voir les SMS passer et la communication avec le modem GSM dans le fichier de log /var/log/smsd/smsd.log&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;tail -f /var/log/smsd/smsd.log
2016-02-09 16:17:42,5, GSM1: Modem handler 0 has started. PID: 11881.
2016-02-09 16:17:42,5, GSM1: Using check_memory_method 1: CPMS is used.
2016-02-09 16:17:42,6, GSM1: I have to send 1 short message for /var/spool/sms/checked/send_6G7MYe
2016-02-09 16:17:42,6, GSM1: Sending SMS from to 33XXXXXXXXX
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>[Tutoriel] Ajout d’un modem GSM port série dans une machine virtuelle VMware</title><link>https://blog.zwindler.fr/2016/02/27/tutoriel-ajout-dun-modem-gsm-port-serie-machine-virtuelle-vmware/</link><pubDate>Sat, 27 Feb 2016 13:30:07 +0000</pubDate><guid>https://blog.zwindler.fr/2016/02/27/tutoriel-ajout-dun-modem-gsm-port-serie-machine-virtuelle-vmware/</guid><description>&lt;img src="https://blog.zwindler.fr/2016/02/233_800.webp" alt="Featured image of post [Tutoriel] Ajout d’un modem GSM port série dans une machine virtuelle VMware" /&gt;&lt;h2 id="gsm-supervision-ordonnanceurs-et-virtualisation"&gt;GSM, supervision, ordonnanceurs et virtualisation
&lt;/h2&gt;&lt;p&gt;Avant de dérouler le tutoriel, je voudrais rapidement resituer pourquoi j’ai eu besoin d’affecter un port série physique à une machine virtuelle.&lt;/p&gt;
&lt;p&gt;Aujourd’hui, dans mon équipe, on ne déploie presque plus de serveurs physiques. Les seuls qu’on intègre sont quelques rares progiciels dont les couts de licences se calculent en fonction du nombre de cœur et de nouveaux hyperviseurs bien entendu. Dans un proche avenir nous devrons peut être nous y remettre car nous étudions pas mal les technologies de conteneurs (Docker pour ne citer que lui), et l&amp;rsquo;empilement des couches virtualisation + conteneurs ne nous parait &lt;em&gt;pas toujours&lt;/em&gt; opportune.&lt;/p&gt;
&lt;p&gt;Du coup, ma direction m’a demandé s’il était possible (je n’ai pas dis souhaitable) que notre future plateforme de supervision pour l’exploitation de notre infrastructure soit une machine virtuelle. Comme les administrateurs d’astreintes sont prévenus la nuit par le biais d’alertes SMS envoyés par un boitier GSM en port série (ou USB, le principe est le même), il fallait pouvoir garantir qu’on puisse reproduire cette fonctionnalité sur une machine virtuelle. C’est donc le but de ce tutoriel : affecter un port série physique (ou un port USB) à une machine virtuelle.&lt;/p&gt;
&lt;p&gt;Je reviens sur la raison pour laquelle j’oppose possible et souhaitable. Les moteurs de supervision ne sont ni plus ni moins que des ordonnanceurs. Et qui dit ordonnancement dit nécessité de planifier des événements dans le temps de manière fiable. Et c’est sur le CPU que l’on compte surtout pour cela.&lt;/p&gt;
&lt;p&gt;Or, sur une machine virtuelle, le temps CPU n’est pas garanti. Les machines virtuelles se partagent du « temps processeur physique » entre elles. Schématiquement, on pourrait dire que dans certains cas où l’hyperviseur est un peu chargé, les machines se mettent en pause régulièrement en attendant qu’il y ait suffisamment de processeurs physiques pour reprendre l’activité. Cela peut conduire à des dysfonctionnements lorsque les applications (leur cœur applicatif) n’ont pas été prévues pour tenir compte de cette contrainte. Car elle n’existe pas dans le monde physique, où, même si le serveur est chargé, il n’est jamais vraiment figé (pas comme une VM en tout cas).&lt;/p&gt;
&lt;h2 id="transfert-du-port-série-gsm-de-lhôte-physique-vers-la-machine-virtuelle"&gt;Transfert du port série GSM de l’hôte physique vers la machine virtuelle
&lt;/h2&gt;&lt;p&gt;Je vous passe le moment où vous branchez le module GSM sur le port série ;-).&lt;/p&gt;
&lt;p&gt;Une fois le module GSM installé sur le port série de l’hyperviseur, l’ajout du port série se fait machine virtuelle arrêtée. Ouvrez le menu de modification de la machine virtuelle (client lourd ou web, peu importe).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/02/serial_1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/02/serial_2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/02/serial_3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Démarrez la machine virtuelle.&lt;/p&gt;
&lt;h2 id="installation-du-smsd"&gt;Installation du smsd
&lt;/h2&gt;&lt;p&gt;Dans mon cas, pour vérifier que le port fonctionne bien comme je l’entend, j’installer smsd, qui me permet de reproduire ce que j’ai sur mes serveurs physiques.&lt;/p&gt;
&lt;p&gt;Récupérez le fichier d’installation RPM sur un dépôt additionnel de type EPEL ou sur des repositories internes. Personnellement j’ai trouvé celui ci, qui fonctionne sur ma CentOS 7&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(lien mort)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Installez le serveur et configurer le fichier de configuration, notamment le code pin !&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;yum install smstools-3.1.15-12.el7.x86_64.rpm #ou smstools si on utilise les repositories
vi /etc/smsd.conf
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Par défaut, le serveur scanne les fichiers qui sont envoyés dans &lt;strong&gt;/var/spool/sms/outgoing&lt;/strong&gt;. Sauf que par défaut l’utilisateur smstools créé par le RPM peut ne pas avoir les droits.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;chown -R smstools:smstools /var/spool/sms/outgoing
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;De la même manière, les ports séries ne sont utilisables que par &lt;strong&gt;root&lt;/strong&gt; et les utilisateurs du groupe &lt;strong&gt;dialout&lt;/strong&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ll /dev/ttyS*
crw-rw. 1 root dialout 4, 64 9 févr. 16:36 /dev/ttyS0
crw-rw. 1 root dialout 4, 65 9 févr. 10:40 /dev/ttyS1
crw-rw. 1 root dialout 4, 66 9 févr. 10:40 /dev/ttyS2
crw-rw. 1 root dialout 4, 67 9 févr. 10:40 /dev/ttyS3
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Voici l’erreur qu’on peut avoir dans le cas où les droits n’ont pas été donnés&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;tail -f /var/log/smsd/smsd.log
2016-02-09 16:05:26,3, GSM1: Couldn&amp;#39;t open serial port /dev/ttyS0, error: Permission denied, waiting 30 sec.
2016-02-09 16:05:56,3, GSM1: Cannot open serial port /dev/ttyS0, error: Permission denied
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;usermod -a -G dialout smstools
id smstools
uid=992(smstools) gid=990(smstools) groupes=990(smstools),18(dialout)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;J’ai également eu des problèmes avec SELinux, qui bloquait l’écriture de &lt;strong&gt;smstools&lt;/strong&gt; dans &lt;strong&gt;ttyS0&lt;/strong&gt; malgré l’ajout au groupe &lt;strong&gt;dialout&lt;/strong&gt;. Pour tester si le problème vient de là, vous pouvez temporairement désactiver SELinux, le temps de vérifier, puis affecter les bon droits SELinux.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;setenforce 0
getenforce
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Démarrez le démon et le mettez le en démarrage automatique.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;systemctl daemon-reload
systemctl start smsd
systemctl enable smsd
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Voici un petit script pour envoyer des SMS correctement formatés à &lt;strong&gt;SMSd&lt;/strong&gt; dans le dossier &lt;strong&gt;/var/spool/sms/outgoing&lt;/strong&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vi sendsms
#!/bin/sh
# This script send a text sms at the command line by creating
# a sms file in the outgoing queue.
# I use it for testing.
# $1 is the destination phone number
# $2 is the message text
# if you leave $2 or both empty, the script will ask you
DEST=$1
TEXT=$2
if [ -z &amp;#34;$DEST&amp;#34; ]; then
printf &amp;#34;Destination: &amp;#34;
read DEST
fi
if [ -z &amp;#34;$TEXT&amp;#34; ]; then
printf &amp;#34;Text: &amp;#34;
read TEXT
fi
FILE=`mktemp /var/spool/sms/outgoing/send_XXXXXX`
echo &amp;#34;To: $DEST&amp;#34; &amp;gt;&amp;gt; $FILE
echo &amp;#34;&amp;#34; &amp;gt;&amp;gt; $FILE
echo -n &amp;#34;$TEXT&amp;#34; &amp;gt;&amp;gt; $FILE
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Modifier les droits de sendsms :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;chmod +x sendsms
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Faire un test d’envoi de SMS :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;./sendsms +33XXXXXXXXX &amp;#34;Test 1 2, 1 2&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On peut voir les SMS passer et la communication avec le modem GSM dans le fichier de log &lt;strong&gt;/var/log/smsd/smsd.log&lt;/strong&gt; :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;tail -f /var/log/smsd/smsd.log
2016-02-09 16:17:42,5, GSM1: Modem handler 0 has started. PID: 11881.
2016-02-09 16:17:42,5, GSM1: Using check_memory_method 1: CPMS is used.
2016-02-09 16:17:42,6, GSM1: I have to send 1 short message for /var/spool/sms/checked/send_6G7MYe
2016-02-09 16:17:42,6, GSM1: Sending SMS from to 33XXXXXXXXX
&lt;/code&gt;&lt;/pre&gt;</description></item></channel></rss>