apacheconfig: nouvelles options pour le développement

This commit is contained in:
Jephté Clain 2015-12-07 04:43:46 +04:00
parent c2d5eab6c1
commit 7c6ad6a08b
2 changed files with 150 additions and 39 deletions

View File

@ -47,7 +47,21 @@ OPTIONS
Les arguments qui restent sont passés tels quels à apache_autoconf
-r, --certsdir CERTSDIR
Spécifier le cas échéant le répertoire contenant les certificats à
déployer. Cet argument est requis si le répertoire certsconf/ existe."
déployer. Cet argument est requis si le répertoire certsconf/ existe.
-C, --one-conf CONF
Ne déployer que le fichier de configuration spécifié. Cette option
implique --deploy et est utile pour le développement et les tests.
-M, --one-module MODULE
Ne déployer que le fichier de module spécifié. Cette option implique
--deploy et est utile pour le développement et les tests.
-S, --one-site SITE
Ne déployer que le fichier de site spécifié. Cette option implique
--deploy et est utile pour le développement et les tests.
--localhosts
Créer dans le fichier /etc/hosts tous les noms d'hôte ayant un suffixe
.local mentionnés dans les fichiers de site. Cette option est utile pour
le développement et les tests."
}
# toujours placer une variable dépendante AVANT la variable maitre
@ -139,6 +153,9 @@ destdir=
nohideconfig=
templateopt=
aac_certsdir=
oneconf=
onemodule=
onesite=
args=(
--help '$exit_with display_help'
-c,--create action=create
@ -160,6 +177,10 @@ args=(
-8,--jessie '$array_add TEMPLATECTL_VARS sysver=jessie'
-u,--update,--deploy action=deploy
-r:,--certsdir: aac_certsdir=
-C:,--one-conf: '$set@ oneconf; action=deploy'
-M:,--one-module: '$set@ onemodule; action=deploy'
-S:,--one-site: '$set@ onesite; action=deploy'
--localhosts action=localhosts
)
parse_args "$@"; set -- "${args[@]}"
@ -218,21 +239,38 @@ $__TEMPLATECTL_HELP"
templatectl -d "$destdir" --config "$config" --no-load-vars ${templateopt:+-$templateopt} "$@"
################################################################################
elif [ "$action" == deploy ]; then
elif [ "$action" == deploy -o "$action" == localhosts ]; then
[ -d "$destdir" ] || die "$destdir: répertoire introuvable"
args=(-d "$destdir" --deploy ${aac_certsdir:+-r "$aac_certsdir"})
args=(
-d "$destdir" --$action ${aac_certsdir:+-r "$aac_certsdir"}
${oneconf:+--one-conf "$oneconf"}
${onemodule:+--one-module "$onemodule"}
${onesite:+--one-site "$onesite"}
)
for __name in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
array_add args -v "$__name=${!__name}"
done
array_add args -- "$@"
run_as_root "${args[@]}"
if [ "$action" == deploy ]; then
etitle "Mise à jour du système"
args=("$destdir" "$aac_certsdir")
args=(
apache_autoconf
--ignore "$(basename -- "$config")"
${oneconf:+--one-conf "$(basename -- "$oneconf")"}
${onemodule:+--one-module "$(basename -- "$onemodule")"}
${onesite:+--one-site "$(basename -- "$onesite")"}
)
elif [ "$action" == localhosts ]; then
etitle "Mise à jour de /etc/hosts"
args=(apache_autoconf_localhosts)
fi
args=("${args[@]}" "$destdir" "$aac_certsdir")
for __name in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
array_add args "$__name=${!__name}"
done
apache_autoconf --ignore "$(basename -- "$config")" "${args[@]}" "$@" || die
"${args[@]}" "$@" || die
eend
fi

View File

@ -155,6 +155,27 @@ OPTIONS
return 0
}
function __apache_autoconf_setup() {
if ! check_sysinfos -s linux -d debian; then
eerror "apache_autoconf n'est supporté que sur Debian linux"
return 1
fi
urequire install
compute_apache_prefixes
return 0
}
function __apache_autoconf_fillxxx() {
local var name value first=1
for var in "$@"; do
splitvar "$var" name value
array_addu FILLVARS "$name"
[ -n "$first" ] || FILLSCRIPT="$FILLSCRIPT"$'\n'
FILLSCRIPT="${FILLSCRIPT}s/@@${name}@@/$(qseds "${value}")/g"
first=
done
# Il faut un fichier temporaire pour les remplacement de fichiers
ac_set_tmpfile FILLTEMP
}
function __apache_autoconf_fillcopy() {
# copier le fichier $1 vers le fichier $2. Si le fichier $1 contient l'une
# des variables du tableau $FILLVARS, corriger d'abord le fichier avec le
@ -186,14 +207,14 @@ __APACHE_AUTOCONF_HELP="\
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.
Spécifier l'emplacement des fichiers 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.
Spécifier l'emplacement des fichiers 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.
Spécifier l'emplacement des fichiers 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.
@ -213,15 +234,19 @@ function __display_apache_autoconf_help() { eecho "$__APACHE_AUTOCONF_HELP"; }
function apache_autoconf() {
eval "$(utools_local)"
local -a ignores
local autoconfdir certsdir confdir confsdir modulesdir sitesdir cgibindir wwwdir certsconfdir rrdir
local autoconfdir certsdir confdir confsdir oneconf modulesdir onemodule
local sitesdir onesite cgibindir wwwdir certsconfdir rrdir onecms
local restart=1
parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with __display_apache_autoconf_help' \
--ignore: ignores \
--confdir: confdir= \
--confsdir: confsdir= \
--one-conf: oneconf= \
--modulesdir: modulesdir= \
--one-module: onemodule= \
--sitesdir: sitesdir= \
--one-site: onesite= \
--cgibindir: cgibindir= \
--wwwdir: wwwdir= \
--certsconfdir: certsconfdir= \
@ -229,12 +254,7 @@ function apache_autoconf() {
--no-restart restart= \
@ args -- "$@" && set -- "${args[@]}" || die "$args"
if ! check_sysinfos -s linux -d debian; then
eerror "apache_autoconf n'est supporté que sur Debian linux"
return 1
fi
urequire install
compute_apache_prefixes
__apache_autoconf_setup || return 1
# Configuration
autoconfdir="$1"; shift
@ -259,20 +279,12 @@ function apache_autoconf() {
[ -n "$wwwdir" ] || wwwdir="$autoconfdir/www"
[ -n "$certsconfdir" ] || certsconfdir="$autoconfdir/certsconf"
[ -n "$rrdir" ] || rrdir="$autoconfdir/RewriteRules"
[ -n "$oneconf" -o -n "$onemodule" -o -n "$onesite" ] && onecms=1
# Faire un script sed pour remplacer les variables spécifiées par leur
# valeur dans les fichiers
local -a FILLVARS; local FILLSCRIPT FILLTEMP
local var name value first=1
for var in "$@"; do
splitvar "$var" name value
array_addu FILLVARS "$name"
[ -n "$first" ] || FILLSCRIPT="$FILLSCRIPT"$'\n'
FILLSCRIPT="${FILLSCRIPT}s/@@${name}@@/$(qseds "${value}")/g"
first=
done
# Il faut un fichier temporaire pour les remplacement de fichiers
ac_set_tmpfile FILLTEMP
__apache_autoconf_fillxxx
# Copie des certificats
local modified rehash conf
@ -308,12 +320,14 @@ function apache_autoconf() {
fi
# Gestion des configurations
if [ -d "$confsdir" ]; then
if [ -d "$confsdir" -a \( -z "$onecms" -o "$oneconf" \) ]; then
local -a confs
local conf
etitle "Installation des configurations"
array_from_lines confs "$(list_files "$confsdir" "*.conf")"
for conf in "${confs[@]}"; do
[ -z "$oneconf" -o "$conf" == "$oneconf" ] || continue
estep "$conf"
__apache_autoconf_fillcopy \
"$confsdir/$conf" \
@ -323,12 +337,14 @@ function apache_autoconf() {
fi
# Gestion des modules
if [ -d "$modulesdir" ]; then
if [ -d "$modulesdir" -a \( -z "$onecms" -o "$onemodule" \) ]; then
local -a confs
local conf
etitle "Installation des configurations des modules"
array_from_lines confs "$(list_files "$modulesdir" "*.conf")"
for conf in "${confs[@]}"; do
[ -z "$onemodule" -o "$conf" == "$onemodule" ] || continue
estep "$conf"
__apache_autoconf_fillcopy \
"$modulesdir/$conf" \
@ -338,7 +354,7 @@ function apache_autoconf() {
fi
# Règles de réécriture
if [ -d "$rrdir" ]; then
if [ -d "$rrdir" -a -z "$onecms" ]; then
local -a confs
local conf
etitle "Installation des règles de réécriture"
@ -354,18 +370,19 @@ function apache_autoconf() {
# Sites
local -a enablesites disablesites
if [ -d "$sitesdir" ]; then
if [ -d "$sitesdir" -a \( -z "$onecms" -o "$onesite" \) ]; then
local -a confs
local conf confname destconf certsconf
etitle "Installation des sites"
array_lsfiles confs "$sitesdir" "*.conf"
for conf in "${confs[@]}"; do
confname="$(basename "$conf")"
destconf="$confname"
[ -z "$onesite" -o "$confname" == "$onesite" ] || continue
certsconf=
if [ "${destconf%.ssl.conf}" != "$destconf" ]; then
if [ "${confname%.ssl.conf}" != "$confname" ]; then
if [ -d "$certsconfdir" ]; then
certsconf="${destconf%.ssl.conf}-certs.conf"
certsconf="${confname%.ssl.conf}-certs.conf"
else
ewarn "$conf: fichier ignoré parce que --certsconfdir n'a pas été spécifié"
fi
@ -373,6 +390,7 @@ function apache_autoconf() {
case "$destconf" in
default.conf) destconf=default;;
default.ssl.conf) destconf=default-ssl;;
*) destconf="$confname";;
esac
if [ -n "$certsconf" ]; then
@ -401,7 +419,7 @@ s#@@ca@@#$APACHESSLCERTSDIR/$(basename "$ca")#g
fi
# Fichiers de configuration
if [ -d "$confdir" ]; then
if [ -d "$confdir" -a -z "$onecms" ]; then
local -a confs
local conf
etitle "Configuration de base"
@ -474,14 +492,14 @@ s#@@ca@@#$APACHESSLCERTSDIR/$(basename "$ca")#g
fi
# Scripts CGI
if [ -d "$cgibindir" ]; then
if [ -d "$cgibindir" -a -z "$onecms" ]; then
etitle "Installation des scripts CGI"
cpdirnovcs "$cgibindir" "$CGIBINDIR"
eend
fi
# Contenu web
if [ -d "$wwwdir" ]; then
if [ -d "$wwwdir" -a -z "$onecms" ]; then
etitle "Installation des fichiers du serveur web"
cpdirnovcs "$wwwdir" "$HTDOCSDIR"
eend
@ -512,3 +530,58 @@ s#@@ca@@#$APACHESSLCERTSDIR/$(basename "$ca")#g
fi
fi
}
function apache_autoconf_localhosts() {
eval "$(utools_local)"
local autoconfdir sitesdir
parse_opts "${PRETTYOPTS[@]}" \
--sitesdir: sitesdir= \
@ args -- "$@" && set -- "${args[@]}" || die "$args"
__apache_autoconf_setup || return 1
# Configuration
autoconfdir="$1"; shift
[ -n "$autoconfdir" ] || {
eerror "Vous devez spécifier le répertoire de base de la configuration apache"
return 1
}
[ -n "$sitesdir" ] || sitesdir="$autoconfdir/sites"
# Faire un script sed pour remplacer les variables spécifiées par leur
# valeur dans les fichiers
local -a FILLVARS; local FILLSCRIPT FILLTEMP ULIB_INSTALL_VERBOSE
__apache_autoconf_fillxxx
local -a newhosts
if [ -d "$sitesdir" ]; then
local -a localips localhosts confs candidates newhosts
local conf tmpconf candidate
array_from_lines localips "$(</etc/hosts awk '$1 ~ /127\./ { print $1 }' | sort -u)"
array_from_lines localhosts "$(</etc/hosts awk '$1 ~ /127\./ { for (i = 2; i <= NF; i++) { if ($i ~ /\.local$/) print $i } }' | sort -u)"
array_lsfiles confs "$sitesdir" "*.conf"
ac_set_tmpfile tmpconf
for conf in "${confs[@]}"; do
__apache_autoconf_fillcopy "$conf" "$tmpconf"
array_from_lines candidates "$(<"$tmpconf" awk '
$1 == "ServerName" && $2 ~ /\.local$/ { print $2 }
$1 == "ServerAlias" { for (i = 2; i <= NF; i++) { if ($i ~ /\.local$/) print $i } }
')"
for candidate in "${candidates[@]}"; do
array_contains localhosts "$candidate" || array_addu newhosts "$candidate"
done
done
fi
local ip host i=0
for host in "${newhosts[@]}"; do
i=$(($i + 1)); ip="127.0.1.$i"
while array_contains localips "$ip"; do
i=$(($i + 1)); ip="127.0.1.$i"
done
estep "Ajout de $ip $host"
echo "$ip $host" >>/etc/hosts
done
}