dist-upgrade failed: apache2 postinst failed on absolute symlinks in mods-enabled

Bug #1428288 reported by Ben Harris
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
apache2 (Ubuntu)
Won't Fix
Medium
Unassigned

Bug Description

I tried to upgrade from 12.04 LTS to 14.04 LTS using "do-release-upgrade". The system had previously (a few minutes previously) been upgraded from 10.04 LTS to 12.04 LTS. As far as I can tell, the first upgrade was successful, but the second failed when trying to configure apache2:

disable obsolete module dav_fs
Module dav_fs disabled.
disable obsolete module dav
ERROR: The following modules depend on dav and need to be disabled first: dav_svn
dpkg: error processing package apache2 (--configure):
 subprocess installed post-installation script returned error exit status 1
No apport report written because MaxReports has already been reached

Please report this bug in a browser at
http://bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/+filebug
and attach the files in /var/log/dist-upgrade/ to the bug report.
installArchives() failed

I think this is caused by the fact that I have absolute symlinks in /etc/apache2/mods-enabled:

root@sigurd:/home/bjh21# ls -o /etc/apache2/mods-enabled/dav*
lrwxrwxrwx 1 root 36 Nov 12 2012 /etc/apache2/mods-enabled/dav.load -> /etc/apache2/mods-available/dav.load
lrwxrwxrwx 1 root 30 Nov 12 2012 /etc/apache2/mods-enabled/dav_svn.conf -> ../mods-available/dav_svn.conf
lrwxrwxrwx 1 root 40 Nov 12 2012 /etc/apache2/mods-enabled/dav_svn.load -> /etc/apache2/mods-available/dav_svn.load

The code that detects obsolete modules in apache2.postinst looks like it will (accidentally) not work with absolute symlinks:

refresh_modules()
{
        if we_are_upgrading_from_wheezy $@ && [ -d /etc/apache2/mods-enabled/ ] ; then
                shopt -s nullglob
                for link in /etc/apache2/mods-enabled/*.load ; do
                        target=$(readlink "$link") || true
                        if [ -z "$target" ] ; then
                                continue
                        fi

                        module=$(basename "$link" | sed 's/\.load//') || true

                        if [ ! -e "/etc/apache2/mods-enabled/$target" ] ; then
                                echo "disable obsolete module $module"
                                a2dismod -m -q "$module"

etc.

Concatenating the symlink contents with the directory name only works for relative symlinks. A simpler approach would be simply to check the link for existence, which will treat broken links as non-existent:

if [ ! -e "${link}" ]; then

Revision history for this message
Ben Harris (bjh21) wrote :
affects: ubuntu-release-upgrader (Ubuntu) → apache2 (Ubuntu)
Changed in apache2 (Ubuntu):
status: New → Triaged
importance: Undecided → Medium
Revision history for this message
Bryce Harrington (bryce) wrote :

(Standard support has ended for 14.04.)

Changed in apache2 (Ubuntu):
status: Triaged → Won't Fix
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.