Outils du site

fr:blog:post_046

Un transfert de Jukni

Chronique de Zatalyz

Voici un nouvel épisode de la saga des sysadmins ! Car nous venons de faire un pas de géant, et ça vaut le coup de vous expliquer un peu ce qui s'est passé et ce qui est prévu. En effet, il s'en est déroulé, des choses, depuis Des serveurs et des ra.

Hacker en voyage. Source : Pixabay, CC0

Dans les épisodes précédents...

Comme relaté dans Les aventures de Groska, nous avons dû transférer les données dans l'urgence l'été dernier, à cause d'un serveur qui donnait de sacrés signes de fatigue. Ce transfert s'était fait avec les moyens du moment. Nous avons pris le temps de configurer deux serveurs physiques en mode hyperviseur Xen, c'est à dire un système un peu spécial qui permet de faire des sortes de machines virtuelles1). Pour simplifier : l'architecture de base de nos serveurs est relativement robuste, bien documentée, et sécurisée correctement. Sur ces hyperviseurs, nous faisons donc tourner diverses machines virtuelles (VM), qui se comportent comme des serveurs indépendants, ou presque.

Un état des lieux

Pour une partie de nos services, tout allait bien. Ainsi nos instances d'Etherpad et de Gitlab, hébergées dans leurs propres VM, ont eu une mise à jour rapide et brutale. C'est paradoxal, car ces deux services sont aussi les plus casse-pieds, avec une capacité à tout péter qui est assez intéressante. Cependant, pour eux, le transfert et la mise à jour se sont bien passées et rapidement, entre autres parce que justement, à force de me prendre la tête avec eux, cela faisait longtemps qu'ils étaient sur leur propre machine, ce qui limite les problèmes de conflit avec d'autres services.

Pour le serveur de jeu, c'était un peu plus complexe, et ça l'est toujours, car les librairies qu'il demande sont antiques, et donc il est difficile de le faire tourner sur un OS récent. Deed, Siela1915 et Aleajactaest travaillent depuis un moment sur la question, mais jusqu'à présent, Lirria continue de tourner sous Debian Jessie. Pour celles qui n'ont pas suivi, Debian Jessie, c'est l'ancienne version stable de Debian ; ancienne comme “plus trop maintenue”. Il y a encore des mises à jour de sécurité, donc ce n'est pas non plus une catastrophe, mais il faudra bien qu'on mette cette VM à jour aussi, à un moment. En même temps, vous le savez, c'est écrit gros quand vous vous connectez au jeu : la sécurité sur le serveur de jeu n'est absolument pas garantie. Alors nous ne sommes pas à une version d'OS près. Pour tout vous dire, on a déjà repéré diverses petites failles, mais les corriger entraîne des réactions en cascade. Donc nous le répétons, très fort : ne mettez pas un vrai mail ni un vrai mot de passe sur Lirria ! Pas d'inquiétude non plus, les failles ne sont pas si simples à exploiter, et il n'est pas possible de s'en servir en dehors du serveur de jeu, nous l'avons bien séparé du reste.

Le temps passe. Source : Pixabay, CC0

Nous en venons donc à tout le reste du site web : les wikis, le forum, les divers petits outils ici et là que vous ne connaissez peut-être même pas… Quasiment tout est hébergé sur une seule VM, baptisée Jukni 2). Jukni était aussi encore avec Debian Jessie, et sa mise à jour posait divers problèmes. Au fil des mois, j'ai tenté diverses approches, en clonant la VM pour tester la mise à jour globale, en tentant de la refaire de zéro, mais rien à faire : il y avait toujours un truc ou un autre qui coinçait. Entre MariaDB qui me faisait des erreurs bizarres, les bots qui voulaient Python 3 et Debian Stretch qui ne voulait pas leur donner autre chose que du Python 2.7, Dokuwiki qui aurait bien voulu tirer parti de php7 mais le forum qui préférait php5… Je me noyais dans ce bazar.

Cela faisait aussi un moment que nous souhaitions passer à XMPP, en remplacement d'IRC. Link Mauve nous a aidées très en amont sur pas mal de points, et Jabberfr héberge nos canaux depuis, mais pour migrer officiellement, il me fallait quelques fonctionnalités qui ne pouvaient être offertes que par un bot. Or, le bot, il voulait Python 3. Ce simple point de détail, que des Mages plus aguerries auraient contourné rapidement, m'a rendue chèvre durant tout l'hiver.

À côté de ça, Rollniak, l'un de nos sysadmins, a repris les cours et l'alternance, ce qui ne permettait plus que je l'exploite, tandis que Shepeng était lui-même bien occupé. Moi-même, je dois le dire, j'avais vraiment envie de faire autre chose… et d'ailleurs, je l'ai fait !

Bref, ce n'était pas royal…

Quand l'espoir surgit

Nous avons cependant reçu de l'aide de façon inespérée.

