#!/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= bits= 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' --bits: bits= -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 custom_sysinfos=1 else sysname="$MYSYSNAME" sysdist="$MYSYSDIST" sysver="$MYSYSVER" bits="$MYBITS" custom_sysinfos= fi __template_set_var sysname "$sysname" __template_set_var sysdist "$sysdist" __template_set_var sysver "$sysver" 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"} ${custom_sysinfos:+--sysname "$sysname" --sysdist "$sysdist" --sysver "$sysver" --bits "$bits"} ) 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")"} ${custom_sysinfos:+--sysname "$sysname" --sysdist "$sysdist" --sysver "$sysver" --bits "$bits"} ) 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