Le Journal de Nikrou - Mot-clé - systemdCe journal n'est pas un blog!2024-01-09T15:52:56+01:00urn:md5:501048fab0be4d1978e39dded54e4f42DotclearMais où se trouve /tmp ?urn:md5:55fe061fcac964ae48f475adcf44d3722017-02-23T10:31:00+01:002019-03-09T15:39:34+01:00Nicolaslinuxphpsystemd<p>Normalement lorsqu'on créé ou modifie un fichier tel que <strong>/tmp/mon-fichier.txt</strong>, donc un fichier avec un chemin absolu, on s'attend naïvement à trouver se fichier dans le répertoire <strong>/tmp</strong>. Ce n'est pas toujours le cas ! </p> <p>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 <a href="https://www.debian.org/" hreflang="en">le meilleur système qui soit</a> - 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.</p>
<p>Je continue le développement de <a href="https://www.phyxo.net/" hreflang="fr">ma super galerie photo</a> et pour débugger j'écris simplement des infos dans un fichier dans <strong>/tmp/</strong> :</p>
<pre><code class="language-php">
<?php
file_puts_contents('/tmp/debug.log', 'infos de la plus haute importance');
</code>
</pre>
<p>Je teste mon script mais je ne trouve pas le fichier dans <strong>/tmp/</strong>. 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 <strong>/var/tmp/systemd-private-3a785dea59454c1da30a30243dfb7b84-apache2.service-p8OCSE/tmp</strong>. Le nom de répertoire me met sur la piste. <a href="https://www.freedesktop.org/wiki/Software/systemd/" hreflang="en">systemd</a> offre la possibilité d'avoir un répertoire <strong>/tmp</strong> privé et par défaut apache utilise ce répertoire <strong>/tmp/ </strong>privé via la directive <strong>PrivateTmp=yes</strong>.</p>
<p>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 <strong>/etc/systemd/system/apache2.service.d/options.conf</strong> (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 :</p>
<pre><code class="language-ini">
[Service]
PrivateTmp=no
</code>
</pre>
<p>Il faut ensuite informer le démon systemd que la configuration d'un service a changé :</p>
<pre><code class="language-bash">
$ sudo systemctl daemon-reload
</code>
</pre>
<p>Puis il faut relancer apache :</p>
<pre><code class="language-bash">
$ sudo systemctl restart apache2
</code>
</pre>
<p>On peut alors vérifier que systemd a bien pris en compte cette modification :</p>
<pre><code class="language-bash">
$ systemctl show apache|grep PrivateTmp
PrivateTmp=no
</code>
</pre>
<p>Le répertoire <strong>/tmp</strong> est de nouveau à la racine de mon système, en tout cas pour apache.</p>