apacheconfig: nouvelles options pour le développement
This commit is contained in:
parent
c2d5eab6c1
commit
7c6ad6a08b
50
apacheconfig
50
apacheconfig
|
@ -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[@]}"
|
||||
|
||||
etitle "Mise à jour du système"
|
||||
args=("$destdir" "$aac_certsdir")
|
||||
if [ "$action" == deploy ]; then
|
||||
etitle "Mise à jour du système"
|
||||
args=(
|
||||
apache_autoconf
|
||||
--ignore "$(basename -- "$config")"
|
||||
${oneconf:+--one-conf "$(basename -- "$oneconf")"}
|
||||
${onemodule:+--one-module "$(basename -- "$onemodule")"}
|
||||
${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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue