. /usr/share/carnet-tools/functions.sh
PKG="apache2-cn"
-VERSION="2.2.22+1"
+VERSION="2.4.10+1"
CONFDIR="/etc/apache2"
CONF="$CONFDIR/apache2.conf"
-A2MODEDIR="$CONFDIR/mods-enabled"
PORTCONF="$CONFDIR/ports.conf"
A2CNDIR=/usr/share/apache2-cn
TMPLDIR=$A2CNDIR/templates
CERTDIR=/etc/ssl/certs
-A2PHPINI="/etc/php5/apache2/php.ini"
HOST=$(hostname)
FQDN=$(hostname --fqdn)
DOMAIN=$(hostname -d)
BACKUPDIR="/var/backups/apache2-cn"
-backup_done=0
need_restart=0
apache2_sslcf=
apache2_sslckf=
#
install_conf() {
conftmpl="$A2CNDIR/$1.conf"
- conf="$CONFDIR/conf.d/$2.conf"
+ conf="$CONFDIR/conf-available/$2.conf"
if [ ! -e "$conf" ]; then
-
- cp_echo "CN: Enabling CARNet specific configuration."
+ cp_echo "CN: Generating CARNet specific configuration."
cp "$conftmpl" "$conf"
-
- need_restart=1
else
cp_echo "CN: $conf already exists, left untouched." 1>&2
fi
+
+ cp_echo "CN: Enabling CARNet specific configuration."
+ a2enconf -m -q "$2"
+ need_restart=1
}
# install_vhost()
# -n - set ServerName
# -s X - symlink DocumentRoot to X (all in /var/www)
#
-# site - name of file in sites-available, host part of ServerName unless -r or -n is used
-# site-enabled-symlink - name of symlink in sites-enabled
+# site - host part of ServerName unless -r or -n is used
+# site-enabled-symlink - name of file/symlink in sites-available/sites-enabled
+# (without .conf suffix)
#
install_vhost() {
add_namevirthost=
vhosttmpl="$1.template"
vhost="$2"
- venabled="$3"
+ vsite="$3"
+ venabled="$3.conf"
[ -z "$vhostname" ] && vhostname=$(echo "$vhost"| awk -F. '{print $1}')
force_vhost=
# - adding is forced OR
# - it doesn't exist
#
- if [ -n "$force_vhost" -o \( ! -e "$vhostdir/$vhost" -a ! -e "$venabledir/$venabled" \) ]; then
+ if [ -n "$force_vhost" -o \( ! -e "$vhostdir/$venabled" -a ! -e "$venabledir/$venabled" \) ]; then
cp_echo "CN: Adding $vhost VirtualHost."
- out=$(mktemp $vhostdir/$vhost.XXXXXX)
+ out=$(mktemp $vhostdir/$venabled.XXXXXX)
temp_files="${temp_files} ${out}"
# CARNet header.
sed "s/HOST/$vhostname/g; s/DOMAIN/$DOMAIN/g;
s#DOCROOT#$docroot#g; s/IPADDR/$MYIP/g" < $TMPLDIR/$vhosttmpl >> $out
- cp_mv $out $vhostdir/$vhost
- chmod 644 $vhostdir/$vhost
- ln -fs ../sites-available/$vhost $venabledir/$venabled
+ cp_mv $out $vhostdir/$venabled
+ chmod 644 $vhostdir/$venabled
+ a2ensite -m -q "$vsite"
if [ -n "$mkdir_docroot" -a ! -d "$docroot" ]; then
mkdir "$docroot"
fi
}
+# backup_conf()
+#
+# Backup configuration files located in specified directory.
+#
+backup_conf () {
+ local dir file backup_dir
+
+ dir="$1"
+
+ if [ -d "${dir}" ] && [ -n "$(ls -A ${dir}/)" ]; then
+ cp_echo "CN: Doing backup for all files in $dir"
+ for file in ${dir}/*; do
+ if [ -f "$file" ]; then
+ if [ -z "$(echo $file | egrep '^/.*~')" ]; then
+ backup_dir="$BACKUPDIR/$(basename $(dirname "$file"))"
+ cp_backup_conffile -d "$backup_dir" -p "$file"
+ fi
+ fi
+ done
+ fi
+}
+
+# move_conf()
+#
+# Move configuration files from one directory to another. The .conf suffix
+# will be added. Will try to enable the configuration if -e is specified.
+#
+move_conf () {
+ local toenable ctype dir newdir file newfile
+
+ if [ "$1" = "-e" ]; then
+ toenable="$1"
+ shift
+ fi
+
+ ctype="$1"
+ dir="$2"
+ newdir="$3"
+
+ case "$ctype" in
+ site|conf)
+ # continue below
+ ;;
+ *)
+ return 1
+ ;;
+ esac
+
+ if [ -z "$newdir" ]; then
+ newdir="$dir"
+ fi
+
+ if [ -d "${dir}" ] && [ -n "$(ls -A ${dir}/)" ]; then
+ mkdir -p "$newdir"
+ for file in ${dir}/*; do
+ newfile="${newdir}/$(basename "$file" .conf).conf"
+ if [ ! -e "$newfile" ]; then
+ cp_echo "CN: Preserving changes to $newfile (renamed from $file)."
+ cp_mv "$file" "$newfile"
+ if [ -n "$toenable" ]; then
+ cp_echo "CN: Enabling configuration $newfile"
+ a2en$ctype -m -q "$(basename "$newfile" .conf)" || true
+ fi
+ need_restart=1
+ fi
+ done
+ fi
+}
+
+# rename_conf()
+#
+# Append the .conf suffix to all configuration files located in specified
+# available and enabled directories. Updated symlinks if necessary.
+#
+#
+rename_conf () {
+ local ctype adir edir afile efile newfile
+
+ ctype="$1"
+ adir="$2"
+ edir="$3"
+
+ case "$ctype" in
+ site|conf)
+ # continue below
+ ;;
+ *)
+ return 1
+ ;;
+ esac
+
+ if [ -d "${edir}" ] && [ -n "$(ls -A ${edir}/)" ]; then
+ mkdir -p "$adir"
+ for efile in ${edir}/*; do
+ [ ! -e "${edir}/$(basename "$efile" .conf).conf" ] || continue
+
+ afile="$(readlink -q -m "$efile")"
+
+ [ "$(dirname "$afile")" = "$adir" ] || continue
+ [ "$(basename "$afile" .conf)" = "$(basename "$efile" .conf)" ] || continue
+
+ newfile="${adir}/$(basename "$afile" .conf).conf"
+ [ ! -e "$newfile" ] || continue
+
+ cp_echo "CN: Preserving changes to $newfile (renamed from $afile)."
+ cp_mv "$afile" "$newfile"
+
+ cp_echo "CN: Removing obsolete symlink $efile"
+ rm -f "$efile"
+
+ cp_echo "CN: Enabling configuration $newfile"
+ a2en$ctype -m -q "$(basename "$newfile" .conf)" || true
+ need_restart=1
+ done
+ fi
+}
+
# Set trap for deleting all temp files.
#
trap cleanup 0 1 2 15
-# Backup all configuration located in /etc/apache2/conf.d/ and
-# /etc/apache2/sites-available/ directories.
+# Backup all configuration located in /etc/apache2/conf.d/,
+# /etc/apache2/conf-available/ and /etc/apache2/sites-available/
+# directories.
#
if [ -e "$CONF" ]; then
cp_echo "CN: Doing backup for $CONF"
cp_backup_conffile -d $BACKUPDIR -p $CONF
- backup_done=1
fi
-if [ -d "$CONFDIR/conf.d" ] && [ -n "$(ls ${CONFDIR}/conf.d/)" ]; then
- cp_echo "CN: Doing backup for all files in /etc/apache2/conf.d/"
- for file in /etc/apache2/conf.d/*; do
- if [ -z "$(echo $file | egrep '^/.*~')" ]; then
- cp_backup_conffile -d $BACKUPDIR -p $file
- fi
- done
- backup_done=1
-fi
-if [ -d "$CONFDIR/sites-available" ] && [ -n "$(ls ${CONFDIR}/sites-available/)" ]; then
- cp_echo "CN: Doing backup for all files in /etc/apache2/sites-available/"
- for file in /etc/apache2/sites-available/*; do
- if [ -z "$(echo $file | egrep '^/.*~')" ]; then
- cp_backup_conffile -d $BACKUPDIR -p $file
- fi
- done
- backup_done=1
+
+backup_conf $CONFDIR/conf.d
+backup_conf $CONFDIR/conf-available
+backup_conf $CONFDIR/sites-available
+
+cp_echo "CN: Backup is located in directory: $BACKUPDIR/"
+
+
+# Enable Apache2 web server modules (mpm_prefork, cgi, rewrite, userdir, suexec, php5, ssl).
+#
+if [ -e "$CONF" ]; then
+ cp_echo "CN: Enabling the prefork Apache2 MPM."
+ if [ "$(a2query -M || true)" != "prefork" ]; then
+ a2dismod -m -q "mpm_$(a2query -M || true)"
+ a2enmod -m -q mpm_prefork
+ fi
+
+ cp_echo "CN: Enabling required Apache2 web server modules."
+ a2enmod -m -q cgi
+ a2enmod -m -q rewrite
+ a2enmod -m -q userdir
+ a2enmod -m -q suexec
+ a2enmod -m -q php5
+ a2enmod -m -q ssl
fi
-if [ $backup_done -eq 1 ]; then
- cp_echo "CN: Backup is located in directory: $BACKUPDIR/"
+
+
+# Make sure configuration files have the .conf suffix. Move them
+# to appropriate locations.
+#
+if [ -d "$CONFDIR/conf.d" ]; then
+ cp_echo "CN: Obsolete configuration directory $CONFDIR/conf.d/ found."
+ move_conf -e conf $CONFDIR/conf.d $CONFDIR/conf-available
fi
+rename_conf site $CONFDIR/sites-available $CONFDIR/sites-enabled
+
-# Enable Apache2 web server modules (cgi, rewrite, userdir, suexec, php5, ssl).
+# Check and add IncludeOptional lines to /etc/apache2/apache2.conf:
+#
+# IncludeOptional conf-enabled/*.conf
+# IncludeOptional sites-enabled/*.conf
#
if [ -e "$CONF" ]; then
- if [ ! -e "$A2MODEDIR/cgi.load" ]; then
- cp_echo "CN: Enabling CGI module for Apache2 web server."
- a2enmod cgi >/dev/null || true
- need_restart=1
- fi
+ cp_echo "CN: Checking IncludeOptional lines in $CONF"
- if [ ! -e "$A2MODEDIR/rewrite.load" ]; then
- cp_echo "CN: Enabling rewrite module for Apache2 web server."
- a2enmod rewrite >/dev/null || true
- need_restart=1
- fi
+ CONFTMP=`mktemp $CONF.tmp.XXXXXX`
+ temp_files="${temp_files} ${CONFTMP}"
+ cp "$CONF" "$CONFTMP"
- if [ ! -e "$A2MODEDIR/userdir.load" ] || [ ! -e "$A2MODEDIR/userdir.conf" ]; then
- cp_echo "CN: Enabling userdir module for Apache2 web server."
- a2enmod userdir >/dev/null || true
- need_restart=1
- fi
+ sed -r -i 's#^[[:space:]]*Include(Optional)?[[:space:]]+(/etc/apache2/)?conf\.d(/)?$#IncludeOptional conf-enabled/\*\.conf#I' \
+ "$CONFTMP"
+ sed -r -i 's#^[[:space:]]*Include(Optional)?[[:space:]]+(/etc/apache2/)?sites-enabled(/)?$#IncludeOptional sites-enabled/\*\.conf#I' \
+ "$CONFTMP"
- if [ ! -e "$A2MODEDIR/suexec.load" ]; then
- cp_echo "CN: Enabling SUEXEC module for Apache2 web server."
- a2enmod suexec >/dev/null || true
- need_restart=1
+ if ! egrep -iq "^[[:space:]]*IncludeOptional[[:space:]]+conf-enabled/\*\.conf$" "$CONFTMP"; then
+ echo 'IncludeOptional conf-enabled/*.conf' >> "$CONFTMP"
fi
-
- if [ ! -e "$A2MODEDIR/php5.load" ] || [ ! -e "$A2MODEDIR/php5.conf" ]; then
- if [ -e "/usr/lib/apache2/modules/libphp5.so" ]; then
- cp_echo "CN: Enabling PHP5 module for Apache2 web server."
- a2enmod php5 >/dev/null || true
- need_restart=1
- fi
+ if ! egrep -iq "^[[:space:]]*IncludeOptional[[:space:]]+sites-enabled/\*\.conf$" "$CONFTMP"; then
+ echo 'IncludeOptional sites-enabled/*.conf' >> "$CONFTMP"
fi
- if [ ! -e "$A2MODEDIR/ssl.load" ] || [ ! -e "$A2MODEDIR/ssl.conf" ]; then
- cp_echo "CN: Enabling SSL module for Apache2 web server."
- a2enmod ssl >/dev/null || true
+ if ! cmp -s "$CONFTMP" "$CONF"; then
+ cp_mv "$CONFTMP" "$CONF"
need_restart=1
fi
+ rm -f "$CONFTMP"
fi
# Disable default site configuration.
#
if [ -e "$CONF" ]; then
- if [ -e "$CONFDIR/sites-enabled/000-default" ]; then
- cp_echo "CN: Disabling 000-default site configuration."
- a2dissite 000-default >/dev/null || true
-
- need_restart=1
- fi
+ cp_echo "CN: Disabling default site configuration."
+ a2dissite -m -f -q 000-default || true
+ need_restart=1
fi
# Apache2 SSL certificate.
#
-if [ -d "$CONFDIR/conf.d" ] && [ -n "$(ls $CONFDIR/conf.d)" ]; then
- listen_ssl_mask=$CONFDIR/conf.d/*
+if [ -d "$CONFDIR/conf-enabled" ] && [ -n "$(ls -A $CONFDIR/conf-enabled/)" ]; then
+ listen_ssl_mask=$CONFDIR/conf-enabled/*.conf
fi
-if [ -d "$CONFDIR/sites-enabled" ] && [ -n "$(ls $CONFDIR/sites-enabled)" ]; then
- listen_ssl_mask=$listen_ssl_mask" "$CONFDIR/sites-enabled/*
+if [ -d "$CONFDIR/sites-enabled" ] && [ -n "$(ls -A $CONFDIR/sites-enabled/)" ]; then
+ listen_ssl_mask=$listen_ssl_mask" "$CONFDIR/sites-enabled/*.conf
fi
for file in $CONF $listen_ssl_mask; do
if [ "$RET" = "true" ]; then
# Add WWW VirtualHost.
- if [ -f "$CONFDIR/sites-available/$FQDN" ]; then
- cp_backup_conffile -d $BACKUPDIR -p $CONFDIR/sites-available/$FQDN
+ if [ -f "$CONFDIR/sites-available/000-$FQDN.conf" ]; then
+ cp_backup_conffile -d $BACKUPDIR/sites-available -p $CONFDIR/sites-available/000-$FQDN.conf
fi
- if [ -f "$CONFDIR/sites-available/www.$DOMAIN" ]; then
- cp_backup_conffile -d $BACKUPDIR -p $CONFDIR/sites-available/www.$DOMAIN
+ if [ -f "$CONFDIR/sites-available/www.$DOMAIN.conf" ]; then
+ cp_backup_conffile -d $BACKUPDIR/sites-available -p $CONFDIR/sites-available/www.$DOMAIN.conf
fi
- chk_conf_tag "$CONFDIR/sites-available/$FQDN"
- if [ ! -f "$CONFDIR/sites-available/$FQDN" ] || [ $RET -eq 0 ]; then
+ chk_conf_tag "$CONFDIR/sites-available/000-$FQDN.conf"
+ if [ ! -f "$CONFDIR/sites-available/000-$FQDN.conf" ] || [ $RET -eq 0 ]; then
if egrep -qi "^[[:space:]]*NameVirtualHost[[:space:]]+\*:80$" "$PORTCONF"; then
install_vhost -d -r www.$DOMAIN default $FQDN 000-$FQDN
else
need_restart=1
fi
- chk_conf_tag "$CONFDIR/sites-available/www.$DOMAIN"
- if [ ! -f "$CONFDIR/sites-available/www.$DOMAIN" ] || [ $RET -eq 0 ]; then
+ chk_conf_tag "$CONFDIR/sites-available/www.$DOMAIN.conf"
+ if [ ! -f "$CONFDIR/sites-available/www.$DOMAIN.conf" ] || [ $RET -eq 0 ]; then
install_vhost default www.$DOMAIN www.$DOMAIN
need_restart=1
fi
else
# No WWW VirtualHost.
- if [ -f "$CONFDIR/sites-available/$FQDN" ]; then
- cp_backup_conffile -d $BACKUPDIR -p $CONFDIR/sites-available/$FQDN
+ if [ -f "$CONFDIR/sites-available/000-$FQDN.conf" ]; then
+ cp_backup_conffile -d $BACKUPDIR/sites-available -p $CONFDIR/sites-available/000-$FQDN.conf
fi
- chk_conf_tag "$CONFDIR/sites-available/$FQDN"
- if [ ! -f "$CONFDIR/sites-available/$FQDN" ] || [ $RET -eq 0 ]; then
+ chk_conf_tag "$CONFDIR/sites-available/000-$FQDN.conf"
+ if [ ! -f "$CONFDIR/sites-available/000-$FQDN.conf" ] || [ $RET -eq 0 ]; then
if egrep -qi "^[[:space:]]*NameVirtualHost[[:space:]]+\*:80$" "$PORTCONF"; then
install_vhost -d -r $FQDN default $FQDN 000-$FQDN
else
#
if [ $has_listen_ssl -eq 0 ]; then
- if [ -f "$CONFDIR/sites-available/ssl" ]; then
- cp_backup_conffile -d $BACKUPDIR -p $CONFDIR/sites-available/ssl
+ if [ -f "$CONFDIR/sites-available/001-ssl.conf" ]; then
+ cp_backup_conffile -d $BACKUPDIR/sites-available -p $CONFDIR/sites-available/001-ssl.conf
fi
# No active SSL VirtualHosts found - add new one.
- chk_conf_tag "$CONFDIR/sites-available/ssl"
- if [ ! -f "$CONFDIR/sites-available/ssl" ] || [ $RET -eq 0 ]; then
+ chk_conf_tag "$CONFDIR/sites-available/001-ssl.conf"
+ if [ ! -f "$CONFDIR/sites-available/001-ssl.conf" ] || [ $RET -eq 0 ]; then
db_get apache2-cn/wwwhost || true
if [ "$RET" = "true" ]; then
#
if [ $has_listen_ssl -eq 0 ]; then
- chk_conf_tag "${CONFDIR}/sites-available/ssl"
+ chk_conf_tag "${CONFDIR}/sites-available/001-ssl.conf"
if [ $RET -eq 0 ] && [ -n "$apache2_sslcf" ]; then
SSLTMP=$(mktemp ${CONFDIR}/ssltmp.XXXXXX)
temp_files="${temp_files} ${SSLTMP} ${SSLTMP}.cn-old"
- cp ${CONFDIR}/sites-available/ssl $SSLTMP
+ cp ${CONFDIR}/sites-available/001-ssl.conf $SSLTMP
# SSLCertificateFile
cp_check_and_sed "^[[:space:]]*SSLCertificateFile \/etc\/ssl\/certs\/apache2\.pem" \
$SSLTMP || true
fi
- cp_mv $SSLTMP ${CONFDIR}/sites-available/ssl
+ cp_mv $SSLTMP ${CONFDIR}/sites-available/001-ssl.conf
need_restart=1
cp_echo "CN: Fixing obsolete Include line in $CONF."
CONFTMP=`mktemp $CONF.tmp.XXXXXX`
+ temp_files="${temp_files} ${CONFTMP}"
+
sed -r "/^[[:space:]]*Include[[:space:]]+\/etc\/apache2\/sites-enabled\/\[\^\.\#\]\*$/Id" \
"$CONF" > "$CONFTMP"
#
if [ -e "$CONFDIR/conf.d/aosi-www.conf" ] || [ -e "$CONFDIR/conf.d/aosi.conf" ]; then
cp_echo "CN: Removing old AOSI configuration files for Apache2."
+ rm -f $CONFDIR/conf.d/aosi-www.conf
+ rm -f $CONFDIR/conf.d/aosi.conf
need_restart=1
fi
-[ -e "$CONFDIR/conf.d/aosi-www.conf" ] && rm -f $CONFDIR/conf.d/aosi-www.conf
-[ -e "$CONFDIR/conf.d/aosi.conf" ] && rm -f $CONFDIR/conf.d/aosi.conf
# Restart Apache2 web server if needed.
if apache2ctl configtest 2>/dev/null; then
# Restart Apache2 web server.
- invoke-rc.d apache2 restart || true
+ service apache2 reload || true
else
# Something is broken.
- cp_echo "CN: Your Apache2 configuration seem to be broken."
+ cp_echo "CN: Your Apache2 configuration seems to be broken."
cp_echo "CN: Please, check the service after the installation finishes!"
fi
fi