688 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			688 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
 | 
						|
## Gestion du service apache (démarrage/arrêt), et de sa configuration
 | 
						|
##@cooked nocomments
 | 
						|
##@require base
 | 
						|
##@require sysinfos
 | 
						|
uprovide apache
 | 
						|
urequire base sysinfos
 | 
						|
 | 
						|
function __apache_prefixes_checkdir() {
 | 
						|
    local dir
 | 
						|
    for dir in "$@"; do
 | 
						|
        if [ -d "$dir" ]; then
 | 
						|
            echo "$dir"
 | 
						|
            return 0
 | 
						|
        fi
 | 
						|
    done
 | 
						|
    return 1
 | 
						|
}
 | 
						|
 | 
						|
function __apache_prefixes_checkfile() {
 | 
						|
    local file
 | 
						|
    for file in "$@"; do
 | 
						|
        if [ -f "$file" ]; then
 | 
						|
            echo "$file"
 | 
						|
            return 0
 | 
						|
        fi
 | 
						|
    done
 | 
						|
    return 1
 | 
						|
}
 | 
						|
 | 
						|
function __apache_prefixes_checkexec() {
 | 
						|
    local exec
 | 
						|
    for exec in "$@"; do
 | 
						|
        if [ -x "$exec" ]; then
 | 
						|
            echo "$exec"
 | 
						|
            return 0
 | 
						|
        fi
 | 
						|
    done
 | 
						|
    return 1
 | 
						|
}
 | 
						|
 | 
						|
function get_default_apachebin_prefix() {
 | 
						|
    __apache_prefixes_checkexec /usr/sbin/{apache2,apache,httpd}
 | 
						|
}
 | 
						|
 | 
						|
