[TUTORIEL] Préservation de la carte SD

tutoriel

#1

Les cartes SD s’usent très vite lors d’écritures multiples.
Pour préserver celle du RPI, on va placer certains répertoires (logs, tmp, …) en RAM.
:warning: Attention : Ils seront effacés à chaque reboot.
De ce fait, dans la seconde étape du tuto, les répertoires de log, placés eux aussi en RAM, seront écrits toutes les heures sur la carte SD car essentiels pour le bon fonctionnement du serveur (mais aussi pour repérer ou se défendre contre des intrusions).

Mise en RAM des fichiers temporaires

Editez le fichier de file system :

$ sudo nano /etc/fstab

Une fenêtre d’édition s’ouvre avec les lignes suivantes :

proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

On rajoute 3 lignes à la fin du fichier pour qu’il ressemble ça :

proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

tmpfs /tmp tmpfs defaults,noatime,nosuid,size=300m 0 0
tmpfs /var/tmp tmpfs defaults,noatime,nosuid,size=300m 0 0
tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=10m 0 0

Puis sauvegardez (Ctrl-o pour enregistrer, Ctrl-x pour quitter).

J’attire votre attention sur le paramètre size de chaque ligne, qui limite le volume maximal de données qui pourront être stockées dans chaque répertoire en RAM. Et comme nos Pi ne sont pas généreusement dotés de ce côté là, il faut y aller avec parcimonie ; 10Mo pour les logs et 300Mo pour les répertoires temporaires seront suffisants dans la plupart des cas.

Puis on exécute la commande suivante pour prise en compte des modifications (on peut aussi rebooter le RPI) :

$ sudo mount -a

On vérifie :

$ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/root 15G 3,2G 11G 24% /
devtmpfs 458M 0 458M 0% /dev
tmpfs 462M 92K 462M 1% /dev/shm
tmpfs 462M 6,3M 456M 2% /run
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
tmpfs 462M 0 462M 0% /sys/fs/cgroup
/dev/mmcblk0p1 63M 22M 42M 35% /boot
tmpfs 93M 4,0K 93M 1% /run/user/1000
tmpfs 10M 8,0K 10M 1% /var/log
tmpfs 300M 0 300M 0% /var/tmp
tmpfs 300M 0 300M 0% /tmp

Les 3 lignes en gras confirment que les répertoires temporaires sont maintenant en RAM. :ok_hand:

[EDIT] Si comme moi, vous rencontrez des problèmes avec l’interface de Gladys après reboot, éditez le fichier “rc.local” :

$ sudo nano /etc/rc.local

Et ajoutes ces lignes juste avant le “exit 0” :

mkdir /var/log/nginx/
service nginx restart

En effet, le dossier de log nginx n’existant plus, le service ne peut démarrer, il faut donc recréer ce dossier, puis relancer nginx au démarrage.

[EDIT] Idem si vous avez des problèmes avec mysql (merci @Retlaw) :

mkdir /var/log/mysql/
service mysql restart

Installation des logs en RAM avec sauvegarde régulière sur la carte SD (log2ram)

Le système d’exploitation Raspbian produit de nombreux logs continuellement.
Pour préserver la carte SD, il est recommandé d’écrire ces logs en RAM.
L’utilitaire log2ram, écrit par Azlux disponible sur GitHub, permet de placer ces logs en RAM et de les sauvegarder en dur toutes les heures.

Note : Azlux, l’auteur de log2ram, a publié une mise à jour importante sur son github.
Si vous l’avez déjà installé, il nous conseille vivement d’effectuer cette mise à jour !
Voici comment faire… proprement.
Pour ceux qui n’utilisent pas encore log2ram avec leur RPI, c’est l’occasion de s’y mettre…
:wink:

1) Désinstallation de log2ram

Remarque : Si vous ne l’avez pas encore installé, passez à l’étape 2.

