nutools/apacheconfig

218 lines
8.2 KiB
Bash
Executable File

#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS apache.config
function display_help() {
uecho "$scriptname: Gérer une configuration apache pour déploiement
USAGE
$scriptname [options]
OPTIONS
Les options suivantes servent à mettre à jour la configuration apache dans un
répertoire de référence avant le déploiement. Ce répertoire est aussi appelé
répertoire local.
-d, --destdir DESTDIR
Spécifier le répertoire de référence dans lequel copier la configuration
apache.
-l, --list
Lister les templates disponibles.
-m, --merge
Copier les templates spécifiés dans le répertoire de référence s'il
n'y existent pas déjà
-z, --unmerge
Supprimer les fichiers du répertoire de référence s'ils n'ont pas été
modifiés par rapport aux templates.
-C, --clean
Supprimer les répertoires vides dans le répertoire de référence. Peut
être utile après -z
-g, --diff
Afficher les différences entre les templates et les fichiers du
répertoire de référence.
Le répertoire de référence peut contenir les fichiers et répertoires suivants,
qui sont tous optionnels:
- modules.conf la liste des modules qu'il faut activer. Si un module n'existe
pas dans ce fichier, ou si ce fichier n'existe pas, aucune modification n'est
effectuée. Si un module est de la forme -module, il est désactivé. Si un
module est de la forme +module, il est activé. Cette syntaxe permet de
supporter les modules dont le nom commencerait par '-'
- sites.conf la liste des sites qu'il faut activer. Si un site ne figure pas
dans ce fichier, il est désactivé. Si ce fichier n'existe pas, tous les sites
existant sont activés.
- tous les autres fichiers sont copiés tels quels dans /etc/apache2. Notamment,
apache2.conf est le fichier de configuration principal d'apache et ports.conf
le fichier de configuration des ports d'écoute.
- modules/ le répertoire des configurations de modules à installer. Les fichiers
de ce répertoire sont de la forme MODULE.conf et sont installés dans le
répertoire /etc/apache2/mods-available. Il faut mentioner le module dans le
fichier modules.conf pour l'activer.
- sites/ le répertoire des sites à installer. Les fichiers de ce répertoire sont
de la forme NAME.conf pour les sites écoutant en clair, et NAME.ssl.conf pour
les sites écoutant en https. Pour chaque site NAME.ssl.conf, un fichier
NAME-certs.conf doit exister dans certsconf/
Dans les fichiers NAME.ssl.conf, les valeurs @@cert@@, @@key@@ et @@ca@@ sont
respectivement remplacées par l'emplacement des fichiers de certificats
définis dans les fichiers correspondants NAME-certs.conf
- cgi-bin/ le répertoire des scripts cgi à installer
- www/ le répertoire qui contient les fichiers du serveur web à installer dans
l'emplacement par défaut.
- certsconf/ le répertoire qui contient la configuration pour les certificats à
installer. Si ce répertoire existe, il faut spécifier CERTSDIR
Les fichiers de ce répertoire sont de la forme NAME-certs.conf et chacun d'eux
correspondant en principe à un fichier NAME.ssl.conf dans sites/
- RewriteRules/ le répertoire qui contient la configuration de réécriture. Tous
les fichiers RewriteRules*.conf de ce répertoire sont copiés dans /etc/apache2
Les options suivantes permettent de déployer les fichiers du répertoire de
référence sur le système.
-u, --update
Mettre à jour la configuration système à partir du répertoire de
référence.
-r, --certsdir CERTSDIR
Spécifier le cas échéant le répertoire contenant les certificats à
déployer.
IMPORTANT: les fonctions de déploiement ne sont pour le moment supportées que
sur debian
OPTIONS AVANCEES
--confdir CONFDIR
Spécifier l'emplacement des fichiers de configuration apache ainsi que
les fichiers 'modules.conf' et 'sites.conf'. Par défaut, prendre le
répertoire de référence.
--modulesdir MODULESDIR
Spécifier l'emplacement des fichiers de configuration des modules.
Par défaut, utiliser AUTOCONFDIR/modules si ce répertoire existe.
--sitesdir SITESDIR
Spécifier l'emplacement des fichiers de configuration des sites.
Par défaut, utiliser AUTOCONFDIR/sites si ce répertoire existe.
--cgibindir CGIBINDIR
Spécifier l'emplacement des scripts cgi à installer.
Par défaut, utiliser AUTOCONFDIR/cgi-bin si ce répertoire existe.
--wwwdir WWWDIR
Spécifier l'emplacement des fichiers du serveur web
Par défaut, utiliser AUTOCONFDIR/www si ce répertoire existe.
--certsconfdir CERTSCONFDIR
Spécifier l'emplacement des fichiers de configuration des certificats.
Par défaut, utiliser AUTOCONFDIR/certsconf si ce répertoire existe.
Il faut alors spécifier aussi CERTSDIR, l'emplacement des certificats à
installer.
--rrdir RRDIR
Spécifier l'emplacement des fichiers de réécriture.
Par défaut, utiliser AUTOCONFDIR/RewriteRules si ce répertoire existe.
--no-restart
Ne pas redémarrer apache en cas de modification de la configuration"
}
function __templatectl_display_help() { display_help; }
function parent_apacheconfig() {
# chercher à partir du répertoire courant si un des répertoires parents
# s'appelle apacheconfig
local dir="$(pwd)" dirname
while true; do
dirname="$(basename "$dir")"
if [ "$dir" == / ]; then
# s'arrêter à la racine
return 1
elif [ "$dir" == "$HOME" ]; then
# s'arrêter au répertoire HOME
return 1
elif [ "$dirname" == apacheconfig ]; then
echo "$dir"
return 0
fi
dir="$(dirname -- "$dir")"
done
}
update=
certsdir=
confdir=
modulesdir=
sitesdir=
cgibindir=
wwwdir=
certsconfdir=
rrdir=
restart=1
__TEMPLATECTL_OTHER_OPTS=(
-u,--update update=1
-r:,--certsdir: certsdir=
--confdir: confdir=
--modulesdir: modulesdir=
--sitesdir: sitesdir=
--cgibindir: cgibindir=
--wwwdir: wwwdir=
--certsconfdir: certsconfdir=
--rrdir: rrdir=
--restart restart=1
--no-restart restart=
)
__templatectl_parseopts "$@" && \
set -- "${args[@]}" || die "$args"
# répertoire source
srcdir="$scriptdir/lib/apacheconfig.template"
# répertoire de référence
autocreate=
if [ -z "$destdir" ]; then
if [ -d apacheconfig ]; then
destdir=apacheconfig
elif setx destdir=parent_apacheconfig; then
estepn "Sélection automatique de $(ppath "$destdir")"
elif [ -e apacheconfig ]; then
die "Vous devez spécifier le répertoire de référence avec -d"
else
destdir=apacheconfig
autocreate=1
fi
fi
if [ -z "$update" -a -z "$templatectl_opt" ]; then
templatectl_opt=1
templatectl_auto=1
fi
if [ -n "$templatectl_opt" ]; then
etitle "Mise à jour du répertoire de référence"
if [ -n "$autocreate" -a ! -d "$destdir" ]; then
estepn "Création automatique de $(ppath "$destdir")"
mkdir -p "$destdir" || die
fi
[ -d "$destdir" ] || die "$destdir: répertoire introuvable"
__templatectl_do "$@"
eend
fi
if [ -n "$update" ]; then
args=(
-d "$destdir"
-u
${certsdir:+-r "$certsdir"}
${confdir:+--confdir "$confdir"}
${modulesdir:+--modulesdir "$modulesdir"}
${sitesdir:+--sitesdir "$sitesdir"}
${cgibindir:+--cgibindir "$cgibindir"}
${wwwdir:+--wwwdir "$wwwdir"}
${certsconfdir:+--certsconfdir "$certsconfdir"}
${rrdir:+--rrdir "$rrdir"}
)
run_as_root "${args[@]}"
etitle "Mise à jour du système"
[ -d "$destdir" ] || die "$destdir: répertoire introuvable"
args=("$destdir" "$certsdir"
${confdir:+--confdir "$confdir"}
${modulesdir:+--modulesdir "$modulesdir"}
${sitesdir:+--sitesdir "$sitesdir"}
${cgibindir:+--cgibindir "$cgibindir"}
${wwwdir:+--wwwdir "$wwwdir"}
${certsconfdir:+--certsconfdir "$certsconfdir"}
${rrdir:+--rrdir "$rrdir"}
)
apache_autoconf "${args[@]}" || die
eend
fi