213 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			213 lines
		
	
	
		
			8.0 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 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
 | 
						|
répertoire de référence appelé répertoire local, avant son déploiement.
 | 
						|
    -d, --destdir DESTDIR
 | 
						|
        Spécifier le répertoire local dans lequel copier la configuration
 | 
						|
        apache.
 | 
						|
    -l, --list
 | 
						|
        Lister les templates disponibles.
 | 
						|
    -m, --merge
 | 
						|
        Copier les templates spécifiés dans le répertoire local s'il n'y
 | 
						|
        existent pas déjà
 | 
						|
    -z, --unmerge
 | 
						|
        Supprimer les fichiers du répertoire local s'ils n'ont pas été modifiés
 | 
						|
        par rapport aux templates.
 | 
						|
    -C, --clean
 | 
						|
        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
 | 
						|
        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
 | 
						|
 | 
						|
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
 | 
						|
        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
 | 
						|
        répertoire local.
 | 
						|
    --modulesdir MODULESDIR
 | 
						|
        Spécifier l'emplacement des fichiers de configuration des modules. Par
 | 
						|
        défaut, utiliser DESTDIR/modules si ce répertoire existe.
 | 
						|
    --sitesdir SITESDIR
 | 
						|
        Spécifier l'emplacement des fichiers de configuration des sites. Par
 | 
						|
        défaut, utiliser DESTDIR/sites si ce répertoire existe.
 | 
						|
    --cgibindir CGIBINDIR
 | 
						|
        Spécifier l'emplacement des scripts cgi à installer. Par défaut,
 | 
						|
        utiliser DESTDIR/cgi-bin si ce répertoire existe.
 | 
						|
    --wwwdir WWWDIR
 | 
						|
        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.
 | 
						|
        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
 | 
						|
        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
 |