279 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			279 lines
		
	
	
		
			9.9 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 la configuration d'un serveur web apache
 | 
						|
 | 
						|
USAGE
 | 
						|
    $scriptname -c
 | 
						|
    $scriptname -t -- args...
 | 
						|
 | 
						|
OPTIONS
 | 
						|
    -c, --create
 | 
						|
        Créer un nouveau répertoire de configuration pour un hôte
 | 
						|
    -d, --destdir DESTDIR[=$TEMPLATECTL_NAME]
 | 
						|
        Nom du répertoire local de configuration.
 | 
						|
 | 
						|
    -t, --template [OPT]
 | 
						|
        Gérer les fichiers du répertoire local avec templatectl. La valeur de
 | 
						|
        cette option est utilisée comme argument court pour l'invocation de
 | 
						|
        templatectl, e.g
 | 
						|
            $scriptname -tm args
 | 
						|
        est équivalent à
 | 
						|
            templatectl -m args
 | 
						|
        Les arguments qui restent sont passés tels quels à templatectl
 | 
						|
        Les options courantes de templatectl -l, -v, -m, -L sont disponibles
 | 
						|
        directement
 | 
						|
    --help-template
 | 
						|
        Afficher l'aide concernent la gestion des templates.
 | 
						|
        Equivalent à -t -- --help
 | 
						|
    -h, --host HOST
 | 
						|
        Spécifier l'hôte. Equivalent à -v host=HOST
 | 
						|
    --sysname SYSNAME
 | 
						|
    --sysdist SYSDIST
 | 
						|
    -s, --sysver SYSVER
 | 
						|
        Spécifier la distribution pour laquelle synchroniser le template. Par
 | 
						|
        défaut, choisir les valeurs correspondantes au système courant.
 | 
						|
        Les options -7 et -8 sont des aliases respectivement pour -s wheezy et
 | 
						|
        -s jessie, parce que les fichiers par défaut ont changé à partir de
 | 
						|
        debian jessie.
 | 
						|
 | 
						|
    -u, --update, --deploy
 | 
						|
        Mettre à jour la configuration système à partir du répertoire local.
 | 
						|
        Lors du déploiement de la configuration, les valeurs des variables
 | 
						|
        dynamiques sont remplacées dans les fichiers destination.
 | 
						|
        Les arguments qui restent sont passés tels quels à apache_autoconf
 | 
						|
    -r, --certsdir CERTSDIR
 | 
						|
        Spécifier le cas échéant le répertoire contenant les certificats à
 | 
						|
        déployer. Cet argument est requis si le répertoire certsconf/ existe.
 | 
						|
 | 
						|
    --localhosts
 | 
						|
        Créer dans le fichier /etc/hosts tous les noms d'hôte ayant un suffixe
 | 
						|
        .local mentionnés dans les fichiers de site. Cette option est utile pour
 | 
						|
        le développement et les tests.
 | 
						|
    -C, --one-conf CONF
 | 
						|
        Ne déployer que le fichier de configuration spécifié. Cette option est
 | 
						|
        utilisée avec --deploy et est utile pour le développement et les tests.
 | 
						|
    -M, --one-module MODULE
 | 
						|
        Ne déployer que le fichier de module spécifié. Cette option est utilisée
 | 
						|
        avec --deploy et est utile pour le développement et les tests.
 | 
						|
    -S, --one-site SITE
 | 
						|
        Ne déployer que le fichier de site spécifié. Cette option est utilisée
 | 
						|
        avec --deploy ou --localhosts et est utile pour le développement et les
 | 
						|
        tests."
 | 
						|
}
 | 
						|
 | 
						|
# toujours placer une variable dépendante AVANT la variable maitre
 | 
						|
TEMPLATE_STATIC_VARS=(
 | 
						|
    hostname aliases host
 | 
						|
    certsdir caname
 | 
						|
)
 | 
						|
