]> git.donarmstrong.com Git - roundcube.git/commitdiff
Fix symlink mess master
authorVincent Bernat <bernat@luffy.cx>
Sat, 10 Nov 2012 12:56:26 +0000 (13:56 +0100)
committerVincent Bernat <bernat@luffy.cx>
Sat, 10 Nov 2012 12:56:26 +0000 (13:56 +0100)
In postinst when upgrading from 0.5 to a more recent version. Closes:
#680917, #656886.

debian/changelog
debian/roundcube-core.postinst

index e1dcca28dc77fb459814a9ccd183ce5e7c3f4548..cedeca568e5ab3a5c8747b6b86748debd4d6e288 100644 (file)
@@ -1,3 +1,10 @@
+roundcube (0.7.2-6) unstable; urgency=low
+
+  * Fix the symlink mess in postinst when upgrading from 0.5 to a more
+    recent version. Closes: #680917, #656886.
+
+ -- Vincent Bernat <bernat@debian.org>  Sat, 10 Nov 2012 13:51:17 +0100
+
 roundcube (0.7.2-5) unstable; urgency=low
 
   * Fix problem with some uuencoded attachments. Patch from MichaƂ
index 36457be2768b27da80f9444da29317c663452263..721340650d9ee2e2b8a90d4e4fdea8f039799de1 100644 (file)
@@ -35,6 +35,68 @@ apache_install() {
        fi
 }
 
+fix_symlinks() {
+    # In 0.5.1-1, symlinks have been mangled. Before this version,
+    # /var/lib/roundcube and /usr/share/roundcube were using symlinks
+    # to each other:
+    #  /usr/share/roundcube/config   -> /var/lib/roundcube/config
+    #  /usr/share/roundcube/logs     -> /var/lib/roundcube/logs
+    #  /usr/share/roundcube/plugins  -> /var/lib/roundcube/plugins
+    #  /usr/share/roundcube/skins    -> /var/lib/roundcube/skins
+    #  /usr/share/roundcube/temp     -> /var/lib/roundcube/temp
+    #  /var/lib/roundcube/logs       -> ../../log/roundcube
+    #  /var/lib/roundcube/.htaccess  -> /usr/share/roundcube/.htaccess
+    #  /var/lib/roundcube/bin        -> /usr/share/roundcube/bin
+    #  /var/lib/roundcube/index.php  -> /usr/share/roundcube/bin
+    #  /var/lib/roundcube/program    -> /usr/share/roundcube/bin
+    #  /var/lib/roundcube/robots.txt -> /usr/share/roundcube/bin
+
+    # As of 0.7.2-6, the user is expected to use /var/lib/roundcube
+    # since /usr/share/roundcube does not contain the appropriate
+    # symlinks anymore.
+    #  /var/lib/roundcube/logs       -> ../../log/roundcube
+    #  /var/lib/roundcube/.htaccess  -> /usr/share/roundcube/.htaccess
+    #  /var/lib/roundcube/index.php  -> /usr/share/roundcube/bin
+    #  /var/lib/roundcube/program    -> /usr/share/roundcube/bin
+    #  /var/lib/roundcube/robots.txt -> /usr/share/roundcube/bin
+    #  /var/lib/roundcube/plugins/*  -> /usr/share/roundcube/plugins/*
+    #  /var/lib/roundcube/skins/*    -> /usr/share/roundcube/skins/*
+
+    # Because dpkg will not overwrite a symlink but follow them, an
+    # upgrade gives a confuse situation. We have the following
+    # symlinks in /usr/share/roundcube:
+    #  /usr/share/roundcube/plugins  -> /var/lib/roundcube/plugins
+    #  /usr/share/roundcube/skins    -> /var/lib/roundcube/skins
+    # And the following are not symlinks as they should be:
+    #  /var/lib/roundcube/plugins/*  -> /usr/share/roundcube/plugins/*
+    #  /var/lib/roundcube/skins/*    -> /usr/share/roundcube/skins/*
+
+    # We detect and fix that.
+    for dir in plugins skins; do
+        [ -L /usr/share/roundcube/${dir} ] || continue
+        echo "Fixing symbolic link /usr/share/roundcube/${dir}"
+        [ ! -L /var/lib/roundcube/${dir} ] || {
+            echo "/var/lib/roundcube/${dir} is not expected to be a symbolic link. Abort."
+            exit 1
+        }
+        # Remove the symbolic link and make a real directory.
+        rm /usr/share/roundcube/${dir}
+        mkdir /usr/share/roundcube/${dir}
+
+        # We move each subdirectory regardless we own them or not. The
+        # ideal solution would be to leave files installed by the user
+        # in /var/lib/roundcube/${dir} but since other packages (like
+        # roundcube-plugins and roundcube-plugins-extra) may have
+        # installed files, it is something difficult to track. We do
+        # not want each package to fix this mess. What's important is
+        # that user installation will keep working as expected,
+        # despite the move.
+        for d in /var/lib/roundcube/${dir}/*; do
+            mv ${d} /usr/share/roundcube/${dir}
+            ln -s /usr/share/roundcube/${dir}/${d##*/} /var/lib/roundcube/${dir}/${d##*/}
+        done
+    done
+}
 
 case "$1" in
     configure)
@@ -72,6 +134,11 @@ EOF
            fi
        fi
 
+        # Fix bug 680917
+       if [ -n "$2" ] && dpkg --compare-versions "$2" lt 0.7.2-6; then
+            fix_symlinks
+        fi
+
        CONFFILE=/etc/roundcube/main.inc.php
        touch $CONFFILE.ucftmp
        chmod 640 $CONFFILE.ucftmp