Tout d'abord avec Tycho Brahe, qui s'est proposé de nous aider à mettre Django en place. Pour celles qui n'ont pas suivi l'affaire, nous savons que nous ne pouvons pas récupérer les éléments web du serveur de jeu (parfois appelé “WebIG”) : c'est un horrible fatras de couches accumulées, datant parfois de l'an 2000 (ce qui est vieux en informatique), c'est un nid de poussière, de bugs, de failles et d'horreurs. Nous avons pris la décision de valoriser Python pour les développements en lien avec le serveur, car c'est un langage qui s'interface bien avec le C++, tout en offrant beaucoup plus de facilité et de maniabilité et qui est accessible à des personnes n'ayant jamais codé3). À partir de là, il était logique d'utiliser aussi Python pour les API et la partie web du serveur de jeu, et ça tombe bien : Django est un framework web/Python ayant un certain succès, et de l'avis de celles qui l'ont testé chez nous, il est “très sympa”.

Tycho nous annonce donc qu'il connaît bien Django, et se propose de nous aider. Mais plutôt que de s'attaquer directement à l'API du serveur de jeu (ce qu'il a aussi fait avant de s'arracher les cheveux…), il a trouvé que c'était intéressant d'unifier le site web… et il a bien raison. Car Django va nous permettre, à terme, de s'identifier une seule fois pour accéder à toute la galaxie Khaganat.

Il a donc codé un équivalent au pastebin, un analyseur de log (IRC/XMPP) avec plein de fonctionnalités sympa, un générateur de pages statiques et une barre de navigation générale bien plus simple à maintenir. Je vous ai déjà parlé de notre barre de navigation ? Ou plutôt, nos barres ? Élément d'ergonomie indispensable pour ne pas se perdre trop dans le site, la version actuelle est une petite horreur sous le capot. Nous avions tenté d'en faire une version plus propre avec Osquallo, mais nos contraintes nous avaient condamnées à arrêter avant d'avoir tout finalisé ; cette deuxième version est cependant active sur certaines parties du site. Ce truc est une de mes obsessions. La version de Tycho devrait permettre d'améliorer un peu les choses… j'espère.

Le travail réalisé sur Django est très bon, mais il reste encore du boulot sur la partie cosmétique. Ça, cependant, c'est un peu plus dans mes cordes. J'espère très sincèrement passer ces premiers modules en production avant la fin de l'été.

Tycho n'a pas fait que coder des modules django : il nous a aussi donné de précieux conseils de sécurité, qui est l'un de ses hobbys préférés. Cela a permis de revoir la politique de sécurité de façon générale. J'ai eu quelques remarques sur le fait que nous mettions la barre plus haut que bien des entreprises… et pourtant je sais bien que nous sommes loin d'être à l'optimum, et la sécurité des serveurs est un aspect que je considère comme prioritaire. Grâce à Tycho Brahe, nous allons dans le bon sens.

Nous avons eu une autre aide importante en la personne de Merlin (merlin8282 sur IRC). Attiré par notre deuxième dépêche sur Linuxfr, il nous a rejoint en proposant ses services de sysadmin. Le processus d'acceptation d'un nouveau sysadmin est long, ce qui est généralement frustrant pour celles qui nous proposent leurs compétences dans le domaine, mais Merlin ne s'est pas découragé. Au fil des mois, il a patiemment répondu à mes questions sur IRC, il a relu les wikis, corrigeant les coquilles, apportant des précisions techniques, et il a montré tout à la fois son engagement et ses connaissances. La validation du statut de “super sysadmin”4) demande de remplir une condition de plus : c'est celle de la rencontre physique et de la validation de l'identité, et nos contraintes mutuelles font qu'elle ne pourra pas avoir lieu avant les RMLL, mais nous avons décidé de lui ouvrir les droits sur Jukni, afin qu'il puisse nous aider et démontrer ses talents in vivo. Ou plutôt : Jukni3.

De Jukni à Jukni3

Je vous ai dit que Jukni me donnait du fil à retordre dans sa mise à jour. À un moment de l'histoire, il y a donc eu une VM appelée “Jukni2” sur laquelle j'ai tenté diverses choses, avec un succès très mitigé.

Au moment où nous commençons à connaître suffisamment Merlin pour envisager de lui donner l'accès à nos informations web, débute aussi une autre discussion : comment mettre à jour ce bordel ?

Réunion des sysadmins de tous les niveaux :

  • Les super sysadmins Rollniak, Shepeng et Zatalyz
  • Les personnes ayant des accès sysadmin sur certaines VM : Tycho Brahe, Deed
  • Les consultants : Link Mauve, Merlin

Chacune donne son avis sur l'évolution possible. Debian en version stable pose souci, cela semble clair. Mais du coup, que mettre ? Archlinux, puisque 3 personnes sur les 7 (dont moi) connaissent très bien ce système ? OpenSuse, dont Rollniak fait l'apologie et qui semble réellement adaptée ? Après beaucoup de discussions, nous décidons de rester à Debian, car cela permet :

  1. de ne pas changer les habitudes : tous les tutos sont pensés en mode Debian, et tous les sysadmins savent faire tourner Debian
  2. de limiter un peu le temps à apprendre les spécificités d'un nouvel OS. J'adore Archlinux, mais ses quelques différences avec Debian peuvent demander du temps à une nouvelle arrivante pour comprendre ce qui se passe sous le capot.

