672 lines
23 KiB
Plaintext
672 lines
23 KiB
Plaintext
|
##@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
|
||
|
#enablesites=()
|
||
|
#disablesites=()
|
||
|
# refaire enablesites et disablesites
|
||
|
: #XXX activer les sites
|
||
|
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 "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
|
||
|
}
|