Si vous faites la mise à jour, je vous propose plutôt que d’écraser log2ram de le désinstaller (avant de le réinstaller) :

Une fois connecté au RPi, dans un terminal ou par ssh :

$ sudo systemctl stop log2ram
$ sudo systemctl disable log2ram

Aller dans le répertoire où vous aviez téléchargé log2ram.

$ cd log2ram

Puis le désinstaller :

$ chmod +x uninstall.sh
$ sudo ./uninstall.sh
##### Reboot isn’t needed #####

Ou téléchargez le à nouveau si besoin avec :

$ git clone https://github.com/azlux/log2ram.git

2) Installation ou Ré-installation de la nouvelle version de log2ram

En cas de réinstallation, on va enlever l’ancien répertoire contenant log2ram :

$ rm -rf log2ram

Puis on va télécharger la nouvelle version :

$ git clone https://github.com/azlux/log2ram.git
Clonage dans ‘log2ram’…
remote: Counting objects: 190, done.
remote: Total 190 (delta 0), reused 0 (delta 0), pack-reused 190
Réception d’objets: 100% (190/190), 28.22 KiB | 0 bytes/s, fait.
Résolution des deltas: 100% (100/100), fait.
Vérification de la connectivité… fait.

Puis ensuite, l’installer :

$ cd log2ram
$ chmod +x install.sh
$ sudo ./install.sh
Created symlink from /etc/systemd/system/sysinit.target.wants/log2ram.service to /etc/systemd/system/log2ram.service.
##### Reboot to activate log2ram #####

Pour que Gladys puisse fonctionner, il faut aussi ajouter le service nginx au fichier de configuration de log2ram :

$ sudo nano /etc/systemd/system/log2ram.service

Et ajouter à la fin de la ligne “Before” le service nginx :

Before=basic.target rsyslog.service syslog.target systemd-journald.service sysinit.target shutdown.target apache2.service nginx.service

Puis sauvegardez (Ctrl-o pour enregistrer, Ctrl-x pour quitter).

Ensuite, il suffit de rebooter le RPI :

$ sudo reboot

Et voilà (Merci Azlux !)


Installation Gladys sur clef USB
[RÉFÉRENTIEL] - Les tutoriels
#2

Sympa ton tuto @Pti_Nico !
Je l’ai ajouté au référentiel ^^

Mais si tu pouvais faire une petite mise en forme ça serais parfait :ok_hand:


#3

Salut à tous,

J’ai suivi le tuto ligne par ligne (en faisant des copier/coller des commande pour être sûr de ne pas faire d’erreur), j’ai obtenu les mêmes messages que dans le tuto, montrant donc que tout se passait bien. (étape 2 directement car je n’avais jamais installé log2ram)

Après avoir rebooté une fois le tuto fini, l’interface de Gladys ne fonctionnait pas (j’avais une page blanche après la page d’authentification avec le message : internal serveur problem)

J’ai donc ajouté les 2 commandes données en fin de tuto. Depuis, plus rien ne fonctionne…

