blob: e36d0c998f1ce47cdeb827aa9b45580592117954 [file] [log] [blame]
Sean Daguee263c822014-12-05 14:25:28 -05001#!/bin/bash
2#
zhang-hared98a5d02013-06-21 18:18:02 +08003# lib/apache
4# Functions to control configuration and operation of apache web server
5
6# Dependencies:
Adam Spiers6a5aa7c2013-10-24 11:27:02 +01007#
8# - ``functions`` file
Dean Troyerd8864fe2014-02-17 11:00:42 -06009# - ``STACK_USER`` must be defined
10#
Stephan Renatuse578eff2013-11-19 13:31:04 +010011# lib/apache exports the following functions:
12#
Adam Spiers6a5aa7c2013-10-24 11:27:02 +010013# - install_apache_wsgi
Gabriel Assis Bezerraa688bc62014-05-27 20:58:22 +000014# - apache_site_config_for
Adam Spiers6a5aa7c2013-10-24 11:27:02 +010015# - enable_apache_site
16# - disable_apache_site
17# - start_apache_server
18# - stop_apache_server
19# - restart_apache_server
zhang-hared98a5d02013-06-21 18:18:02 +080020
21# Save trace setting
Ian Wienand523f4882015-10-13 11:03:03 +110022_XTRACE_LIB_APACHE=$(set +o | grep xtrace)
zhang-hared98a5d02013-06-21 18:18:02 +080023set +o xtrace
24
25# Allow overriding the default Apache user and group, default to
26# current user and his default group.
Stephan Renatuse578eff2013-11-19 13:31:04 +010027APACHE_USER=${APACHE_USER:-$STACK_USER}
zhang-hared98a5d02013-06-21 18:18:02 +080028APACHE_GROUP=${APACHE_GROUP:-$(id -gn $APACHE_USER)}
29
30
31# Set up apache name and configuration directory
Clark Boylancfb9f052016-11-29 10:43:05 -080032# Note that APACHE_CONF_DIR is really more accurately apache's vhost
33# configuration dir but we can't just change this because public interfaces.
zhang-hared98a5d02013-06-21 18:18:02 +080034if is_ubuntu; then
35 APACHE_NAME=apache2
Dean Troyer444a8d52014-06-06 16:36:52 -050036 APACHE_CONF_DIR=${APACHE_CONF_DIR:-/etc/$APACHE_NAME/sites-available}
Clark Boylancfb9f052016-11-29 10:43:05 -080037 APACHE_SETTINGS_DIR=${APACHE_SETTINGS_DIR:-/etc/$APACHE_NAME/conf-enabled}
zhang-hared98a5d02013-06-21 18:18:02 +080038elif is_fedora; then
39 APACHE_NAME=httpd
Dean Troyer444a8d52014-06-06 16:36:52 -050040 APACHE_CONF_DIR=${APACHE_CONF_DIR:-/etc/$APACHE_NAME/conf.d}
Clark Boylancfb9f052016-11-29 10:43:05 -080041 APACHE_SETTINGS_DIR=${APACHE_SETTINGS_DIR:-/etc/$APACHE_NAME/conf.d}
zhang-hared98a5d02013-06-21 18:18:02 +080042elif is_suse; then
43 APACHE_NAME=apache2
Dean Troyer444a8d52014-06-06 16:36:52 -050044 APACHE_CONF_DIR=${APACHE_CONF_DIR:-/etc/$APACHE_NAME/vhosts.d}
Clark Boylancfb9f052016-11-29 10:43:05 -080045 APACHE_SETTINGS_DIR=${APACHE_SETTINGS_DIR:-/etc/$APACHE_NAME/conf.d}
zhang-hared98a5d02013-06-21 18:18:02 +080046fi
Clark Boylan66ce5c22016-10-05 12:11:05 -070047APACHE_LOG_DIR="/var/log/${APACHE_NAME}"
zhang-hared98a5d02013-06-21 18:18:02 +080048
49# Functions
50# ---------
Gregory Haynes4b49e402016-08-31 18:19:51 -070051
52# Enable apache mod and restart apache if it isn't already enabled.
53function enable_apache_mod {
54 local mod=$1
55 # Apache installation, because we mark it NOPRIME
56 if is_ubuntu || is_suse ; then
57 if ! a2query -m $mod ; then
58 sudo a2enmod $mod
59 restart_apache_server
60 fi
61 elif is_fedora; then
62 # pass
63 true
64 else
65 exit_distro_not_supported "apache enable mod"
66 fi
67}
68
zhang-hared98a5d02013-06-21 18:18:02 +080069# install_apache_wsgi() - Install Apache server and wsgi module
Ian Wienandaee18c72014-02-21 15:35:08 +110070function install_apache_wsgi {
zhang-hared98a5d02013-06-21 18:18:02 +080071 # Apache installation, because we mark it NOPRIME
72 if is_ubuntu; then
73 # Install apache2, which is NOPRIME'd
Davanum Srinivasafa8a002016-12-19 09:51:01 -050074 install_package apache2
75 if python3_enabled; then
76 if is_package_installed libapache2-mod-wsgi; then
77 uninstall_package libapache2-mod-wsgi
78 fi
79 install_package libapache2-mod-wsgi-py3
80 else
81 install_package libapache2-mod-wsgi
82 fi
zhang-hared98a5d02013-06-21 18:18:02 +080083 elif is_fedora; then
84 sudo rm -f /etc/httpd/conf.d/000-*
85 install_package httpd mod_wsgi
86 elif is_suse; then
87 install_package apache2 apache2-mod_wsgi
88 else
Gregory Haynes4b49e402016-08-31 18:19:51 -070089 exit_distro_not_supported "apache wsgi installation"
zhang-hared98a5d02013-06-21 18:18:02 +080090 fi
Gregory Haynes4b49e402016-08-31 18:19:51 -070091 # WSGI isn't enabled by default, enable it
92 enable_apache_mod wsgi
Morgan Fainbergd074dc72014-06-24 21:33:39 -070093}
94
Gabriel Assis Bezerraa688bc62014-05-27 20:58:22 +000095# apache_site_config_for() - The filename of the site's configuration file.
96# This function uses the global variables APACHE_NAME and APACHE_CONF_DIR.
97#
Sean Dague8f8b2742017-04-13 09:34:12 -040098# On Ubuntu 14.04+, the site configuration file must have a .conf suffix for a2ensite and a2dissite to
Gabriel Assis Bezerraa688bc62014-05-27 20:58:22 +000099# recognise it. a2ensite and a2dissite ignore the .conf suffix used as parameter. The default sites'
100# files are 000-default.conf and default-ssl.conf.
101#
Ralf Haferkamp633a1292014-06-16 14:10:05 +0200102# On Fedora and openSUSE, any file in /etc/httpd/conf.d/ whose name ends with .conf is enabled.
Gabriel Assis Bezerraa688bc62014-05-27 20:58:22 +0000103#
104# On RHEL and CentOS, things should hopefully work as in Fedora.
105#
106# The table below summarizes what should happen on each distribution:
107# +----------------------+--------------------+--------------------------+--------------------------+
108# | Distribution | File name | Site enabling command | Site disabling command |
109# +----------------------+--------------------+--------------------------+--------------------------+
Gabriel Assis Bezerraa688bc62014-05-27 20:58:22 +0000110# | Ubuntu 14.04 | site.conf | a2ensite site | a2dissite site |
111# | Fedora, RHEL, CentOS | site.conf.disabled | mv site.conf{.disabled,} | mv site.conf{,.disabled} |
112# +----------------------+--------------------+--------------------------+--------------------------+
113function apache_site_config_for {
114 local site=$@
115 if is_ubuntu; then
Sean Dague8f8b2742017-04-13 09:34:12 -0400116 # Ubuntu 14.04 - Apache 2.4
117 echo $APACHE_CONF_DIR/${site}.conf
Ralf Haferkamp633a1292014-06-16 14:10:05 +0200118 elif is_fedora || is_suse; then
Gabriel Assis Bezerraa688bc62014-05-27 20:58:22 +0000119 # fedora conf.d is only imported if it ends with .conf so this is approx the same
Dean Troyer444a8d52014-06-06 16:36:52 -0500120 local enabled_site_file="$APACHE_CONF_DIR/${site}.conf"
Gabriel Assis Bezerraa688bc62014-05-27 20:58:22 +0000121 if [ -f $enabled_site_file ]; then
122 echo ${enabled_site_file}
123 else
124 echo ${enabled_site_file}.disabled
125 fi
126 fi
127}
128
Jamie Lennox54707012013-09-17 12:07:48 +1000129# enable_apache_site() - Enable a particular apache site
Ian Wienandaee18c72014-02-21 15:35:08 +1100130function enable_apache_site {
Jamie Lennox54707012013-09-17 12:07:48 +1000131 local site=$@
132 if is_ubuntu; then
133 sudo a2ensite ${site}
Ralf Haferkamp633a1292014-06-16 14:10:05 +0200134 elif is_fedora || is_suse; then
Dean Troyer444a8d52014-06-06 16:36:52 -0500135 local enabled_site_file="$APACHE_CONF_DIR/${site}.conf"
136 # Do nothing if site already enabled or no site config exists
137 if [[ -f ${enabled_site_file}.disabled ]] && [[ ! -f ${enabled_site_file} ]]; then
138 sudo mv ${enabled_site_file}.disabled ${enabled_site_file}
139 fi
Jamie Lennox54707012013-09-17 12:07:48 +1000140 fi
141}
142
143# disable_apache_site() - Disable a particular apache site
Ian Wienandaee18c72014-02-21 15:35:08 +1100144function disable_apache_site {
Jamie Lennox54707012013-09-17 12:07:48 +1000145 local site=$@
146 if is_ubuntu; then
147 sudo a2dissite ${site}
Ralf Haferkamp633a1292014-06-16 14:10:05 +0200148 elif is_fedora || is_suse; then
Dean Troyer444a8d52014-06-06 16:36:52 -0500149 local enabled_site_file="$APACHE_CONF_DIR/${site}.conf"
150 # Do nothing if no site config exists
151 if [[ -f ${enabled_site_file} ]]; then
152 sudo mv ${enabled_site_file} ${enabled_site_file}.disabled
153 fi
Jamie Lennox54707012013-09-17 12:07:48 +1000154 fi
155}
156
zhang-hared98a5d02013-06-21 18:18:02 +0800157# start_apache_server() - Start running apache server
Ian Wienandaee18c72014-02-21 15:35:08 +1100158function start_apache_server {
zhang-hared98a5d02013-06-21 18:18:02 +0800159 start_service $APACHE_NAME
160}
161
162# stop_apache_server() - Stop running apache server
Ian Wienandaee18c72014-02-21 15:35:08 +1100163function stop_apache_server {
zhang-hared98a5d02013-06-21 18:18:02 +0800164 if [ -n "$APACHE_NAME" ]; then
165 stop_service $APACHE_NAME
166 else
167 exit_distro_not_supported "apache configuration"
168 fi
169}
170
171# restart_apache_server
Ian Wienandaee18c72014-02-21 15:35:08 +1100172function restart_apache_server {
Morgan Fainberg2df00462014-07-15 11:06:36 -0700173 # Apache can be slow to stop, doing an explicit stop, sleep, start helps
174 # to mitigate issues where apache will claim a port it's listening on is
175 # still in use and fail to start.
Sean Dague2b85cf02017-04-13 09:02:14 -0400176 restart_service $APACHE_NAME
zhang-hared98a5d02013-06-21 18:18:02 +0800177}
178
Gregory Haynes4b49e402016-08-31 18:19:51 -0700179# reload_apache_server
180function reload_apache_server {
181 reload_service $APACHE_NAME
182}
183
zhang-hared98a5d02013-06-21 18:18:02 +0800184# Restore xtrace
Ian Wienand523f4882015-10-13 11:03:03 +1100185$_XTRACE_LIB_APACHE
zhang-hared98a5d02013-06-21 18:18:02 +0800186
Adam Spiers6a5aa7c2013-10-24 11:27:02 +0100187# Tell emacs to use shell-script-mode
188## Local variables:
189## mode: shell-script
190## End: