gestion et déploiement de configuration apache

le module apache est découpé entre apache et apache.config: la modification est incompatible
This commit is contained in:
Jephte CLAIN 2014-10-23 15:47:21 +04:00
parent 8b2c8d5949
commit 824554564c
22 changed files with 1158 additions and 463 deletions

217
apacheconfig Executable file
View File

@ -0,0 +1,217 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS apache.config
function display_help() {
uecho "$scriptname: Gérer une configuration apache pour déploiement
USAGE
$scriptname [options]
OPTIONS
Les options suivantes servent à mettre à jour la configuration apache dans un
répertoire de référence avant le déploiement. Ce répertoire est aussi appelé
répertoire local.
-d, --destdir DESTDIR
Spécifier le répertoire de référence dans lequel copier la configuration
apache.
-l, --list
Lister les templates disponibles.
-m, --merge
Copier les templates spécifiés dans le répertoire de référence s'il
n'y existent pas déjà
-z, --unmerge
Supprimer les fichiers du répertoire de référence s'ils n'ont pas été
modifiés par rapport aux templates.
-C, --clean
Supprimer les répertoires vides dans le répertoire de référence. Peut
être utile après -z
-g, --diff
Afficher les différences entre les templates et les fichiers du
répertoire de référence.
Le répertoire de référence 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
Les options suivantes permettent de déployer les fichiers du répertoire de
référence sur le système.
-u, --update
Mettre à jour la configuration système à partir du répertoire de
référence.
-r, --certsdir CERTSDIR
Spécifier le cas échéant le répertoire contenant les certificats à
déployer.
IMPORTANT: les fonctions de déploiement ne sont pour le moment supportées que
sur debian
OPTIONS AVANCEES
--confdir CONFDIR
Spécifier l'emplacement des fichiers de configuration apache ainsi que
les fichiers 'modules.conf' et 'sites.conf'. Par défaut, prendre le
répertoire de référence.
--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"
}
function __templatectl_display_help() { display_help; }
function parent_apacheconfig() {
# chercher à partir du répertoire courant si un des répertoires parents
# s'appelle apacheconfig
local dir="$(pwd)" dirname
while true; do
dirname="$(basename "$dir")"
if [ "$dir" == / ]; then
# s'arrêter à la racine
return 1
elif [ "$dir" == "$HOME" ]; then
# s'arrêter au répertoire HOME
return 1
elif [ "$dirname" == apacheconfig ]; then
echo "$dir"
return 0
fi
dir="$(dirname -- "$dir")"
done
}
update=
certsdir=
confdir=
modulesdir=
sitesdir=
cgibindir=
wwwdir=
certsconfdir=
rrdir=
restart=1
__TEMPLATECTL_OTHER_OPTS=(
-u,--update update=1
-r:,--certsdir: certsdir=
--confdir: confdir=
--modulesdir: modulesdir=
--sitesdir: sitesdir=
--cgibindir: cgibindir=
--wwwdir: wwwdir=
--certsconfdir: certsconfdir=
--rrdir: rrdir=
--restart restart=1
--no-restart restart=
)
__templatectl_parseopts "$@" && \
set -- "${args[@]}" || die "$args"
# répertoire source
srcdir="$ULIBDIR/support/apacheconfig.template"
# répertoire de référence
autocreate=
if [ -z "$destdir" ]; then
if [ -d apacheconfig ]; then
destdir=apacheconfig
elif setx destdir=parent_apacheconfig; then
estepn "Sélection automatique de $(ppath "$destdir")"
elif [ -e apacheconfig ]; then
die "Vous devez spécifier le répertoire de référence avec -d"
else
destdir=apacheconfig
autocreate=1
fi
fi
if [ -z "$update" -a -z "$templatectl_opt" ]; then
templatectl_opt=1
templatectl_auto=1
fi
if [ -n "$templatectl_opt" ]; then
etitle "Mise à jour du répertoire de référence"
if [ -n "$autocreate" -a ! -d "$destdir" ]; then
estepn "Création automatique de $(ppath "$destdir")"
mkdir -p "$destdir" || die
fi
[ -d "$destdir" ] || die "$destdir: répertoire introuvable"
__templatectl_do "$@"
eend
fi
if [ -n "$update" ]; then
args=(
-d "$destdir"
-u
${certsdir:+-r "$certsdir"}
${confdir:+--confdir "$confdir"}
${modulesdir:+--modulesdir "$modulesdir"}
${sitesdir:+--sitesdir "$sitesdir"}
${cgibindir:+--cgibindir "$cgibindir"}
${wwwdir:+--wwwdir "$wwwdir"}
${certsconfdir:+--certsconfdir "$certsconfdir"}
${rrdir:+--rrdir "$rrdir"}
)
run_as_root "${args[@]}"
etitle "Mise à jour du système"
[ -d "$destdir" ] || die "$destdir: répertoire introuvable"
args=("$destdir" "$certsdir"
${confdir:+--confdir "$confdir"}
${modulesdir:+--modulesdir "$modulesdir"}
${sitesdir:+--sitesdir "$sitesdir"}
${cgibindir:+--cgibindir "$cgibindir"}
${wwwdir:+--wwwdir "$wwwdir"}
${certsconfdir:+--certsconfdir "$certsconfdir"}
${rrdir:+--rrdir "$rrdir"}
)
apache_autoconf "${args[@]}" || die
eend
fi

View File

@ -245,443 +245,3 @@ function get_CGIBINDIR_prefix() {
__compute_apache_prefixes __compute_apache_prefixes
echo "$CGIBINDIR" 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
}

376
lib/ulib/apache.config Normal file
View File

@ -0,0 +1,376 @@
##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
## Templates pour apache
##@cooked nocomments
##@require base
##@require sysinfos
##@require template
uprovide apache.config
urequire base sysinfos template apache
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() {
eval "$(utools_local)"
local autoconfdir certsdir confdir modulesdir sitesdir cgibindir wwwdir certsconfdir rrdir
local restart=1
parse_opts "${PRETTYOPTS[@]}" \
--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
}

View File

@ -0,0 +1,23 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Utiliser 'udir --help-vars' pour une description de la signification des
# variables suivantes:
udir_desc=""
udir_note=""
udir_types=("uinst")
uinc=release
uinc_options=()
uinc_args=()
configure_variables=(dest)
configure_dest_for=()
config_scripts=()
install_profiles=false
profiledir=lib/profile.d
bashrcdir=lib/bashrc.d
defaultdir=lib/default
copy_files=true
destdir=APACHECONFDIR
srcdir=.
files=(RewriteRules.conf)
owner=root:
modes=(u=rwX,g=rX,o=rX)
root_scripts=(lib/uinst/rootconf)

View File

@ -0,0 +1,8 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$1" || exit 1
source "$ULIBDIR/ulib" && urequire DEFAULTS apache || exit 1
compute_apache_prefixes
[ -n "$APACHECTL" ] && etitle "Redémarrage de apache" \
"$APACHECTL" graceful

View File

@ -0,0 +1,2 @@
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8

View File

@ -0,0 +1,14 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!-- -*- coding: utf-8 mode: html -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>host.univ.run</title>
</head>
<body>
<h2>host.univ.run</h2>
<ul>
</ul>
</body>
</html>

View File

@ -0,0 +1,15 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Adresse canonique privée de l'hôte
#PRIHOST=host1.univ.run
# Adresse canonique publique de l'hôte. Si cette valeur n'est pas spécifiée,
# prendre la valeur PRIHOST
#PUBHOST=host.univ.run
#PUBHOST=service.univ-reunion.fr
# Liste des suffixes à considérer pour les fichiers en entrée
#SUFFIXES=("-clr" "-ssl")
# Faut-il générer les ACLs pour les réécritures de type proxy (avec l'option P)
#PROXY=1

View File