Lorsque je veux lancer l’interface graphique, le navigateur tentais la connexion sans y parvenir (sans message d’erreur et sans afficher de message.
Au bout de 5 minutes, j’ai rebooté le Rpi, me disant qu’un reboot était nécessaire après l’ajout des 2 commandes en cas de bug de l’interface.

Mais après ce deuxième reboot, c’est le drame, plus rien ne fonctionne… Ni l’interface graphique de Gladys, ni même Gladys (des actions automatisées par Gladys ne se lancent pas aux heure où elles devraient se lancer, Gladys est donc KO)

Voici les logs que j’ai désormais lorsque Gladys redémarre : (Note : il ne me semble jamais avoir vu les logs de ce type au démarrages avant d’avoir suivi ce tuto… : 0|gladys | Error: connect ECONNREFUSED 127.0.0.1:3306 )

0|gladys | undefined
0|gladys | […/deps/mpg123/src/output/alsa.c:165] error: cannot open device default
0|gladys | node /home/pi/gladys/app.js: pcm_params.c:2286: snd_pcm_hw_refine: Assertion pcm && params' failed. 0|gladys | undefined 0|gladys | undefined 0|gladys | Warning: connect.session() MemoryStore is not 0|gladys | designed for a production environment, as it will leak 0|gladys | memory, and will not scale past a single process. 0|gladys | Warning: connect.session() MemoryStore is not 0|gladys | designed for a production environment, as it will leak 0|gladys | memory, and will not scale past a single process. 0|gladys | =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*= 0|gladys | WARNING: You currently have your default CORS settings configured to allow 0|gladys | all requests from all origins, with credentials. This may leave your app 0|gladys | open to attack by third-party sites! Consider making youroriginssetting 0|gladys | more restrictive or settingcredentialsto false, or else make certain that 0|gladys | none of your routes perform sensitive actions or reveal secure information. 0|gladys | =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*= 0|gladys | Gladys version : 3.7.3 0|gladys | Bootstrap is taking unusually long to execute its callback (2000 milliseconds). 0|gladys | Perhaps you forgot to call it? The callback is the first argument of the function,cb. 0|gladys | { Error: Could not connect to MySQL: 0|gladys | Error: connect ECONNREFUSED 127.0.0.1:3306 0|gladys | at afterwards (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:72:13) 0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:40:7 0|gladys | at Handshake.onConnect (/home/pi/gladys/node_modules/mysql/lib/Pool.js:54:9) 0|gladys | at Handshake.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24) 0|gladys | at Protocol.handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:364:14) 0|gladys | at PoolConnection.Connection._handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/Connection.js:421:18) 0|gladys | at emitOne (events.js:96:13) 0|gladys | at Socket.emit (events.js:188:7) 0|gladys | at emitErrorNT (net.js:1277:8) 0|gladys | at _combinedTickCallback (internal/process/next_tick.js:80:11) 0|gladys | at process._tickDomainCallback (internal/process/next_tick.js:128:9) 0|gladys | cause: 0|gladys | Error: Could not connect to MySQL: 0|gladys | Error: connect ECONNREFUSED 127.0.0.1:3306 0|gladys | at afterwards (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:72:13) 0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:40:7 0|gladys | at Handshake.onConnect (/home/pi/gladys/node_modules/mysql/lib/Pool.js:54:9) 0|gladys | at Handshake.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24) 0|gladys | at Protocol.handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:364:14) 0|gladys | at PoolConnection.Connection._handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/Connection.js:421:18) 0|gladys | at emitOne (events.js:96:13) 0|gladys | at Socket.emit (events.js:188:7) 0|gladys | at emitErrorNT (net.js:1277:8) 0|gladys | at _combinedTickCallback (internal/process/next_tick.js:80:11) 0|gladys | at process._tickDomainCallback (internal/process/next_tick.js:128:9), 0|gladys | isOperational: true } 0|gladys | { Error: Could not connect to MySQL: 0|gladys | Error: connect ECONNREFUSED 127.0.0.1:3306 0|gladys | at afterwards (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:72:13) 0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:40:7 0|gladys | at Handshake.onConnect (/home/pi/gladys/node_modules/mysql/lib/Pool.js:54:9) 0|gladys | at Handshake.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24) 0|gladys | at Protocol.handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:364:14) 0|gladys | at PoolConnection.Connection._handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/Connection.js:421:18) 0|gladys | at emitOne (events.js:96:13) 0|gladys | at Socket.emit (events.js:188:7) 0|gladys | at emitErrorNT (net.js:1277:8) 0|gladys | at _combinedTickCallback (internal/process/next_tick.js:80:11) 0|gladys | at process._tickDomainCallback (internal/process/next_tick.js:128:9) 0|gladys | cause: 0|gladys | Error: Could not connect to MySQL: 0|gladys | Error: connect ECONNREFUSED 127.0.0.1:3306 0|gladys | at afterwards (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:72:13) 0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:40:7 0|gladys | at Handshake.onConnect (/home/pi/gladys/node_modules/mysql/lib/Pool.js:54:9) 0|gladys | at Handshake.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24) 0|gladys | at Protocol.handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:364:14) 0|gladys | at PoolConnection.Connection._handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/Connection.js:421:18) 0|gladys | at emitOne (events.js:96:13) 0|gladys | at Socket.emit (events.js:188:7) 0|gladys | at emitErrorNT (net.js:1277:8) 0|gladys | at _combinedTickCallback (internal/process/next_tick.js:80:11) 0|gladys | at process._tickDomainCallback (internal/process/next_tick.js:128:9), 0|gladys | isOperational: true } 0|gladys | Unhandled rejection Error: Could not connect to MySQL: 0|gladys | Error: connect ECONNREFUSED 127.0.0.1:3306 0|gladys | at afterwards (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:72:13) 0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:40:7 0|gladys | at Handshake.onConnect (/home/pi/gladys/node_modules/mysql/lib/Pool.js:54:9) 0|gladys | at Handshake.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24) 0|gladys | at Protocol.handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:364:14) 0|gladys | at PoolConnection.Connection._handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/Connection.js:421:18) 0|gladys | at emitOne (events.js:96:13) 0|gladys | at Socket.emit (events.js:188:7) 0|gladys | at emitErrorNT (net.js:1277:8) 0|gladys | at _combinedTickCallback (internal/process/next_tick.js:80:11) 0|gladys | at process._tickDomainCallback (internal/process/next_tick.js:128:9) 0|gladys | Unhandled rejection Error: Could not connect to MySQL: 0|gladys | Error: connect ECONNREFUSED 127.0.0.1:3306 0|gladys | at afterwards (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:72:13) 0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:40:7 0|gladys | at Handshake.onConnect (/home/pi/gladys/node_modules/mysql/lib/Pool.js:54:9) 0|gladys | at Handshake.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24) 0|gladys | at Protocol.handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:364:14) 0|gladys | at PoolConnection.Connection._handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/Connection.js:421:18) 0|gladys | at emitOne (events.js:96:13) 0|gladys | at Socket.emit (events.js:188:7) 0|gladys | at emitErrorNT (net.js:1277:8) 0|gladys | at _combinedTickCallback (internal/process/next_tick.js:80:11) 0|gladys | at process._tickDomainCallback (internal/process/next_tick.js:128:9) 0|gladys | Unhandled rejection Error: Could not connect to MySQL: 0|gladys | Error: connect ECONNREFUSED 127.0.0.1:3306 0|gladys | at afterwards (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:72:13) 0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:40:7 0|gladys | at Handshake.onConnect (/home/pi/gladys/node_modules/mysql/lib/Pool.js:54:9) 0|gladys | at Handshake.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24) 0|gladys | at Protocol.handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:364:14) 0|gladys | at PoolConnection.Connection._handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/Connection.js:421:18) 0|gladys | at emitOne (events.js:96:13) 0|gladys | at Socket.emit (events.js:188:7) 0|gladys | at emitErrorNT (net.js:1277:8) 0|gladys | at _combinedTickCallback (internal/process/next_tick.js:80:11) 0|gladys | at process._tickDomainCallback (internal/process/next_tick.js:128:9) 0|gladys | Gladys brain loaded with success ! 0|gladys | .-..-. 0|gladys | Sails <| .-..-. 0|gladys | v0.12.13 |\ 0|gladys | /|.\ 0|gladys | / || \ 0|gladys | ,' |' \ 0|gladys | .-'.-==|/_--' 0|gladys |–’-------’
0|gladys | _–___—___–___—___–___
0|gladys | __—___–___—___–_-
0|gladys | Server lifted in /home/pi/gladys
0|gladys | To see your app, visit http://localhost:8080
0|gladys | To shut down Sails, press + C at any time.
0|gladys | -------------------------------------------------------
0|gladys | :: Sun Dec 10 2017 22:13:28 GMT+0100 (CET)
0|gladys | Environment : production
0|gladys | Port : 8080
0|gladys | -------------------------------------------------------
0|gladys | { Error: Could not connect to MySQL:
0|gladys | Error: connect ECONNREFUSED 127.0.0.1:3306
0|gladys | at afterwards (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:72:13)
0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:40:7
0|gladys | at Handshake.onConnect (/home/pi/gladys/node_modules/mysql/lib/Pool.js:54:9)
0|gladys | at Handshake.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
0|gladys | at Protocol.handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:364:14)
0|gladys | at PoolConnection.Connection._handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/Connection.js:421:18)
0|gladys | at emitOne (events.js:96:13)
0|gladys | at Socket.emit (events.js:188:7)
0|gladys | at emitErrorNT (net.js:1277:8)
0|gladys | at _combinedTickCallback (internal/process/next_tick.js:80:11)
0|gladys | at process._tickDomainCallback (internal/process/next_tick.js:128:9)
0|gladys | cause:
0|gladys | Error: Could not connect to MySQL:
0|gladys | Error: connect ECONNREFUSED 127.0.0.1:3306
0|gladys | at afterwards (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:72:13)
0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:40:7
0|gladys | at Handshake.onConnect (/home/pi/gladys/node_modules/mysql/lib/Pool.js:54:9)
0|gladys | at Handshake.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
0|gladys | at Protocol.handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:364:14)
0|gladys | at PoolConnection.Connection._handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/Connection.js:421:18)
0|gladys | at emitOne (events.js:96:13)
0|gladys | at Socket.emit (events.js:188:7)
0|gladys | at emitErrorNT (net.js:1277:8)
0|gladys | at _combinedTickCallback (internal/process/next_tick.js:80:11)
0|gladys | at process._tickDomainCallback (internal/process/next_tick.js:128:9),
0|gladys | isOperational: true }
0|gladys | Unhandled rejection Error: Could not connect to MySQL:
0|gladys | Error: connect ECONNREFUSED 127.0.0.1:3306
0|gladys | at afterwards (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:72:13)
0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:40:7
0|gladys | at Handshake.onConnect (/home/pi/gladys/node_modules/mysql/lib/Pool.js:54:9)
0|gladys | at Handshake.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
0|gladys | at Protocol.handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:364:14)
0|gladys | at PoolConnection.Connection._handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/Connection.js:421:18)
0|gladys | at emitOne (events.js:96:13)
0|gladys | at Socket.emit (events.js:188:7)
0|gladys | at emitErrorNT (net.js:1277:8)
0|gladys | at _combinedTickCallback (internal/process/next_tick.js:80:11)
0|gladys | at process._tickDomainCallback (internal/process/next_tick.js:128:9)
0|gladys | Gladys is up to date !

