Thuban : Créer un initscript sous OpenBSD : vilain et rcctl
vendredi 31 mars 2017 à 15:13Vous vous souvenez de "vilain", un outil qui surveille les logs de votre serveur afin de mettre sur liste noire d'éventuels pirates en temps réel ? Jusqu'à présent, pour le lancer au démarrage, je conseillais l'utilisation du fichier /etc/rc.local
qui permet d'exécuter n'importe quelle commande au démarrage. De plus, la mise en arrière-plan de vilain était gérée par tmux.
Ça fonctionnait bien, mais je voulais quelque chose de plus simple pour faciliter l'installation. L'utilisation d'un "init" script s'imposait.
Après des petites recherches, j'ai eu l'excellente surprise de voir que c'est très facile à mettre en place sous OpenBSD. Ceux qui pensent encore qu'OpenBSD est compliqué sont bien loin de la réalité. Ha ha, je me marre quand je repense aux initscript sous debian, et maintenant le bazar que c'est avec systemd !
Comme d'habitude, tout est documenté dans les pages man. J'ai commencé par regarder où se trouvent les scripts déjà existants : dans /etc/rd.c
. Pas peu fier, je saisis alors la commande suivante :
$ man rc.d
NAME
rc.d – daemon control scripts
SYNOPSIS
/etc/rc.d/daemon [-df] action
DESCRIPTION
The /etc/rc.d directory contains shell scripts to start, stop, and
reconfigure daemon programs (“services”).
...
...
SEE ALSO
rc(8), rc.conf(8), rc.subr(8), rcctl(8)
Cela me conduit à lire en diagonale (ouais hein, je ne suis pas fou, j'ai pas tout lu ^^) man rc.subr
. J'en ai alors plus qu'assez pour écrire l'initscript de vilain que je place dans le fichier /etc/rc.d/vilain
:
#!/bin/sh
#
# $OpenBSD: vilain.rc,v 1.0 2017/03/28 17:58:46 Thuban$
daemon="/usr/local/bin/vilain"
. /etc/rc.d/rc.subr
pexp=".*vilain\\.py"
rc_reload=NO
rc_cmd $1
C'est suffisant. Voici comment ça fonctionne :
-
daemon="/usr/local/bin/vilain"
: On définit l'emplacement de l'exécutable à lancer. C'est mon programme... -
. /etc/rc.d/rc.subr
: On importe les fonctions utilisées par OpenBSD pour gérer les scripts -
pexp=".*vilain\\.py"
: C'est sans doute la ligne la plus importante. Il faut ici entrer l'expression régulière qui permet de retrouver le PID du processus du programme avec la commandepgrep
. Puisque c'est une regex, c'est vraiment puissant. OpenBSD va vérifier au lancement qu'il a bien un processus répondant à cette regex qui tourne, et lancera un kill sur ce PID si je lui demande d'arrêter le daemon. D'ailleurs, Chaque jour, OpenBSD vérifie que tous les processus qui doivent tourner sont bien en marche et envoie un mail à l'admin si ce n'est pas le cas. -
rc_reload=NO
: Pour éviter de recharger la configuration du script. Mon programme ne le supporte pas. -
rc_cmd $1
: La dernière commande qui permet le lancement du daemon.
Et voilà ! :P
On peut qui plus est modifier les fonctions de lancement, restart, stop, tout est décrit dans les manpages de façon très claire.
Reste plus qu'à activer et lancer vilain comme d'hab :
rcctl enable vilain
rcctl start vilain
J'en ai profité pour ajouter un Makefile à vilain histoire de l'installer/désinstaller plus facilement.
OpenBSD est le meilleur de tous les Linux ! XD
Original post of Thuban.Votez pour ce billet sur Planet Libre.