Description

Smeagol est une VM dans le pool du I11. Elle héberge le Wiki (Gollum).

Elle utilise pegase en proxy http pour les requêtes que les services peuvent faire.

Services hebergés

Gollum

Installation/Update

Le wiki est installé avec Gollum, sur l'utilisateur wiki. Gollum est installé via nos sources patchées depuis notre dépôt et clôné dans ~wiki/gollum-forks.

La procédure d'installation est décrite en détail dans le readme.

Globalement, les gems sont installés dans un "environnement virtuel" à la ruby, pour que les versions se côtoient sans problèmes, bref c'est bundle qui gère l'installation des dépendences. Le programme gollum en lui même n'est pas compilé, et est lancé directement depuis la source du dépôt.

Ainsi, pour intégrer des mises à jour depuis le dépôt :

  • pullez les modifications : git pull.
  • Relancez le service systemctl restart gollum Et c'est tout.

Pour la configuration du service à proprement parler, voir les détails sur l'article Wiki.

Le Hack de Ruby

Parce que Ruby c'est nul, il y a un "bug" dans la lib Net/HTTP de Ruby : dans leur méthode "post_form", ils instancient un objet HTTP de telle manière que les variables d'environnement pour définir un proxy est pas prise en compte. En gros ils forcent le paramètre proxy_addr à Nil, alors que dans le constructeur ils vérifient que si ce paramètre n'est pas passé, ils vont lire dans les var d'env sinon ils l'utilisent. Or là il est passé mais vaut Nil donc ça ne va pas chercher dans les var d'env et ça ne fait rien. En bref, le code source de cette lib a été grossièrement hackée pour contourner cela.

Il s'agit de la ligne 612 dans /usr/lib/ruby/2.1.0/net/http.rb :

   p_addr = :ENV

Gestion du processus

Gollum est un programme compilé, tournant en tant que daemon, et géré par systemd avec la commande systemctl <cmd> gollum.

L'unit-file est copié depuis le dépôt dans /etc/systemd/system/gollum.service.

Synchronisation du Wiki

Le wiki est disponible sur le dépôt ResEl/general.wiki et clôné dans ~wiki/general.wiki. Il est au moyen d'un compte wiki créé sur Gitlab, dont la clé ssh est dans .ssh/id_rsa.

Il y a un script de synchronisation; copié depuis le dépôt, lancé régulièrement avec une tâche cron :

*/1 *  *    *   * cd ~wiki/ && sync.sh > /dev/null 2>&1
Si ce script rencontre une erreur il l'écrit dans le fichier SYNC_ERROR qu'il crée. Il le supprimme si aucune erreur.

Monitorage de la synchro

La synchronisation est monitorée via Icinga. Pour ça, il y a un wrapper icinga, copié le dépôt dans ~wiki/icinga-wrapper.sh. Ce wrapper va simplement vérifier la présence de SYNC_ERROR et récuperer l'erreur le cas échéant.

Ce script est lancé par ssh depuis Icinga sur Eris.