Voyant que le problème semble venir d’une connexion sortant, je me suis dis que le problème venait de nginx, voici ce que j’obtiens si je fais un “sudo nginx service status”:

pi@gladys:~ $ sudo service nginx status

  • nginx.service - A high performance web server and a reverse proxy server
    Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
    Active: failed (Result: exit-code) since dim. 2017-12-10 22:12:13 CET; 7min ago
    Process: 591 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)

d▒c. 10 22:12:13 gladys nginx[591]: nginx: [alert] could not open error log file: open() “/var/log/nginx/error.log” failed (2: No such file or directory)
d▒c. 10 22:12:13 gladys nginx[591]: 2017/12/10 22:12:13 [warn] 591#0: “ssl_stapling” ignored, issuer certificate not found
d▒c. 10 22:12:13 gladys nginx[591]: 2017/12/10 22:12:13 [emerg] 591#0: open() “/var/log/nginx/access.log” failed (2: No such file or directory)
d▒c. 10 22:12:13 gladys nginx[591]: nginx: configuration file /etc/nginx/nginx.conf test failed
d▒c. 10 22:12:13 gladys systemd[1]: nginx.service: control process exited, code=exited status=1
d▒c. 10 22:12:13 gladys systemd[1]: Failed to start A high performance web server and a reverse proxy server.
d▒c. 10 22:12:13 gladys systemd[1]: Unit nginx.service entered failed state.

