Deblan blog

Informatique

La vie d'un DSI

En début d'année, j'ai intégré le siège du groupe Zenitude. C'est une société qui gère aujourd'hui près de 25 résidences hôtelières partout en France. Mon rôle consiste à traiter l'informatique (au sens large) du groupe.

C'est un projet professionnel assez nouveau pour moi, car dès mon entrée dans la vie active, c'est dans une agence web où j'ai atterri avec l'étiquette de développeur. J'ai évolué vers de la gestion de projet technique pour devenir ensuite directeur technique dans une seconde agence. J'avais donc un profil très orienté développement web et j'ai développé l'administration système.

Je suis passé d'un environnement où les outils étaient assez bien maîtrisés (environnement de développement et d'hébergement) vers un environnement où l'informatique prend une échelle beaucoup plus importante. À ce stade, des outils et des processus m'échappaient parfois.

Voici quelques problématiques auxquelles je me suis confronté et quelques-unes des solutions mises en places.

Le contexte

Il faut savoir que Zenitude existe depuis 2009. On ne m'a pas attendu pour faire de l'informatique et je dois composer avec neuf ans d'histoire. Par ailleurs, comme nous récupérons la gestion d'établissements qui ont eux aussi leur passif, on n'a aucune uniformisation du parc.

Le parc informatique

Le groupe Zenitude, c'est une centaine d'ordinateurs sous Windows, 3 serveurs Debian GNU/Linux, 1 serveur avec Ubuntu, une tripoté de photocopieurs, des lignes téléphoniques SIP, des accès RTP sur 25 serveurs Microsoft Server, etc. Bref, il y a du monde et le premier truc que j'ai admis c'est qu'il est impossible d'avoir une maîtrise de tout ça.

Quand je parle de maîtrise, je pense déjà à l'inventaire du parc qui n'est absolument pas précis. Nous le verrons juste après mais l'objectif est de faire le plus de choses en ligne. Les machines tendent à devenir que de simples terminaux d'accès vers des outils déportés. Que ce soit bien ou pas, l'avenir nous le dira mais c'est un choix plutôt intéressant pour le moment. Quand une machine tombe, on ne se prend pas la tête et on la remplace. Les données sont en ligne donc il n'y a pas de perte.

Pour piloter le parc et assurer un minimum de sécurité et de support, nous avons déployé la solution Teamviewer permettant un accès avancé sur les machines via une console en ligne et un client manager. On peut harmoniser la politique de sécurité avec une solution anti-virus intégrée (IT Brain) et quelques règles définies en amont. Dès l'ajout d'une machine dans le parc, il suffit d'installer Teamviewer et je peux déployer ce que je veux dessus. Si quelque chose de bizarre est détecté, je suis averti par mail (Virus, problème de disque, etc.).

Teamview

Du côté des serveurs, les machines sous Windows ne sont pas infogérées par Zenitude. J'ai installé les serveurs sous Linux et c'est aussi moi qui les administre. Pour assurer l'accessibilité des services, j'ai déployé une instance Zabbix pour les monitorer. Dès qu'un service est inaccessible ou qu'un problème système est détecté, je suis averti par mail et par SMS suivant le niveau gravité.

Zabbix

Globalement, ça fonctionne bien. Je rencontre cependant deux problèmes récurrents. Le premier est l'installateur Windows 10 pour paramétrer la machine après l'achat. Le second émane des programmes préinstallés par les fabricants. L'un n'est pas toujours évident pour tout le monde et l'autre implique de faire du ménage qui prend du temps.

Le collaboratif

C'est un enjeu important pour les entreprises et c'est loin d'être simple à mettre en place. À Zenitude, on a donc des établissements hôteliers éparpillés partout en France, pilotés en partie par le siège où je travaille.

Chaque établissement a une équipe qui édite des documents communs. On retrouve une majorité de fichiers Excel et Word. La direction a choisi de s'orienter vers Office 365 pour traiter cette problématique. Il faut accompagner les équipes, expliquer le pourquoi du comment, les aider à configurer les logiciels et les former aux bons usages.

Dans les problématiques du tout collaboratif, on retrouve aussi les limitations techniques comme des accès à l'Internet pas toujours fiables et des machines pas toujours à la hauteur. Par ailleurs, quand on sort des sentiers battus, ça devient rapidement une vraie galère (cf Sharepoint sous Debian).

