286 lines
10 KiB
Bash
Executable File
286 lines
10 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 ""
|
|
}
|
|
|
|
DEFAULT_ADMIN=supervision-gdrsi@listes.univ-reunion.fr
|
|
DEFAULT_CERTSDIR=1507-renater
|
|
DEFAULT_CANAME=1507-DigiCertCA.crt
|
|
set_defaults apacheconfig
|
|
|
|
TEMPLATECTL_NAME=apacheconfig
|
|
TEMPLATECTL_SRCDIRS=(apacheconfig)
|
|
TEMPLATECTL_CONFIG="$TEMPLATECTL_NAME"
|
|
TEMPLATECTL_DEFAULTS=(
|
|
admin="$DEFAULT_ADMIN"
|
|
certsdir="$DEFAULT_CERTSDIR"
|
|
caname="$DEFAULT_CANAME"
|
|
)
|
|
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"
|
|
#check_sysinfos --vars sysname sysdist sysver bits "${templatectl_suffix[@]}
|
|
|
|
################################################################################
|
|
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"}
|
|
)
|
|
# sur une ligne séparée parce que $bits peut être vide
|
|
[ -n "$custom_sysinfos" ] && array_add args --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")"}
|
|
)
|
|
# sur une ligne séparée parce que $bits peut être vide
|
|
[ -n "$custom_sysinfos" ] && array_add args --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
|