@ -0,0 +1,77 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source /etc/ulib &&
urequire DEFAULTS ||
exit 1
OENC="$UTF8"
PRIHOST=
PUBHOST=
PROXY=1
SUFFIXES=("-clr" "-ssl")
source "$scriptdir/update.conf"
function display_help() {
local OENC="$UTF8"
uecho "$scriptname: Mettre à jour RewriteRules.conf et le déployer
USAGE
$scriptname [options] [prihost [pubhost]]
OPTIONS
-f INPUT[=rewrite.rules]
-o OUTPUT[=RewriteRules.conf]
-w HTML[=rules.html]
Spécifier le fichier à traiter en entrée et les fichiers à générer en
sortie. Si l'option -f n'est pas spécifiée, consulter la description de
l'option -s pour le comportement par défaut.
-s SUFFIX
Ajouter un suffixe à la liste des suffixes considérés pour les fichiers
en entrée. Cette option est ignorée si l'option -f est spécifiée. Par
défaut, le fichier rewrite.rules puis les fichiers de la forme
rewrite\$SUFFIX.rules sont traités s'ils existent.
La liste des suffixes par défaut est (${SUFFIXES[*]})
-d, --deploy
Déployer la configuration avec uinst après la génération
-n, --no-proxy
Ne pas générer les ACLs pour les réécritures de type proxy"
}
input=
rules=
html=--NOT-SET--
suffixes=()
deploy=
proxy="$PROXY"
parse_opts \
--help '$exit_with display_help' \
-f:,--input: input= \
-o:,--output: rules= \
-w:,--html:,--html: html= \
-s:,--suffix: suffixes \
-d,--deploy deploy=1 \
-n,--no-proxy proxy= \
"${PRETTYOPTS[@]}" @ args -- "$@" && set -- "${args[@]}" || die "$args"
prihost="${1:-$PRIHOST}"
pubhost="${2:-${PUBHOST:-$prihost}}"
[ -n "$prihost" ] || die "Il faut spécifier l'hôte pour lequel faire la génération. Modifiez le cas échéant le fichier update.conf"
if [ -n "$input" ]; then
[ -n "$rules" ] || rules=RewriteRules.conf
[ -n "$html" ] || html=rules.html
[ "$html" == "--NOT-SET--" ] && html=
mkRewriteRules ${proxy:+-p} -f "$input" -o "$rules" ${html:+-w "$html"} "$pubhost"
else
for suffix in "" "${SUFFIXES[@]}"; do
input="$scriptdir/rewrite$suffix.rules"
rules="$scriptdir/RewriteRules$suffix.conf"
html="$scriptdir/rules$suffix.html"
[ -f "$input" ] || continue
mkRewriteRules ${proxy:+-p} -f "$input" -o "$rules" -w "$html" "$pubhost"
done
fi
[ -n "$deploy" ] && ruinst -h "root@$prihost" "$scriptdir" -- -y

View File

@ -0,0 +1,46 @@
# -*- coding: utf-8 mode: text -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
Ce répertoire 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 configuration n'est pour le moment supporté que sur debian

View File

@ -0,0 +1,14 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Ce fichier permet de configurer quels certificats du répertoire $certsdir il
# faut installer sur le serveur.
certsdir=renater
# Fichier contenant les certificats racines qui valident le certificat à
# installer, ainsi que les certificats qui sont rencontrés dans le dialogue avec
# d'autres serveurs web
ca=terena.crt
# Certificat et clé privée à installer
cert=host-20130523.pem
key=host-20130523.key

View File

@ -0,0 +1,23 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Utiliser 'udir --help-vars' pour une description de la signification des
# variables suivantes:
udir_desc="Fichiers à déployer sur host.univ.run dans /usr/lib/cgi-bin"
udir_note=""
udir_types=("uinst:rsync")
uinc=release
uinc_options=()
uinc_args=()
configure_variables=(dest)
configure_dest_for=()
config_scripts=()
install_profiles=false
profiledir=lib/profile.d
bashrcdir=lib/bashrc.d
defaultdir=lib/default
copy_files=true
destdir=CGIBINDIR
srcdir=.
files=()
owner=root:
modes=(u=rwX,g=rX,o=rX)
root_scripts=()

View File

@ -0,0 +1,6 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
echo "Content-Type: text/plain"
echo ""
echo "OK"

View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Liste des modules à activer. Syntaxe:
# module ou +module pour activer un module
# -module pour le désactiver

View File

@ -0,0 +1,24 @@
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz
NameVirtualHost *:80
Listen *:80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
NameVirtualHost 10.82.80.100:443
Listen 10.82.80.100:443
</IfModule>
<IfModule mod_gnutls.c>
NameVirtualHost 10.82.80.100:443
Listen 10.82.80.100:443
</IfModule>