Il est possible qu'un jour où nous aurons du temps et des sysadmins motivées pour reprendre la doc, nous passions à d'autres architectures, mais en attendant, Debian est un compromis assez bon.

Par contre, vu les demandes de certains CMS, nous avons décidé de passer à une version un peu spécifique de Debian, qui n'est pas forcément conseillée pour les serveurs : Debian Sid. Sid a l'avantage d'être en rolling release (pas de changement de version à envisager), l'inconvénient et l'avantage d'être l'une des premières étapes pour inclure des paquets dans Debian, ce qui veut dire que ses paquets sont plus récents, mais aussi moins stables. En clair : il y a un risque que lors d'une mise à jour anodine, tout le serveur tombe. Ce risque est cependant limité avec diverses bonnes pratiques, entre autre de suivre les alertes de bug et dans les faits, celles qui font l'expérience de Sid en respectant ces bonnes pratiques ne déplorent aucun accident au fil des ans. La même problématique s'applique d'ailleurs à Archlinux !

Donc, Jukni3 est basé sur une Debian Sid.

Le temps de faire la VM, de configurer la sécurité, et voilà, Merlin et moi commençons à bidouiller et transférer Jukni tranquillement.

La première étape concerne les bots. Après quelques jours d'installation, je peux faire un bilan en demi-teinte. Le bot IRC marche très bien. Limnoria (anciennement Supybot) est un excellent logiciel qui juste marche. Malheureusement il ne marche que pour IRC. Pour XMPP, nous avons eu besoin de deux bots : Errbot, qui accomplit les fonctionnalités secondaires comme ramener les flux RSS et manger de la dentelle, et le bot qui enregistre les conversations, car aucun plugin d'Errbot ne proposait ça. Ce second bot, très simple, a été codé par Linkmauve et marche bien. Par contre, Errbot a arrêté de répondre après quelques jours… pourquoi ? il faudra voir, mais bon, ce n'est pas le plus important. Quoi qu'il en soit, ces trois bot sont installés correctement et arrivent à fonctionner avec Python 3, ce qui est une belle avancée. Cela confirme aussi que nous arrivons (enfin) à utiliser Python 3 correctement : nous avons pu installer pipenv, par exemple, et le faire fonctionner sans comportement trop étrange, et c'est une bonne avancée, qui servira aussi pour Django.

La seconde étape a consisté à vérifier si certains CMS supportaient bien les nouvelles versions de php et de MariaDB. Là aussi, tout s'est bien passé.

Enfin, nous avons finalisé le transfert lui-même après ces premiers tests. Le nom de domaine envoie à présent sur Jukni3 et non sur Jukni, les wikis ont été migrés avec le reste et tout semble bien tourner. Les CMS en question ont tous été mis à jour, ce qui n'est pas rien. Nous avons aussi repris le cloud (basé sur nextcloud) de zéro, ce qui a permis de corriger divers artefacts.

Après plusieurs jours, il semblerait que tout fonctionne. Il nous reste à finaliser les sauvegardes, mais en dehors de ça, le travail est fait.

Quelques services restent actuellement éteints. C'est le cas du pastebin : je préfère envisager de passer sur la version de Tycho et ne pas perdre de temps à réinstaller l'ancien logiciel, et nous avons des alternatives en attendant car les pastebin ne manquent pas sur la toile. Je vous conseille particulièrement 0bin et Framabin.

Teampass reste aussi éteint pour le moment. Les soucis de sécurité qui y étaient liés semblent résolus mais avant de le remettre en place, je souhaite prendre le temps de bien faire le tour, en gros de faire avec mes moyens un bout d'audit sur notre installation potentielle. Il nous manque, donc ça reste assez haut dans les priorités, mais, bon, en attendant, on trouve des façons de partager les mots de passe, en utilisant un framabin chiffré se détruisant à la lecture…

En conclusion

Nous avons donc à présent une infrastructure qui est entièrement mise à jour5), sécurisée d'une façon très honorable pour une petite structure comme la nôtre, avec les outils qui nous sont les plus utiles.

C'est une longue course sur plusieurs mois qui s'achève, et cela me remplit de joie. À présent, les mises à jour régulières seront plus simples à faire. L'infrastructure va continuer d'évoluer peu à peu, mais avec moins de stress à présent.

Merci à toutes celles et ceux qui nous ont aidées !

1)
Oui, bon, je ne suis pas sûre que ce soit plus clair pour celles qui ne connaissent pas…
2)
Araignée en lojban, rapport à sa présence sur la toile.
3)
Si si, c'est vrai : moi même, j'ai lu des programmes Python et j'ai compris ! Et j'ai même modifié quelques trucs. Bon, pour le reste, faut quand même suivre un cours, mais Python est réellement très accessible.
4)
Ayant accès à tout, y compris les hyperviseurs
5)
Enfin, oublions un instant Lirria, dont la problématique est particulière…
fr/blog/post_046.txt · Dernière modification: 2018/06/11 21:09 par merlin8282