Package: apache2.2-common Version: 2.2.22-13 Severity: normal Tags: ipv6 Reported to upstream as requested in Ubuntu bug 1207384: https://bugs.launchpad.net/bugs/1207384
Apache fails to start on boot when attempting to bind to an IPv6 address. boot.log shows the following (IP changed for privacy purposes): (99)Cannot assign requested address: make_sock: could not bind to address [2001:db8::1]:80 no listening sockets available, shutting down Unable to open logs Action 'start' failed. The Apache error log may have more information. * Starting web server apache2 [fail] Starting manually (apachectl start) after boot starts the daemon as expected. Here is the inet6 section of my /etc/network/interfaces. Again, IPs removed for privacy. The post-up/pre-down route directives are required to access my provider's network: iface eth0 inet6 static address 2001:db8::1 netmask 64 up /sbin/ifconfig eth0 inet6 add 2001:db8::2/64 down /sbin/ifconfig eth0 inet6 del 2001:db8::2/64 post-up /sbin/ip -f inet6 route add 2001:db8::ff:ff:ff:ff dev eth0 post-up /sbin/ip -f inet6 route add default via 2001:db8::ff:ff:ff:ff pre-down /sbin/ip -f inet6 route del default via 2001:db8::ff:ff:ff:ff pre-down /sbin/ip -f inet6 route del 2001:db8::ff:ff:ff:ff dev eth0 Doing a little bit of research, it appears apache is trying to bind to an IP in the tentative state. (source: http://pyro.eu.org/how-to/micro/nginx-cannot-assign-requested-address-ipv6.txt). Adding the while loop shown on at that URL to /etc/network/interfaces did not help; however, adding it to the beginning of /etc/init.d/apache2 resolved the issue. Suggest implementing something similar as a fix; have /etc/init.d/apache2 check for IPs in the tentative state and sleep until resolved. -- Package-specific info: List of enabled modules from 'apache2 -M': alias auth_basic authn_file authz_default authz_groupfile authz_host authz_user autoindex cgid deflate dir env mime negotiation reqtimeout setenvif status -- System Information: Debian Release: 7.1 APT prefers stable-updates APT policy: (500, 'stable-updates'), (500, 'stable') Architecture: amd64 (x86_64) Kernel: Linux 3.2.0-4-amd64 (SMP w/1 CPU core) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages apache2.2-common depends on: ii apache2-utils 2.2.22-13 ii apache2.2-bin 2.2.22-13 ii lsb-base 4.1+Debian8+deb7u1 ii mime-support 3.52-1 ii perl 5.14.2-21 ii procps 1:3.3.3-3 Versions of packages apache2.2-common recommends: ii ssl-cert 1.0.32 Versions of packages apache2.2-common suggests: ii apache2-doc 2.2.22-13 pn apache2-suexec | apache2-suexec-custom <none> ii w3m [www-browser] 0.5.3-8 Versions of packages apache2.2-common is related to: pn apache2-mpm-event <none> pn apache2-mpm-itk <none> pn apache2-mpm-prefork <none> ii apache2-mpm-worker 2.2.22-13 -- Configuration Files: /etc/apache2/ports.conf changed: NameVirtualHost 198.100.152.164:80 Listen 198.100.152.164:80 NameVirtualHost [2607:5300:60:bae:2::1]:80 Listen [2607:5300:60:bae:2::1]: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. Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule> /etc/apache2/sites-available/default changed: <VirtualHost 198.100.152.164:80 [2607:5300:60:bae:2::1]:80> ServerName kevin.ourparadisefalls.com ServerAdmin webmaster@localhost 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> 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 </VirtualHost> /etc/init.d/apache2 changed: while ip -6 addr show tentative | grep . > /dev/null ; do sleep 1 ; done set -e SCRIPTNAME="${0##*/}" SCRIPTNAME="${SCRIPTNAME##[KS][0-9][0-9]}" if [ -n "$APACHE_CONFDIR" ] ; then if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then DIR_SUFFIX="${APACHE_CONFDIR##/etc/apache2-}" else DIR_SUFFIX= fi elif [ "${SCRIPTNAME##apache2-}" != "$SCRIPTNAME" ] ; then DIR_SUFFIX="-${SCRIPTNAME##apache2-}" APACHE_CONFDIR=/etc/apache2$DIR_SUFFIX else DIR_SUFFIX= APACHE_CONFDIR=/etc/apache2 fi if [ -z "$APACHE_ENVVARS" ] ; then APACHE_ENVVARS=$APACHE_CONFDIR/envvars fi export APACHE_CONFDIR APACHE_ENVVARS ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin" if [ "$APACHE_CONFDIR" != /etc/apache2 ] ; then ENV="$ENV APACHE_CONFDIR=$APACHE_CONFDIR" fi if [ "$APACHE_ENVVARS" != "$APACHE_CONFDIR/envvars" ] ; then ENV="$ENV APACHE_ENVVARS=$APACHE_ENVVARS" fi HTCACHECLEAN_RUN=auto HTCACHECLEAN_MODE=daemon HTCACHECLEAN_SIZE=300M HTCACHECLEAN_DAEMON_INTERVAL=120 HTCACHECLEAN_PATH=/var/cache/apache2$DIR_SUFFIX/mod_disk_cache HTCACHECLEAN_OPTIONS="" APACHE_HTTPD=$(. $APACHE_ENVVARS && echo $APACHE_HTTPD) if [ -z "$APACHE_HTTPD" ] ; then APACHE_HTTPD=/usr/sbin/apache2 fi if [ ! -x $APACHE_HTTPD ] ; then echo "No apache MPM package installed" exit 0 fi . /lib/lsb/init-functions test -f /etc/default/rcS && . /etc/default/rcS if [ -f /etc/default/apache2$DIR_SUFFIX ] ; then . /etc/default/apache2$DIR_SUFFIX elif [ -f /etc/default/apache2 ] ; then . /etc/default/apache2 fi APACHE2CTL="$ENV /usr/sbin/apache2ctl" HTCACHECLEAN="$ENV /usr/sbin/htcacheclean" PIDFILE=$(. $APACHE_ENVVARS && echo $APACHE_PID_FILE) if [ -z "$PIDFILE" ] ; then echo ERROR: APACHE_PID_FILE needs to be defined in $APACHE_ENVVARS >&2 exit 2 fi check_htcacheclean() { [ "$HTCACHECLEAN_MODE" = "daemon" ] || return 1 [ "$HTCACHECLEAN_RUN" = "yes" ] && return 0 MODSDIR=$(. $APACHE_ENVVARS && echo $APACHE_MODS_ENABLED) [ "$HTCACHECLEAN_RUN" = "auto" \ -a -e ${MODSDIR:-$APACHE_CONFDIR/mods-enabled}/disk_cache.load ] && \ return 0 return 1 } start_htcacheclean() { if [ ! -d "$HTCACHECLEAN_PATH" ] ; then echo "... directory $HTCACHECLEAN_PATH does not exist!" >&2 return 1 fi $HTCACHECLEAN $HTCACHECLEAN_OPTIONS -d$HTCACHECLEAN_DAEMON_INTERVAL \ -i -p$HTCACHECLEAN_PATH -l$HTCACHECLEAN_SIZE } stop_htcacheclean() { pkill -P 1 -f "htcacheclean.* -p$HTCACHECLEAN_PATH " 2> /dev/null || echo ...not running } pidof_apache() { # if there is actually an apache2 process whose pid is in PIDFILE, # print it and return 0. if [ -e "$PIDFILE" ]; then if pidof apache2 | tr ' ' '\n' | grep -w $(cat $PIDFILE); then return 0 fi fi return 1 } apache_stop() { if $APACHE2CTL configtest > /dev/null 2>&1; then # if the config is ok than we just stop normaly $APACHE2CTL stop 2>&1 | grep -v 'not running' >&2 || true else # if we are here something is broken and we need to try # to exit as nice and clean as possible PID=$(pidof_apache) || true if [ "${PID}" ]; then # in this case it is everything nice and dandy and we kill apache2 echo log_warning_msg "The apache2$DIR_SUFFIX configtest failed, so we are trying to kill it manually. This is almost certainly suboptimal, so please make sure your system is working as you'd expect now!" kill $PID elif [ "$(pidof apache2)" ]; then if [ "$VERBOSE" != no ]; then echo " ... failed!" echo "You may still have some apache2 processes running. There are" echo "processes named 'apache2' which do not match your pid file," echo "and in the name of safety, we've left them alone. Please review" echo "the situation by hand." fi return 1 fi fi } apache_wait_stop() { # running ? PIDTMP=$(pidof_apache) || true if kill -0 "${PIDTMP:-}" 2> /dev/null; then PID=$PIDTMP fi apache_stop # wait until really stopped if [ -n "${PID:-}" ]; then i=0 while kill -0 "${PID:-}" 2> /dev/null; do if [ $i = '60' ]; then break; else if [ $i = '0' ]; then echo -n " ... waiting " else echo -n "." fi i=$(($i+1)) sleep 1 fi done fi } case $1 in start) log_daemon_msg "Starting web server" "apache2" if $APACHE2CTL start; then if check_htcacheclean ; then log_progress_msg htcacheclean start_htcacheclean || log_end_msg 1 fi log_end_msg 0 else log_end_msg 1 fi ;; stop) if check_htcacheclean ; then log_daemon_msg "Stopping web server" "htcacheclean" stop_htcacheclean log_progress_msg "apache2" else log_daemon_msg "Stopping web server" "apache2" fi if apache_wait_stop; then log_end_msg 0 else log_end_msg 1 fi ;; graceful-stop) if check_htcacheclean ; then log_daemon_msg "Stopping web server" "htcacheclean" stop_htcacheclean log_progress_msg "apache2" else log_daemon_msg "Stopping web server" "apache2" fi if $APACHE2CTL graceful-stop; then log_end_msg 0 else log_end_msg 1 fi ;; reload | force-reload | graceful) log_daemon_msg "Reloading web server config" if pidof_apache > /dev/null ; then log_progress_msg "apache2" if ! $APACHE2CTL configtest > /dev/null 2>&1; then log_end_msg 1 $APACHE2CTL configtest || true exit 1 fi if $APACHE2CTL graceful $2 ; then log_end_msg 0 else log_end_msg 1 fi else log_progress_msg "apache2 not running" log_end_msg 0 fi ;; restart) if ! $APACHE2CTL configtest > /dev/null 2>&1; then $APACHE2CTL configtest || true log_end_msg 1 exit 1 fi if check_htcacheclean ; then log_daemon_msg "Restarting web server" "htcacheclean" stop_htcacheclean log_progress_msg apache2 else log_daemon_msg "Restarting web server" "apache2" fi PID=$(pidof_apache) || true if ! apache_wait_stop; then log_end_msg 1 || true fi if $APACHE2CTL start; then if check_htcacheclean ; then start_htcacheclean || log_end_msg 1 fi log_end_msg 0 else log_end_msg 1 fi ;; start-htcacheclean) log_daemon_msg "Starting htcacheclean" start_htcacheclean || log_end_msg 1 log_end_msg 0 ;; stop-htcacheclean) log_daemon_msg "Stopping htcacheclean" stop_htcacheclean log_end_msg 0 ;; status) PID=$(pidof_apache) || true if [ -n "$PID" ]; then echo "Apache2$DIR_SUFFIX is running (pid $PID)." exit 0 else echo "Apache2$DIR_SUFFIX is NOT running." if [ -e "$PIDFILE" ]; then exit 1 else exit 3 fi fi ;; *) log_success_msg "Usage: /etc/init.d/apache2$DIR_SUFFIX {start|stop|graceful-stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean|status}" exit 1 ;; esac -- no debconf information -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org