View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Liste des sites à activer. Syntaxe:
# site ou +site pour activer un site
# -site pour le désactiver

View File

@ -0,0 +1,51 @@
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
<VirtualHost *:80>
ServerName host.univ.run
ServerAlias host host1.univ.run host1
ServerAdmin sysrezo@support.univ-reunion.fr
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
# Pour les serveurs qui ont le module mod_WebObjects:
# mod_WebObjects et ScriptAlias ne peuvent pas gérer le même préfixe. Pour
# utiliser des cgi-bin avec WebObjects, il faut soit changer le préfixe de
# ScriptAlias, soit changer le préfixe de WebObjectsAlias dans le fichier
# mod-webobjects.conf
# Sinon, il suffit de commenter les lignes suivantes:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
# Pour les serveurs qui ont le module mod_WebObjects:
<LocationMatch "/cgi-bin/WebObjects/.*">
Order allow,deny
Allow from all
</LocationMatch>
<Location /WebObjects>
Order allow,deny
Allow from all
</Location>
</VirtualHost>

View File

@ -0,0 +1,183 @@
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerName host.univ.run
ServerAlias host host1.univ.run host1
ServerAdmin sysrezo@support.univ-reunion.fr
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
# Pour les serveurs qui ont le module mod_WebObjects:
# mod_WebObjects et ScriptAlias ne peuvent pas gérer le même préfixe. Pour
# utiliser des cgi-bin avec WebObjects, il faut soit changer le préfixe de
# ScriptAlias, soit changer le préfixe de WebObjectsAlias dans le fichier
# mod-webobjects.conf
# Sinon, il suffit de commenter les lignes suivantes:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/ssl_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
<LocationMatch "/cgi-bin/WebObjects/.*">
Order allow,deny
Allow from all
</LocationMatch>
<Location /WebObjects>
Order allow,deny
Allow from all
</Location>
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
# A self-signed (snakeoil) certificate can be created by installing
# the ssl-cert package. See
# /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
# If both key and certificate are stored in the same file, only the
# SSLCertificateFile directive is needed.
SSLCertificateFile @@cert@@
SSLCertificateKeyFile @@key@@
# Server Certificate Chain:
# Point SSLCertificateChainFile at a file containing the
# concatenation of PEM encoded CA certificates which form the
# certificate chain for the server certificate. Alternatively
# the referenced file can be the same as SSLCertificateFile
# when the CA certificates are directly appended to the server
# certificate for convinience.
SSLCertificateChainFile @@ca@@
# Certificate Authority (CA):
# Set the CA certificate verification path where to find CA
# certificates for client authentication or alternatively one
# huge file containing all of them (file must be PEM encoded)
# Note: Inside SSLCACertificatePath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
#SSLCACertificatePath /etc/ssl/certs/
#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt
# Certificate Revocation Lists (CRL):
# Set the CA revocation path where to find CA CRLs for client
# authentication or alternatively one huge file containing all
# of them (file must be PEM encoded)
# Note: Inside SSLCARevocationPath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
#SSLCARevocationPath /etc/apache2/ssl.crl/
#SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl
# Client Authentication (Type):
# Client certificate verification type and depth. Types are
# none, optional, require and optional_no_ca. Depth is a
# number which specifies how deeply to verify the certificate
# issuer chain before deciding the certificate is not valid.
#SSLVerifyClient require
#SSLVerifyDepth 10
# Access Control:
# With SSLRequire you can do per-directory access control based
# on arbitrary complex boolean expressions containing server
# variable checks and other lookup directives. The syntax is a
# mixture between C and Perl. See the mod_ssl documentation
# for more details.
#<Location />
#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \
# or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
#</Location>
# SSL Engine Options:
# Set various options for the SSL engine.
# o FakeBasicAuth:
# Translate the client X.509 into a Basic Authorisation. This means that
# the standard Auth/DBMAuth methods can be used for access control. The
# user name is the `one line' version of the client's X.509 certificate.
# Note that no password is obtained from the user. Every entry in the user
# file needs this password: `xxj31ZMTZzkVA'.
# o ExportCertData:
# This exports two additional environment variables: SSL_CLIENT_CERT and
# SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
# server (always existing) and the client (only existing when client
# authentication is used). This can be used to import the certificates
# into CGI scripts.
# o StdEnvVars:
# This exports the standard SSL/TLS related `SSL_*' environment variables.
# Per default this exportation is switched off for performance reasons,
# because the extraction step is an expensive operation and is usually
# useless for serving static content. So one usually enables the
# exportation for CGI and SSI requests only.
# o StrictRequire:
# This denies access when "SSLRequireSSL" or "SSLRequire" applied even
# under a "Satisfy any" situation, i.e. when it applies access is denied
# and no other module can change it.
# o OptRenegotiate:
# This enables optimized SSL connection renegotiation handling when SSL
# directives are used in per-directory context.
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
# SSL Protocol Adjustments:
# The safe and default but still SSL/TLS standard compliant shutdown
# approach is that mod_ssl sends the close notify alert but doesn't wait for
# the close notify alert from client. When you need a different shutdown
# approach you can use one of the following variables:
# o ssl-unclean-shutdown:
# This forces an unclean shutdown when the connection is closed, i.e. no
# SSL close notify alert is send or allowed to received. This violates
# the SSL/TLS standard but is needed for some brain-dead browsers. Use
# this when you receive I/O errors because of the standard approach where
# mod_ssl sends the close notify alert.
# o ssl-accurate-shutdown:
# This forces an accurate shutdown when the connection is closed, i.e. a
# SSL close notify alert is send and mod_ssl waits for the close notify
# alert of the client. This is 100% SSL/TLS standard compliant, but in
# practice often causes hanging connections with brain-dead browsers. Use
# this only for browsers where you know that their SSL implementation
# works correctly.
# Notice: Most problems of broken clients are also related to the HTTP
# keep-alive facility, so you usually additionally want to disable
# keep-alive for those clients, too. Use variable "nokeepalive" for this.
# Similarly, one has to force some clients to use HTTP/1.0 to workaround
# their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
# "force-response-1.0" for this.
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>

View File

@ -0,0 +1,17 @@
worker.list=prod,dev
worker.prod.port=8009
worker.prod.host=host.univ.run
worker.prod.type=ajp13
worker.prod.lbfactor=1
worker.prod.connection_pool_timeout=600
worker.prod.socket_keepalive=1
worker.prod.socket_timeout=60
worker.dev.port=8009
worker.dev.host=hostdev.univ.run
worker.dev.type=ajp13
worker.dev.lbfactor=1
worker.dev.connection_pool_timeout=600
worker.dev.socket_keepalive=1
worker.dev.socket_timeout=60

View File

@ -0,0 +1,23 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Utiliser 'udir --help-vars' pour une description de la signification des
# variables suivantes:
udir_desc="Fichiers à déployer sur host.univ.run dans /var/www"
udir_note="Il est possible de déployer les modifications dans ce répertoire avec 'uinst -y'"
udir_types=("uinst:rsync")
uinc=release
uinc_options=()
uinc_args=()
configure_variables=(dest)
configure_dest_for=()
config_scripts=()
install_profiles=false
profiledir=lib/profile.d
bashrcdir=lib/bashrc.d
defaultdir=lib/default
copy_files=true
destdir=root@host.univ.run:/var/www
srcdir=.
files=()
owner=www-data:
modes=(u=rwX,g=rX,o=rX)
root_scripts=()

View File

