Suite à sa migration vers un container lxc j’ai eu la joie d’avoir ce joli message d’erreur sur mon nouveau serveur Gitlab.

We_re_sorry__but_something_went_wrong__500_

Je me dis rien de grave avec tous les changements réalisés ses derniers jours sur mes containers je vais rafraîchir le cache de Gitlab.

sudo -u git -H bundle exec rake cache:clear RAILS_ENV=production

Et là c’est le drame, mon serveur commence à m’insulter.

WARNING: This version of GitLab depends on gitlab-shell 2.6.8, but you're running 2.6.7. Please update gitlab-shell. rake aborted! Errno::ENOENT: No such file or directory - connect(2) for /var/run/redis/redis.sock /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/connection/ruby.rb:180:in connect_nonblock' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/connection/ruby.rb:180:inconnect' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/connection/ruby.rb:209:in connect' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:322:inestablish_connection' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:94:in block in connect' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:279:inwith_reconnect' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:93:in connect' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:350:inensure_connected' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:207:in block in process' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:292:inlogging' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:206:in process' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:112:incall' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis.rb:441:in block in keys' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis.rb:37:inblock in synchronize' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis.rb:37:in synchronize' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis.rb:440:inkeys' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-store-1.1.6/lib/redis/store/namespace.rb:37:in block in keys' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-store-1.1.6/lib/redis/store/namespace.rb:74:innamespace' /home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-store-1.1.6/lib/redis/store/namespace.rb:37:in keys' /home/git/gitlab/lib/tasks/cache.rake:7:inblock (2 levels) in <top (required)>' Tasks: TOP => cache:clear (See full trace by running task with --trace)

Parmi toutes ses vulgarités il y a une ligne qui retient mon attention.

Errno::ENOENT: No such file or directory - connect(2) for /var/run/redis/redis.sock

Premier réflexe, regarder si le service redis-server est lancé.

systemctl status redis-server -l ● redis-server.service - Advanced key-value store Loaded: loaded (/lib/systemd/system/redis-server.service; enabled) Active: failed (Result: start-limit) since lun. 2015-11-30 10:07:31 CET; 5s ago Process: 18709 ExecStop=/usr/bin/redis-cli shutdown (code=exited, status=1/FAILURE) Process: 18707 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS) Main PID: 18708 (code=exited, status=1/FAILURE) nov. 30 10:07:31 labo systemd[1]: redis-server.service: control process exited, code=exited status=1 nov. 30 10:07:31 labo systemd[1]: Unit redis-server.service entered failed state. nov. 30 10:07:31 labo systemd[1]: redis-server.service holdoff time over, scheduling restart. nov. 30 10:07:31 labo systemd[1]: Stopping Advanced key-value store... nov. 30 10:07:31 labo systemd[1]: Starting Advanced key-value store... nov. 30 10:07:31 labo systemd[1]: redis-server.service start request repeated too quickly, refusing to start. nov. 30 10:07:31 labo systemd[1]: Failed to start Advanced key-value store. nov. 30 10:07:31 labo systemd[1]: Unit redis-server.service entered failed state.

A ce moment un petit frisson me parcours le dos et je me sens moins confiant pour le coup. Je décide de reprendre point par point l’étape pour l’installation du serveur Redis sur la documentation Gitlab. Je commence par vérifier si redis est bien configuré.

nano /etc/redis/redis.conf port 0 unixsocket /var/run/redis/redis.sock unixsocketperm 770

De ce côté là tout est bon. je vérifie si le répertoire /var/run/redis/ est présent, mais il est désespérément vide. Et le service refuse toujours de se lancer. Un éclair de lucidité me traverse l’esprit, quid des autorisations ?

cd /var/run ls -la total 16 drwxr-xr-x 10 root root 340 nov. 30 09:56 . drwxr-xr-x 1 root root 146 nov. 29 11:55 .. -rw-r--r-- 1 root root 3 nov. 29 11:55 crond.pid ---------- 1 root root 0 nov. 29 11:55 crond.reboot lrwxrwxrwx 1 root root 25 nov. 29 11:55 initctl -> /run/systemd/initctl/fifo drwxrwxrwt 4 root root 80 nov. 29 11:55 lock drwxr-xr-x 3 root root 60 nov. 29 11:55 log drwxr-xr-x 2 root netdev 80 nov. 29 11:55 network -rw-r--r-- 1 root root 4 nov. 29 11:55 nginx.pid drwxr-xr-x 2 root root 80 nov. 30 10:32 redis drwxr-xr-x 2 root root 40 nov. 29 11:55 sendsigs.omit.d lrwxrwxrwx 1 root root 8 nov. 29 11:55 shm -> /dev/shm drwxr-xr-x 2 root root 40 nov. 29 11:55 sshd -rw-r--r-- 1 root root 3 nov. 29 11:55 sshd.pid drwxr-xr-x 16 root root 420 nov. 30 09:57 systemd drwxr-xr-x 2 root root 40 nov. 29 11:55 user -rw-rw-r-- 1 root utmp 3456 nov. 30 11:53 utmp

Effectivement les autorisations ne sont pas bonnes, car seul le root à accès au dossier. Par conséquent le service qui est lancé avec l’utilisateur redis ne peut créer de fichier **redis.sock. Pour remédier au problème j’ai donc attribué les bonnes autorisations au dossier.

chown redis:redis /var/run/redis

Nouvelle tentative de lancement du serveur redis.

systemctl start redis-server systemctl status -l redis-server ● redis-server.service - Advanced key-value store Loaded: loaded (/lib/systemd/system/redis-server.service; enabled) Active: active (running) since lun. 2015-11-30 10:32:06 CET; 1h 30min ago Process: 18709 ExecStop=/usr/bin/redis-cli shutdown (code=exited, status=1/FAILURE) Process: 19694 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS) Main PID: 19695 (redis-server) CGroup: /system.slice/lxc.service/system.slice/redis-server.service └─19695 /usr/bin/redis-server 127.0.0.1:0 nov. 30 10:32:06 labo systemd[1]: Started Advanced key-value store.

Pour conclure j’ai fait un petit tour sur la page web de Gitlab. C’est avec un gros ouf de soulagement que j’ai retrouvé mon accès. Il s’agit tout simplement d’un oublie de ma part, car la documentation explique qu’il faut mettre à jour les autorisations du répertoire redis et je suis passé à côté deux fois. On ne le redira jamais assez RTFM !