Et ce que j’obtiens si je tente de lancer nginx APRES le reboot (note importante : je n’ai pas eu ce message lors de l’installation et lancement initial en suivant le tuto)

sudo service nginx start
Job for nginx.service failed. See ‘systemctl status nginx.service’ and ‘journalctl -xn’ for details.

Quelqu’un a une idée de ce qui peut se passer ?

Edit : J’ai bien évidemment de tenter une désinstallation de log2ram pour le réinstaller proprement, rien à faire, le problème persiste.

Édit 2 : Au xas ou ce soit important, je precise que Gladys est en https chez moi (j’utilise IPDEGLADYS:8080 pour me connecter à l’interface graphique)


#4

pas mal le principe de ce tuto.
est-il possible de mettre la BDD sur NAS? cela permettrai aussi de réduire les lecture écriture?


#5

@Retlaw, c’est normale que Gladys ne redémarra pas, car nginx ne trouve pas son dossier de log (supprimé lors de l’installation de log2ram).
Pour cela il faut après chaque reboot lancer les 2 commandes en fin de tuto :

La première recrée le dossier de log manquant et la seconde relance nginx.
Je vais voir pour faire un script, pour lancer ces commandes après chaque reboot.

Ton problème semble venir de MySQL :

Arrives-tu as te connecter à la BDD via la console SSH ?

