gestion et déploiement de configuration apache
le module apache est découpé entre apache et apache.config: la modification est incompatible
This commit is contained in:
217
apacheconfig
Executable file
217
apacheconfig
Executable file
@@ -0,0 +1,217 @@
|
||||
#!/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="$ULIBDIR/support/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
|
||||
Reference in New Issue
Block a user