X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=debian%2Froundcube-core.postinst;h=721340650d9ee2e2b8a90d4e4fdea8f039799de1;hb=HEAD;hp=64bdf5d8a2192883e81cdefb693787177bc91af8;hpb=620857a6a896becc107d67e32f388b92e95a1fc1;p=roundcube.git diff --git a/debian/roundcube-core.postinst b/debian/roundcube-core.postinst index 64bdf5d..7213406 100644 --- a/debian/roundcube-core.postinst +++ b/debian/roundcube-core.postinst @@ -8,7 +8,7 @@ set -e . /usr/share/debconf/confmodule . /usr/share/dbconfig-common/dpkg/postinst dbc_generate_include=php:/etc/roundcube/debian-db.php -dbc_generate_include_owner="www-data:www-data" +dbc_generate_include_owner="root:www-data" dbc_generate_include_perms="640" dbc_dbfile_owner="www-data:www-data" dbc_dbfile_perms="0660" @@ -35,35 +35,114 @@ 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) - # We try to fix an incomplete upgrade (see #610725) - if [ -n "$2" ] && dpkg --compare-versions "$2" le 0.5.1+dfsg-2; then + # We try to fix an incomplete upgrade (see #610725 and #613586) + if [ -n "$2" ] && dpkg --compare-versions "$2" le 0.5.1+dfsg-5; then db_get roundcube/dbconfig-upgrade || true if [ x"$RET" = x"true" ]; then - # Ok, we may need to do some upgrade steps. Let's get - # database parameters - eval `sed -n 's/^\$\(.*\);$/\1/p' /etc/roundcube/debian-db.php` - if [ x"$dbtype" = x"mysql" ]; then - echo "Fixing MySQL indexes (you can ignore errors)..." - MYSQLARGS="-f -u $dbuser -p$dbpass $dbname" - [ -z "$dbserver" ] || MYSQLARGS="-h $dbserver $MYSQLARGS" - [ -z "$dbport" ] || MYSQLARGS="-P $dbport $MYSQLARGS" - cat < "$workdir/mysql" +#!/bin/sh +"$real_mysql" "\$@" -f +EOF + chmod +x "$workdir/mysql" + PATH="$workdir:$PATH" + dbc_mysql_exec_file \ + /usr/share/dbconfig-common/data/roundcube/upgrade/mysql/0.5-1 || true + PATH="$oldpath" + rm -rf "$workdir" + fi + cat <> $CONFFILE.ucftmp + cat /usr/share/roundcube/main.inc.php.dist | while read line; do + case "$line" in + "\$rcmail_config['default_host'] = "*) + printf "\$rcmail_config['default_host'] = %s;\n" "${hosts}" + ;; + "\$rcmail_config['des_key'] = "*) + printf "\$rcmail_config['des_key'] = '%s';\n" "${deskey}" + ;; + "\$rcmail_config['language'] = "*) + printf "\$rcmail_config['language'] = '%s';\n" "${language}" + ;; + *) + printf "%s\n" "$line" + ;; + esac + done >> $CONFFILE.ucftmp ucf --debconf-ok $CONFFILE.ucftmp $CONFFILE - chown root:www-data $CONFFILE - rm -f $CONFFILE.ucftmp + chown root:www-data $CONFFILE + [ ! -f $CONFFILE.dpkg-dist ] || chown root:www-data $CONFFILE.dpkg-dist + rm -f $CONFFILE.ucftmp # Handle webserver reconfiguration/restart ; stolen from zabbix package db_get roundcube/reconfigure-webserver || true