Mes fichiers envvar ont ces lignes:
export Apache_RUN_USER=www-data
export Apache_RUN_GROUP=www-data
Mon Apache2.conf contient ces lignes:
# These need to be set in /etc/Apache2/envvars
User ${Apache_RUN_USER}
Group ${Apache_RUN_GROUP}
Mais quand je lance Apache2 -M
je reçois ceci:
Apache2: bad user name ${Apache_RUN_USER}
Un correctif temporaire consiste à coder www-data
dans mon fichier Apache2.conf. Il y avait quelques spéculations ici que c'était parce qu'un script de configuration ne remplaçait pas correctement les vars env dans mon fichier Apache2.conf. Peu importe comment puis-je demander à Apache2 de consulter mon fichier envvars?
Un autre point de données ce site semble indiquer que les envvars sont générés lors de la construction, mais lus par Apache2ctl lors de l'exécution, suggérant que ce fichier n'est pas simplement laissé comme une saloperie par le processus de construction.
Après avoir parcouru la réponse donnée par @Lekensteyn, j'ai essayé Sudo Apache2ctl -M
avec mon Apache2.conf rétabli à l'original. Cela a fonctionné, alors j'ai un peu fouillé dans les pages de manuel. Voici ce que man Apache2
avait à dire:
In general, Apache2 should not be invoked directly, but rather should
be invoked via /etc/init.d/Apache2 or Apache2ctl. The default Debian
configuration requires environment variables that are defined in
/etc/Apache2/envvars and are not available if Apache2 is
started directly. However, Apache2ctl can be used to pass arbitrary
arguments to Apache2.
La réponse à cette question est donc la suivante: Vous n’utilisez pas Apache2
correctement; utilisez plutôt Apache2ctl
.
Merci @Lekensteyn de m'avoir orienté dans la bonne direction.
De http://httpd.Apache.org/docs/2.2/configuring.html :
Les valeurs des variables d'environnement Shell peuvent être utilisées dans les lignes du fichier de configuration à l'aide de la syntaxe $ {ENVVAR}. Si "ENVVAR" est le nom d'une variable d'environnement valide, la valeur de cette variable est substituée à cet endroit dans la ligne du fichier de configuration et le traitement continue comme si ce texte avait été trouvé directement dans le fichier de configuration. (Si la variable ENVVAR n’est pas trouvée, les caractères "$ {ENVVAR}" restent inchangés pour pouvoir être utilisés ultérieurement dans le traitement du fichier de configuration.)
Ainsi, la variable est effectivement extraite de l'environnement comme prévu. Maintenant, où cela se produit-il?
Dans /etc/init.d/Apache2
, Apache_ENVVARS
est défini sur le chemin du fichier envvars
qui est basé sur le chemin initscript. Il en résulte généralement que Apache_ENVVARS=/etc/Apache2/envvars
est défini. Maintenant, puisque cette valeur est égale aux valeurs par défaut définies dans Apache2ctl
, elle n’est pas exportée.
De /usr/sbin/Apache2ctl
:
# the path to the environment variable file
test -z "$Apache_ENVVARS" && Apache_ENVVARS="$Apache_CONFDIR/envvars"
# pick up any necessary environment variables
if test -f $Apache_ENVVARS; then
. $Apache_ENVVARS
fi
Explication: si Apache_ENVVARS
est vide, utilisez le chemin par défaut, /etc/Apache2/envvars
. Si ce fichier existe, "source" le (exécutez les commandes de ce fichier dans l'environnement actuel).
Assurez-vous que le fichier envvars
ne contient aucune erreur de syntaxe. Pour effectuer une telle vérification, utilisez:
sh -n /etc/Apache2/envvars && echo Syntax OK || echo FAIL
Les erreurs sont imprimées le cas échéant.