Cependant, j'ai l'opportunité de travailler sur des outils qui réduisent la quantité de problèmes. En effet, même si Office Online reste assez efficace, il est parfois beaucoup trop compliqué pour finalement saisir des données simples. On a lancé des développements en interne et particulièrement une plateforme nommées Tools, sous Symfony 3, qui tend à remplacer les tableurs par des formulaires en ligne. Ça permet de mieux contrôler les saisies et de pouvoir exploiter les données convenablement (graphiques dynamiques, tableaux, déploiement d'API, etc.). On a également remplacé des services externalisés et coûteux, ce qui permet de reprendre la main sur nos données. Aujourd'hui, cette application fait de l'analyse de budgets et de chiffres d'affaire, elle récupère et met en page des données de e-réputation pour les établissements, elle centralise les demandes pour les supports de communication, elle permet de mettre en ligne des offres de recrutement, elle intègre le processus d'achat du groupe, une messagerie instantanée est inclue, etc. C'est une véritable valeur ajoutée pour le groupe.

Zenitude Tools

Le changement par l'accompagnement

Comme je l'ai évoqué, quand on met en place de nouvelles solutions, il est primordial de penser à l'accompagnement. Cet accompagnement doit se faire autour de deux problématiques majeures : l'adoption de l'outil et son utilisation. En effet, quand on demande à des directeurs d'établissements, des responsables d'hébergement ou des réceptionnistes de changer leurs habitudes, ils doivent comprendre la nécessité de le faire.

Ce qui suit le « pourquoi », c'est le « comment » et voici une étape complexe à franchir. Même si j'ai acquis de l'expérience en pédagogie, je me suis rendu compte que des choses simples n'étaient pas acquises. Pour illustrer un peu, certains utilisateurs ne font pas la différence entre la version d'Outlook en ligne et le logiciel installé sur leur machine. Ça peut faire sourire mais c'est un fait. Je dois mesurer chaque mot que j'utilise pour expliquer des outils et je travaille beaucoup les interfaces que je produis. J'essaye aussi de réaliser de la documentation dans différents formats : des pages de contenus sous forme de Wiki, des tutoriels vidéos et des présentations.

Wiki

Intrinsèquement lié à l'accompagnement, le support informatique avec le suivi et l'historique des demandes est essentiel pour les utilisateurs et pour moi. J'ai mis en place une plateforme de suivi qui s'appuie sur Redmine, interconnecté à Tools via des API. Nous pouvons ainsi avoir une vision globale des problèmes rencontrés, que ce soit sur les outils internes mais également les services externes que nous utilisons. Nous pouvons suivre l'évolution d'une demande et alerter les différents acteurs. Enfin, le jour où l'IT grossie, mes futurs collaborateurs seront en mesure de prendre le relais en toute transparence.

Support

Conclusion

D'autres sujets auraient pu être traités ici mais j'avais envi de partager l'essentiel de mon travail. Il y a eu des ratés mais il faut essayer des choses, en adapter d'autres et remplacer ce qui ne me parait pas judicieux. En l'espace de quelques mois, beaucoup de choses ont avancé et pas mal d'autres projets sont à venir. Je pense avoir beaucoup appris depuis mon arrivée à Zenitude et je suis très fiers des résultats obtenus.

Par ailleurs, si on enlève la partie collaboration avec Office 365, Teamviewer et les machines sous Windows, le logiciel libre a une place importante dans les outils déployés à Zenitude. Des applications métiers sont en partie libres, je développe sur des outils libres (ou assimilés) et ça prouve que ça fonctionne en entreprise et particulièrement dans les moyennes entreprises (sans rentrer dans une optique de tout faire en libre).


Migration de Gogs vers Gitea

Gogs est une plateforme pour gérer des dépôts GIT à la manière de Github. C'est un projet sous licence MIT qui fonctionne bien mais son développeur ne propose par une collaboration des plus simple.

Il y a pas mal de temps déjà, la communauté a forké le projet pour créer Gitea. Au départ, nous avions une version très proche de Gogs mais Gitea évolue maintenant de façon indépendante. Gitea offre plus de fonctionnalités et j'ai décidé de migrer Gitnet vers cet outil.

La migration n'a pas été évidente mais voici une TODO list si vous souhaitez le faire de votre coté !

  1. Faire une sauvegarde de la base de données de Gogs
  2. Faire une sauvegarde des dépots de Gogs
  3. Suivre la procédure décrite dans la documentation

Après ça, mon répertoire gitea a cette forme :

/custom
/custom/conf/
/custom/conf/app.ini
/data
/data/avatars
/data/sessions
/log

Au départ, j'ai fait le bourrin et j'ai lancé la version 1.5 de gitea pour au final tout casser. Du coup, pour passer de Gogs à Gitea 1.5, j'ai décidé de récupérer les binaires des versions 1.0, 1.1, 1.2, 1.3 et 1.4 de Gitea et je les ai lancé successivement. Je me suis donc assuré de ne manquer aucne migrations de base de données.

Dans /path/to/gitea :

for v in 1.0.2 1.1.0 1.2.0 1.3.0 1.4.0 1.5.0; do
    wget https://github.com/go-gitea/gitea/releases/download/v${v}/gitea-${v}-linux-amd64
    chmod +x gitea-${v}-linux-amd64
done

…Et on migre la base de données en démarrant chacune de ces versions :

git@host: /path/to/gitea $ ./gitea-1.0.2-linux-amd64 web
git@host: /path/to/gitea $ ./gitea-1.1.0-linux-amd64 web
git@host: /path/to/gitea $ ./gitea-1.2.1-linux-amd64 web
git@host: /path/to/gitea $ ./gitea-1.3.0-linux-amd64 web
git@host: /path/to/gitea $ ./gitea-1.4.0-linux-amd64 web
git@host: /path/to/gitea $ ./gitea-1.5.0-linux-amd64 web

À l'heure où j'écris cet article, la version 1.5.1 est dispo mais elle ne fonctionne pas chez moi. Je vais donc attendre un peu pour upgrader Gitea.

J'ai fais le tour de Gitnet et je n'ai pas rencontré de bug. J'espère ne pas être passé à coté d'un gros soucis ! En tout cas, je suis très content d'avoir pu réaliser cette migration en même pas une heure !


Sharepoint Office365 sur Linux : automatiser l'authentification

Suite de l'aventure avec Sharepoint !

On a pu passer 2 étapes cruciales pour jouer avec Sharepoint Online :

Après quelques jours d'utilisation, il s'avère que les cookies d'authentification ne sont plus valables. C'est un gros problème car c'est pénible de les récupérer manuellement pour ensuite les injecter dans le fichier de configuration Davfs.

J'ai planché quelques heures sur une solution : réaliser le parcours de connexion d'un utilisateur qui passerait par un navigateur web.

Le projet est libre et voici comment l'installer et l'utiliser.

Note : il faut avoir NodeJS sur sa machine. J'ai développé le code en version 6.13.0.

Il faudra déclarer 3 variables d'environnement contenant le site Sharepoint, l'identifiant de connexion et le mot de passe :

Il ne reste plus qu'à lancer le script qui devrait vous retourner du JSON avec les 2 cookies dedans :

À vous de choisir la méthode pour alimenter la configuration de Davfs avec ces données !


Sharepoint Office365 sur Linux (Webdav/Davfs) avec des fichiers accentués

Suite de l'aventure avec Sharepoint !

Je me suis rendu compte que les répertoires et les fichiers nommés avec des accents ne sont pas montés par Davfs. Le problème vient bien sur de Microsoft qui n'est pas foutu d'implémenter un protocole en suivant les standards ! Le support technique est une vraie plaie et ne veut pas comprendre que le problème vient de chez eux…

En effet, les spécifications WebDAV indiquent que les caractères spéciaux (espace compris) doivent être encodés en %XXX. Par exemple, on doit retrouver %C3%A9 à la place de é. Or, Sharepoint ne remplace que les espaces (%20). Voici une partie de la réponse HTTP formée par Sharepoint pour un fichier nommé "éducation.pdf" :

<D:href>https://foo.sharepoint.com/sites/bar/Documents%20partages/éducation.pdf</D:href>

Alors que ça devrait être sous cette forme :

<D:href>https://foo.sharepoint.com/sites/bar/Documents%20partages/%C3%A9ducation.pdf</D:href>

Du coup, j'ai du travaillé sur un correctif et voici une POC qui corrige le problème. Elle consiste à faire passer les requêtes HTTP de DavFS à travers un proxy qui fera le boulot de Sharepoint : encoder les caractères en question !

Je travaille sur ma machine de dev dans ~/www/repo/sharepoint-webdav-proxy.

J'ai choisi le proxy mitmproxy car on peut modifier les requêtes et les réponses à la volé.

Les binaires de mitmproxy sont placés dans ./bin/. Si vous lancez une première fois bin/mitmproxy, des certificats SSL seront créés dans ~/.mitmproxy/.

Configuration de DavFS :

$ sudo cp ~simon/.mitmproxy/mitmproxy-ca-cert.pem /etc/davfs2/certs/

Dans /etc/davfs2/davfs2.conf, j'ai ajouté :

[/mnt/sharepoint/]
proxy 127.0.0.1:8118
trust_ca_cert /etc/davfs2/certs/mitmproxy-ca-cert.pem
use_proxy 1
[...]

Adapteur WebDAV :

Dans src/webdav-adapter.py :

Edit : la version colorée affiche mal certain caractères. Consulter la version texte.

Lancement du proxy :

./bin/mitmdump --mode regular --listen-host 127.0.0.1 --listen-port 8118 -s ./src/webdav-adapter.py

Une fois tout ça réalisé, mount.davfs va pouvoir monter les répertoires/fichiers accentués.


Monter un partage Sharepoint Office365 sur Linux (Webdav/Davfs)

Dans le cadre de mon travail, je développe une application web (nommée Tools) qui fait office de boite à outils pour le groupe Zenitude. L'idée de l'application est de fournir un ensemble d'outils pour faciliter le travail de mes collaborateurs.

Parmi la flopée de fonctionnalités, on trouve des interfaces qui affichent des données récupérées depuis des fichiers Excel. Elles sont analysées et mises en page par l'application (graphiques et tableaux).

Ces fichiers sont initialement déposés sur un espace collaboratif Sharepoint délivré par Office365. J'avais pour objectif de travailler avec les API de Microsoft mais c'est un véritable calvère. C'est mal documenté et le support technique de premier niveau est complètement naze. Du coup, je me suis résolu à faire des formulaires pour déposer les fichiers manuellement.

Pour éviter d'avoir des formulaires d'upload de fichier, je souhaite monter le partage Sharepoint sur le serveur afin d'accéder, en quasi temps réel, au contenu des fichiers qui m'intéressent. Microsoft fournit OneDrive qui est un outil de synchronisation pour monter le partage Sharepoint sur son ordinateur mais seul Microsoft Windows et IOS sont supportés. Il s'appuie sur le protocole WebDAV mais authentifie les utilisateurs avec le protocole OAuth2.

Sous Linux, davfs2 permet de faire des montages WebDAV dans son système de fichiers. La problématique d'authentification via OAuth2 est réelle car impossible de passer un couple login/mot de passe classique. Une solution existe et consiste à récupérer des cookies générés après l'authentification OAuth2 via un navigateur et indiquer à davfs2 de les injecter dans les requêtes HTTP WebDAV.

Pour des questions de sécurité, j'ai ajouté à l'organisation Office365 un compte utilisateur qui, par défaut, ne peut lire que les fichiers du partage. Lorsque que je me connecte à Office365 via un navigateur web en utilisant ce compte, 2 cookies sont créés : rtFa et FedAuth. Il faut conserver leur valeur respective car nous en auront besoin pour configurer le montage.

On va installer le driver davfs2 pour réaliser le montage :

# aptitude install davfs2

Je décide que le point de montage sera dans /mnt/sharepoint. Dans /etc/davfs2/davfs2.conf, on indique à davfs2 d'ajouter les cookies. Il faut bien évidement remplacer XXXXXX et YYYYYY par ce que vous avez récupéré :

[/mnt/sharepoint/]
ask_auth 0
add_header Cookie rtFa=XXXXXX;FedAuth=YYYYYY

Il reste maintenant à faire le montage :

# mount.davfs -o ro "https://foo.sharepoint.com/bar/Documents partages" /mnt/sharepoint

Si tout se passe bien, vous devrier avoir le montage fonctionnel. Ça ne sera pas détaillé ici mais vous pouvez maintenant affiner la configuration, faire du cache sur les fichiers, gérer les permissions plus finement, passer par /etc/fstab pour automatiser le montage, etc.