TEMPLATE_DYNAMIC_VARS=(
 | 
						|
    ips_namevirtualhosts ips_listens ips
 | 
						|
    dhostname daliases dhost
 | 
						|
    admin configdir
 | 
						|
)
 | 
						|
TEMPLATE_NOWRITE_VARS=(hostname aliases dhostname daliases configdir)
 | 
						|
 | 
						|
__TEMPLATE_DEFAULTF_host=__template_defaultf_host
 | 
						|
__TEMPLATE_UPDATEF_host=__template_updatef_host
 | 
						|
function __template_defaultf_host() {
 | 
						|
    myhost
 | 
						|
}
 | 
						|
function __template_updatef_host() {
 | 
						|
    if [ "$host" == "@@dhost@@" ]; then
 | 
						|
        __template_set_var hostname @@dhostname@@
 | 
						|
        __template_set_var aliases @@daliases@@
 | 
						|
    else
 | 
						|
        local update_aliases
 | 
						|
        [ "$aliases" == "$hostname" ] && update_aliases=1
 | 
						|
        __template_set_var hostname "${host%%.*}"
 | 
						|
        [ -n "$update_aliases" ] && __template_set_var aliases "$hostname"
 | 
						|
        [ -n "$ips" ] || __template_set_var ips ""
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
__TEMPLATE_DEFAULTF_ips=__template_defaultf_ips
 | 
						|
__TEMPLATE_UPDATEF_ips=__template_updatef_ips
 | 
						|
function __template_defaultf_ips() {
 | 
						|
    local -a ips
 | 
						|
    if [ "$host" != "@@dhost@@" ]; then
 | 
						|
        resolv_ips ips "$host"
 | 
						|
    else
 | 
						|
        resolv_ips ips "$dhost"
 | 
						|
    fi
 | 
						|
    echo "${ips[*]}"
 | 
						|
}
 | 
						|
function __template_updatef_ips() {
 | 
						|
    local -a ipports; local ipport ip port
 | 
						|
    local nvhs ls
 | 
						|
    nvhs=
 | 
						|
    ls=
 | 
						|
    array_split ipports "$ips" " "
 | 
						|
    for ipport in "${ipports[@]}"; do
 | 
						|
        splitpair "$ipport" ip port
 | 
						|
        [ -n "$port" ] || port=443
 | 
						|
        [ -n "$nvhs" ] || nvhs="#ips_namevirtualhosts"
 | 
						|
        nvhs="$nvhs
 | 
						|
NameVirtualHost $ip:$port"
 | 
						|
        [ -n "$ls" ] || ls="#ips_listens"
 | 
						|
        ls="$ls
 | 
						|
Listen $ip:$port"
 | 
						|
    done
 | 
						|
    [ -n "$nvhs" ] && __template_set_var ips_namevirtualhosts "$nvhs"
 | 
						|
    [ -n "$ls" ] && __template_set_var ips_listens "$ls"
 | 
						|
}
 | 
						|
 | 
						|
__TEMPLATE_DEFAULTF_dhost=__template_defaultf_dhost
 | 
						|
__TEMPLATE_UPDATEF_dhost=__template_updatef_dhost
 | 
						|
function __template_defaultf_dhost() {
 | 
						|
    myhost
 | 
						|
}
 | 
						|
function __template_updatef_dhost() {
 | 
						|
    local update_daliases
 | 
						|
    [ "$daliases" == "$dhostname" ] && update_daliases=1
 | 
						|
    __template_set_var dhostname "${dhost%%.*}"
 | 
						|
    [ -n "$update_daliases" ] && __template_set_var daliases "$dhostname"
 | 
						|
    [ -n "$ips" ] || __template_set_var ips ""
 | 
						|
}
 | 
						|
 | 
						|
TEMPLATECTL_NAME=apacheconfig
 | 
						|
TEMPLATECTL_SRCDIRS=(apacheconfig)
 | 
						|
TEMPLATECTL_CONFIG="$TEMPLATECTL_NAME"
 | 
						|
TEMPLATECTL_DEFAULTS=(
 | 
						|
    admin=supervision-gdrsi@listes.univ-reunion.fr
 | 
						|
    certsdir=1507-renater
 | 
						|
    caname=1507-DigiCertCA.crt
 | 
						|
)
 | 
						|
TEMPLATECTL_VARS=()
 | 
						|
 | 
						|
action=
 | 
						|
destdir=
 | 
						|
nohideconfig=
 | 
						|
templateopt=
 | 
						|
aac_certsdir=
 | 
						|
oneconf=
 | 
						|
onemodule=
 | 
						|
onesite=
 | 
						|
args=(
 | 
						|
    --help '$exit_with display_help'
 | 
						|
    -c,--create action=create
 | 
						|
    -d:,--destdir: destdir=
 | 
						|
    --no-hideconfig nohideconfig=1
 | 
						|
    --hideconfig nohideconfig=
 | 
						|
    -t::,--template:: '$set@ templateopt; action=template'
 | 
						|
    --help-template '$templateopt=-help; action=template'
 | 
						|
    -l,--list '$templateopt=l; action=template'
 | 
						|
    -v:,--var: TEMPLATECTL_VARS
 | 
						|
    -m,--merge '$templateopt=m; action=template'
 | 
						|
    -L,--list-vars '$templateopt=L; action=template'
 | 
						|
    -h:,--host: '$array_add TEMPLATECTL_VARS host="$value_"'
 | 
						|
    --sysname: '$array_add TEMPLATECTL_VARS sysname="$value_"'
 | 
						|
    --sysdist: '$array_add TEMPLATECTL_VARS sysdist="$value_"'
 | 
						|
    -s:,--sysver: '$array_add TEMPLATECTL_VARS sysver="$value_"'
 | 
						|
    -6,--squeeze '$array_add TEMPLATECTL_VARS sysver=squeeze'
 | 
						|
    -7,--wheezy '$array_add TEMPLATECTL_VARS sysver=wheezy'
 | 
						|
    -8,--jessie '$array_add TEMPLATECTL_VARS sysver=jessie'
 | 
						|
    -u,--update,--deploy action=deploy
 | 
						|
    -r:,--certsdir: aac_certsdir=
 | 
						|
    --localhosts action=localhosts
 | 
						|
    -C:,--one-conf: oneconf=
 | 
						|
    -M:,--one-module: onemodule=
 | 
						|
    -S:,--one-site: onesite=
 | 
						|
)
 | 
						|
parse_args "$@"; set -- "${args[@]}"
 | 
						|
 | 
						|
__template_set_destdir destdir autocreate "$TEMPLATECTL_NAME" || die
 | 
						|
setx config=templatectl_config "$destdir" ${nohideconfig:+nohideconfig}
 | 
						|
modified=
 | 
						|
templatectl_loadvars "$config" && modified=1
 | 
						|
 | 
						|
if [ -n "$sysname" -o -n "$sysdist" -o -n "$sysver" ]; then
 | 
						|
    ensure_sysinfos sysname sysdist sysver
 | 
						|
else
 | 
						|
    sysname="$MYSYSNAME"
 | 
						|
    sysdist="$MYSYSDIST"
 | 
						|
    sysver="$MYSYSVER"
 | 
						|
fi
 | 
						|
__template_set_var sysname "$sysname"
 | 
						|
__template_set_var sysdist "$sysdist"
 | 
						|
__template_set_var sysver "$sysver"
 | 
						|
bits=
 | 
						|
if check_sysinfos --vars sysname sysdist sysver bits -d debian -v jessie+; then
 | 
						|
    array_add TEMPLATECTL_SRCDIRS apacheconfig8
 | 
						|
elif check_sysinfos --vars sysname sysdist sysver bits -d debian; then
 | 
						|
    array_add TEMPLATECTL_SRCDIRS apacheconfig7
 | 
						|
else
 | 
						|
    ewarn "$(get_sysinfos_desc sysname sysdist sysver): système non supporté pour le déploiement"
 | 
						|
fi
 | 
						|
 | 
						|
################################################################################
 | 
						|
if [ "$action" == create ]; 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"
 | 
						|
 | 
						|
    [ -n "$host" ] || host="$1"
 | 
						|
    if [ -n "$host" ]; then
 | 
						|
        read_value -i "Veuillez entrer le nom d'hôte" host "$host"
 | 
						|
    else
 | 
						|
        check_interaction -c && einfo "Vous pouvez entrer un nom d'hôte spécifique pour la nouvelle configuration, ou laisser la valeur par défaut @@dhost@@ pour qu'il soit calculé dynamiquement lors du déploiement"
 | 
						|
        read_value "Veuillez entrer le nom d'hôte" host @@dhost@@
 | 
						|
    fi
 | 
						|
    __template_set_var host "$host"
 | 
						|
 | 
						|
    if [ -f "$config" ]; then
 | 
						|
        ask_yesno "Le fichier $(ppath "$config") sera écrasé. Voulez-vous continuer?" O || die
 | 
						|
        rm -f "$config" || die
 | 
						|
    fi
 | 
						|
    templatectl -d "$destdir" --config "$config" --no-load-vars -m --write-vars
 | 
						|
 | 
						|
################################################################################
 | 
						|
elif [ "$action" == template ]; then
 | 
						|
    __TEMPLATECTL_HELP="USAGE: $scriptname -t -- args...
 | 
						|
 | 
						|
$__TEMPLATECTL_HELP"
 | 
						|
    templatectl -d "$destdir" --config "$config" --no-load-vars ${templateopt:+-$templateopt} "$@"
 | 
						|
 | 
						|
################################################################################
 | 
						|
elif [ "$action" == deploy -o "$action" == localhosts ]; then
 | 
						|
    [ -d "$destdir" ] || die "$destdir: répertoire introuvable"
 | 
						|
 | 
						|
    args=(
 | 
						|
        -d "$destdir" --$action ${aac_certsdir:+-r "$aac_certsdir"}
 | 
						|
        ${oneconf:+--one-conf "$oneconf"}
 | 
						|
        ${onemodule:+--one-module "$onemodule"}
 | 
						|
        ${onesite:+--one-site "$onesite"}
 | 
						|
    )
 | 
						|
    for __name in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
 | 
						|
        array_add args -v "$__name=${!__name}"
 | 
						|
    done
 | 
						|
    array_add args -- "$@"
 | 
						|
    run_as_root "${args[@]}"
 | 
						|
 | 
						|
    if [ "$action" == deploy ]; then
 | 
						|
        etitle "Mise à jour du système"
 | 
						|
        args=(apache_autoconf
 | 
						|
            --ignore "$(basename -- "$config")"
 | 
						|
            ${oneconf:+--one-conf "$(basename -- "$oneconf")"}
 | 
						|
            ${onemodule:+--one-module "$(basename -- "$onemodule")"}
 | 
						|
        )
 | 
						|
    elif [ "$action" == localhosts ]; then
 | 
						|
        etitle "Mise à jour de /etc/hosts"
 | 
						|
        args=(apache_autoconf_localhosts)
 | 
						|
    fi
 | 
						|
    args=("${args[@]}"
 | 
						|
        "$destdir" "$aac_certsdir"
 | 
						|
        ${onesite:+--one-site "$(basename -- "$onesite")"}
 | 
						|
    )
 | 
						|
    for __name in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
 | 
						|
        array_add args "$__name=${!__name}"
 | 
						|
    done
 | 
						|
    "${args[@]}" "$@" || die
 | 
						|
    eend
 | 
						|
fi
 |