$ mysql -proot -uroot gladys

Par contre, je constate que tu as d’autres erreurs (carte son ?) :


#6

Merci pour le tuto, pour les commandes à lancer à chaque reboot (si c’est bien du système dont on parle) peut être qu’un cron @reboot ferait l’affaire, non ?


#7

Merci de m’aider @Pti_Nico

Alors, j’ai rebooté Gladys ce soir, puis j’ai lancé les 2 commandes de la fin de tuto. Et cela ne change rien. Lorsque je tape :

  • IPDEGLADYS, le navigateur affiche “Erreur due à un contenu corrompu, Le site à l’adresse http://IPDEGLADYS/ a subi une violation de protocole réseau qui ne peut pas être corrigée.” (logique)
  • IPDEGLADYS:8080, la page ne se charge pas (Firefox fait tourner en boucle les 3 points de suspension dans l’onglet) et les logs affichent :

0|gladys | Unhandled rejection Error: Could not connect to MySQL:
0|gladys | Error: connect ECONNREFUSED 127.0.0.1:3306
0|gladys | at afterwards (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:72:13)
0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:40:7
0|gladys | at Handshake.onConnect (/home/pi/gladys/node_modules/mysql/lib/Pool.js:54:9)
0|gladys | at Handshake.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
0|gladys | at Protocol.handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:364:14)
0|gladys | at PoolConnection.Connection._handleNetworkError (/home/pi/gladys/node_modules/mysql/lib/Connection.js:421:18)
0|gladys | at emitOne (events.js:96:13)
0|gladys | at Socket.emit (events.js:188:7)
0|gladys | at emitErrorNT (net.js:1277:8)
0|gladys | at _combinedTickCallback (internal/process/next_tick.js:80:11)
0|gladys | at process._tickDomainCallback (internal/process/next_tick.js:128:9)

Pourtant, je n’ai rien touché de ce coté là… Tout fonctionnait parfaitement jusqu’à ce que je suive le topic.
Bizarre non ?

Visiblement, non… :confused:
Voici le message d’erreur obtenu

pi@gladys:~ $ mysql -proot -uroot gladys
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)

Je n’ai pas de carte son, mais actuellement, j’ai débranché le PS eyes qui me permettait de tester la reco vocale… Est-ce que cela put venir de ça ?


#8

@Retlaw, pour voir si ton service mysql est démarré, tu peux exécuter la commande suivante :

$ sudo service mysql status

Si ce n’est pas le cas, essaie de le démarrer à la main avec :

$ sudo service mysql start

Et fait nous une copie des messages d’erreurs si tu en as.

C’est assez étrange, car je n’ai pas eu ce soucis…
Tu peux peut être aussi essayer de recréer le dossier de log mysql (idem nginx) à la main :

$ sudo mkdir /var/log/mysql/


#9

@ProtZ, finallement, j’ai ajouté les lignes au fichier “/etc/rc.local”.
Comme ça elles sont exécutées à chaque démarrage.

Merci pour l’idée. :wink:


#10

Voilà, me voilà rassuré !

Alors, les logs demandés :

Première tentative :

pi@gladys:~ $ sudo service mysql status

  • mysql.service - LSB: Start and stop the mysql database server daemon
    Loaded: loaded (/etc/init.d/mysql)
    Active: failed (Result: exit-code) since dim. 2017-12-10 22:35:29 CET; 22h ago
    Process: 598 ExecStart=/etc/init.d/mysql start (code=exited, status=1/FAILURE)

d▒c. 10 22:35:29 gladys mysql[598]: Starting MySQL database server: mysqld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . failed!
d▒c. 10 22:35:29 gladys systemd[1]: mysql.service: control process exited, code=exited status=1
d▒c. 10 22:35:29 gladys systemd[1]: Failed to start LSB: Start and stop the mysql database server daemon.
d▒c. 10 22:35:29 gladys systemd[1]: Unit mysql.service entered failed state.
pi@gladys:~ $ sudo service mysql start
Job for mysql.service failed. See ‘systemctl status mysql.service’ and ‘journalctl -xn’ for details.

Deuxième vérification et tentative en tentant de créer le dossier de log mysql à la main :

pi@gladys:~ $ sudo mkdir /var/log/mysql/
pi@gladys:~ $ sudo service mysql status

  • mysql.service - LSB: Start and stop the mysql database server daemon
    Loaded: loaded (/etc/init.d/mysql)
    Active: failed (Result: exit-code) since lun. 2017-12-11 20:42:11 CET; 1min 12s ago
    Process: 15863 ExecStart=/etc/init.d/mysql start (code=exited, status=1/FAILURE)

