re-écrire la gestion des templates pour apacheconfig et runsconfig

This commit is contained in:
Jephté Clain 2015-10-29 12:43:19 +04:00
parent 702c75317d
commit 93ac7ea005
16 changed files with 966 additions and 660 deletions

View File

@ -4,383 +4,199 @@ source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS template apache.tools urequire DEFAULTS template apache.tools
function display_help() { function display_help() {
uecho "$scriptname: Gérer une configuration apache pour déploiement uecho "$scriptname: Gérer la configuration d'un serveur web apache
USAGE USAGE
$scriptname [options] $scriptname -c
$scriptname -t -- args...
OPTIONS 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 --help-template
Afficher toutes les options qui concernent la gestion des templates Afficher l'aide concernent la gestion des templates.
--help-files Equivalent à -t -- --help
Afficher une description des fichiers qui peuvent se trouver dans le -h, --host HOST
répertoire local Spécifier l'hôte. Equivalent à -v host=HOST
--help-deploy --sysname SYSNAME
Afficher l'aide sur les options avancées pour le déploiement --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.
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à. Les templates ayant l'extension '.template' doivent
être demandés explicitement. Sinon, ils sont ignorés.
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, --deploy -u, --update, --deploy
Mettre à jour la configuration système à partir du répertoire local. Mettre à jour la configuration système à partir du répertoire local.
Lors du déploiement de la configuration, les valeurs de variables Lors du déploiement de la configuration, les valeurs des variables
dynamiques sont remplacées dans les fichiers destination. dynamiques sont remplacées dans les fichiers destination.
Les arguments qui restent sont passés tels quels à apache_autoconf
-r, --certsdir CERTSDIR -r, --certsdir CERTSDIR
Spécifier le cas échéant le répertoire contenant les certificats à Spécifier le cas échéant le répertoire contenant les certificats à
déployer." déployer."
} }
function __templatectl_display_help() { display_help; }
function display_template_help() {
uecho "\
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 TEMPLATE_STATIC_VARS=()
Spécifier le répertoire local dans lequel copier la configuration apache. TEMPLATE_DYNAMIC_VARS=(
-l, --list host hostname aliases
Lister les templates disponibles. ips ips_default_namevirtualhost ips_namevirtualhosts ips_listens
-m, --merge admin certsdir caname certname keyname configdir)
Copier les templates spécifiés dans le répertoire local s'il n'y existent TEMPLATE_NOWRITE_VARS=(hostname aliases configdir)
pas déjà. Les templates ayant l'extension '.template' doivent être demandés
explicitement. Sinon, ils sont ignorés. __TEMPLATE_DEFAULTF_host=__template_defaultf_host
-z, --unmerge __TEMPLATE_UPDATEF_host=__template_updatef_host
Supprimer les fichiers du répertoire local s'ils n'ont pas été modifiés par function __template_defaultf_host() {
rapport aux templates. myhost
-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.
--list-vars
Afficher pour information les valeurs par défaut des variables de template.
--write-vars
Ecrire dans le fichier .apacheconfig les valeurs par défaut des variables,
ce qui permet après édition du fichier d'éviter de les spécifier à chaque
fois avec l'option -v
Le fichier n'est pas écrasé s'il existe déjà.
-v, --var NAME=VALUE
Spécifier la valeur d'une variable. Il est possible de spécifier des valeurs
qui ne sont pas dans la liste prédéfinie. Par défaut, c'est une variable de
template, utilisée pour mettre à jour la copie locale d'un template avec
l'option --merge
Dans le fichier .apacheconfig, les valeurs des variables de template n'est
pas censée changer. Lors de la copie des templates avec --merge, chaque
occurence de @@VAR@@ dans un template est remplacée dans la copie locale par
la valeur de la variable de template VAR
Les variables dynamiques sont remplacées lors du déploiement du fichier avec
l'option --update"
} }
function display_files_help() { function __template_updatef_host() {
uecho "\ local update_aliases
Le répertoire local peut contenir les fichiers et répertoires suivants, qui sont [ "$aliases" == "$hostname" ] && update_aliases=1
tous optionnels: __template_set_var hostname "${host%%.*}"
[ -n "$update_aliases" ] && __template_set_var aliases "$hostname"
- modules.conf la liste des modules qu'il faut activer. Si un module n'existe [ -n "$ips" ] || __template_set_var ips ""
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"
}
function display_deploy_help() {
uecho "\
Les options suivantes sont des options avancées pour le déploiment des fichiers:
--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"
} }
# Valeurs par défaut des variables de template __TEMPLATE_DEFAULTF_ips=__template_defaultf_ips
DEFAULT_TEMPLATE_VARS=( __TEMPLATE_UPDATEF_ips=__template_updatef_ips
hostname= aliases= # mettre ces variables AVANT host function __template_defaultf_ips() {
host= local -a ips
resolv_ips ips "$host"
echo "${ips[*]}"
}
function __template_updatef_ips() {
local -a ipports; local ipport ip port
local dnvh nvhs ls
nvhs=
ls=
array_split ipports "$ips" " "
for ipport in "${ipports[@]}"; do
splitpair "$ipport" ip port
[ -n "$port" ] || port=443
[ -n "$dnvh" ] || dnvh="#ips_default_namevirtualhost
NameVirtualHost *:80"
[ -n "$nvhs" ] || nvhs="#ips_namevirtualhosts"
[ -n "$ls" ] || ls="#ips_listens"
nvhs="$nvhs
NameVirtualHost $ip:$port"
ls="$ls
Listen $ip:$port"
done
[ -n "$dnvh" ] && __template_set_var ips_default_namevirtualhost "$dnvh"
[ -n "$nvhs" ] && __template_set_var ips_namevirtualhosts "$nvhs"
[ -n "$ls" ] && __template_set_var ips_listens "$ls"
}
TEMPLATECTL_NAME=apacheconfig
TEMPLATECTL_SRCDIRS=(apacheconfig)
TEMPLATECTL_CONFIG=".$TEMPLATECTL_NAME"
TEMPLATECTL_DEFAULTS=(
admin=supervision-gdrsi@listes.univ-reunion.fr admin=supervision-gdrsi@listes.univ-reunion.fr
certsdir=renater certsdir=renater
caname=terena.crt
certname=
keyname=
#configdir= # défini ci-dessous
) )
TEMPLATECTL_VARS=()
function parent_apacheconfig() { action=
# chercher à partir du répertoire courant si un des répertoires parents destdir=
# s'appelle apacheconfig templateopt=
local dir="$(pwd)" dirname certsdir=
args=(
while true; do --help '$exit_with display_help'
setx dirname=basename -- "$dir" -c,--create action=create
if [ "$dir" == / ]; then -d:,--destdir: destdir=
# s'arrêter à la racine -t::,--template:: '$set@ templateopt; action=template'
return 1 --help-template '$templateopt=-help; action=template'
elif [ "$dir" == "$HOME" ]; then -l,--list '$templateopt=l; action=template'
# s'arrêter au répertoire HOME -v:,--var: TEMPLATECTL_VARS
return 1 -m,--merge '$templateopt=m; action=template'
elif [ "$dirname" == apacheconfig ]; then -L,--list-vars '$templateopt=L; action=template'
echo "$dir" -h:,--host: '$array_add TEMPLATECTL_VARS host="$value_"'
return 0 --sysname: '$array_add TEMPLATECTL_VARS sysname="$value_"'
elif [ "$dirname" == .apacheconfig ]; then --sysdist: '$array_add TEMPLATECTL_VARS sysdist="$value_"'
echo "$dir" -s:,--sysver: '$array_add TEMPLATECTL_VARS sysver="$value_"'
return 0 -6,--squeeze '$array_add TEMPLATECTL_VARS sysver=squeeze'
fi -7,--wheezy '$array_add TEMPLATECTL_VARS sysver=wheezy'
setx dir=dirname -- "$dir" -8,--jessie '$array_add TEMPLATECTL_VARS sysver=jessie'
done -u,--update,--deploy action=deploy
} -r:,--certsdir: certsdir=
TEMPLATE_VARS=()
DYNAMIC_VARS=()
function update_var() {
# mettre à jour la valeur d'une variable en tenant compte de certaines
# dépendances. par exemple, si on modifie host, il faut mettre à jour
# hostname.
local __orig_value="${!1}"
array_contains DYNAMIC_VARS "$1" || array_addu TEMPLATE_VARS "$1"
# Valeurs par défaut
case "$1" in
host) [ -n "$2" ] || set -- "$1" "$(myhost)";;
esac
# Mettre à jour la variable
setv "$1" "$2"
# Mettre à jour des variables dépendantes
local __update_aliases
case "$1" in
host)
# attention à ne pas créer de boucle infinies :-)
[ "$aliases" == "$hostname" ] && __update_aliases=1
update_var hostname "${host%%.*}"
[ -n "$__update_aliases" ] && update_var aliases "$hostname"
;;
esac
[ "$2" != "$__orig_value" ]
}
__vars=()
__list_vars=
__write_vars=
__deploy=
__certsdir=
__confdir=
__modulesdir=
__sitesdir=
__cgibindir=
__wwwdir=
__certsconfdir=
__rrdir=
__restart=1
__TEMPLATECTL_SUPPLOPTS=(
--help-template '$exit_with display_template_help'
--help-files '$exit_with display_files_help'
--help-deploy '$exit_with display_deploy_help'
-v:,--var: __vars
--list-vars __list_vars=1
--write-vars __write_vars=1
-u,--update,--deploy __deploy=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" parse_args "$@"; set -- "${args[@]}"
# répertoire de template __template_set_destdir destdir autocreate "$TEMPLATECTL_NAME" || die
setx __templatectl_srcdir=templatesrc apacheconfig setx config=templatectl_config "$destdir"
modified=
templatectl_loadvars "$config" && modified=1
# répertoire local if [ -n "$sysname" -o -n "$sysdist" -o -n "$sysver" ]; then
__autocreate= ensure_sysinfos sysname sysdist sysver
if [ -z "$__templatectl_destdir" ]; then else
if [ -d apacheconfig ]; then sysname="$MYSYSNAME"
__templatectl_destdir=apacheconfig sysdist="$MYSYSDIST"
elif [ -d .apacheconfig ]; then sysver="$MYSYSVER"
__templatectl_destdir=.apacheconfig fi
elif setx __templatectl_destdir=parent_apacheconfig; then __template_set_var sysname "$sysname"
estepn "Sélection automatique de $(ppath "$__templatectl_destdir")" __template_set_var sysdist "$sysdist"
elif [ -e apacheconfig ]; then __template_set_var sysver "$sysver"
die "Vous devez spécifier le répertoire de référence avec -d" bits=
else if check_sysinfos --vars sysname sysdist sysver bits -d debian -v jessie+; then
__templatectl_destdir=apacheconfig array_add TEMPLATECTL_SRCDIRS apacheconfig8
__autocreate=1 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 fi
fi [ -d "$destdir" ] || die "$destdir: répertoire introuvable"
setx __templatectl_destdir=abspath "$__templatectl_destdir"
# charger les variables. important: la liste des variables définie dans le if [ -f "$config" ]; then
# fichier .apacheconfig prend la précédence sur la liste définie par défaut ask_yesno "Le fichier $(ppath "$config") existe. Voulez-vous l'écraser?" O || die
__template_vars=("${DEFAULT_TEMPLATE_VARS[@]}") rm -f "$config" || die
__dynamic_vars=()
__apacheconfig_vars="$__templatectl_destdir/.apacheconfig"
# d'abord charger __template_vars
[ -f "$__apacheconfig_vars" ] && source "$__apacheconfig_vars"
for __var in "${__template_vars[@]}"; do
splitvar "$__var" __name __value
update_var "$__name" "$__value"
done
array_contains TEMPLATE_VARS configdir || update_var configdir "$__templatectl_destdir"
# puis charger __dynamic_vars
[ -f "$__apacheconfig_vars" ] && source "$__apacheconfig_vars"
for __var in "${__dynamic_vars[@]}"; do
splitvar "$__var" __name __value
array_del TEMPLATE_VARS "$__name"
array_addu DYNAMIC_VARS "$__name"
update_var "$__name" "$__value"
done
# mettre à jour les variables
__modified=
for __var in "${__vars[@]}"; do
splitvar "$__var" __name __value
update_var "$__name" "$__value" && __modified=1
done
# enregistrer les valeurs des variables
if [ -n "$__write_vars" ]; then
[ -f "$__apacheconfig_vars" ] &&
die "Refus d'écraser le fichier existant $(ppath "$__apacheconfig_vars")"
echo "# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8" >"$__apacheconfig_vars"
echo "__template_vars=(" >>"$__apacheconfig_vars"
for __var in "${TEMPLATE_VARS[@]}"; do
echo_setv "$__var=${!__var}" >>"$__apacheconfig_vars"
done
echo ")" >>"$__apacheconfig_vars"
echo "__dynamic_vars=(" >>"$__apacheconfig_vars"
for __var in "${DYNAMIC_VARS[@]}"; do
echo_setv "$__var=${!__var}" >>"$__apacheconfig_vars"
done
echo ")" >>"$__apacheconfig_vars"
fi
# afficher les variables
if [ -n "$__list_vars" ]; then
echo "# template vars"
for __var in "${TEMPLATE_VARS[@]}"; do
echo_setv "$__var=${!__var}"
done
if [ ${#DYNAMIC_VARS[*]} -gt 0 ]; then
echo "# dynamic vars"
for __var in "${DYNAMIC_VARS[@]}"; do
echo_setv "$__var=${!__var}"
done
fi fi
fi templatectl -d "$destdir" --no-load-vars -m --write-vars
# Gérer les templates et fichiers locaux ################################################################################
if [ -z "$__templatectl_opt" -a -z "$__list_vars" -a -z "$__write_vars" -a -z "$__deploy" ]; then elif [ "$action" == template ]; then
__templatectl_opt=1 __TEMPLATECTL_HELP="USAGE: $scriptname -t -- args...
__templatectl_auto=1
fi
if [ -n "$__templatectl_opt" ]; then
if [ -n "$__autocreate" -a ! -d "$__templatectl_destdir" ]; then
estepn "Création automatique de $(ppath "$__templatectl_destdir")"
mkdir -p "$__templatectl_destdir" || die
fi
[ -d "$__templatectl_destdir" ] || die "$__templatectl_destdir: répertoire introuvable"
__templatectl_do "$@"
fi
# déploiement $__TEMPLATECTL_HELP"
if [ -n "$__deploy" ]; then templatectl -d "$destdir" --no-load-vars ${templateopt:+-$templateopt} "$@"
args=(
-d "$__templatectl_destdir" ################################################################################
-u elif [ "$action" == deploy ]; then
${__certsdir:+-r "$__certsdir"} [ -d "$destdir" ] || die "$destdir: répertoire introuvable"
${__confdir:+--confdir "$__confdir"}
${__modulesdir:+--modulesdir "$__modulesdir"} args=(-d "$destdir" --deploy ${certsdir:+-r "$certsdir"})
${__sitesdir:+--sitesdir "$__sitesdir"} for __name in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
${__cgibindir:+--cgibindir "$__cgibindir"}
${__wwwdir:+--wwwdir "$__wwwdir"}
${__certsconfdir:+--certsconfdir "$__certsconfdir"}
${__rrdir:+--rrdir "$__rrdir"}
)
for __name in "${DYNAMIC_VARS[@]}"; do
array_add args -v "$__name=${!__name}" array_add args -v "$__name=${!__name}"
done done
array_add args -- "$@"
run_as_root "${args[@]}" run_as_root "${args[@]}"
etitle "Mise à jour du système" etitle "Mise à jour du système"
[ -d "$__templatectl_destdir" ] || die "$__templatectl_destdir: répertoire introuvable" args=("$destdir" "$certsdir")
args=( for __name in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
"$__templatectl_destdir" "$__certsdir"
${__confdir:+--confdir "$__confdir"}
${__modulesdir:+--modulesdir "$__modulesdir"}
${__sitesdir:+--sitesdir "$__sitesdir"}
${__cgibindir:+--cgibindir "$__cgibindir"}
${__wwwdir:+--wwwdir "$__wwwdir"}
${__certsconfdir:+--certsconfdir "$__certsconfdir"}
${__rrdir:+--rrdir "$__rrdir"}
)
for __name in "${DYNAMIC_VARS[@]}"; do
array_add args "$__name=${!__name}" array_add args "$__name=${!__name}"
done done
apache_autoconf "${args[@]}" || die apache_autoconf "${args[@]}" "$@" || die
eend eend
fi fi

View File

@ -180,11 +180,42 @@ $sedscript" <"$src" >"$FILLTEMP"
copy_update "$src" "$dest" "$perms" copy_update "$src" "$dest" "$perms"
} }
__APACHE_AUTOCONF_HELP="\
--confdir CONFDIR
Spécifier l'emplacement des fichiers de configuration apache ainsi que des
fichiers 'confs.conf', 'modules.conf' et 'sites.conf'. Par défaut, prendre
le répertoire local DESTDIR.
--confsdir CONFSDIR
Spécifier l'emplacement des fichiers de configuration des configuration. Par
défaut, utiliser DESTDIR/confs si ce répertoire existe.
--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 __display_apache_autoconf_help() { eecho "$__APACHE_AUTOCONF_HELP"; }
function apache_autoconf() { function apache_autoconf() {
eval "$(utools_local)" eval "$(utools_local)"
local autoconfdir certsdir confdir modulesdir sitesdir cgibindir wwwdir certsconfdir rrdir local autoconfdir certsdir confdir modulesdir sitesdir cgibindir wwwdir certsconfdir rrdir
local restart=1 local restart=1
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with __display_apache_autoconf_help' \
--confdir: confdir= \ --confdir: confdir= \
--modulesdir: modulesdir= \ --modulesdir: modulesdir= \
--sitesdir: sitesdir= \ --sitesdir: sitesdir= \

View File

@ -316,9 +316,21 @@ function ensure_sysinfos() {
__fix_sysinfos_downward __fix_sysinfos_downward
} }
function get_sysinfos_desc() {
# Afficher une chaine de la forme SYSNAME/SYSDIST/SYSVER qui décrit le
# système actuel
local sysname_="${1:-MYSYSNAME}"; sysname_="${!sysname_}"
local sysdist_="${2:-MYSYSDIST}"; sysdist_="${!sysdist_}"
local sysver_="${3:-MYSYSVER}"; sysver_="${!sysver_}"
echo "$sysname_${sysdist_:+/$sysdist_}${sysver_:+/$sysver_}"
}
function check_sysinfos() { function check_sysinfos() {
# Tester si le système courant ($MYSYSNAME, $MYSYSDIST, $MYSYSVER, $MYBITS) # Tester si le système courant ($MYSYSNAME, $MYSYSDIST, $MYSYSVER, $MYBITS)
# correspond à au moins un des arguments. # correspond à au moins un des arguments.
# Il est possible de spécifier des variables différentes pour tester le
# système courant avec l'option --vars qui doit être spécifiée en premier:
# check_sysinfos --vars sysname sysdist sysver bits -d debian
# Les options -s, -d, -v, -b permettent respectivement de vérifier le # Les options -s, -d, -v, -b permettent respectivement de vérifier le
# système, la distribution, la version et le nombre de bits. Il est possible # système, la distribution, la version et le nombre de bits. Il est possible
# de spécifier plusieurs tests à effectuer, e.g.: # de spécifier plusieurs tests à effectuer, e.g.:
@ -335,10 +347,20 @@ function check_sysinfos() {
# cela n'a actuellement de sens qu'avec les version de MacOS X. Il faut # cela n'a actuellement de sens qu'avec les version de MacOS X. Il faut
# aussi impérativement filtrer sur le système, e.g: # aussi impérativement filtrer sur le système, e.g:
# check_sysinfos -s macosx -d 10.5+ # check_sysinfos -s macosx -d 10.5+
local sysnamevar_="MYSYSNAME" local sysnamevar_ sysdistvar_ sysvervar_ bitsvar_
local sysdistvar_="MYSYSDIST" if [ "$1" == --vars ]; then
local sysvervar_="MYSYSVER" shift
local bitsvar_="MYBITS" if [[ "$1" != -* ]]; then sysnamevar_="${1:-MYSYSNAME}"; shift; fi
if [[ "$1" != -* ]]; then sysdistvar_="${1:-MYSYSDIST}"; shift; fi
if [[ "$1" != -* ]]; then sysvervar_="${1:-MYSYSVER}"; shift; fi
if [[ "$1" != -* ]]; then bitsvar_="${1:-MYBITS}"; shift; fi
else
sysnamevar_="MYSYSNAME"
sysdistvar_="MYSYSDIST"
sysvervar_="MYSYSVER"
bitsvar_="MYBITS"
fi
local check_=sysname r_=0 local check_=sysname r_=0
while [ -n "$1" ]; do while [ -n "$1" ]; do
if [[ "$1" == -* ]]; then if [[ "$1" == -* ]]; then

View File

@ -43,32 +43,100 @@ function __template_plsort() {
sort -n "$@" | sort -n "$@" |
awk '{sub(/[0-9]+:/, ""); print}' awk '{sub(/[0-9]+:/, ""); print}'
} }
function __template_search_destdir() {
# Chercher à partir du répertoire courant si un des répertoires parents
# s'appelle $1. Retourner vrai si le répertoire a été trouvé.
local dir="$(pwd)" dirname
while true; do
setx 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" == "$1" ]; then
echo "$dir"
return 0
elif [ "$dirname" == ".$1" ]; then
echo "$dir"
return 0
fi
setx dir=dirname -- "$dir"
done
}
function __template_set_destdir() {
local __destdir="${1:-destdir}" __autocreate="${2:-autocreate}" __name="${3:-template}"
setv "$__autocreate"
if [ -z "${!__destdir}" ]; then
if [ -d "$__name" ]; then
setv "$__destdir" "$__name"
elif [ -d ".$__name" ]; then
setv "$__destdir" ".$__name"
elif setx "$__destdir" __template_search_destdir "$__name"; then
estepn "Sélection automatique de $(ppath "${!__destdir}")"
elif [ -e "$__name" ]; then
eerror "Vous devez spécifier le répertoire de destination avec -d"
return 1
else
setv "$__destdir" "$__name"
setv "$__autocreate" 1
fi
fi
setx "$__destdir" abspath "${!__destdir}"
return 0
}
function __template_set_var() {
# Mettre à jour la variable $1 avec la valeur $2 en tenant compte de
# certaines dépendances. Par exemple, si on modifie host, il faut mettre à
# jour hostname.
# La variable __TEMPLATE_DEFAULTF_var contient le nom d'une fonction qui
# retourne la valeur par défaut de la variable. Cette fonction est appelée
# avec le nom de la variable comme premier argument.
# La variable __TEMPLATE_UPDATEF_var contient le nom d'une fonction qui met
# à jour les variables dépendantes. Cette fonction est appelée avec le nom
# de la variable comme premier argument et sa nouvelle valeur en deuxième
# argument.
# Retourner vrai si la valeur a été changée
local __orig_value="${!1}"
local __defaultf="__TEMPLATE_DEFAULTF_$1" __updatef="__TEMPLATE_UPDATEF_$1"
array_contains TEMPLATE_DYNAMIC_VARS "$1" || array_addu TEMPLATE_STATIC_VARS "$1"
[ "$3" == writable ] && array_del TEMPLATE_NOWRITE_VARS
[ -z "$2" -a -n "${!__defaultf}" ] && set -- "$1" "$("${!__defaultf}" "$1")"
setv "$1" "$2"
[ -n "${!__updatef}" ] && "${!__updatef}" "$1" "$2"
[ "$2" != "$__orig_value" ]
}
# liste des variables qu'il faut remplacer dans les fichiers sources # liste des variables qu'il faut remplacer dans les fichiers sources
TEMPLATE_VARS=() TEMPLATE_STATIC_VARS=()
function __template_setup_tmpfile() { function __template_setup_tmpfile() {
if [ ${#TEMPLATE_VARS[*]} -gt 0 ]; then if [ ${#TEMPLATE_STATIC_VARS[*]} -gt 0 ]; then
# S'il y a des variables à remplacer, préparer un fichier temporaire # S'il y a des variables à remplacer, préparer un fichier temporaire
ac_set_tmpfile tmpfile ac_set_tmpfile tmpfile
fi fi
} }
function __template_clean_tmpfile() { function __template_clean_tmpfile() {
if [ ${#TEMPLATE_VARS[*]} -gt 0 ]; then if [ ${#TEMPLATE_STATIC_VARS[*]} -gt 0 ]; then
ac_clean "$tmpfile" ac_clean "$tmpfile"
fi fi
} }
function __template_fillvars() { function __template_fillvars() {
# Pour chacune des variables VAR de TEMPLATE_VARS, remplacer dans le fichier # Pour chacune des variables VAR de TEMPLATE_STATIC_VARS, remplacer dans le
# $1 les occurences de @@VAR@@ par la valeur $VAR # fichier $1 les occurences de @@VAR@@ par la valeur $VAR
# Afficher le chemin vers le fichier temporaire qui contient le fichier # Afficher le chemin vers le fichier temporaire qui contient le fichier
# modifié. Si $2 est spécifié, prendre ce chemin comme fichier temporaire. # modifié. Si $2 est spécifié, prendre ce chemin comme fichier temporaire.
# Sinon, créer un nouveau fichier temporaire. Si le fichier ne contient # Sinon, créer un nouveau fichier temporaire. Si le fichier ne contient
# aucune occurence de variable, afficher le chemin original $1. # aucune occurence de variable, afficher le chemin original $1.
[ ${#TEMPLATE_VARS[*]} -eq 0 ] && { echo "$1"; return; } [ ${#TEMPLATE_STATIC_VARS[*]} -eq 0 ] && { echo "$1"; return; }
# chercher si le fichier contient au moins un des tags de TEMPLATE_VARS # chercher si le fichier contient au moins un des tags de
# TEMPLATE_STATIC_VARS
local __var __tag __found local __var __tag __found
for __var in "${TEMPLATE_VARS[@]}"; do for __var in "${TEMPLATE_STATIC_VARS[@]}"; do
__tag="@@${__var}@@" __tag="@@${__var}@@"
if quietgrep "$__tag" "$1"; then if quietgrep "$__tag" "$1"; then
__found=1 __found=1
@ -79,7 +147,7 @@ function __template_fillvars() {
# construire le script sed pour le remplacement des variables # construire le script sed pour le remplacement des variables
local __script __first=1 local __script __first=1
for __var in "${TEMPLATE_VARS[@]}"; do for __var in "${TEMPLATE_STATIC_VARS[@]}"; do
[ -n "$__first" ] || __script="$__script"$'\n' [ -n "$__first" ] || __script="$__script"$'\n'
__first= __first=
__script="${__script}s/@@${__var}@@/$(qseds "${!__var}")/g" __script="${__script}s/@@${__var}@@/$(qseds "${!__var}")/g"
@ -90,18 +158,25 @@ function __template_fillvars() {
} }
function template_list() { function template_list() {
# Lister les fichiers du répertoire source $1 qui seraient fusionnées avec # Soit $N le séparateur --, lister les fichiers des répertoires sources
# template_merge() ou supprimés avec template_unmerge() du répertoire # $2..$(N-1) qui seraient fusionnés avec template_merge() ou supprimés avec
# destination $2. Si des chemins sont spécifiés avec les arguments $3..@, ne # template_unmerge() du répertoire destination $1. Si des chemins sont spécifiés
# traiter que les fichiers qui correspondent à ces spécifications # avec les arguments $(N+1)..@, ne traiter que les fichiers qui correspondent à
local srcdir="$1"; shift # ces spécifications. Exemple:
__template_check_srcdir "$srcdir" || return 1 # template_list destdir srcdirs... -- specs...
setx srcdir=abspath "$srcdir"
local destdir="${1:-.}"; shift local destdir="${1:-.}"; shift
__template_check_destdir "$destdir" || return 1 __template_check_destdir "$destdir" || return 1
setx destdir=abspath "$destdir" setx destdir=abspath "$destdir"
local -a srcdirs; local srcdir
while [ $# -gt 0 ]; do
srcdir="$1"; shift
[ "$srcdir" == -- ] && break
__template_check_srcdir "$srcdir" || return 1
setx srcdir=abspath "$srcdir"
array_add srcdirs "$srcdir"
done
local rel2pwd local rel2pwd
withinpath "$destdir" "$(pwd)" && rel2pwd=1 withinpath "$destdir" "$(pwd)" && rel2pwd=1
@ -118,27 +193,29 @@ function template_list() {
withinpath "$destdir" "$srcspec" || continue withinpath "$destdir" "$srcspec" || continue
srcspec="${srcspec#$destdir}" srcspec="${srcspec#$destdir}"
[ -e "$srcdir$srcspec" ] || continue for srcdir in "${srcdirs[@]}"; do
array_from_lines srcfiles "$(find "$srcdir$srcspec" -type f)" [ -e "$srcdir$srcspec" ] || continue
for src in "${srcfiles[@]}"; do array_from_lines srcfiles "$(find "$srcdir$srcspec" -type f)"
setx content=__template_fillvars "$src" "$tmpfile" for src in "${srcfiles[@]}"; do
dest="$destdir/${src#$srcdir/}" setx content=__template_fillvars "$src" "$tmpfile"
dest="$destdir/${src#$srcdir/}"
list= list=
if [ -L "$dest" ]; then if [ -L "$dest" ]; then
: :
elif [ -f "$dest" ]; then elif [ -f "$dest" ]; then
testsame "$content" "$dest" && list=1 testsame "$content" "$dest" && list=1
else else
list=1 list=1
fi fi
[ -n "$list" ] || continue [ -n "$list" ] || continue
if [ -n "$rel2pwd" ]; then if [ -n "$rel2pwd" ]; then
relpath "$dest" relpath "$dest"
else else
echo "${src#$srcdir/}" echo "${src#$srcdir/}"
fi fi
done
done done
done | csort -u done | csort -u
@ -146,19 +223,26 @@ function template_list() {
} }
function template_merge() { function template_merge() {
# Copier dans le répertoire destination $2 tous les fichiers provenant du # Soit $N le séparateur --, copier dans le répertoire destination $1 les
# répertoire source $1 correspondant aux spécifications $3..@, si ces fichiers # fichiers des répertoires sources $2..$(N-1) correspondant aux spécifications
# n'ont pas été modifiés dans le répertoire de destination. # $(N+1)..@, si ces fichiers n'ont pas été modifiés dans le répertoire de
# destination.
# Les fichiers sources ayant l'extension .template sont ignorés par défaut, sauf # Les fichiers sources ayant l'extension .template sont ignorés par défaut, sauf
# s'ils sonts demandés explicitement. # s'ils sonts demandés explicitement. Exemple:
local srcdir="$1"; shift # template_merge destdir srcdirs... -- specs...
__template_check_srcdir "$srcdir" || return 1
setx srcdir=abspath "$srcdir"
local destdir="${1:-.}"; shift local destdir="${1:-.}"; shift
__template_check_destdir "$destdir" || return 1 __template_check_destdir "$destdir" || return 1
setx destdir=abspath "$destdir" setx destdir=abspath "$destdir"
local -a srcdirs; local srcdir
while [ $# -gt 0 ]; do
srcdir="$1"; shift
[ "$srcdir" == -- ] && break
__template_check_srcdir "$srcdir" || return 1
setx srcdir=abspath "$srcdir"
array_add srcdirs "$srcdir"
done
[ $# -gt 0 ] || set -- "$destdir" [ $# -gt 0 ] || set -- "$destdir"
local tmpfile; __template_setup_tmpfile local tmpfile; __template_setup_tmpfile
@ -174,53 +258,61 @@ function template_merge() {
fi fi
srcspec="${srcspec#$destdir}" srcspec="${srcspec#$destdir}"
[ -e "$srcdir$srcspec" ] || continue for srcdir in "${srcdirs[@]}"; do
ebegin "$(ppath "$destdir$srcspec")" [ -e "$srcdir$srcspec" ] || continue
s=0 ebegin "$(basename -- "$srcdir") --> $(ppath "$destdir$srcspec")"
if [ -n "$template" ]; then s=0
array_from_lines srcfiles "$(find "$srcdir$srcspec" -type f)" if [ -n "$template" ]; then
else array_from_lines srcfiles "$(find "$srcdir$srcspec" -type f)"
array_from_lines srcfiles "$(find "$srcdir$srcspec" -type f | grep -v '\.template$')"
fi
for src in "${srcfiles[@]}"; do
setx content=__template_fillvars "$src" "$tmpfile"
dest="$destdir/${src#$srcdir/}"
[ -n "$template" ] && dest="${dest%.template}"
if [ -L "$dest" ]; then
edotw 0 "LOCALLY MODIFIED: $(ppath "$dest")"
elif [ -f "$dest" ]; then
if testsame "$content" "$dest"; then
show_debug && edot 0 "ALREADY COPIED: $(ppath "$dest")"
else
edotw 0 "LOCALLY MODIFIED: $(ppath "$dest")"
fi
else else
mkdirof "$dest" array_from_lines srcfiles "$(find "$srcdir$srcspec" -type f | grep -v '\.template$')"
cp "$content" "$dest"; r=$?
edot $r "COPY: $(ppath "$dest")"
[ $r -eq 0 ] || s=$r
fi fi
for src in "${srcfiles[@]}"; do
setx content=__template_fillvars "$src" "$tmpfile"
dest="$destdir/${src#$srcdir/}"
[ -n "$template" ] && dest="${dest%.template}"
if [ -L "$dest" ]; then
edotw 0 "LOCALLY MODIFIED: $(ppath "$dest")"
elif [ -f "$dest" ]; then
if testsame "$content" "$dest"; then
show_debug && edot 0 "ALREADY COPIED: $(ppath "$dest")"
else
edotw 0 "LOCALLY MODIFIED: $(ppath "$dest")"
fi
else
mkdirof "$dest"
cp "$content" "$dest"; r=$?
edot $r "COPY: $(ppath "$dest")"
[ $r -eq 0 ] || s=$r
fi
done
eend $s
done done
eend $s
done done
__template_clean_tmpfile __template_clean_tmpfile
} }
function template_unmerge() { function template_unmerge() {
# Supprimer du répertoire de destination $2 tous les fichiers provenant du # Soit $N le séparateur --, supprimer du répertoire destination $1 les fichiers
# répertoire source $1 et qui n'ont pas été modifiés. Si des chemins sont # provenant des répertoires sources $2..$(N-1) et qui n'ont pas été modifiés. Si
# spécifiés avec les arguments $3..@, ne traiter que les fichiers qui # des chemins sont spécifiés avec les arguments $(N+1)..@, ne traiter que les
# correspondent à ces spécifications. # fichiers qui correspondent à ces spécifications. Exemple:
local srcdir="$1"; shift # template_unmerge destdir srcdirs... -- specs...
__template_check_srcdir "$srcdir" || return 1
setx srcdir=abspath "$srcdir"
local destdir="${1:-.}"; shift local destdir="${1:-.}"; shift
__template_check_destdir "$destdir" || return 1 __template_check_destdir "$destdir" || return 1
setx destdir=abspath "$destdir" setx destdir=abspath "$destdir"
local -a srcdirs; local srcdir
while [ $# -gt 0 ]; do
srcdir="$1"; shift
[ "$srcdir" == -- ] && break
__template_check_srcdir "$srcdir" || return 1
setx srcdir=abspath "$srcdir"
array_add srcdirs "$srcdir"
done
[ $# -gt 0 ] || set -- "$destdir" [ $# -gt 0 ] || set -- "$destdir"
local tmpfile; __template_setup_tmpfile local tmpfile; __template_setup_tmpfile
@ -235,29 +327,31 @@ function template_unmerge() {
fi fi
srcspec="${srcspec#$destdir}" srcspec="${srcspec#$destdir}"
[ -e "$srcdir$srcspec" ] || continue for srcdir in "${srcdirs[@]}"; do
s=0 [ -e "$srcdir$srcspec" ] || continue
ebegin "$(ppath "$destdir$srcspec")" s=0
array_from_lines files "$(find "$srcdir$srcspec" -type f)" ebegin "$(ppath "$destdir$srcspec")"
for src in "${files[@]}"; do array_from_lines files "$(find "$srcdir$srcspec" -type f)"
setx content=__template_fillvars "$src" "$tmpfile" for src in "${files[@]}"; do
dest="$destdir/${src#$srcdir/}" setx content=__template_fillvars "$src" "$tmpfile"
dest="$destdir/${src#$srcdir/}"
if [ -L "$dest" ]; then if [ -L "$dest" ]; then
edotw 0 "LOCALLY MODIFIED: $(ppath "$dest")"
elif [ -f "$dest" ]; then
if testsame "$content" "$dest"; then
rm -f "$dest"; r=$?
edot $r "REMOVE: $(ppath "$dest")"
[ $r -eq 0 ] || s=$r
else
edotw 0 "LOCALLY MODIFIED: $(ppath "$dest")" edotw 0 "LOCALLY MODIFIED: $(ppath "$dest")"
elif [ -f "$dest" ]; then
if testsame "$content" "$dest"; then
rm -f "$dest"; r=$?
edot $r "REMOVE: $(ppath "$dest")"
[ $r -eq 0 ] || s=$r
else
edotw 0 "LOCALLY MODIFIED: $(ppath "$dest")"
fi
else
show_debug && edot 0 "ALREADY REMOVED: $(ppath "$dest")"
fi fi
else done
show_debug && edot 0 "ALREADY REMOVED: $(ppath "$dest")" eend $s
fi
done done
eend $s
done done
__template_clean_tmpfile __template_clean_tmpfile
@ -274,35 +368,42 @@ function template_cleandest() {
} }
function template_diff() { function template_diff() {
# Afficher les différences entre les fichiers du répertoire de destination $2 et # Afficher les différences entre les fichiers du répertoire de destination $1 et
# les fichiers du répertoire source $1 # les fichiers des répertoires sources $2..@
local srcdir="$1"; shift
__template_check_srcdir "$srcdir" || return 1
setx srcdir=abspath "$srcdir"
local destdir="${1:-.}"; shift local destdir="${1:-.}"; shift
__template_check_destdir "$destdir" || return 1 __template_check_destdir "$destdir" || return 1
setx destdir=abspath "$destdir" setx destdir=abspath "$destdir"
local -a srcdirs; local srcdir
while [ $# -gt 0 ]; do
srcdir="$1"; shift
[ "$srcdir" == -- ] && break
__template_check_srcdir "$srcdir" || return 1
setx srcdir=abspath "$srcdir"
array_add srcdirs "$srcdir"
done
local tmpfile; __template_setup_tmpfile local tmpfile; __template_setup_tmpfile
local src content dest local src content dest
local -a srcfiles local -a srcfiles
array_from_lines srcfiles "$(find "$srcdir" -type f)" for srcdir in "${srcdirs[@]}"; do
for src in "${srcfiles[@]}"; do array_from_lines srcfiles "$(find "$srcdir" -type f)"
setx content=__template_fillvars "$src" "$tmpfile" for src in "${srcfiles[@]}"; do
dest="$destdir/${src#$srcdir/}" setx content=__template_fillvars "$src" "$tmpfile"
if [ -f "$dest" ] && testdiff "$content" "$dest"; then dest="$destdir/${src#$srcdir/}"
diff -uwB "$content" "$dest" if [ -f "$dest" ] && testdiff "$content" "$dest"; then
fi diff -uwB "$content" "$dest"
fi
done
done | page_maybe -S done | page_maybe -S
__template_clean_tmpfile __template_clean_tmpfile
} }
function templatesrc() { function template_srcdir() {
# obtenir le chemin vers le répertoire source de templates $1, situé dans # Obtenir le chemin vers le répertoire source de templates $1, situé dans
# ULIBDIR/templates # ULIBDIR/templates
urequire ulib urequire ulib
if [ -n "$ULIBDIR" ]; then if [ -n "$ULIBDIR" ]; then
echo "$ULIBDIR/templates/$1" echo "$ULIBDIR/templates/$1"
@ -311,44 +412,193 @@ function templatesrc() {
fi fi
} }
function __templatectl_display_help() { :; } function templatectl_config() {
__TEMPLATECTL_SUPPLOPTS=() # Obtenir le chemin vers le fichier de configuration pour le répertoire $1
function __templatectl_parseopts() { echo "$1/$(basename -- "$TEMPLATECTL_CONFIG")"
parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with __templatectl_display_help' \
-s:,--srcdir: __templatectl_srcdir= \
-d:,--destdir: __templatectl_destdir= \
-l,--list '$__templatectl_list=1; __templatectl_opt=1' \
-m,--merge '$__templatectl_merge=1; __templatectl_opt=1' \
-z,--unmerge '$__templatectl_unmerge=1; __templatectl_opt=1' \
-C,--clean '$__templatectl_clean=1; __templatectl_opt=1' \
-g,--diff '$__templatectl_diff=1; __templatectl_opt=1' \
"${__TEMPLATECTL_SUPPLOPTS[@]}" \
@ args -- "$@"
} }
function __templatectl_do() { function templatectl_loadvars() {
__template_check_srcdir "$__templatectl_srcdir" || return 1 # Charger les valeurs des variables depuis le fichier $1
[ -n "$__templatectl_destdir" ] || __templatectl_destdir=. # Les variables suivantes doivent être définies:
__template_check_destdir "$__templatectl_destdir" || return 1 # - Le tableau TEMPLATECTL_DEFAULTS permet de donner une valeur par défaut aux
[ -n "$__templatectl_auto" ] && __templatectl_list=1 # variables mentionnées dans TEMPLATE_STATIC_VARS. C'est une liste de valeurs
# de la forme 'name=value'
# - Le tableau TEMPLATECTL_VARS contient des variables supplémentaires
# spécifiées par l'utilisateur. C'est une liste de valeurs de la forme
# 'name=value'
# - TEMPLATE_STATIC_VARS doit contenir une liste de noms de variables qui
# peuvent être remplacés dans les fichiers de template.
# - TEMPLATE_DYNAMIC_VARS contient une liste de noms de variables valides, mais
# qui ne doivent pas être remplacés, en effet, ils sont utilisés pour le
# déploiement des fichiers.
# - TEMPLATE_NOWRITE_VARS contient une liste de noms de variables qui ne
# devraient pas être écrits dans le fichier des variables, sauf si elles
# reçoivent une valeur explicite de la part de l'utilisateur. Ce tableau est
# mis à jour lors de l'analyse du tableau TEMPLATECTL_VARS
local -a __template_vars __dynamic_vars
local __t_var __t_name __t_value
[ -n "$__templatectl_list" ] && template_list "$__templatectl_srcdir" "$__templatectl_destdir" "$@" array_copy __template_vars TEMPLATECTL_DEFAULTS
[ -n "$__templatectl_merge" ] && template_merge "$__templatectl_srcdir" "$__templatectl_destdir" "$@" configdir="$(dirname -- "$1")"
[ -n "$__templatectl_unmerge" ] && template_unmerge "$__templatectl_srcdir" "$__templatectl_destdir" "$@" [ -f "$1" ] && source "$1"
[ -n "$__templatectl_clean" ] && template_cleandest "$__templatectl_destdir" "$@"
[ -n "$__templatectl_diff" ] && template_diff "$__templatectl_srcdir" "$__templatectl_destdir" "$@" for __t_var in "${__template_vars[@]}"; do
return 0 splitvar "$__t_var" __t_name __t_value
__template_set_var "$__t_name" "$__t_value"
done
array_contains TEMPLATE_STATIC_VARS configdir && __template_set_var configdir "$configdir"
for __t_var in "${__dynamic_vars[@]}"; do
splitvar "$__t_var" __t_name __t_value
array_del TEMPLATE_STATIC_VARS "$__t_name"
array_addu TEMPLATE_DYNAMIC_VARS "$__t_name"
__template_set_var "$__t_name" "$__t_value"
done
array_contains TEMPLATE_DYNAMIC_VARS configdir && __template_set_var configdir "$configdir"
local __t_modified=1
for __t_var in "${TEMPLATECTL_VARS[@]}"; do
splitvar "$__t_var" __t_name __t_value
__template_set_var "$__t_name" "$__t_value" writable && __t_modified=0
done
return $__t_modified
} }
function templatectl_writevars() {
# Ecrire les variables dans le fichier $1
local __t_var
echo "# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8" >"$1"
echo "__template_vars=(" >>"$1"
for __t_var in "${TEMPLATE_STATIC_VARS[@]}"; do
array_contains TEMPLATE_NOWRITE_VARS "$__t_var" && continue
echo_setv "$__t_var=${!__t_var}" >>"$1"
done
echo ")" >>"$1"
echo "__dynamic_vars=(" >>"$1"
for __t_var in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
array_contains TEMPLATE_NOWRITE_VARS "$__t_var" && continue
echo_setv "$__t_var=${!__t_var}" >>"$1"
done
echo ")" >>"$1"
}
function templatectl_list_vars() {
# Afficher les valeurs des variables
local __var
echo "# template vars"
for __var in "${TEMPLATE_STATIC_VARS[@]}"; do
echo_setv "$__var=${!__var}"
done
if [ ${#TEMPLATE_DYNAMIC_VARS[*]} -gt 0 ]; then
echo "# dynamic vars"
for __var in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
echo_setv "$__var=${!__var}"
done
fi
}
__TEMPLATECTL_HELP="\
-d, --destdir DESTDIR
Spécifier le répertoire local dans lequel copier les fichiers templates
-s, --srcdir SRCDIR
Ajouter un répertoire à la liste des répertoires sources pour les templates.
Si ce n'est pas un chemin, c'est le nom d'un répertoire dans le répertoires
des templates par défaut.
-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à. Les templates ayant l'extension '.template' doivent être demandés
explicitement. Sinon, ils sont ignorés.
-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.
-L, --list-vars
Afficher pour information les valeurs par défaut des variables de template.
-v, --var NAME=VALUE
Spécifier la valeur d'une variable. Toutes les variables sont autorisées,
sauf celles qui figurent dans la liste des variables dynamiques.
-w, --write-vars
Ecrire dans le fichier $TEMPLATECTL_CONFIG les valeurs des variables, ce qui
permet après édition du fichier d'éviter de les spécifier à chaque fois avec
l'option -v
Le fichier n'est pas écrasé s'il existe déjà."
function __display_templatectl_help() { uecho "$__TEMPLATECTL_HELP"; }
function templatectl() { function templatectl() {
# fonction de haut niveau qui facilite l'utilisation des fonctions template_* # Fonction de haut niveau qui facilite l'utilisation des fonctions template_*
# définir la fonction __templatectl_display_help() pour l'affichage de l'aide # définir la fonction __display_templatectl_help() pour l'affichage de l'aide
local -a args # - Le tableau TEMPLATECTL_SRCDIRS doit contenir la liste des répertoires
local __templatectl_list __templatectl_merge __templatectl_unmerge __templatectl_clean __templatectl_diff __templatectl_opt __templatectl_auto # sources pour les templates. Alternativement, il est possible de définir la
local __templatectl_destdir # variable TEMPLATECTL_SRCDIR s'il n'y a qu'un seul répertoire source pour le
# template
# - TEMPLATECTL_CONFIG est le nom de base du fichier à partir duquel sont
# chargées les variables et dans lequel sont écrites les variables avec
# l'option --write-vars
# Les variables de template_loadvars() sont aussi prises en compte
local -a __tc_srcdirs; local __tc_srcdir
if [ ${#TEMPLATECTL_SRCDIRS[*]} -gt 0 ]; then
:
elif [ -n "$TEMPLATECTL_SRCDIR" ]; then
local -a TEMPLATECTL_SRCDIRS
TEMPLATECTL_SRCDIRS=("$TEMPLATECTL_SRCDIR")
fi
for __tc_srcdir in "${TEMPLATECTL_SRCDIRS[@]}"; do
if ! withpath "$__tc_srcdir"; then
__tc_srcdir="$(template_srcdir "$__tc_srcdir")"
fi
array_add __tc_srcdirs "$__tc_srcdir"
done
__templatectl_parseopts "$@" && set -- "${args[@]}" || { eerror "$args"; return 1; } local -a __tc_args
[ -z "$__templatectl_opt" ] && __templatectl_auto=1 local __tc_auto=1 __tc_load_vars=1
__templatectl_do "$@" local __tc_destdir __tc_list __tc_merge __tc_unmerge __tc_clean __tc_diff __tc_list_vars __tc_write_vars
parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with __display_templatectl_help' \
-d:,--destdir: __tc_destdir= \
-s:,--srcdir: __tc_srcdirs \
--load-vars __tc_load_vars=1 \
--no-load-vars __tc_load_vars= \
--noop __tc_auto= \
-l,--list '$__tc_list=1; __tc_auto=' \
-m,--merge '$__tc_merge=1; __tc_auto=' \
-z,--unmerge '$__tc_unmerge=1; __tc_auto=' \
-C,--clean '$__tc_clean=1; __tc_auto=' \
-g,--diff '$__tc_diff=1; __tc_auto=' \
-L,--list-vars '$__tc_list_vars=1; __tc_auto=' \
-v:,--var: TEMPLATECTL_VARS \
-w,--write-vars __tc_write_vars=1 \
@ __tc_args -- "$@" && set -- "${__tc_args[@]}" || { eerror "$__tc_args"; return 1; }
[ -n "$__tc_destdir" ] || __tc_destdir=.
__template_check_destdir "$__tc_destdir" || return 1
array_isempty __tc_srcdirs && return 1
for __tc_srcdir in "${__tc_srcdirs[@]}"; do
__template_check_srcdir "$__tc_srcdir" || return 1
done
local __tc_config="$__tc_destdir/$(basename -- "$TEMPLATECTL_CONFIG")"
if [ -n "$__tc_load_vars" ]; then
templatectl_loadvars "$__tc_config"
fi
if [ -n "$__tc_write_vars" ]; then
if [ -f "$__tc_config" ]; then
ewarn "Refus d'écraser le fichier existant $(ppath "$__tc_config")"
else
templatectl_writevars "$__tc_config"
fi
fi
[ -n "$__tc_auto" ] && __tc_list=1
[ -n "$__tc_list_vars" ] && templatectl_list_vars
[ -n "$__tc_list" ] && template_list "$__tc_destdir" "${__tc_srcdirs[@]}" -- "$@"
[ -n "$__tc_merge" ] && template_merge "$__tc_destdir" "${__tc_srcdirs[@]}" -- "$@"
[ -n "$__tc_unmerge" ] && template_unmerge "$__tc_destdir" "${__tc_srcdirs[@]}" -- "$@"
[ -n "$__tc_clean" ] && template_cleandest "$__tc_destdir" "$@"
[ -n "$__tc_diff" ] && template_diff "$__tc_destdir" "${__tc_srcdirs[@]}" -- "$@"
} }

View File

@ -3,47 +3,69 @@
Ce répertoire peut contenir les fichiers et répertoires suivants, qui sont tous Ce répertoire peut contenir les fichiers et répertoires suivants, qui sont tous
optionnels: optionnels:
- modules.conf la liste des modules qu'il faut activer. Si un module n'existe confs.conf
pas dans ce fichier, ou si ce fichier n'existe pas, aucune modification n'est Liste des configurations qu'il faut activer. Si un fichier de configuration
effectuée. Si un module est de la forme -module, il est désactivé. Si un existe mais n'est pas mentionnée dans ce fichier, ou si ce fichier n'existe
module est de la forme +module, il est activé. Cette syntaxe permet de pas, aucune modification n'est effectuée. Ce fichier contient une liste de
supporter les modules dont le nom commencerait par '-' ligne de configuration.
Si une configuration est de la forme -conf, elle est désactivée. Si une
configuration est de la forme +conf, elle est activée. Cette syntaxe permet
de supporter les configurations dont le nom commencerait par '-'
Ce fichier n'est supporté qu'à partir de debian jessie.
- sites.conf la liste des sites qu'il faut activer. Si un site ne figure pas modules.conf
dans ce fichier, il est désactivé. Si ce fichier n'existe pas, tous les sites Liste des modules qu'il faut activer. Si un module existe mais n'est pas
existant sont activés. mentionné 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 '-'
- tous les autres fichiers sont copiés tels quels dans /etc/apache2. Notamment, sites.conf
apache2.conf est le fichier de configuration principal d'apache et ports.conf Liste des sites qu'il faut activer. Si ce fichier n'existe pas, tous les
le fichier de configuration des ports d'écoute. sites existant sont activés. Si un site existe mais ne figure pas dans ce
fichier, il est désactivé.
- modules/ le répertoire des configurations de modules à installer. Les fichiers confs/
de ce répertoire sont de la forme MODULE.conf et sont installés dans le Répertoire des configurations à installer. Les fichiers de ce répertoire
répertoire /etc/apache2/mods-available. Il faut mentioner le module dans le sont de la forme CONF.conf et sont installés dans le répertoire
fichier modules.conf pour l'activer. /etc/apache2/conf-available. Il faut mentionner la configuration dans le
fichier confs.con pour l'activer.
Ce répertoire n'est supporté qu'à partir de debian jessie.
- sites/ le répertoire des sites à installer. Les fichiers de ce répertoire sont modules/
de la forme NAME.conf pour les sites écoutant en clair, et NAME.ssl.conf pour Répertoire des configurations de modules à installer. Les fichiers de ce
les sites écoutant en https. Pour chaque site NAME.ssl.conf, un fichier répertoire sont de la forme MODULE.conf et sont installés dans le répertoire
NAME-certs.conf doit exister dans certsconf/ /etc/apache2/mods-available. Il faut mentioner le module dans le fichier
Dans les fichiers NAME.ssl.conf, les valeurs @@cert@@, @@key@@ et @@ca@@ sont modules.conf pour l'activer.
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 sites/
Répertoire des sites à installer. Les fichiers de ce répertoire sont de la
forme SITE.conf pour les sites écoutant en clair, et SITE.ssl.conf pour les
sites écoutant en https.
Pour chaque site SITE.ssl.conf, un fichier SITE-certs.conf doit exister dans
certsconf/. Pour chaque fichier SITE.ssl.conf, les balises @@ca@@, @@cert@@
et @@key@@ sont remplacés par les valeurs des variables ca, cert et key
définies dans le fichier correspondant SITE-certs.conf
- www/ le répertoire qui contient les fichiers du serveur web à installer dans cgi-bin/
l'emplacement par défaut. Répertoire des scripts cgi
- certsconf/ le répertoire qui contient la configuration pour les certificats à www/
installer. Si ce répertoire existe, il faut spécifier CERTSDIR Répertoire des fichiers du serveur web
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 certsconf/
les fichiers RewriteRules*.conf de ce répertoire sont copiés dans /etc/apache2 Répertoire qui contient la configuration pour les certificats à installer.
Les fichiers de ce répertoire sont de la forme SITE-certs.conf et chacun
d'eux correspond à un fichier SITE.ssl.conf dans sites/
IMPORTANT: Cette configuration n'est pour le moment supporté que sur debian RewriteRules/
Répertoire qui contient la configuration de réécriture. Tous les fichiers
RewriteRules*.conf de ce répertoire sont copiés dans /etc/apache2
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.
## Configuration TLS ## Configuration TLS

View File

@ -1,9 +1,9 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Utiliser 'udir --help-vars' pour une description de la signification des # Utiliser 'udir --help-vars' pour une description de la signification des
# variables suivantes: # variables suivantes:
udir_desc="Fichiers à déployer sur host.univ.run dans /usr/lib/cgi-bin" udir_desc="Fichiers à déployer sur @@host@@ dans le répertoire des cgi-bins"
udir_note="" udir_note="Il est possible de déployer les modifications dans ce répertoire avec 'uinst -y'"
udir_types=("uinst:rsync") udir_types=(uinst:rsync)
uinc=release uinc=release
uinc_options=() uinc_options=()
uinc_args=() uinc_args=()
@ -11,11 +11,12 @@ configure_variables=(dest)
configure_dest_for=() configure_dest_for=()
config_scripts=() config_scripts=()
install_profiles=false install_profiles=false
profiledir=lib/profile.d workdir_rsync_options=()
bashrcdir=lib/bashrc.d workdir_excludes=()
defaultdir=lib/default workdir_includes=()
copy_files=true copy_files=true
destdir=CGIBINDIR rsync_options=()
destdir=root@@@host@@:CGIBINDIR
srcdir=. srcdir=.
files=() files=()
owner=root: owner=root:

View File

@ -1,9 +1,9 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Utiliser 'udir --help-vars' pour une description de la signification des # Utiliser 'udir --help-vars' pour une description de la signification des
# variables suivantes: # variables suivantes:
udir_desc="Fichiers à déployer sur host.univ.run dans /var/www" udir_desc="Fichiers à déployer sur @@host@@ dans le répertoire des documents web"
udir_note="Il est possible de déployer les modifications dans ce répertoire avec 'uinst -y'" udir_note="Il est possible de déployer les modifications dans ce répertoire avec 'uinst -y'"
udir_types=("uinst:rsync") udir_types=(uinst:rsync)
uinc=release uinc=release
uinc_options=() uinc_options=()
uinc_args=() uinc_args=()
@ -11,11 +11,12 @@ configure_variables=(dest)
configure_dest_for=() configure_dest_for=()
config_scripts=() config_scripts=()
install_profiles=false install_profiles=false
profiledir=lib/profile.d workdir_rsync_options=()
bashrcdir=lib/bashrc.d workdir_excludes=()
defaultdir=lib/default workdir_includes=()
copy_files=true copy_files=true
destdir=root@host.univ.run:/var/www rsync_options=()
destdir=root@@@host@@:HTDOCSDIR
srcdir=. srcdir=.
files=() files=()
owner=www-data: owner=www-data:

View File

@ -1,3 +1,4 @@
# -*- coding: utf-8 mode: conf -*- vim:syntax=apache:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# If you just change the port or add more ports here, you will likely also # If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in # have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default # /etc/apache2/sites-enabled/000-default
@ -14,11 +15,15 @@ Listen *:80
# to <VirtualHost *:443> # to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not # Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP. # supported by MSIE on Windows XP.
NameVirtualHost 10.82.80.100:443 #NameVirtualHost IP:443
Listen 10.82.80.100:443 #Listen IP:443
#@@ips_namevirtualhosts@@
#@@ips_listens@@
</IfModule> </IfModule>
<IfModule mod_gnutls.c> <IfModule mod_gnutls.c>
NameVirtualHost 10.82.80.100:443 #NameVirtualHost IP:443
Listen 10.82.80.100:443 #Listen IP:443
#@@ips_namevirtualhosts@@
#@@ips_listens@@
</IfModule> </IfModule>

View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Liste des configurations à activer. Syntaxe:
# conf ou +conf pour activer une configuration
# -conf pour le désactiver

View File

@ -0,0 +1,23 @@
# -*- coding: utf-8 mode: conf -*- vim:syntax=apache:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
#@@ips_default_namevirtualhost@@
Listen 80
<IfModule ssl_module>
Listen 443
#NameVirtualHost IP:443
#Listen IP:443
#@@ips_namevirtualhosts@@
#@@ips_listens@@
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
#NameVirtualHost IP:443
#Listen IP:443
#@@ips_namevirtualhosts@@
#@@ips_listens@@
</IfModule>

View File

@ -0,0 +1,31 @@
# -*- coding: utf-8 mode: conf -*- vim:syntax=apache:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName @@host@@
ServerAlias @@aliases@@
ServerAdmin @@admin@@
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>

View File

@ -0,0 +1,137 @@
# -*- coding: utf-8 mode: conf -*- vim:syntax=apache:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerName @@host@@
ServerAlias @@aliases@@
ServerAdmin @@admin@@
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/ssl_error.log
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
# A self-signed (snakeoil) certificate can be created by installing
# the ssl-cert package. See
# /usr/share/doc/apache2/README.Debian.gz for more info.
# If both key and certificate are stored in the same file, only the
# SSLCertificateFile directive is needed.
SSLCertificateFile @@cert@@
SSLCertificateKeyFile @@key@@
# Server Certificate Chain:
# Point SSLCertificateChainFile at a file containing the
# concatenation of PEM encoded CA certificates which form the
# certificate chain for the server certificate. Alternatively
# the referenced file can be the same as SSLCertificateFile
# when the CA certificates are directly appended to the server
# certificate for convinience.
SSLCertificateChainFile @@ca@@
# Certificate Authority (CA):
# Set the CA certificate verification path where to find CA
# certificates for client authentication or alternatively one
# huge file containing all of them (file must be PEM encoded)
# Note: Inside SSLCACertificatePath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
#SSLCACertificatePath /etc/ssl/certs/
#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt
# Certificate Revocation Lists (CRL):
# Set the CA revocation path where to find CA CRLs for client
# authentication or alternatively one huge file containing all
# of them (file must be PEM encoded)
# Note: Inside SSLCARevocationPath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
#SSLCARevocationPath /etc/apache2/ssl.crl/
#SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl
# Client Authentication (Type):
# Client certificate verification type and depth. Types are
# none, optional, require and optional_no_ca. Depth is a
# number which specifies how deeply to verify the certificate
# issuer chain before deciding the certificate is not valid.
#SSLVerifyClient require
#SSLVerifyDepth 10
# SSL Engine Options:
# Set various options for the SSL engine.
# o FakeBasicAuth:
# Translate the client X.509 into a Basic Authorisation. This means that
# the standard Auth/DBMAuth methods can be used for access control. The
# user name is the `one line' version of the client's X.509 certificate.
# Note that no password is obtained from the user. Every entry in the user
# file needs this password: `xxj31ZMTZzkVA'.
# o ExportCertData:
# This exports two additional environment variables: SSL_CLIENT_CERT and
# SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
# server (always existing) and the client (only existing when client
# authentication is used). This can be used to import the certificates
# into CGI scripts.
# o StdEnvVars:
# This exports the standard SSL/TLS related `SSL_*' environment variables.
# Per default this exportation is switched off for performance reasons,
# because the extraction step is an expensive operation and is usually
# useless for serving static content. So one usually enables the
# exportation for CGI and SSI requests only.
# o OptRenegotiate:
# This enables optimized SSL connection renegotiation handling when SSL
# directives are used in per-directory context.
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
# SSL Protocol Adjustments:
# The safe and default but still SSL/TLS standard compliant shutdown
# approach is that mod_ssl sends the close notify alert but doesn't wait for
# the close notify alert from client. When you need a different shutdown
# approach you can use one of the following variables:
# o ssl-unclean-shutdown:
# This forces an unclean shutdown when the connection is closed, i.e. no
# SSL close notify alert is send or allowed to received. This violates
# the SSL/TLS standard but is needed for some brain-dead browsers. Use
# this when you receive I/O errors because of the standard approach where
# mod_ssl sends the close notify alert.
# o ssl-accurate-shutdown:
# This forces an accurate shutdown when the connection is closed, i.e. a
# SSL close notify alert is send and mod_ssl waits for the close notify
# alert of the client. This is 100% SSL/TLS standard compliant, but in
# practice often causes hanging connections with brain-dead browsers. Use
# this only for browsers where you know that their SSL implementation
# works correctly.
# Notice: Most problems of broken clients are also related to the HTTP
# keep-alive facility, so you usually additionally want to disable
# keep-alive for those clients, too. Use variable "nokeepalive" for this.
# Similarly, one has to force some clients to use HTTP/1.0 to workaround
# their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
# "force-response-1.0" for this.
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>

View File

@ -1,50 +1,38 @@
#!/bin/bash #!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- 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 source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS runs template urequire DEFAULTS template runs
function display_help() { function display_help() {
uecho "$scriptname: Gérer un répertoire d'hôte de runs uecho "$scriptname: Gérer un répertoire d'hôte de runs
USAGE USAGE
$scriptname [options] $scriptname -c [host [destdir]]
$scriptname -t -- args...
OPTIONS OPTIONS
-d, --destdir DESTDIR -c, --create
Spécifier le répertoire d'hôte dans lequel copier les fichiers. Créer un nouveau répertoire de configuration pour un hôte
-l, --list -d, --destdir DESTDIR[=$TEMPLATECTL_NAME]
Lister les templates disponibles. Nom du répertoire local de configuration. Utiliser 'apacheconfig' par
-m, --merge défaut.
Copier les templates spécifiés dans le répertoire d'hôte s'il n'y
existent pas déjà. Les templates ayant l'extension '.template' doivent -t, --template [OPT]
être demandés explicitement. Sinon, ils sont ignorés. Gérer les fichiers du répertoire local avec templatectl. La valeur de
-z, --unmerge cette option est utilisée comme argument court pour l'invocation de
Supprimer les fichiers du répertoire d'hôte s'ils n'ont pas été modifiés templatectl, e.g
par rapport aux templates. $scriptname -tm args
-C, --clean est équivalent à
Supprimer les répertoires vides dans le répertoire de référence. Peut templatectl -m args
être utile après -z Les arguments qui restent sont passés tels quels à templatectl
-g, --diff Les options courantes de templatectl -l, -v, -m, -L sont disponibles
Afficher les différences entre les templates et les fichiers du directement
répertoire d'hôte. --help-template
--list-vars Afficher l'aide concernent la gestion des templates.
Afficher pour information les valeurs par défaut des variables de Equivalent à -t -- --help
template. -h, --host HOST
--write-vars Spécifier l'hôte. Equivalent à -v host=HOST"
Ecrire dans le fichier .runsconfig les valeurs par défaut des variables,
ce qui permet d'éviter de les spécifier à chaque fois avec l'option -v
Le fichier n'est pas écrasé s'il existe déjà.
-v, --var NAME=VALUE
Spécifier la valeur d'une variable. Il est possible de spécifier des
valeurs qui ne sont pas dans la liste prédéfinie. Par défaut, il s'agit
d'une variable de template, utilisée pour mettre à jour la copie locale
d'un template avec l'option --merge
Dans le fichier .runsconfig, les valeurs des variables de template n'est
pas censée changer. Lors de la copie des templates avec --merge, chaque
occurence de @@VAR@@ dans un template est remplacée dans la copie locale
par la valeur de la variable de template VAR"
} }
function __templatectl_display_help() { display_help; }
## Valeurs par défaut des variables de template ## Valeurs par défaut des variables de template
set_defaults runs set_defaults runs
@ -74,95 +62,70 @@ if [ -z "$DEFAULT_HOST" ]; then
[ -n "$__domain" ] || DEFAULT_HOST="$(runs_add_domain "$DEFAULT_HOST")" [ -n "$__domain" ] || DEFAULT_HOST="$(runs_add_domain "$DEFAULT_HOST")"
fi fi
DEFAULT_TEMPLATE_VARS=( TEMPLATE_STATIC_VARS=(host hostname)
hostname= # mettre cette variables AVANT host TEMPLATE_DYNAMIC_VARS=()
host= TEMPLATE_NOWRITE_VARS=(hostname)
)
TEMPLATE_VARS=() __TEMPLATE_DEFAULTF_host=__template_defaultf_host
function update_var() { __TEMPLATE_UPDATEF_host=__template_updatef_host
# mettre à jour la valeur d'une variable en tenant compte de certaines function __template_defaultf_host() {
# dépendances. par exemple, si on modifie host, il faut mettre à jour echo "$DEFAULT_HOST"
# hostname. }
local __orig_value="${!1}" function __template_updatef_host() {
array_addu TEMPLATE_VARS "$1" __template_set_var hostname "${host%%.*}"
# Valeurs par défaut
case "$1" in
host) [ -n "$2" ] || set -- "$1" "$(myhost)";;
esac
# Mettre à jour la variable
setv "$1" "$2"
# Mettre à jour des variables dépendantes
case "$1" in
host) update_var hostname "${host%%.*}";;
esac
[ "$2" != "$__orig_value" ]
} }
__vars=() TEMPLATECTL_NAME=runs
__list_vars= TEMPLATECTL_SRCDIRS=(runsconfig)
__write_vars= TEMPLATECTL_CONFIG=".runsconfig"
__TEMPLATECTL_SUPPLOPTS=( TEMPLATECTL_DEFAULTS=()
-v:,--var: __vars TEMPLATECTL_VARS=()
--list-vars __list_vars=1
--write-vars __write_vars=1 action=
destdir=
templateopt=
certsdir=
args=(
--help '$exit_with display_help'
-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'
-c,--create action=create
-h:,--host: '$array_add TEMPLATECTL_VARS host="$value_"'
-d:,--destdir: destdir=
) )
__templatectl_parseopts "$@" && \ parse_args "$@"; set -- "${args[@]}"
set -- "${args[@]}" || die "$args"
# répertoire de template __template_set_destdir destdir autocreate "$TEMPLATECTL_NAME" || die
setx __templatectl_srcdir=templatesrc runsconfig setx config=templatectl_config "$destdir"
templatectl_loadvars "$config"
# répertoire d'hôte if [ -z "$host" ]; then
[ -n "$__templatectl_destdir" ] || __templatectl_destdir=. [ -n "$host" ] || host="$1"
setx __templatectl_destdir=abspath "$__templatectl_destdir" [ -n "$host" ] || host="$DEFAULT_HOST"
__template_set_var host "$host"
# charger les variables. important: la liste des variables définie dans le
# fichier .runsconfig prend la précédence sur la liste définie par défaut
__template_vars=("${DEFAULT_TEMPLATE_VARS[@]}")
__runsconfig_vars="$__templatectl_destdir/.runsconfig"
[ -f "$__runsconfig_vars" ] && source "$__runsconfig_vars"
for __var in "${__template_vars[@]}"; do
splitvar "$__var" __name __value
update_var "$__name" "$__value"
done
array_contains TEMPLATE_VARS configdir || update_var configdir "$__templatectl_destdir"
# mettre à jour les variables
__modified=
for __var in "${__vars[@]}"; do
splitvar "$__var" __name __value
update_var "$__name" "$__value" && __modified=1
done
# enregistrer les valeurs des variables
if [ -n "$__write_vars" ]; then
[ -f "$__runsconfig_vars" ] &&
die "Refus d'écraser le fichier existant $(ppath "$__runsconfig_vars")"
echo "# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8" >"$__runsconfig_vars"
echo "__template_vars=(" >>"$__runsconfig_vars"
for __var in "${TEMPLATE_VARS[@]}"; do
echo_setv "$__var=${!__var}" >>"$__runsconfig_vars"
done
echo ")" >>"$__runsconfig_vars"
fi fi
# afficher les variables ################################################################################
if [ -n "$__list_vars" ]; then if [ "$action" == create ]; then
echo "# template vars" if [ -n "$autocreate" -a ! -d "$destdir" ]; then
for __var in "${TEMPLATE_VARS[@]}"; do estepn "Création automatique de $(ppath "$destdir")"
echo_setv "$__var=${!__var}" mkdir -p "$destdir" || die
done fi
fi [ -d "$destdir" ] || die "$destdir: répertoire introuvable"
# gérer les fichiers template et locaux read_value ${host:+-i} "Veuillez entrer le nom d'hôte" host "$host"
if [ -z "$__templatectl_opt" -a -z "$__list_vars" -a -z "$__write_vars" ]; then __template_set_var host "$host"
__templatectl_auto=1
templatectl -d "$destdir" --no-load-vars -m
################################################################################
elif [ "$action" == template ]; then
__TEMPLATECTL_HELP="USAGE: $scriptname -t -- args...
$__TEMPLATECTL_HELP"
templatectl -d "$destdir" --no-load-vars ${templateopt:+-$templateopt} "$@"
fi fi
[ -d "$__templatectl_destdir" ] || die "$__templatectl_destdir: répertoire introuvable"
__templatectl_do "$@"