diff --git a/apacheconfig b/apacheconfig index efe1a97..7a17742 100755 --- a/apacheconfig +++ b/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 diff --git a/lib/ulib/apache.tools b/lib/ulib/apache.tools index 73fc0d0..a10496a 100644 --- a/lib/ulib/apache.tools +++ b/lib/ulib/apache.tools @@ -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 + done +}