Mais où se trouve /tmp ?

Normalement lorsqu'on créé ou modifie un fichier tel que /tmp/mon-fichier.txt, donc un fichier avec un chemin absolu, on s'attend naïvement à trouver se fichier dans le répertoire /tmp. Ce n'est pas toujours le cas ! 

Récemment j'ai mis à jour mon ordinateur portable en remplaçant mon vénérable disque dur par un disque ssd. Je n'ai pas récupéré mon ancien système pour plus de simplicité et j'ai réinstallé complètement le meilleur système qui soit - en toute objectivité. L'opération est relativement rapide et j'ai en peu de temps un système pleinement opérationnel. Le fait de réinstaller permet de reconfigurer "proprement" de nombreuses applications plutôt que de garder des choix de configuration fait longtemps avant alors que l'application a changé du tout au tout.

Je continue le développement de ma super galerie photo et pour débugger j'écris simplement des infos dans un fichier dans /tmp/ :


<?php
file_puts_contents('/tmp/debug.log', 'infos de la plus haute importance');

Je teste mon script mais je ne trouve pas le fichier dans /tmp/. Et là je commence à m'arracher le peu de cheveux qu'il me reste ! Je commence à modifier plein de code, tout casser... Et juste avant de jeter le pc par la fenêtre, je me pose 2 minutes. Je continue à chercher mon fichier et je le trouve finalement dans le répertoire /var/tmp/systemd-private-3a785dea59454c1da30a30243dfb7b84-apache2.service-p8OCSE/tmp. Le nom de répertoire me met sur la piste. systemd offre la possibilité d'avoir un répertoire /tmp privé et par défaut apache utilise ce répertoire /tmp/ privé via la directive PrivateTmp=yes.

Pour régler le problème il y a deux solutions, soit écrire dans un autre répertoire soit changer cette directive. Comme ce n'est pas un serveur public j'ai choisi de désactiver cette directive et voici comment faire. J'ai créé le fichier /etc/systemd/system/apache2.service.d/options.conf (le nom du fichier n'a pas d'importance mais le sous répertoire de /etc/systemd/system est le nom du service) avec le contenu suivant :


[Service]
PrivateTmp=no


Il faut ensuite informer le démon systemd que la configuration d'un service a changé :


$ sudo systemctl daemon-reload

Puis il faut relancer apache :


$ sudo systemctl restart apache2

On peut alors vérifier que systemd a bien pris en compte cette modification :


$ systemctl show apache|grep PrivateTmp
PrivateTmp=no

Le répertoire /tmp est de nouveau à la racine de mon système, en tout cas pour apache.

Haut de page