# Construction de Redis sur Raspbian **Redis** est un magasin clé-valeur utilisé par **ntopng** pour mettre en cache les données et les préférences. **Redis** s'exécute en tant que service externe. **ntopng** se connecte à **Redis** à l'aide de sockets. Ne pas se connecter à **Redis** entraînerait un dysfonctionnement de **ntopng**. **Redis** doit toujours être opérationnel et accessible pour garantir l'intégralité des fonctionnalités. #### Construire les binaires à partir des sources Télécharger les sources **Redis**. ``` wget http://download.redis.io/redis-stable.tar.gz ``` Désarchiver le package téléchargé. ``` tar xzf redis* ``` Aller dans le dossier `redis/`: ``` cd redis* ``` Construire maintenant **Redis** à partir de sources sur le Raspberry Pi avec les commandes suivantes. ``` sudo make make test sudo make install PREFIX=/usr ``` À ce stade, on a compilé Redis maintenant, il faut le rendre accessible à tous les utilisateurs: ``` sudo mkdir /etc/redis ``` Copier le fichier `redis.conf` là dedans ``` sudo cp redis.conf /etc/redis/ ``` Il est temps de nettoyer ``` cd .. ``` Supprimer l'archive et le dossier avec cette commande. ``` sudo rm -Rf redis* ``` #### Installation et configuration Créer un utilisateur sans répertoire personnel et sans possibilité de se connecter au système pour exécuter Redis en tant qu'utilisateur normal. ``` sudo adduser --system --group --disabled-login redis --no-create-home --shell /bin/nologin --quiet ``` Vérifier le fichier shadow pour voir si l'utilisateur Redis a été créé. ``` cat /etc/passwd | grep redis ``` Modifier le fichier de configuration Redis pour configurer la mise en cache. ``` sudo nano /etc/redis/redis.conf ``` Rechercher les entrées suivantes. certains sont déjà définis. Mais, il y a encore peu de valeurs à définir. Par exemple, * `daemonize yes` pour exécuter Redis en tant que Deamon. * `stop-writes-on-bgsave-error no`, Redis s'arrête en cas d'échec et nécessite un redémarrage manuel. En utilisant ce paramètre, Redis ne s'arrêtera pas en cas d'échec. * `maxmemory 70M`, la RAM est limitée sur un RaspberryPi, donc 70 Mo suffisent pour la plupart des besoins. Si on a besoin de plus de mémoire, ajuster ce paramètre ultérieurement. ``` bind 127.0.0.1 port 6379 daemonize yes stop-writes-on-bgsave-error no rdbcompression yes maxmemory 50M maxmemory-policy allkeys-lru ``` À ce stade, on peut créer un script pour exécuter le serveur **Redis**. Créer un répertoire à partir duquel ce script sera exécuté. ``` sudo mkdir -p /var/run/redis ``` Faire de l'utilisateur redis le propriétaire de ce répertoire. ``` sudo chown -R redis /var/run/redis ``` #### Daemonisation Créer le scénario. ``` sudo nano /etc/init.d/redis-server ``` Coller ce qui suit. ``` #! /bin/sh ### BEGIN INIT INFO # Provides: redis-server # Required-Start: $syslog $remote_fs # Required-Stop: $syslog $remote_fs # Should-Start: $local_fs # Should-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: redis-server - Persistent key-value db # Description: redis-server - Persistent key-value db ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/bin/redis-server DAEMON_ARGS=/etc/redis/redis.conf NAME=redis-server DESC=redis-server RUNDIR=/var/run/redis PIDFILE=$RUNDIR/redis-server.pid test -x $DAEMON || exit 0 if [ -r /etc/default/$NAME ] then . /etc/default/$NAME fi . /lib/lsb/init-functions set -e case "$1" in start) echo -n "Starting $DESC: " mkdir -p $RUNDIR touch $PIDFILE chown redis:redis $RUNDIR $PIDFILE chmod 755 $RUNDIR if [ -n "$ULIMIT" ] then ulimit -n $ULIMIT fi if start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS then echo "$NAME." else echo "failed" fi ;; stop) echo -n "Stopping $DESC: " if start-stop-daemon --stop --retry forever/TERM/1 --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON then echo "$NAME." else echo "failed" fi rm -f $PIDFILE sleep 1 ;; restart|force-reload) ${0} stop ${0} start ;; status) status_of_proc -p ${PIDFILE} ${DAEMON} ${NAME} ;; *) echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload|status}" >&2 exit 1 ;; esac exit 0 ``` Rendre ce script exécutable. ``` sudo chmod +x /etc/init.d/redis-server ``` Ajouter ce script à exécuter en tant que commande ``` sudo update-rc.d par défaut du serveur redis ``` Si tout est correctement configuré, le serveur Redis peut désormais être manipulé via cette commande ``` sudo service redis-server restart ``` Maintenant, vérifier l'état du serveur ``` redis-server -v ``` S'assurer qu'il écoute sur 127.0.0.1 ``` netstat -antp ``` S'assurer que le processus Redis s'exécute en tant qu'utilisateur redis. ``` ps aux | grep redis ``` On peut maintenant profiter de l'installation du serveur de mise en cache Redis sur le Raspberry Pi.