re-écrire la gestion des templates pour apacheconfig et runsconfig
This commit is contained in:
parent
702c75317d
commit
93ac7ea005
500
apacheconfig
500
apacheconfig
|
@ -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
|
||||||
|
|
|
@ -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= \
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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[@]}" -- "$@"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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>
|
|
@ -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
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
199
runsconfig
199
runsconfig
|
@ -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 "$@"
|
|
||||||
|
|
Loading…
Reference in New Issue