function get_default_apacheversion_prefix() {
 | 
						|
    [ -n "$APACHEBIN" ] || return
 | 
						|
    local version="$($APACHEBIN -v | grep version:)"
 | 
						|
    if [[ "$version" == *1.3* ]]; then
 | 
						|
        echo ""
 | 
						|
    elif [[ "$version" == *2.0* ]]; then
 | 
						|
        echo "2"
 | 
						|
    elif [[ "$version" == *2.2* ]]; then
 | 
						|
        echo "2.2"
 | 
						|
    elif [[ "$version" == *2.4* ]]; then
 | 
						|
        echo "2.4"
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function get_default_apachectl_prefix() {
 | 
						|
    [ -n "$APACHEBIN" ] || return
 | 
						|
    __apache_prefixes_checkexec "$(dirname "$APACHEBIN")"/apache*ctl
 | 
						|
}
 | 
						|
 | 
						|
function get_default_apachelogdir_prefix() {
 | 
						|
    if check_sysinfos -s darwin; then
 | 
						|
        __apache_prefixes_checkdir /var/log/{apache2,httpd}
 | 
						|
    elif check_sysinfos -s linux; then
 | 
						|
        if check_sysinfos -d debianlike; then
 | 
						|
            __apache_prefixes_checkdir /var/log/{apache2,apache}
 | 
						|
        elif check_sysinfos -d redhatlike; then
 | 
						|
            __apache_prefixes_checkdir /var/log/httpd
 | 
						|
        elif check_sysinfos -d gentoo; then
 | 
						|
            # XXX à vérifier
 | 
						|
            __apache_prefixes_checkdir /var/log/{apache{2,},httpd}
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function get_default_apachesslcertsdir_prefix() {
 | 
						|
    if check_sysinfos -s darwin; then
 | 
						|
        __apache_prefixes_checkdir /etc/{apache2,httpd}/ssl.crt
 | 
						|
    elif check_sysinfos -s linux; then
 | 
						|
        __apache_prefixes_checkdir /etc/ssl/certs /etc/pki/tls/certs /etc/httpd/conf/ssl.crt
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function get_default_apachesslkeysdir_prefix() {
 | 
						|
    if check_sysinfos -s darwin; then
 | 
						|
        __apache_prefixes_checkdir /etc/{apache2,httpd}/ssl.key
 | 
						|
    elif check_sysinfos -s linux; then
 | 
						|
        __apache_prefixes_checkdir /etc/ssl/private /etc/pki/tls/private /etc/httpd/conf/ssl.key
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function get_default_apacheconfdir_prefix() {
 | 
						|
    if check_sysinfos -s darwin; then
 | 
						|
        __apache_prefixes_checkdir /etc/{apache2,httpd}
 | 
						|
    elif check_sysinfos -s linux; then
 | 
						|
        if check_sysinfos -d debianlike; then
 | 
						|
            __apache_prefixes_checkdir /etc/{apache{2,,-ssl},httpd}
 | 
						|
        elif check_sysinfos -d redhatlike; then
 | 
						|
            __apache_prefixes_checkdir /etc/httpd
 | 
						|
        elif check_sysinfos -d gentoo; then
 | 
						|
            __apache_prefixes_checkdir /etc/{apache{2,},httpd}
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function get_default_apacheconf_prefix() {
 | 
						|
    [ -n "$APACHECONFDIR" ] || return
 | 
						|
    __apache_prefixes_checkfile "$APACHECONFDIR"/{apache2,{,conf/}httpd}.conf
 | 
						|
}
 | 
						|
 | 
						|
function get_default_apacheavsitesdir_prefix() {
 | 
						|
    [ -n "$APACHECONFDIR" ] || return
 | 
						|
    if check_sysinfos -s darwin; then
 | 
						|
        __apache_prefixes_checkdir "$APACHECONFDIR/sites_disabled"
 | 
						|
    elif check_sysinfos -d debianlike gentoo; then
 | 
						|
        __apache_prefixes_checkdir "$APACHECONFDIR/sites-available"
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function get_default_apachesitesdir_prefix() {
 | 
						|
    if check_sysinfos -s darwin; then
 | 
						|
        __apache_prefixes_checkdir "$APACHECONFDIR/sites"
 | 
						|
    elif check_sysinfos -d debianlike gentoo; then
 | 
						|
        __apache_prefixes_checkdir "$APACHECONFDIR/sites-enabled"
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function get_default_htdocsdir_prefix() {
 | 
						|
    if check_sysinfos -s darwin; then
 | 
						|
        __apache_prefixes_checkdir /Library/WebServer/Documents
 | 
						|
    elif check_sysinfos -s linux; then
 | 
						|
        if check_sysinfos -d debianlike; then
 | 
						|
            __apache_prefixes_checkdir /var/www
 | 
						|
        elif check_sysinfos -d redhatlike; then
 | 
						|
            __apache_prefixes_checkdir /var/www/html
 | 
						|
        elif check_sysinfos -d gentoo; then
 | 
						|
            __apache_prefixes_checkdir /var/www/localhost/htdocs
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function get_default_cgibindir_prefix() {
 | 
						|
    if check_sysinfos -s darwin; then
 | 
						|
        __apache_prefixes_checkdir /Library/WebServer/CGI-Executables
 | 
						|
    elif check_sysinfos -s linux; then
 | 
						|
        if check_sysinfos -d debianlike; then
 | 
						|
            __apache_prefixes_checkdir /usr/lib/cgi-bin
 | 
						|
        elif check_sysinfos -d redhatlike; then
 | 
						|
            __apache_prefixes_checkdir /var/www/cgi-bin
 | 
						|
        elif check_sysinfos -d gentoo; then
 | 
						|
            __apache_prefixes_checkdir /var/www/localhost/cgi-bin
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
__apache_prefixes=
 | 
						|
function __compute_apache_prefixes() {
 | 
						|
    [ -n "$__apache_prefixes" ] && return
 | 
						|
    APACHEBIN="${APACHEBIN:-$(get_default_apachebin_prefix)}"
 | 
						|
    APACHEVERSION="${APACHEVERSION:-$(get_default_apacheversion_prefix)}"
 | 
						|
    APACHECTL="${APACHECTL:-$(get_default_apachectl_prefix)}"
 | 
						|
    APACHELOGDIR="${APACHELOGDIR:-$(get_default_apachelogdir_prefix)}"
 | 
						|
    APACHESSLCERTSDIR="${APACHESSLCERTSDIR:-$(get_default_apachesslcertsdir_prefix)}"
 | 
						|
    APACHESSLKEYSDIR="${APACHESSLKEYSDIR:-$(get_default_apachesslkeysdir_prefix)}"
 | 
						|
    APACHECONFDIR="${APACHECONFDIR:-$(get_default_apacheconfdir_prefix)}"
 | 
						|
    APACHECONF="${APACHECONF:-$(get_default_apacheconf_prefix)}"
 | 
						|
    APACHEAVSITESDIR="${APACHEAVSITESDIR:-$(get_default_apacheavsitesdir_prefix)}"
 | 
						|
    APACHESITESDIR="${APACHESITESDIR:-$(get_default_apachesitesdir_prefix)}"
 | 
						|
    HTDOCSDIR="${HTDOCSDIR:-$(get_default_htdocsdir_prefix)}"
 | 
						|
    CGIBINDIR="${CGIBINDIR:-$(get_default_cgibindir_prefix)}"
 | 
						|
    __apache_prefixes=1
 | 
						|
}
 | 
						|
 | 
						|
UTOOLS_PREFIXES=("${UTOOLS_PREFIXES[@]}" APACHEBIN APACHEVERSION APACHECTL APACHELOGDIR APACHESSLCERTSDIR APACHESSLKEYSDIR APACHECONFDIR APACHECONF APACHEAVSITESDIR APACHESITESDIR HTDOCSDIR CGIBINDIR)
 | 
						|
 | 
						|
function compute_apache_prefixes() {
 | 
						|
    __compute_apache_prefixes
 | 
						|
}
 | 
						|
 | 
						|
function recompute_apache_prefixes() {
 | 
						|
    __apache_prefixes=
 | 
						|
    __compute_apache_prefixes
 | 
						|
}
 | 
						|
 | 
						|
function get_APACHEBIN_prefix() {
 | 
						|
    __compute_apache_prefixes
 | 
						|
    echo "$APACHEBIN"
 | 
						|
}
 | 
						|
 | 
						|
function get_APACHEVERSION_prefix() {
 | 
						|
    __compute_apache_prefixes
 | 
						|
    echo "$APACHEVERSION"
 | 
						|
}
 | 
						|
 | 
						|
function get_APACHECTL_prefix() {
 | 
						|
    __compute_apache_prefixes
 | 
						|
    echo "$APACHECTL"
 | 
						|
}
 | 
						|
 | 
						|
function get_APACHELOGDIR_prefix() {
 | 
						|
    __compute_apache_prefixes
 | 
						|
    echo "$APACHELOGDIR"
 | 
						|
}
 | 
						|
 | 
						|
function get_APACHESSLCERTSDIR_prefix() {
 | 
						|
    __compute_apache_prefixes
 | 
						|
    echo "$APACHESSLCERTSDIR"
 | 
						|
}
 | 
						|
 | 
						|
function get_APACHESSLKEYSDIR_prefix() {
 | 
						|
    __compute_apache_prefixes
 | 
						|
    echo "$APACHESSLKEYSDIR"
 | 
						|
}
 | 
						|
 | 
						|
function get_APACHECONFDIR_prefix() {
 | 
						|
    __compute_apache_prefixes
 | 
						|
    echo "$APACHECONFDIR"
 | 
						|
}
 | 
						|
 | 
						|
function get_APACHECONF_prefix() {
 | 
						|
    __compute_apache_prefixes
 | 
						|
    echo "$APACHECONF"
 | 
						|
}
 | 
						|
 | 
						|
function get_APACHEAVSITESDIR_prefix() {
 | 
						|
    __compute_apache_prefixes
 | 
						|
    echo "$APACHEAVSITESDIR"
 | 
						|
}
 | 
						|
 | 
						|
function get_APACHESITESDIR_prefix() {
 | 
						|
    __compute_apache_prefixes
 | 
						|
    echo "$APACHESITESDIR"
 | 
						|
}
 | 
						|
 | 
						|
function get_HTDOCSDIR_prefix() {
 | 
						|
    __compute_apache_prefixes
 | 
						|
    echo "$HTDOCSDIR"
 | 
						|
}
 | 
						|
 | 
						|
function get_CGIBINDIR_prefix() {
 | 
						|
    __compute_apache_prefixes
 | 
						|
    echo "$CGIBINDIR"
 | 
						|
}
 | 
						|
 | 
						|
function __apache_resolvcert() {
 | 
						|
    [ -n "$__rc_dir" ] || __rc_dir="$(dirname "$__rc_conf")"
 | 
						|
    eval "$(
 | 
						|
        source "$__rc_conf"
 | 
						|
        set_var_cmd __rc_cert "$cert"
 | 
						|
        set_var_cmd __rc_key "$key"
 | 
						|
        set_var_cmd __rc_ca "$ca"
 | 
						|
    )"
 | 
						|
    [ -n "$__rc_cert" ] && __rc_cert="$(abspath "$__rc_cert" "$__rc_dir")"
 | 
						|
    [ -n "$__rc_key" ] && __rc_key="$(abspath "$__rc_key" "$__rc_dir")"
 | 
						|
    [ -n "$__rc_ca" ] && __rc_ca="$(abspath "$__rc_ca" "$__rc_dir")"
 | 
						|
}
 | 
						|
 | 
						|
function __apache_checkvars() {
 | 
						|
    if [ -n "$__rc_cert" -a -z "$__rc_key" ]; then
 | 
						|
        local __rc_name __rc_ext
 | 
						|
        splitname "$__rc_cert" __rc_name __rc_ext
 | 
						|
        if [ "$__rc_ext" == "crt" -o "$__rc_ext" == "pem" ]; then
 | 
						|
            __rc_key="$__rc_name.key"
 | 
						|
            enote "La clé privée n'a pas été spécifiée. La valeur $(ppath "$__rc_key") sera utilisée"
 | 
						|
        else
 | 
						|
            eerror "Impossible de trouver la clé privée correspondant au certificat $(ppath "$__rc_cert")"
 | 
						|
            return 1
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
    if [ -z "$__rc_cert" -a -z "$__rc_ca" ]; then
 | 
						|
        eerror "Vous devez spécifier le certificat à installer"
 | 
						|
        return 1
 | 
						|
    elif [ -z "$__rc_cert" ]; then
 | 
						|
        eattention "Seul le certificat autorité a été spécifié."
 | 
						|
    elif [ -z "$__rc_ca" ]; then
 | 
						|
        ewarn "Aucun certificat autorité n'a pas été spécifié. Cela ne peut marcher que si le certificat est autosigné"
 | 
						|
    fi
 | 
						|
 | 
						|
    local i
 | 
						|
    for i in "$__rc_cert" "$__rc_key" "$__rc_ca"; do
 | 
						|
        [ -n "$i" ] || continue
 | 
						|
        [ -f "$i" ] || {
 | 
						|
            eerror "$i: Fichier introuvable"
 | 
						|
            return 1
 | 
						|
        }
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
function apache_resolvecert() {
 | 
						|
    # Calculer l'emplacement des certificats correspondant aux arguments $1 et
 | 
						|
    # $2 (qui correspondent aux options --conf et --dir de apache_addcert()),
 | 
						|
    # puis initialiser les variables $3(=cert), $4(=key) et $5(=ca)
 | 
						|
    local __rc_conf="$1" __rc_dir="$2"
 | 
						|
    local __rc_cert __rc_key __rc_ca
 | 
						|
 | 
						|
    __apache_resolvcert
 | 
						|
    __apache_checkvars || return 1
 | 
						|
    set_var "${3:-cert}" "$__rc_cert"
 | 
						|
    set_var "${4:-key}" "$__rc_key"
 | 
						|
    set_var "${5:-ca}" "$__rc_ca"
 | 
						|
}
 | 
						|
 | 
						|
function apache_addcert() {
 | 
						|
    function __apache_addcert_display_help() {
 | 
						|
        uecho "apache_addcert: Installer un certificat sur le serveur
 | 
						|
 | 
						|
USAGE
 | 
						|
    apache_addcert [options] [cert.pem [cert.key [ca.pem]]]
 | 
						|
 | 
						|
OPTIONS
 | 
						|
    --conf certsconf
 | 
						|
    --dir certsdir
 | 
						|
        Spécifier un fichier de configuration et un répertoire depuis lesquels
 | 
						|
        prendre les informations sur les certificats à utiliser.
 | 
						|
        Le fichier de configuration doit définir les variables cert, key et ca
 | 
						|
        avec les noms des fichiers contenant respectivement le certificat, la
 | 
						|
        clé privée, et les certificats autorités, exprimés relativement au
 | 
						|
        répertoire certsdir.
 | 
						|
        Si ces options ne sont pas spécifiées, les fichiers doivent être donnés
 | 
						|
        sur la ligne de commande.
 | 
						|
 | 
						|
    --out-cert cert
 | 
						|
    --out-key key
 | 
						|
    --out-ca ca
 | 
						|
        Au lieu d'installer les certificats, placer les chemins vers les
 | 
						|
        fichiers correspondant dans les variables spécifiées"
 | 
						|
    }
 | 
						|
 | 
						|
    eval "$(utools_local)"
 | 
						|
    local action=install
 | 
						|
    local certsconf certsdir cert key ca
 | 
						|
    local __out_cert __out_key __out_ca
 | 
						|
    parse_opts "${PRETTYOPTS[@]}" \
 | 
						|
        --help '$exit_with __apache_addcert_display_help' \
 | 
						|
        -C:,--conf: certsconf= \
 | 
						|
        -d:,--dir: certsdir= \
 | 
						|
        --out-cert: '$set@ __out_cert; action=dump' \
 | 
						|
        --out-key: '$set@ __out_key; action=dump' \
 | 
						|
        --out-ca: '$set@ __out_ca; action=dump' \
 | 
						|
        @ args -- "$@" && set -- "${args[@]}" || die "$args"
 | 
						|
 | 
						|
    local __rc_conf __rc_dir
 | 
						|
    local __rc_cert __rc_key __rc_ca
 | 
						|
    if [ -n "$certsconf" ]; then
 | 
						|
        __rc_conf="$certsconf"
 | 
						|
        __rc_dir="$certsdir"
 | 
						|
        __apache_resolvconf
 | 
						|
        __apache_checkvars || return 1
 | 
						|
    else
 | 
						|
        __rc_cert="$1"
 | 
						|
        __rc_key="$2"
 | 
						|
        __rc_ca="$3"
 | 
						|
        __apache_checkvars || return 1
 | 
						|
    fi
 | 
						|
    cert="$__rc_cert"
 | 
						|
    key="$__rc_key"
 | 
						|
    ca="$__rc_ca"
 | 
						|
 | 
						|
    if [ -n "$cert" ]; then
 | 
						|
        estepi "Certificat: $(ppath "$cert")"
 | 
						|
        estepi "Clé privée: $(ppath "$key")"
 | 
						|
    fi
 | 
						|
    [ -n "$ca" ] && estepi "CAutorités: $(ppath "$ca")"
 | 
						|
    ask_yesno "Voulez-vous continuer?" O || return 1
 | 
						|
    urequire install
 | 
						|
 | 
						|
    etitle "Installation des certificats"
 | 
						|
    certsdir="$(get_APACHESSLCERTSDIR_prefix)"
 | 
						|
    keysdir="$(get_APACHESSLKEYSDIR_prefix)"
 | 
						|
    if [ ! -d "$certsdir" ]; then
 | 
						|
        mkdir -p "$certsdir" || return 1
 | 
						|
        chmod 755 "$certsdir" || return 1
 | 
						|
    fi
 | 
						|
    if [ ! -d "$keysdir" ]; then
 | 
						|
        mkdir -p "$keysdir" || return 1
 | 
						|
        chmod 710 "$keysdir" || return 1
 | 
						|
    fi
 | 
						|
    if [ -n "$cert" ]; then
 | 
						|
        copy_replace "$cert" "$certsdir" || return 1
 | 
						|
        chmod 644 "$certsdir/$(basename "$cert")" || return 1
 | 
						|
        copy_replace "$key" "$keysdir" || return 1
 | 
						|
        chmod 640 "$keysdir/$(basename "$key")" || return 1
 | 
						|
    fi
 | 
						|
    if [ -n "$ca" ]; then
 | 
						|
        copy_replace "$ca" "$certsdir" || return 1
 | 
						|
        chmod 644 "$certsdir/$(basename "$ca")" || return 1
 | 
						|
    fi
 | 
						|
    eend
 | 
						|
 | 
						|
    return 0
 | 
						|
}
 | 
						|
 | 
						|
function apache_autoconf() {
 | 
						|
    function __apache_autoconf_display_help() {
 | 
						|
        uecho "apache_autoconf: Mettre à jour la configuration d'apache
 | 
						|
 | 
						|
USAGE
 | 
						|
    apache_autoconf AUTOCONFDIR [CERTSDIR]
 | 
						|
 | 
						|
AUTOCONFDIR 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
 | 
						|
 | 
						|
IMPORTANT: Cette fonction n'est pour le moment supporté que sur debian
 | 
						|
 | 
						|
OPTIONS
 | 
						|
    --confdir CONFDIR
 | 
						|
        Spécifier l'emplacement des fichiers de configuration apache ainsi que
 | 
						|
        modules.conf et sites.conf
 | 
						|
        Par défaut, utiliser AUTOCONFDIR
 | 
						|
    --modulesdir MODULESDIR
 | 
						|
        Spécifier l'emplacement des fichiers de configuration des modules.
 | 
						|
        Par défaut, utiliser AUTOCONFDIR/modules si ce répertoire existe.
 | 
						|
    --sitesdir SITESDIR
 | 
						|
        Spécifier l'emplacement des fichiers de configuration des sites.
 | 
						|
        Par défaut, utiliser AUTOCONFDIR/sites si ce répertoire existe.
 | 
						|
    --cgibindir CGIBINDIR
 | 
						|
        Spécifier l'emplacement des scripts cgi à installer.
 | 
						|
        Par défaut, utiliser AUTOCONFDIR/cgi-bin si ce répertoire existe.
 | 
						|
    --wwwdir WWWDIR
 | 
						|
        Spécifier l'emplacement des fichiers du serveur web
 | 
						|
        Par défaut, utiliser AUTOCONFDIR/www si ce répertoire existe.
 | 
						|
    --certsconfdir CERTSCONFDIR
 | 
						|
        Spécifier l'emplacement des fichiers de configuration des certificats.
 | 
						|
        Par défaut, utiliser AUTOCONFDIR/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 AUTOCONFDIR/RewriteRules si ce répertoire existe.
 | 
						|
    --no-restart
 | 
						|
        Ne pas redémarrer apache en cas de modification de la configuration"
 | 
						|
    }
 | 
						|
 | 
						|
    eval "$(utools_local)"
 | 
						|
    local autoconfdir certsdir confdir modulesdir sitesdir cgibindir wwwdir certsconfdir rrdir
 | 
						|
    local restart=1
 | 
						|
    parse_opts "${PRETTYOPTS[@]}" \
 | 
						|
        --help '$exit_with __apache_autoconf_display_help' \
 | 
						|
        --confdir: confdir= \
 | 
						|
        --modulesdir: modulesdir= \
 | 
						|
        --sitesdir: sitesdir= \
 | 
						|
        --cgibindir: cgibindir= \
 | 
						|
        --wwwdir: wwwdir= \
 | 
						|
        --certsconfdir: certsconfdir= \
 | 
						|
        --rrdir: rrdir= \
 | 
						|
        --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
 | 
						|
 | 
						|
    autoconfdir="$1"
 | 
						|
    [ -n "$autoconfdir" ] || {
 | 
						|
        eerror "Vous devez spécifier le répertoire de base de la configuration apache"
 | 
						|
        return 1
 | 
						|
    }
 | 
						|
    certsdir="$2"
 | 
						|
    if [ -z "$confdir" -o -z "$modulesdir" -o -z "$sitesdir" \
 | 
						|
        -o -z "$cgibindir" -o -z "$wwwdir" -o -z "$certsconfdir" \
 | 
						|
        -o -z "$rrdir" ]; then
 | 
						|
        [ -d "$autoconfdir" ] || {
 | 
						|
            eerror "$autoconfdir: répertoire invalide"
 | 
						|
            return 1
 | 
						|
        }
 | 
						|
    fi
 | 
						|
    [ -n "$confdir" ] || confdir="$autoconfdir"
 | 
						|
    [ -n "$modulesdir" ] || modulesdir="$autoconfdir/modules"
 | 
						|
    [ -n "$sitesdir" ] || sitesdir="$autoconfdir/sites"
 | 
						|
    [ -n "$cgibindir" ] || cgibindir="$autoconfdir/cgi-bin"
 | 
						|
    [ -n "$wwwdir" ] || wwwdir="$autoconfdir/www"
 | 
						|
    [ -n "$certsconfdir" ] || certsconfdir="$autoconfdir/certsconf"
 | 
						|
    [ -n "$rrdir" ] || rrdir="$autoconfdir/RewriteRules"
 | 
						|
    if [ -d "$certsconfdir" ]; then
 | 
						|
        if [ -z "$certsdir" ]; then
 | 
						|
            eerror "CERTSDIR est requis si --certsconfdir est spécifié"
 | 
						|
            return 1
 | 
						|
        elif [ ! -d "$certsdir" ]; then
 | 
						|
            eerror "$certsdir: répertoire invalide"
 | 
						|
            return 1
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
 | 
						|
    local modified conf
 | 
						|
    if [ -d "$certsconfdir" ]; then
 | 
						|
        local -a certsconfs
 | 
						|
        local certsconf cert key ca
 | 
						|
        etitle "Installation des certificats"
 | 
						|
        array_lsfiles certsconfs "$certsconfdir" "*.conf"
 | 
						|
        for certsconf in "${certsconfs[@]}"; do
 | 
						|
            apache_resolvecert "$certsconf" "$certsdir" cert key ca || return 1
 | 
						|
            apache_addcert -y "$cert" "$key" "$ca"
 | 
						|
            modified=1
 | 
						|
        done
 | 
						|
        eend
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ -d "$modulesdir" ]; 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
 | 
						|
            estep "$conf"
 | 
						|
            copy_update "$modulesdir/$conf" "$APACHECONFDIR/mods-available/$conf" && modified=1
 | 
						|
        done
 | 
						|
        eend
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ -d "$rrdir" ]; then
 | 
						|
        local -a confs
 | 
						|
        local conf
 | 
						|
        etitle "Installation des règles de réécriture"
 | 
						|
        array_from_lines confs "$(list_files "$rrdir" "RewriteRules*.conf")"
 | 
						|
        for conf in "${confs[@]}"; do
 | 
						|
            estep "$conf"
 | 
						|
            copy_update "$rrdir/$conf" "$APACHECONFDIR/$conf" && modified=1
 | 
						|
        done
 | 
						|
        eend
 | 
						|
    fi
 | 
						|
 | 
						|
    local -a enablesites disablesites
 | 
						|
    if [ -d "$sitesdir" ]; then
 | 
						|
        local -a confs
 | 
						|
        local conf confname destconf certsconf tmpconf
 | 
						|
        etitle "Installation des sites"
 | 
						|
        array_lsfiles confs "$sitesdir" "*.conf"
 | 
						|
        for conf in "${confs[@]}"; do
 | 
						|
            confname="$(basename "$conf")"
 | 
						|
            destconf="$confname"
 | 
						|
            certsconf=
 | 
						|
            if [ "${destconf%.ssl.conf}" != "$destconf" ]; then
 | 
						|
                if [ -d "$certsconfdir" ]; then
 | 
						|
                    certsconf="${destconf%.ssl.conf}-certs.conf"
 | 
						|
                else
 | 
						|
                    ewarn "$conf: fichier ignoré parce que --certsconfdir n'a pas été spécifié"
 | 
						|
                fi
 | 
						|
            fi
 | 
						|
            case "$destconf" in
 | 
						|
            default.conf) destconf=default;;
 | 
						|
            default.ssl.conf) destconf=default-ssl;;
 | 
						|
            esac
 | 
						|
 | 
						|
            if [ -n "$certsconf" ]; then
 | 
						|
                certsconf="$certsconfdir/$certsconf"
 | 
						|
                if [ -f "$certsconf" ]; then
 | 
						|
                    apache_resolvecert "$certsconf" "$certsdir" cert key ca || return 1
 | 
						|
                    ac_set_tmpfile tmpconf
 | 
						|
                    sed "\
 | 
						|
s#@@cert@@#$APACHESSLCERTSDIR/$(basename "$cert")#g
 | 
						|
s#@@key@@#$APACHESSLKEYSDIR/$(basename "$key")#g
 | 
						|
s#@@ca@@#$APACHESSLCERTSDIR/$(basename "$ca")#g
 | 
						|
" <"$conf" >"$tmpconf"
 | 
						|
                    copy_update "$tmpconf" "$APACHEAVSITESDIR/$destconf"
 | 
						|
                else
 | 
						|
                    eerror "$(ppath "$certsconf"): fichier introuvable. Il a été ignoré"
 | 
						|
                fi
 | 
						|
            else
 | 
						|
                copy_update "$conf" "$APACHEAVSITESDIR/$destconf"
 | 
						|
            fi
 | 
						|
            enablesites=("${enablesites[@]}" "$destconf")
 | 
						|
            modified=1
 | 
						|
        done
 | 
						|
        eend
 | 
						|
    fi
 | 
						|
    if [ -d "$confdir" ]; then
 | 
						|
        local -a confs
 | 
						|
        local conf
 | 
						|
        etitle "Configuration de base"
 | 
						|
        array_from_lines confs "$(list_files "$confdir")"
 | 
						|
        for conf in "${confs[@]}"; do
 | 
						|
            case "$conf" in
 | 
						|
            modules.conf|sites.conf) continue;;
 | 
						|
            esac
 | 
						|
            estep "$conf"
 | 
						|
            copy_update "$confdir/$conf" "$APACHECONFDIR/$conf" && modified=1
 | 
						|
        done
 | 
						|
        if [ -f "$confdir/modules.conf" ]; then
 | 
						|
            local -a modules
 | 
						|
            local module
 | 
						|
            array_from_lines modules "$(<"$confdir/modules.conf" filter_conf)"
 | 
						|
            for module in "${modules[@]}"; do
 | 
						|
                if [ "${module#-}" != "$module" ]; then
 | 
						|
                    module="${module#-}"
 | 
						|
                    if a2dismod "$module"; then
 | 
						|
                        estep "Désactivation du module $module"
 | 
						|
                        modified=1
 | 
						|
                    fi
 | 
						|
                else
 | 
						|
                    module="${module#+}"
 | 
						|
                    if a2enmod "$module"; then
 | 
						|
                        estep "Activation du module $module"
 | 
						|
                        modified=1
 | 
						|
                    fi
 | 
						|
                fi
 | 
						|
            done
 | 
						|
        fi
 | 
						|
        if [ -f "$confdir/sites.conf" ]; then
 | 
						|
            local -a sitesconfs; local sitesconf
 | 
						|
            array_from_lines sitesconfs "$(<"$confdir/sites.conf" filter_conf)"
 | 
						|
            if [ ${#sitesconfs[*]} -gt 0 ]; then
 | 
						|
                # si une configuration existe, ignorer la configuration
 | 
						|
                # automatique
 | 
						|
                enablesites=()
 | 
						|
                disablesites=()
 | 
						|
                for sitesconf in "${sitesconfs[@]}"; do
 | 
						|
                    if [ "${sitesconf#+}" != "$sitesconf" ]; then
 | 
						|
                        array_del disablesites "${sitesconf#+}"
 | 
						|
                        array_add enablesites "${sitesconf#+}"
 | 
						|
                    elif [ "${sitesconf#-}" != "$sitesconf" ]; then
 | 
						|
                        array_del enablesites "${sitesconf#-}"
 | 
						|
                        array_add disablesites "${sitesconf#-}"
 | 
						|
                    else
 | 
						|
                        array_del disablesites "$sitesconf"
 | 
						|
                        array_add enablesites "$sitesconf"
 | 
						|
                    fi
 | 
						|
                done
 | 
						|
            fi
 | 
						|
        fi
 | 
						|
        eend
 | 
						|
    fi
 | 
						|
    if [ -d "$cgibindir" ]; then
 | 
						|
        etitle "Installation des scripts CGI"
 | 
						|
        cpdirnovcs "$cgibindir" "$CGIBINDIR"
 | 
						|
        eend
 | 
						|
    fi
 | 
						|
    if [ -d "$wwwdir" ]; then
 | 
						|
        etitle "Installation des fichiers du serveur web"
 | 
						|
        cpdirnovcs "$wwwdir" "$HTDOCSDIR"
 | 
						|
        eend
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ -n "${enablesites[*]}" -o -n "${disablesites[*]}" ]; then
 | 
						|
        etitle "(dés)Activation des sites"
 | 
						|
        local site
 | 
						|
        for site in "${enablesites[@]}"; do
 | 
						|
            a2ensite "$site"
 | 
						|
        done
 | 
						|
        for site in "${disablesites[@]}"; do
 | 
						|
            a2dissite "$site"
 | 
						|
        done
 | 
						|
        eend
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ -n "$modified" -a -n "$restart" ]; then
 | 
						|
        estep "Redémarrage d'apache"
 | 
						|
        "$APACHECTL" restart
 | 
						|
    fi
 | 
						|
}
 |