@ -120,7 +120,7 @@ function template_merge() {
srcspec="${srcspec#$destdir}" srcspec="${srcspec#$destdir}"
[ -e "$srcdir$srcspec" ] || continue [ -e "$srcdir$srcspec" ] || continue
ebegin "$srcspec" ebegin "$(ppath "$destdir$srcspec")"
s=0 s=0
array_from_lines srcfiles "$(find "$srcdir$srcspec" -type f)" array_from_lines srcfiles "$(find "$srcdir$srcspec" -type f)"
for src in "${srcfiles[@]}"; do for src in "${srcfiles[@]}"; do
@ -172,7 +172,7 @@ function template_unmerge() {
[ -e "$srcdir$srcspec" ] || continue [ -e "$srcdir$srcspec" ] || continue
s=0 s=0
ebegin "$srcspec" ebegin "$(ppath "$destdir$srcspec")"
array_from_lines files "$(find "$srcdir$srcspec" -type f)" array_from_lines files "$(find "$srcdir$srcspec" -type f)"
for src in "${files[@]}"; do for src in "${files[@]}"; do
dest="$destdir/${src#$srcdir/}" dest="$destdir/${src#$srcdir/}"
@ -200,8 +200,9 @@ function template_cleandest() {
# Cette fonction est habituellement utilisée après template_unmerge() # Cette fonction est habituellement utilisée après template_unmerge()
local -a dirs local -a dirs
[ -d "$1" ] || return 1 [ -d "$1" ] || return 1
array_from_lines dirs "$(cd "$1"; find "$1" -type d | __template_plsort -r)" array_from_lines dirs "$(cd "$1"; find . -type d | __template_plsort -r)"
rmdir "${dirs[@]}" 2>/dev/null array_del dirs .
(cd "$1"; rmdir "${dirs[@]}" 2>/dev/null)
} }
function template_diff() { function template_diff() {
@ -226,30 +227,26 @@ function template_diff() {
done | page_maybe -S done | page_maybe -S
} }
function override_display_templatectl_help() { :; } function __templatectl_display_help() { :; }
function templatectl() { __TEMPLATECTL_OTHER_OPTS=()
# fonction de haut niveau qui facilite l'utilisation des fonctions template_* function __templatectl_parseopts() {
# définir la fonction override_display_templatectl_help() pour l'affichage de l'aide
local -a args
local help list merge unmerge clean diff auto=1
local destdir
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help help=1 \ --help '$exit_with __templatectl_display_help' \
-s:,--srcdir: srcdir= \ -s:,--srcdir: srcdir= \
-o:,--destdir: destdir= \ -d:,--destdir: destdir= \
-l,--list '$list=1; auto=' \ -l,--list '$list=1; templatectl_opt=1' \
-m,--merge '$merge=1; auto=' \ -m,--merge '$merge=1; templatectl_opt=1' \
-z,--unmerge '$unmerge=1; auto=' \ -z,--unmerge '$unmerge=1; templatectl_opt=1' \
-C,--clean '$clean=1; auto=' \ -C,--clean '$clean=1; templatectl_opt=1' \
-d,--diff '$diff=1; auto=' \ -g,--diff '$diff=1; templatectl_opt=1' \
@ args -- "$@" && set -- "${args[@]}" || { eerror "$args"; return 1; } "${__TEMPLATECTL_OTHER_OPTS[@]}" \
@ args -- "$@"
[ -n "$help" ] && { override_display_templatectl_help; return 0; } }
function __templatectl_do() {
__template_check_srcdir "$srcdir" || return 1 __template_check_srcdir "$srcdir" || return 1
[ -n "$destdir" ] || destdir=. [ -n "$destdir" ] || destdir=.
__template_check_destdir "$destdir" || return 1 __template_check_destdir "$destdir" || return 1
[ -n "$auto" ] && list=1 [ -n "$templatectl_auto" ] && list=1
[ -n "$list" ] && template_list "$srcdir" "$destdir" "$@" [ -n "$list" ] && template_list "$srcdir" "$destdir" "$@"
[ -n "$merge" ] && template_merge "$srcdir" "$destdir" "$@" [ -n "$merge" ] && template_merge "$srcdir" "$destdir" "$@"
@ -258,3 +255,14 @@ function templatectl() {
[ -n "$diff" ] && template_diff "$srcdir" "$destdir" "$@" [ -n "$diff" ] && template_diff "$srcdir" "$destdir" "$@"
return 0 return 0
} }
function templatectl() {
# fonction de haut niveau qui facilite l'utilisation des fonctions template_*
# définir la fonction override_display_templatectl_help() pour l'affichage de l'aide
local -a args
local list merge unmerge clean diff templatectl_opt templatectl_auto
local destdir
__templatectl_parseopts "$@" && set -- "${args[@]}" || { eerror "$args"; return 1; }
[ -z "$templatectl_opt" ] && templatectl_auto=1
__templatectl_do "$@"
}