nutools/apacheconfig

213 lines
8.0 KiB
Plaintext
Raw Normal View History

#!/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 template apache.tools
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
2014-10-23 22:45:54 +04:00
répertoire de référence appelé répertoire local, avant son déploiement.
-d, --destdir DESTDIR
2014-10-23 22:45:54 +04:00
Spécifier le répertoire local dans lequel copier la configuration
apache.
-l, --list
Lister les templates disponibles.
-m, --merge
2014-10-23 22:45:54 +04:00
Copier les templates spécifiés dans le répertoire local s'il n'y
existent pas déjà
-z, --unmerge
2014-10-23 22:45:54 +04:00
Supprimer les fichiers du répertoire local s'ils n'ont pas été modifiés
par rapport aux templates.
-C, --clean
2014-10-23 22:45:54 +04:00
Supprimer les répertoires vides dans le répertoire local. Peut être
utile après -z
-g, --diff
Afficher les différences entre les templates et les fichiers du
2014-10-23 22:45:54 +04:00
répertoire local.
Le répertoire local 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
2014-10-23 22:45:54 +04:00
Les options suivantes permettent de déployer les fichiers du répertoire local.
IMPORTANT: les fonctions de déploiement ne sont pour le moment supportées que
sur debian
-u, --update
2014-10-23 22:45:54 +04:00
Mettre à jour la configuration système à partir du répertoire local.
-r, --certsdir CERTSDIR
Spécifier le cas échéant le répertoire contenant les certificats à
déployer.
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
2014-10-23 22:45:54 +04:00
répertoire local.
--modulesdir MODULESDIR
2014-10-23 22:45:54 +04:00
Spécifier l'emplacement des fichiers de configuration des modules. Par
défaut, utiliser DESTDIR/modules si ce répertoire existe.
--sitesdir SITESDIR
2014-10-23 22:45:54 +04:00
Spécifier l'emplacement des fichiers de configuration des sites. Par
défaut, utiliser DESTDIR/sites si ce répertoire existe.
--cgibindir CGIBINDIR
2014-10-23 22:45:54 +04:00
Spécifier l'emplacement des scripts cgi à installer. Par défaut,
utiliser DESTDIR/cgi-bin si ce répertoire existe.
--wwwdir WWWDIR
2014-10-23 22:45:54 +04:00
Spécifier l'emplacement des fichiers du serveur web. Par défaut,
utiliser DESTDIR/www si ce répertoire existe.
--certsconfdir CERTSCONFDIR
Spécifier l'emplacement des fichiers de configuration des certificats.
2014-10-23 22:45:54 +04:00
Par défaut, utiliser DESTDIR/certsconf si ce répertoire existe. Il faut
alors spécifier aussi CERTSDIR, l'emplacement des certificats à
installer.
--rrdir RRDIR
2014-10-23 22:45:54 +04:00
Spécifier l'emplacement des fichiers de réécriture. Par défaut,
utiliser DESTDIR/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
setx srcdir=templatesrc apacheconfig
# 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
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 "$@"
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