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
|
||||
|
||||
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
|
||||
$scriptname [options]
|
||||
$scriptname -c
|
||||
$scriptname -t -- args...
|
||||
|
||||
OPTIONS
|
||||
-c, --create
|
||||
Créer un nouveau répertoire de configuration pour un hôte
|
||||
-d, --destdir DESTDIR[=$TEMPLATECTL_NAME]
|
||||
Nom du répertoire local de configuration.
|
||||
|
||||
-t, --template [OPT]
|
||||
Gérer les fichiers du répertoire local avec templatectl. La valeur de
|
||||
cette option est utilisée comme argument court pour l'invocation de
|
||||
templatectl, e.g
|
||||
$scriptname -tm args
|
||||
est équivalent à
|
||||
templatectl -m args
|
||||
Les arguments qui restent sont passés tels quels à templatectl
|
||||
Les options courantes de templatectl -l, -v, -m, -L sont disponibles
|
||||
directement
|
||||
--help-template
|
||||
Afficher toutes les options qui concernent la gestion des templates
|
||||
--help-files
|
||||
Afficher une description des fichiers qui peuvent se trouver dans le
|
||||
répertoire local
|
||||
--help-deploy
|
||||
Afficher l'aide sur les options avancées pour le déploiement
|
||||
Afficher l'aide concernent la gestion des templates.
|
||||
Equivalent à -t -- --help
|
||||
-h, --host HOST
|
||||
Spécifier l'hôte. Equivalent à -v host=HOST
|
||||
--sysname SYSNAME
|
||||
--sysdist SYSDIST
|
||||
-s, --sysver SYSVER
|
||||
Spécifier la distribution pour laquelle synchroniser le template. Par
|
||||
défaut, choisir les valeurs correspondantes au système courant.
|
||||
Les options -7 et -8 sont des aliases respectivement pour -s wheezy et
|
||||
-s jessie, parce que les fichiers par défaut ont changé à partir de
|
||||
debian jessie.
|
||||
|
||||
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
|
||||
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.
|
||||
Les arguments qui restent sont passés tels quels à apache_autoconf
|
||||
-r, --certsdir CERTSDIR
|
||||
Spécifier le cas échéant le répertoire contenant les certificats à
|
||||
déployer."
|
||||
}
|
||||
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
|
||||
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.
|
||||
-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.
|
||||
--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"
|
||||
TEMPLATE_STATIC_VARS=()
|
||||
TEMPLATE_DYNAMIC_VARS=(
|
||||
host hostname aliases
|
||||
ips ips_default_namevirtualhost ips_namevirtualhosts ips_listens
|
||||
admin certsdir caname certname keyname configdir)
|
||||
TEMPLATE_NOWRITE_VARS=(hostname aliases configdir)
|
||||
|
||||
__TEMPLATE_DEFAULTF_host=__template_defaultf_host
|
||||
__TEMPLATE_UPDATEF_host=__template_updatef_host
|
||||
function __template_defaultf_host() {
|
||||
myhost
|
||||
}
|
||||
function display_files_help() {
|
||||
uecho "\
|
||||
Le répertoire local peut contenir les fichiers et répertoires suivants, qui sont
|
||||
tous optionnels:
|
||||
|
||||
- modules.conf la liste des modules qu'il faut activer. Si un module n'existe
|
||||
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"
|
||||
function __template_updatef_host() {
|
||||
local update_aliases
|
||||
[ "$aliases" == "$hostname" ] && update_aliases=1
|
||||
__template_set_var hostname "${host%%.*}"
|
||||
[ -n "$update_aliases" ] && __template_set_var aliases "$hostname"
|
||||
[ -n "$ips" ] || __template_set_var ips ""
|
||||
}
|
||||
|
||||
# Valeurs par défaut des variables de template
|
||||
DEFAULT_TEMPLATE_VARS=(
|
||||
hostname= aliases= # mettre ces variables AVANT host
|
||||
host=
|
||||
__TEMPLATE_DEFAULTF_ips=__template_defaultf_ips
|
||||
__TEMPLATE_UPDATEF_ips=__template_updatef_ips
|
||||
function __template_defaultf_ips() {
|
||||
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
|
||||
certsdir=renater
|
||||
caname=terena.crt
|
||||
certname=
|
||||
keyname=
|
||||
#configdir= # défini ci-dessous
|
||||
)
|
||||
TEMPLATECTL_VARS=()
|
||||
|
||||
function parent_apacheconfig() {
|
||||
# chercher à partir du répertoire courant si un des répertoires parents
|
||||
# s'appelle apacheconfig
|
||||
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" == apacheconfig ]; then
|
||||
echo "$dir"
|
||||
return 0
|
||||
elif [ "$dirname" == .apacheconfig ]; then
|
||||
echo "$dir"
|
||||
return 0
|
||||
fi
|
||||
setx dir=dirname -- "$dir"
|
||||
done
|
||||
}
|
||||
|
||||
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=
|
||||
action=
|
||||
destdir=
|
||||
templateopt=
|
||||
certsdir=
|
||||
args=(
|
||||
--help '$exit_with display_help'
|
||||
-c,--create action=create
|
||||
-d:,--destdir: destdir=
|
||||
-t::,--template:: '$set@ templateopt; action=template'
|
||||
--help-template '$templateopt=-help; action=template'
|
||||
-l,--list '$templateopt=l; action=template'
|
||||
-v:,--var: TEMPLATECTL_VARS
|
||||
-m,--merge '$templateopt=m; action=template'
|
||||
-L,--list-vars '$templateopt=L; action=template'
|
||||
-h:,--host: '$array_add TEMPLATECTL_VARS host="$value_"'
|
||||
--sysname: '$array_add TEMPLATECTL_VARS sysname="$value_"'
|
||||
--sysdist: '$array_add TEMPLATECTL_VARS sysdist="$value_"'
|
||||
-s:,--sysver: '$array_add TEMPLATECTL_VARS sysver="$value_"'
|
||||
-6,--squeeze '$array_add TEMPLATECTL_VARS sysver=squeeze'
|
||||
-7,--wheezy '$array_add TEMPLATECTL_VARS sysver=wheezy'
|
||||
-8,--jessie '$array_add TEMPLATECTL_VARS sysver=jessie'
|
||||
-u,--update,--deploy action=deploy
|
||||
-r:,--certsdir: certsdir=
|
||||
)
|
||||
__templatectl_parseopts "$@" && set -- "${args[@]}" || die "$args"
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
# répertoire de template
|
||||
setx __templatectl_srcdir=templatesrc apacheconfig
|
||||
__template_set_destdir destdir autocreate "$TEMPLATECTL_NAME" || die
|
||||
setx config=templatectl_config "$destdir"
|
||||
modified=
|
||||
templatectl_loadvars "$config" && modified=1
|
||||
|
||||
# répertoire local
|
||||
__autocreate=
|
||||
if [ -z "$__templatectl_destdir" ]; then
|
||||
if [ -d apacheconfig ]; then
|
||||
__templatectl_destdir=apacheconfig
|
||||
elif [ -d .apacheconfig ]; then
|
||||
__templatectl_destdir=.apacheconfig
|
||||
elif setx __templatectl_destdir=parent_apacheconfig; then
|
||||
estepn "Sélection automatique de $(ppath "$__templatectl_destdir")"
|
||||
elif [ -e apacheconfig ]; then
|
||||
die "Vous devez spécifier le répertoire de référence avec -d"
|
||||
else
|
||||
__templatectl_destdir=apacheconfig
|
||||
__autocreate=1
|
||||
if [ -n "$sysname" -o -n "$sysdist" -o -n "$sysver" ]; then
|
||||
ensure_sysinfos sysname sysdist sysver
|
||||
else
|
||||
sysname="$MYSYSNAME"
|
||||
sysdist="$MYSYSDIST"
|
||||
sysver="$MYSYSVER"
|
||||
fi
|
||||
__template_set_var sysname "$sysname"
|
||||
__template_set_var sysdist "$sysdist"
|
||||
__template_set_var sysver "$sysver"
|
||||
bits=
|
||||
if check_sysinfos --vars sysname sysdist sysver bits -d debian -v jessie+; then
|
||||
array_add TEMPLATECTL_SRCDIRS apacheconfig8
|
||||
elif check_sysinfos --vars sysname sysdist sysver bits -d debian; then
|
||||
array_add TEMPLATECTL_SRCDIRS apacheconfig7
|
||||
else
|
||||
ewarn "$(get_sysinfos_desc sysname sysdist sysver): système non supporté pour le déploiement"
|
||||
fi
|
||||
|
||||
################################################################################
|
||||
if [ "$action" == create ]; then
|
||||
if [ -n "$autocreate" -a ! -d "$destdir" ]; then
|
||||
estepn "Création automatique de $(ppath "$destdir")"
|
||||
mkdir -p "$destdir" || die
|
||||
fi
|
||||
fi
|
||||
setx __templatectl_destdir=abspath "$__templatectl_destdir"
|
||||
[ -d "$destdir" ] || die "$destdir: répertoire introuvable"
|
||||
|
||||
# charger les variables. important: la liste des variables définie dans le
|
||||
# fichier .apacheconfig prend la précédence sur la liste définie par défaut
|
||||
__template_vars=("${DEFAULT_TEMPLATE_VARS[@]}")
|
||||
__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
|
||||
if [ -f "$config" ]; then
|
||||
ask_yesno "Le fichier $(ppath "$config") existe. Voulez-vous l'écraser?" O || die
|
||||
rm -f "$config" || die
|
||||
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
|
||||
__templatectl_opt=1
|
||||
__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
|
||||
################################################################################
|
||||
elif [ "$action" == template ]; then
|
||||
__TEMPLATECTL_HELP="USAGE: $scriptname -t -- args...
|
||||
|
||||
# déploiement
|
||||
if [ -n "$__deploy" ]; then
|
||||
args=(
|
||||
-d "$__templatectl_destdir"
|
||||
-u
|
||||
${__certsdir:+-r "$__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
|
||||
$__TEMPLATECTL_HELP"
|
||||
templatectl -d "$destdir" --no-load-vars ${templateopt:+-$templateopt} "$@"
|
||||
|
||||
################################################################################
|
||||
elif [ "$action" == deploy ]; then
|
||||
[ -d "$destdir" ] || die "$destdir: répertoire introuvable"
|
||||
|
||||
args=(-d "$destdir" --deploy ${certsdir:+-r "$certsdir"})
|
||||
for __name in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
|
||||
array_add args -v "$__name=${!__name}"
|
||||
done
|
||||
array_add args -- "$@"
|
||||
run_as_root "${args[@]}"
|
||||
|
||||
etitle "Mise à jour du système"
|
||||
[ -d "$__templatectl_destdir" ] || die "$__templatectl_destdir: répertoire introuvable"
|
||||
args=(
|
||||
"$__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
|
||||
args=("$destdir" "$certsdir")
|
||||
for __name in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
|
||||
array_add args "$__name=${!__name}"
|
||||
done
|
||||
apache_autoconf "${args[@]}" || die
|
||||
apache_autoconf "${args[@]}" "$@" || die
|
||||
eend
|
||||
fi
|
||||
|
|
|
@ -180,11 +180,42 @@ $sedscript" <"$src" >"$FILLTEMP"
|
|||
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() {
|
||||
eval "$(utools_local)"
|
||||
local autoconfdir certsdir confdir modulesdir sitesdir cgibindir wwwdir certsconfdir rrdir
|
||||
local restart=1
|
||||
parse_opts "${PRETTYOPTS[@]}" \
|
||||
--help '$exit_with __display_apache_autoconf_help' \
|
||||
--confdir: confdir= \
|
||||
--modulesdir: modulesdir= \
|
||||
--sitesdir: sitesdir= \
|
||||
|
|
|
@ -316,9 +316,21 @@ function ensure_sysinfos() {
|
|||
__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() {
|
||||
# Tester si le système courant ($MYSYSNAME, $MYSYSDIST, $MYSYSVER, $MYBITS)
|
||||
# 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
|
||||
# système, la distribution, la version et le nombre de bits. Il est possible
|
||||
# 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
|
||||
# aussi impérativement filtrer sur le système, e.g:
|
||||
# check_sysinfos -s macosx -d 10.5+
|
||||
local sysnamevar_="MYSYSNAME"
|
||||
local sysdistvar_="MYSYSDIST"
|
||||
local sysvervar_="MYSYSVER"
|
||||
local bitsvar_="MYBITS"
|
||||
local sysnamevar_ sysdistvar_ sysvervar_ bitsvar_
|
||||
if [ "$1" == --vars ]; then
|
||||
shift
|
||||
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
|
||||
while [ -n "$1" ]; do
|
||||
if [[ "$1" == -* ]]; then
|
||||
|
|
|
@ -43,32 +43,100 @@ function __template_plsort() {
|
|||
sort -n "$@" |
|
||||
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
|
||||
TEMPLATE_VARS=()
|
||||
TEMPLATE_STATIC_VARS=()
|
||||
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
|
||||
ac_set_tmpfile tmpfile
|
||||
fi
|
||||
}
|
||||
function __template_clean_tmpfile() {
|
||||
if [ ${#TEMPLATE_VARS[*]} -gt 0 ]; then
|
||||
if [ ${#TEMPLATE_STATIC_VARS[*]} -gt 0 ]; then
|
||||
ac_clean "$tmpfile"
|
||||
fi
|
||||
}
|
||||
function __template_fillvars() {
|
||||
# Pour chacune des variables VAR de TEMPLATE_VARS, remplacer dans le fichier
|
||||
# $1 les occurences de @@VAR@@ par la valeur $VAR
|
||||
# Pour chacune des variables VAR de TEMPLATE_STATIC_VARS, remplacer dans le
|
||||
# fichier $1 les occurences de @@VAR@@ par la valeur $VAR
|
||||
# Afficher le chemin vers le fichier temporaire qui contient le fichier
|
||||
# modifié. Si $2 est spécifié, prendre ce chemin comme fichier temporaire.
|
||||
# Sinon, créer un nouveau fichier temporaire. Si le fichier ne contient
|
||||
# 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
|
||||
for __var in "${TEMPLATE_VARS[@]}"; do
|
||||
for __var in "${TEMPLATE_STATIC_VARS[@]}"; do
|
||||
__tag="@@${__var}@@"
|
||||
if quietgrep "$__tag" "$1"; then
|
||||
__found=1
|
||||
|
@ -79,7 +147,7 @@ function __template_fillvars() {
|
|||
|
||||
# construire le script sed pour le remplacement des variables
|
||||
local __script __first=1
|
||||
for __var in "${TEMPLATE_VARS[@]}"; do
|
||||
for __var in "${TEMPLATE_STATIC_VARS[@]}"; do
|
||||
[ -n "$__first" ] || __script="$__script"$'\n'
|
||||
__first=
|
||||
__script="${__script}s/@@${__var}@@/$(qseds "${!__var}")/g"
|
||||
|
@ -90,18 +158,25 @@ function __template_fillvars() {
|
|||
}
|
||||
|
||||
function template_list() {
|
||||
# Lister les fichiers du répertoire source $1 qui seraient fusionnées avec
|
||||
# template_merge() ou supprimés avec template_unmerge() du répertoire
|
||||
# destination $2. Si des chemins sont spécifiés avec les arguments $3..@, ne
|
||||
# traiter que les fichiers qui correspondent à ces spécifications
|
||||
local srcdir="$1"; shift
|
||||
__template_check_srcdir "$srcdir" || return 1
|
||||
setx srcdir=abspath "$srcdir"
|
||||
|
||||
# Soit $N le séparateur --, lister les fichiers des répertoires sources
|
||||
# $2..$(N-1) qui seraient fusionnés avec template_merge() ou supprimés avec
|
||||
# template_unmerge() du répertoire destination $1. Si des chemins sont spécifiés
|
||||
# avec les arguments $(N+1)..@, ne traiter que les fichiers qui correspondent à
|
||||
# ces spécifications. Exemple:
|
||||
# template_list destdir srcdirs... -- specs...
|
||||
local destdir="${1:-.}"; shift
|
||||
__template_check_destdir "$destdir" || return 1
|
||||
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
|
||||
withinpath "$destdir" "$(pwd)" && rel2pwd=1
|
||||
|
||||
|
@ -118,27 +193,29 @@ function template_list() {
|
|||
withinpath "$destdir" "$srcspec" || continue
|
||||
srcspec="${srcspec#$destdir}"
|
||||
|
||||
[ -e "$srcdir$srcspec" ] || continue
|
||||
array_from_lines srcfiles "$(find "$srcdir$srcspec" -type f)"
|
||||
for src in "${srcfiles[@]}"; do
|
||||
setx content=__template_fillvars "$src" "$tmpfile"
|
||||
dest="$destdir/${src#$srcdir/}"
|
||||
for srcdir in "${srcdirs[@]}"; do
|
||||
[ -e "$srcdir$srcspec" ] || continue
|
||||
array_from_lines srcfiles "$(find "$srcdir$srcspec" -type f)"
|
||||
for src in "${srcfiles[@]}"; do
|
||||
setx content=__template_fillvars "$src" "$tmpfile"
|
||||
dest="$destdir/${src#$srcdir/}"
|
||||
|
||||
list=
|
||||
if [ -L "$dest" ]; then
|
||||
:
|
||||
elif [ -f "$dest" ]; then
|
||||
testsame "$content" "$dest" && list=1
|
||||
else
|
||||
list=1
|
||||
fi
|
||||
[ -n "$list" ] || continue
|
||||
list=
|
||||
if [ -L "$dest" ]; then
|
||||
:
|
||||
elif [ -f "$dest" ]; then
|
||||
testsame "$content" "$dest" && list=1
|
||||
else
|
||||
list=1
|
||||
fi
|
||||
[ -n "$list" ] || continue
|
||||
|
||||
if [ -n "$rel2pwd" ]; then
|
||||
relpath "$dest"
|
||||
else
|
||||
echo "${src#$srcdir/}"
|
||||
fi
|
||||
if [ -n "$rel2pwd" ]; then
|
||||
relpath "$dest"
|
||||
else
|
||||
echo "${src#$srcdir/}"
|
||||
fi
|
||||
done
|
||||
done
|
||||
done | csort -u
|
||||
|
||||
|
@ -146,19 +223,26 @@ function template_list() {
|
|||
}
|
||||
|
||||
function template_merge() {
|
||||
# Copier dans le répertoire destination $2 tous les fichiers provenant du
|
||||
# répertoire source $1 correspondant aux spécifications $3..@, si ces fichiers
|
||||
# n'ont pas été modifiés dans le répertoire de destination.
|
||||
# Soit $N le séparateur --, copier dans le répertoire destination $1 les
|
||||
# fichiers des répertoires sources $2..$(N-1) correspondant aux spécifications
|
||||
# $(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
|
||||
# s'ils sonts demandés explicitement.
|
||||
local srcdir="$1"; shift
|
||||
__template_check_srcdir "$srcdir" || return 1
|
||||
setx srcdir=abspath "$srcdir"
|
||||
|
||||
# s'ils sonts demandés explicitement. Exemple:
|
||||
# template_merge destdir srcdirs... -- specs...
|
||||
local destdir="${1:-.}"; shift
|
||||
__template_check_destdir "$destdir" || return 1
|
||||
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"
|
||||
|
||||
local tmpfile; __template_setup_tmpfile
|
||||
|
@ -174,53 +258,61 @@ function template_merge() {
|
|||
fi
|
||||
srcspec="${srcspec#$destdir}"
|
||||
|
||||
[ -e "$srcdir$srcspec" ] || continue
|
||||
ebegin "$(ppath "$destdir$srcspec")"
|
||||
s=0
|
||||
if [ -n "$template" ]; then
|
||||
array_from_lines srcfiles "$(find "$srcdir$srcspec" -type f)"
|
||||
else
|
||||
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
|
||||
for srcdir in "${srcdirs[@]}"; do
|
||||
[ -e "$srcdir$srcspec" ] || continue
|
||||
ebegin "$(basename -- "$srcdir") --> $(ppath "$destdir$srcspec")"
|
||||
s=0
|
||||
if [ -n "$template" ]; then
|
||||
array_from_lines srcfiles "$(find "$srcdir$srcspec" -type f)"
|
||||
else
|
||||
mkdirof "$dest"
|
||||
cp "$content" "$dest"; r=$?
|
||||
edot $r "COPY: $(ppath "$dest")"
|
||||
[ $r -eq 0 ] || s=$r
|
||||
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
|
||||
mkdirof "$dest"
|
||||
cp "$content" "$dest"; r=$?
|
||||
edot $r "COPY: $(ppath "$dest")"
|
||||
[ $r -eq 0 ] || s=$r
|
||||
fi
|
||||
done
|
||||
eend $s
|
||||
done
|
||||
eend $s
|
||||
done
|
||||
|
||||
__template_clean_tmpfile
|
||||
}
|
||||
|
||||
function template_unmerge() {
|
||||
# Supprimer du répertoire de destination $2 tous les fichiers provenant du
|
||||
# répertoire source $1 et qui n'ont pas été modifiés. Si des chemins sont
|
||||
# spécifiés avec les arguments $3..@, ne traiter que les fichiers qui
|
||||
# correspondent à ces spécifications.
|
||||
local srcdir="$1"; shift
|
||||
__template_check_srcdir "$srcdir" || return 1
|
||||
setx srcdir=abspath "$srcdir"
|
||||
|
||||
# Soit $N le séparateur --, supprimer du répertoire destination $1 les fichiers
|
||||
# provenant des répertoires sources $2..$(N-1) et qui n'ont pas été modifiés. Si
|
||||
# des chemins sont spécifiés avec les arguments $(N+1)..@, ne traiter que les
|
||||
# fichiers qui correspondent à ces spécifications. Exemple:
|
||||
# template_unmerge destdir srcdirs... -- specs...
|
||||
local destdir="${1:-.}"; shift
|
||||
__template_check_destdir "$destdir" || return 1
|
||||
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"
|
||||
|
||||
local tmpfile; __template_setup_tmpfile
|
||||
|
@ -235,29 +327,31 @@ function template_unmerge() {
|
|||
fi
|
||||
srcspec="${srcspec#$destdir}"
|
||||
|
||||
[ -e "$srcdir$srcspec" ] || continue
|
||||
s=0
|
||||
ebegin "$(ppath "$destdir$srcspec")"
|
||||
array_from_lines files "$(find "$srcdir$srcspec" -type f)"
|
||||
for src in "${files[@]}"; do
|
||||
setx content=__template_fillvars "$src" "$tmpfile"
|
||||
dest="$destdir/${src#$srcdir/}"
|
||||
for srcdir in "${srcdirs[@]}"; do
|
||||
[ -e "$srcdir$srcspec" ] || continue
|
||||
s=0
|
||||
ebegin "$(ppath "$destdir$srcspec")"
|
||||
array_from_lines files "$(find "$srcdir$srcspec" -type f)"
|
||||
for src in "${files[@]}"; do
|
||||
setx content=__template_fillvars "$src" "$tmpfile"
|
||||
dest="$destdir/${src#$srcdir/}"
|
||||
|
||||
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
|
||||
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")"
|
||||
fi
|
||||
else
|
||||
show_debug && edot 0 "ALREADY REMOVED: $(ppath "$dest")"
|
||||
fi
|
||||
else
|
||||
show_debug && edot 0 "ALREADY REMOVED: $(ppath "$dest")"
|
||||
fi
|
||||
done
|
||||
eend $s
|
||||
done
|
||||
eend $s
|
||||
done
|
||||
|
||||
__template_clean_tmpfile
|
||||
|
@ -274,35 +368,42 @@ function template_cleandest() {
|
|||
}
|
||||
|
||||
function template_diff() {
|
||||
# Afficher les différences entre les fichiers du répertoire de destination $2 et
|
||||
# les fichiers du répertoire source $1
|
||||
local srcdir="$1"; shift
|
||||
__template_check_srcdir "$srcdir" || return 1
|
||||
setx srcdir=abspath "$srcdir"
|
||||
|
||||
# Afficher les différences entre les fichiers du répertoire de destination $1 et
|
||||
# les fichiers des répertoires sources $2..@
|
||||
local destdir="${1:-.}"; shift
|
||||
__template_check_destdir "$destdir" || return 1
|
||||
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 src content dest
|
||||
local -a srcfiles
|
||||
array_from_lines srcfiles "$(find "$srcdir" -type f)"
|
||||
for src in "${srcfiles[@]}"; do
|
||||
setx content=__template_fillvars "$src" "$tmpfile"
|
||||
dest="$destdir/${src#$srcdir/}"
|
||||
if [ -f "$dest" ] && testdiff "$content" "$dest"; then
|
||||
diff -uwB "$content" "$dest"
|
||||
fi
|
||||
for srcdir in "${srcdirs[@]}"; do
|
||||
array_from_lines srcfiles "$(find "$srcdir" -type f)"
|
||||
for src in "${srcfiles[@]}"; do
|
||||
setx content=__template_fillvars "$src" "$tmpfile"
|
||||
dest="$destdir/${src#$srcdir/}"
|
||||
if [ -f "$dest" ] && testdiff "$content" "$dest"; then
|
||||
diff -uwB "$content" "$dest"
|
||||
fi
|
||||
done
|
||||
done | page_maybe -S
|
||||
|
||||
__template_clean_tmpfile
|
||||
}
|
||||
|
||||
function templatesrc() {
|
||||
# obtenir le chemin vers le répertoire source de templates $1, situé dans
|
||||
# ULIBDIR/templates
|
||||
function template_srcdir() {
|
||||
# Obtenir le chemin vers le répertoire source de templates $1, situé dans
|
||||
# ULIBDIR/templates
|
||||
urequire ulib
|
||||
if [ -n "$ULIBDIR" ]; then
|
||||
echo "$ULIBDIR/templates/$1"
|
||||
|
@ -311,44 +412,193 @@ function templatesrc() {
|
|||
fi
|
||||
}
|
||||
|
||||
function __templatectl_display_help() { :; }
|
||||
__TEMPLATECTL_SUPPLOPTS=()
|
||||
function __templatectl_parseopts() {
|
||||
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_config() {
|
||||
# Obtenir le chemin vers le fichier de configuration pour le répertoire $1
|
||||
echo "$1/$(basename -- "$TEMPLATECTL_CONFIG")"
|
||||
}
|
||||
|
||||
function __templatectl_do() {
|
||||
__template_check_srcdir "$__templatectl_srcdir" || return 1
|
||||
[ -n "$__templatectl_destdir" ] || __templatectl_destdir=.
|
||||
__template_check_destdir "$__templatectl_destdir" || return 1
|
||||
[ -n "$__templatectl_auto" ] && __templatectl_list=1
|
||||
function templatectl_loadvars() {
|
||||
# Charger les valeurs des variables depuis le fichier $1
|
||||
# Les variables suivantes doivent être définies:
|
||||
# - Le tableau TEMPLATECTL_DEFAULTS permet de donner une valeur par défaut aux
|
||||
# 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" "$@"
|
||||
[ -n "$__templatectl_merge" ] && template_merge "$__templatectl_srcdir" "$__templatectl_destdir" "$@"
|
||||
[ -n "$__templatectl_unmerge" ] && template_unmerge "$__templatectl_srcdir" "$__templatectl_destdir" "$@"
|
||||
[ -n "$__templatectl_clean" ] && template_cleandest "$__templatectl_destdir" "$@"
|
||||
[ -n "$__templatectl_diff" ] && template_diff "$__templatectl_srcdir" "$__templatectl_destdir" "$@"
|
||||
return 0
|
||||
array_copy __template_vars TEMPLATECTL_DEFAULTS
|
||||
configdir="$(dirname -- "$1")"
|
||||
[ -f "$1" ] && source "$1"
|
||||
|
||||
for __t_var in "${__template_vars[@]}"; do
|
||||
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() {
|
||||
# fonction de haut niveau qui facilite l'utilisation des fonctions template_*
|
||||
# définir la fonction __templatectl_display_help() pour l'affichage de l'aide
|
||||
local -a args
|
||||
local __templatectl_list __templatectl_merge __templatectl_unmerge __templatectl_clean __templatectl_diff __templatectl_opt __templatectl_auto
|
||||
local __templatectl_destdir
|
||||
# Fonction de haut niveau qui facilite l'utilisation des fonctions template_*
|
||||
# définir la fonction __display_templatectl_help() pour l'affichage de l'aide
|
||||
# - Le tableau TEMPLATECTL_SRCDIRS doit contenir la liste des répertoires
|
||||
# sources pour les templates. Alternativement, il est possible de définir la
|
||||
# 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; }
|
||||
[ -z "$__templatectl_opt" ] && __templatectl_auto=1
|
||||
__templatectl_do "$@"
|
||||
local -a __tc_args
|
||||
local __tc_auto=1 __tc_load_vars=1
|
||||
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
|
||||
optionnels:
|
||||
|
||||
- modules.conf la liste des modules qu'il faut activer. Si un module n'existe
|
||||
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 '-'
|
||||
confs.conf
|
||||
Liste des configurations qu'il faut activer. Si un fichier de configuration
|
||||
existe mais n'est pas mentionnée dans ce fichier, ou si ce fichier n'existe
|
||||
pas, aucune modification n'est effectuée. Ce fichier contient une liste de
|
||||
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
|
||||
dans ce fichier, il est désactivé. Si ce fichier n'existe pas, tous les sites
|
||||
existant sont activés.
|
||||
modules.conf
|
||||
Liste des modules qu'il faut activer. Si un module existe mais n'est pas
|
||||
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,
|
||||
apache2.conf est le fichier de configuration principal d'apache et ports.conf
|
||||
le fichier de configuration des ports d'écoute.
|
||||
sites.conf
|
||||
Liste des sites qu'il faut activer. Si ce fichier n'existe pas, tous les
|
||||
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
|
||||
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.
|
||||
confs/
|
||||
Répertoire des configurations à installer. Les fichiers de ce répertoire
|
||||
sont de la forme CONF.conf et sont installés dans le répertoire
|
||||
/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
|
||||
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
|
||||
modules/
|
||||
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.
|
||||
|
||||
- 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
|
||||
l'emplacement par défaut.
|
||||
cgi-bin/
|
||||
Répertoire des scripts cgi
|
||||
|
||||
- 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/
|
||||
www/
|
||||
Répertoire des fichiers du serveur web
|
||||
|
||||
- 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
|
||||
certsconf/
|
||||
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
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
# -*- 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
|
||||
# variables suivantes:
|
||||
udir_desc="Fichiers à déployer sur host.univ.run dans /usr/lib/cgi-bin"
|
||||
udir_note=""
|
||||
udir_types=("uinst:rsync")
|
||||
udir_desc="Fichiers à déployer sur @@host@@ dans le répertoire des cgi-bins"
|
||||
udir_note="Il est possible de déployer les modifications dans ce répertoire avec 'uinst -y'"
|
||||
udir_types=(uinst:rsync)
|
||||
uinc=release
|
||||
uinc_options=()
|
||||
uinc_args=()
|
||||
|
@ -11,11 +11,12 @@ configure_variables=(dest)
|
|||
configure_dest_for=()
|
||||
config_scripts=()
|
||||
install_profiles=false
|
||||
profiledir=lib/profile.d
|
||||
bashrcdir=lib/bashrc.d
|
||||
defaultdir=lib/default
|
||||
workdir_rsync_options=()
|
||||
workdir_excludes=()
|
||||
workdir_includes=()
|
||||
copy_files=true
|
||||
destdir=CGIBINDIR
|
||||
rsync_options=()
|
||||
destdir=root@@@host@@:CGIBINDIR
|
||||
srcdir=.
|
||||
files=()
|
||||
owner=root:
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
# -*- 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
|
||||
# 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_types=("uinst:rsync")
|
||||
udir_types=(uinst:rsync)
|
||||
uinc=release
|
||||
uinc_options=()
|
||||
uinc_args=()
|
||||
|
@ -11,11 +11,12 @@ configure_variables=(dest)
|
|||
configure_dest_for=()
|
||||
config_scripts=()
|
||||
install_profiles=false
|
||||
profiledir=lib/profile.d
|
||||
bashrcdir=lib/bashrc.d
|
||||
defaultdir=lib/default
|
||||
workdir_rsync_options=()
|
||||
workdir_excludes=()
|
||||
workdir_includes=()
|
||||
copy_files=true
|
||||
destdir=root@host.univ.run:/var/www
|
||||
rsync_options=()
|
||||
destdir=root@@@host@@:HTDOCSDIR
|
||||
srcdir=.
|
||||
files=()
|
||||
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
|
||||
# have to change the VirtualHost statement in
|
||||
# /etc/apache2/sites-enabled/000-default
|
||||
|
@ -14,11 +15,15 @@ Listen *:80
|
|||
# to <VirtualHost *:443>
|
||||
# Server Name Indication for SSL named virtual hosts is currently not
|
||||
# supported by MSIE on Windows XP.
|
||||
NameVirtualHost 10.82.80.100:443
|
||||
Listen 10.82.80.100:443
|
||||
#NameVirtualHost IP:443
|
||||
#Listen IP:443
|
||||
#@@ips_namevirtualhosts@@
|
||||
#@@ips_listens@@
|
||||
</IfModule>
|
||||
|
||||
<IfModule mod_gnutls.c>
|
||||
NameVirtualHost 10.82.80.100:443
|
||||
Listen 10.82.80.100:443
|
||||
#NameVirtualHost IP:443
|
||||
#Listen IP:443
|
||||
#@@ips_namevirtualhosts@@
|
||||
#@@ips_listens@@
|
||||
</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>
|
|
@ -1,4 +1,4 @@
|
|||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
# Ce fichier contient la liste des script à lancer avec le compte utilisateur
|
||||
# pour configurer @@host@@
|
||||
# Chaque ligne contient le nom du script suivi des arguments éventuels
|
||||
# Chaque ligne contient le nom du script suivi des arguments éventuels
|
||||
|
|
199
runsconfig
199
runsconfig
|
@ -1,50 +1,38 @@
|
|||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS runs template
|
||||
urequire DEFAULTS template runs
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: Gérer un répertoire d'hôte de runs
|
||||
|
||||
USAGE
|
||||
$scriptname [options]
|
||||
$scriptname -c [host [destdir]]
|
||||
$scriptname -t -- args...
|
||||
|
||||
OPTIONS
|
||||
-d, --destdir DESTDIR
|
||||
Spécifier le répertoire d'hôte dans lequel copier les fichiers.
|
||||
-l, --list
|
||||
Lister les templates disponibles.
|
||||
-m, --merge
|
||||
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
|
||||
être demandés explicitement. Sinon, ils sont ignorés.
|
||||
-z, --unmerge
|
||||
Supprimer les fichiers du répertoire d'hôte s'ils n'ont pas été modifiés
|
||||
par rapport aux templates.
|
||||
-C, --clean
|
||||
Supprimer les répertoires vides dans le répertoire de référence. Peut
|
||||
être utile après -z
|
||||
-g, --diff
|
||||
Afficher les différences entre les templates et les fichiers du
|
||||
répertoire d'hôte.
|
||||
--list-vars
|
||||
Afficher pour information les valeurs par défaut des variables de
|
||||
template.
|
||||
--write-vars
|
||||
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"
|
||||
-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. Utiliser 'apacheconfig' par
|
||||
défaut.
|
||||
|
||||
-t, --template [OPT]
|
||||
Gérer les fichiers du répertoire local avec templatectl. La valeur de
|
||||
cette option est utilisée comme argument court pour l'invocation de
|
||||
templatectl, e.g
|
||||
$scriptname -tm args
|
||||
est équivalent à
|
||||
templatectl -m args
|
||||
Les arguments qui restent sont passés tels quels à templatectl
|
||||
Les options courantes de templatectl -l, -v, -m, -L sont disponibles
|
||||
directement
|
||||
--help-template
|
||||
Afficher l'aide concernent la gestion des templates.
|
||||
Equivalent à -t -- --help
|
||||
-h, --host HOST
|
||||
Spécifier l'hôte. Equivalent à -v host=HOST"
|
||||
}
|
||||
function __templatectl_display_help() { display_help; }
|
||||
|
||||
## Valeurs par défaut des variables de template
|
||||
set_defaults runs
|
||||
|
@ -74,95 +62,70 @@ if [ -z "$DEFAULT_HOST" ]; then
|
|||
[ -n "$__domain" ] || DEFAULT_HOST="$(runs_add_domain "$DEFAULT_HOST")"
|
||||
fi
|
||||
|
||||
DEFAULT_TEMPLATE_VARS=(
|
||||
hostname= # mettre cette variables AVANT host
|
||||
host=
|
||||
)
|
||||
TEMPLATE_STATIC_VARS=(host hostname)
|
||||
TEMPLATE_DYNAMIC_VARS=()
|
||||
TEMPLATE_NOWRITE_VARS=(hostname)
|
||||
|
||||
TEMPLATE_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_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
|
||||
case "$1" in
|
||||
host) update_var hostname "${host%%.*}";;
|
||||
esac
|
||||
|
||||
[ "$2" != "$__orig_value" ]
|
||||
__TEMPLATE_DEFAULTF_host=__template_defaultf_host
|
||||
__TEMPLATE_UPDATEF_host=__template_updatef_host
|
||||
function __template_defaultf_host() {
|
||||
echo "$DEFAULT_HOST"
|
||||
}
|
||||
function __template_updatef_host() {
|
||||
__template_set_var hostname "${host%%.*}"
|
||||
}
|
||||
|
||||
__vars=()
|
||||
__list_vars=
|
||||
__write_vars=
|
||||
__TEMPLATECTL_SUPPLOPTS=(
|
||||
-v:,--var: __vars
|
||||
--list-vars __list_vars=1
|
||||
--write-vars __write_vars=1
|
||||
TEMPLATECTL_NAME=runs
|
||||
TEMPLATECTL_SRCDIRS=(runsconfig)
|
||||
TEMPLATECTL_CONFIG=".runsconfig"
|
||||
TEMPLATECTL_DEFAULTS=()
|
||||
TEMPLATECTL_VARS=()
|
||||
|
||||
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 "$@" && \
|
||||
set -- "${args[@]}" || die "$args"
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
# répertoire de template
|
||||
setx __templatectl_srcdir=templatesrc runsconfig
|
||||
__template_set_destdir destdir autocreate "$TEMPLATECTL_NAME" || die
|
||||
setx config=templatectl_config "$destdir"
|
||||
templatectl_loadvars "$config"
|
||||
|
||||
# répertoire d'hôte
|
||||
[ -n "$__templatectl_destdir" ] || __templatectl_destdir=.
|
||||
setx __templatectl_destdir=abspath "$__templatectl_destdir"
|
||||
|
||||
# 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"
|
||||
if [ -z "$host" ]; then
|
||||
[ -n "$host" ] || host="$1"
|
||||
[ -n "$host" ] || host="$DEFAULT_HOST"
|
||||
__template_set_var host "$host"
|
||||
fi
|
||||
|
||||
# afficher les variables
|
||||
if [ -n "$__list_vars" ]; then
|
||||
echo "# template vars"
|
||||
for __var in "${TEMPLATE_VARS[@]}"; do
|
||||
echo_setv "$__var=${!__var}"
|
||||
done
|
||||
fi
|
||||
################################################################################
|
||||
if [ "$action" == create ]; then
|
||||
if [ -n "$autocreate" -a ! -d "$destdir" ]; then
|
||||
estepn "Création automatique de $(ppath "$destdir")"
|
||||
mkdir -p "$destdir" || die
|
||||
fi
|
||||
[ -d "$destdir" ] || die "$destdir: répertoire introuvable"
|
||||
|
||||
# gérer les fichiers template et locaux
|
||||
if [ -z "$__templatectl_opt" -a -z "$__list_vars" -a -z "$__write_vars" ]; then
|
||||
__templatectl_auto=1
|
||||
read_value ${host:+-i} "Veuillez entrer le nom d'hôte" host "$host"
|
||||
__template_set_var host "$host"
|
||||
|
||||
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
|
||||
[ -d "$__templatectl_destdir" ] || die "$__templatectl_destdir: répertoire introuvable"
|
||||
__templatectl_do "$@"
|
||||
|
|
Loading…
Reference in New Issue