d▒c. 11 20:42:11 gladys /etc/init.d/mysql[16617]: 0 processes alive and ‘/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf ping’ resulted in
d▒c. 11 20:42:11 gladys /etc/init.d/mysql[16617]: [61B blob data]
d▒c. 11 20:42:11 gladys /etc/init.d/mysql[16617]: error: ‘Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)’
d▒c. 11 20:42:11 gladys /etc/init.d/mysql[16617]: Check that mysqld is running and that the socket: ‘/var/run/mysqld/mysqld.sock’ exists!
d▒c. 11 20:42:11 gladys /etc/init.d/mysql[16617]:
d▒c. 11 20:42:11 gladys mysql[15863]: Starting MySQL database server: mysqld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . failed!
d▒c. 11 20:42:11 gladys systemd[1]: mysql.service: control process exited, code=exited status=1
d▒c. 11 20:42:11 gladys systemd[1]: Failed to start LSB: Start and stop the mysql database server daemon.
d▒c. 11 20:42:11 gladys systemd[1]: Unit mysql.service entered failed state.
pi@gladys:~ $ sudo service mysql start
pi@gladys:~ $ sudo service mysql status

  • mysql.service - LSB: Start and stop the mysql database server daemon
    Loaded: loaded (/etc/init.d/mysql)
    Active: active (running) since lun. 2017-12-11 20:43:32 CET; 52s ago
    Process: 16696 ExecStart=/etc/init.d/mysql start (code=exited, status=0/SUCCESS)
    CGroup: /system.slice/mysql.service
    |-16725 /bin/sh /usr/bin/mysqld_safe
    `-17076 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld…

d▒c. 11 20:43:32 gladys mysql[16696]: Starting MySQL database server: mysqld . …
d▒c. 11 20:43:32 gladys mysql[16696]: Checking for tables which need an upgrade, are corrupt or were
d▒c. 11 20:43:32 gladys mysql[16696]: not closed cleanly…
d▒c. 11 20:43:32 gladys /etc/mysql/debian-start[17143]: Upgrading MySQL tables if necessary.
d▒c. 11 20:43:32 gladys systemd[1]: Started LSB: Start and stop the mysql database server daemon.
d▒c. 11 20:43:32 gladys /etc/mysql/debian-start[17165]: Triggering myisam-recover for all MyISAM tables
pi@gladys:~ $

Gladys est de nouveau opérationnelle !
Merci pour ton aide @Pti_Nico !!

Mais du coup, questions subsidiaires :

  1. Le tuto initial disait de lancer les commandes $ sudo mkdir /var/log/nginx/ et $ sudo service nginx start après chaque reboot, mais vu ton dernier message et l’édition du premier message, il semblerait que cela soit obolète ? Si c’est le cas, comment mettre à jour pour bénéficier de l’execution automatique au démarrage ?
  2. Devrai-je lancer les commandes $ sudo mkdir /var/log/mysql/ et $ sudo service mysql start après chaque redémarrage ?

#11

Non, en fait, j’ai trouvé une solution pour lancer ces commandes automatiquement au démarrage (j’ai modifié le tuto en conséquence).
Il faut ajouter ces lignes au fichier “rc.local” :
image

Dans ton cas, oui (en plus des 2 autres commandes). Ce qui donne un fichier “rc.local” comme suit :
image


#12

attation, @Pti_Nico, ya une typo qui s’est glissée dans ton rc.local “tuné” pour l’occaz. J’imagine que c’est le service mysql qui doit être lancé en deuxième et non une deuxième fois nginx (ce qui devrait faire planter le bouzin d’ailleurs)


#13

Bien vu :wink:
Ca serait même mieux de mettre “restart” plutôt que “start”, comme ça pas de soucis…


#14

:thinking: hummm. Un restart au démarrage de la machine. J’ai un doute là comme ça…


#15

Et si, comme tu peux le voir dans le fichier du script nginx, “/etc/init.d/nginx” :

Le restart, fait un stop, puis un start. :wink:


#16

Alors, bonnes nouvelles, en éditant le fichier rc.local comme l’a dit @Pti_Nico, tout fonctionne à merveille !

Les reboot ne sont plus un problèmes !

(J’ai même testé si la commande restart ne posait pas de problème, et ça fonctionne parfaitement, que ce soit avec nginx ou mysql ;), j’ai donc laissé restart )

Encore merci pour ton aide @Pti_Nico !!


#17

tmpfs /tmp tmpfs defaults,noatime,nosuid,size=10m 0 0

c’est pas un peu trop juste 10 Mo pour les maj ect… ?


#18

Salut !
Je viens ajouter une précision pour ceux qui installent SNIPS l’assistant ou MOSQUITTO (MQTT Brocker, inclus avec snips), et qui veulent aussi log2ram. Il faut ajouter ces lignes àrc.local :

mkdir /var/log/mosquitto
chown mosquitto /var/log/mosquitto
service mosquitto restart

Le fait de créer le dossier ne suffit pas à notre mosquitto, il faut le définir comme propriétaire pour que le service démarre. Sinon impossible, sauf en le lançant manuellement avec mosquitto -vv