#!/bin/sh # Postinst script for Dokuwiki. set -e # Create an apache configuration file for dokuwiki write_apache2_conf() { apacheconf=`tempfile` # Get config options db_get dokuwiki/system/documentroot docroot=$RET; cat >> $apacheconf <<-EOF AliasMatch ^$docroot/sites/[^/]+$ /usr/share/dokuwiki/ AliasMatch ^$docroot/sites/[^/]+/(.*)$ /usr/share/dokuwiki/\$1 Alias $docroot /usr/share/dokuwiki/ EOF # Print directory options for /usr/share/dokuwiki cat >> $apacheconf <<-EOF Options +FollowSymLinks AllowOverride All order allow,deny EOF db_get dokuwiki/system/accessible if [ "$RET" = "global" ]; then # Globally accessible echo " Allow from all" >> $apacheconf elif [ "$RET" = "localhost only" ]; then # Access only from localhost echo " Allow from localhost 127.0.0.1 ::1" >> $apacheconf else # Access from localnet db_get dokuwiki/system/localnet echo " Allow from localhost 127.0.0.1 ::1" >> $apacheconf echo " Allow from $RET" >> $apacheconf fi cat >> $apacheconf <<-EOF # Uncomment to implement server-side URL rewriting # (cf. ). # Do *not* mix that with multisite! #RewriteEngine on #RewriteBase /dokuwiki #RewriteRule ^lib - [L] #RewriteRule ^doku.php - [L] #RewriteRule ^feed.php - [L] #RewriteRule ^_media/(.*) lib/exe/fetch.php?media=\$1 [QSA,L] #RewriteRule ^_detail/(.*) lib/exe/detail.php?media=\$1 [QSA,L] #RewriteRule ^_export/([^/]+)/(.*) doku.php?do=export_\$1&id=\$2 [QSA,L] #RewriteRule ^$ doku.php [L] #RewriteRule (.*) doku.php?id=\$1 [QSA,L] Require all denied Require all denied EOF ucf --debconf-ok $apacheconf /etc/dokuwiki/apache.conf ucfr dokuwiki /etc/dokuwiki/apache.conf # Remove temporary file rm $apacheconf; if [ -e /etc/dokuwiki/apache.conf ]; then chmod 0644 /etc/dokuwiki/apache.conf fi } # Create a lighttpd configuration file for dokuwiki write_lighttpd_conf() { lighttpdconf=$(tempfile) # Get document root db_get dokuwiki/system/documentroot docroot=$RET; # Configure lighttpd to server dokuwiki on the docroot echo "alias.url += (\"$docroot\" => \"/usr/share/dokuwiki\")" >> $lighttpdconf cat >> $lighttpdconf << EOF \$HTTP["url"] =~ "^$docroot" { server.follow-symlink = "enable" } \$HTTP["url"] =~ "/(\.|_)ht" { url.access-deny = ( "" ) } \$HTTP["url"] =~ "^$docroot/(bin|data|inc|conf)" { url.access-deny = ( "" ) } EOF # TODO: access restriction # Write the configuration file to its final location ucf --debconf-ok $lighttpdconf /etc/dokuwiki/lighttpd.conf ucfr dokuwiki /etc/dokuwiki/lighttpd.conf # Remove temporary file rm $lighttpdconf; if [ -e /etc/dokuwiki/lighttpd.conf ]; then chmod 0644 /etc/dokuwiki/lighttpd.conf fi } # Create a local dokuwiki configuration file write_dokuwiki_conf() { dokuwikiconf=$(tempfile) cat >> $dokuwikiconf << EOF > $dokuwikiconf db_get dokuwiki/wiki/license echo "\$conf['license'] = '$RET';" >> $dokuwikiconf echo "#\$conf['lang'] = 'en';" >> $dokuwikiconf db_get dokuwiki/wiki/acl if [ "$RET" = "true" ]; then echo "\$conf['useacl'] = 1;" >> $dokuwikiconf echo "\$conf['superuser'] = '@admin';" >> $dokuwikiconf fi ucf --debconf-ok $dokuwikiconf /etc/dokuwiki/local.php ucfr dokuwiki /etc/dokuwiki/local.php # Remove temporary file rm $dokuwikiconf if [ -e /etc/dokuwiki/local.php ]; then chmod 0644 /etc/dokuwiki/local.php fi # Set permissions according to the user's wishes db_get dokuwiki/system/writeconf if [ "$RET" = "true" ]; then if [ -e /etc/dokuwiki/local.php ]; then chown root:www-data /etc/dokuwiki/local.php chmod 0664 /etc/dokuwiki/local.php if ! dpkg-statoverride --list /etc/dokuwiki >/dev/null 2>&1; then dpkg-statoverride --update --add root www-data 0775 /etc/dokuwiki fi fi fi db_get dokuwiki/system/writeplugins if [ "$RET" = "true" ]; then if ! dpkg-statoverride --list /var/lib/dokuwiki/lib/plugins >/dev/null 2>&1; then dpkg-statoverride --update --add root www-data 0775 /var/lib/dokuwiki/lib/plugins fi fi } # Set up an initial access control system setup_acl() { # Do not touch ACLs of existing installationq if [ ! -e /var/lib/dokuwiki/acl/acl.auth.php ]; then aclauth=`tempfile` cat >> $aclauth << EOF # acl.auth.php # # Don't modify the lines above # # Access Control Lists # # Auto-generated by Debian postinst script EOF db_get dokuwiki/wiki/policy if [ "$RET" = "closed" ]; then echo "* @ALL 0" >> $aclauth echo "* @user 8" >> $aclauth elif [ "$RET" = "public" ]; then echo "* @ALL 1" >> $aclauth echo "* @user 8" >> $aclauth else echo "* @ALL 8" >> $aclauth fi ucf --debconf-ok $aclauth /var/lib/dokuwiki/acl/acl.auth.php ucfr dokuwiki /var/lib/dokuwiki/acl/acl.auth.php # Remove temporary file rm $aclauth; if [ -e /var/lib/dokuwiki/acl/acl.auth.php ]; then chown www-data:root /var/lib/dokuwiki/acl/acl.auth.php fi fi } # Set up an initial administrator account setup_superuser() { # Do not touch user lists of existing installations if [ ! -e /var/lib/dokuwiki/acl/users.auth.php ]; then usersauth=`tempfile` db_get dokuwiki/wiki/superuser superuser="$RET" db_get dokuwiki/wiki/fullname fullname="$RET" db_get dokuwiki/wiki/email email="$RET" db_get dokuwiki/wiki/password password=$(echo -n "$RET" | md5sum -b | cut -d' ' -f1) db_set dokuwiki/wiki/password "" db_set dokuwiki/wiki/confirm "" echo "$superuser:$password:$fullname:$email:admin,user" >> $usersauth ucf --debconf-ok $usersauth /var/lib/dokuwiki/acl/users.auth.php ucfr dokuwiki /var/lib/dokuwiki/acl/users.auth.php # Remove temporary file rm $usersauth; if [ -e /var/lib/dokuwiki/acl/users.auth.php ]; then chown www-data:root /var/lib/dokuwiki/acl/users.auth.php fi fi } # Create a .htaccess sample file for dokuwiki write_htaccess() { # Restore the backup of the .htaccess that used to be part of the # package and would have been lost. See preinst. if [ -f /usr/share/dokuwiki/.htaccess.upgrade ] then mv /usr/share/dokuwiki/.htaccess.upgrade /etc/dokuwiki/htaccess fi # A previous versions of this script, 0.0.20091225c-4, used to restore the # backup *after* ucf. As this erased the following official modification # after ucf, let us make it back before ucf. if [ -e /etc/dokuwiki/local.php -a -f /etc/dokuwiki/htaccess ]; then sed -i -e '/^php_value auto_prepend_file "\/usr\/share\/dokuwiki\/prepend.php"$/,+1d' /etc/dokuwiki/htaccess fi ucfr dokuwiki /etc/dokuwiki/htaccess ucf --debconf-ok /usr/share/dokuwiki/.htaccess.dist /etc/dokuwiki/htaccess } # Configure Apache web servers (possibly version 1.3 or 2.x?) configure_apache2() { # Remove old configuration symlink for apache 2.2 if [ -e /etc/apache2/conf.d/dokuwiki.conf ] then rm /etc/apache2/conf.d/dokuwiki.conf fi # Remove possible user compatibility symlink for apache 2.4 if [ -h /etc/apache2/conf-available/dokuwiki.conf ] then rm /etc/apache2/conf-available/dokuwiki.conf fi if [ -d /etc/apache2/conf-available -a ! -e /etc/apache2/conf-available/dokuwiki.conf ] then ln -s /etc/dokuwiki/apache.conf /etc/apache2/conf-available/dokuwiki.conf if [ -e /usr/share/apache2/apache2-maintscript-helper ] then . /usr/share/apache2/apache2-maintscript-helper apache2_invoke enconf dokuwiki fi fi } # Reload apache2 reload_apache2() { # Nothing, since `apache2_invoke enconf` already did what had to be done : } # Configure lighttpd web server configure_lighttpd() { dir="/etc/lighttpd/conf-available" file="$dir/50-dokuwiki.conf" if [ -d "$dir" ] && [ ! -e "$file" ]; then if ! command -v bash > /dev/null ; then echo "Lighttpd not installed, skipping" else echo "Installing into... [$dir]" >/dev/stderr ln -sf /etc/dokuwiki/lighttpd.conf "$file" lighty-enable-mod dokuwiki fi fi } # Reload lighttpd reload_lighttpd() { # That may fail if lighttpd is not running: this is not a real problem, # ignore it. invoke-rc.d lighttpd reload || true } # Configure requested web server configure_webservers() { db_get dokuwiki/system/configure-webserver webservers="$RET" db_get dokuwiki/system/restart-webserver restart="$RET" write_apache2_conf write_lighttpd_conf for webserver in $webservers; do webserver=${webserver%,} # Note: configure_apache2 uses functions from # /usr/share/apache2/apache2-maintscript-helper, which require an # unmodified environment, including maintainer script arguments "$@" configure_$webserver "$@" if [ "$restart" = "true" ] then reload_$webserver "$@" fi done } if [ $1 = "configure" ]; then . /usr/share/debconf/confmodule write_htaccess write_dokuwiki_conf db_get dokuwiki/wiki/acl if [ "$RET" = "true" ]; then setup_acl db_get dokuwiki/wiki/superuser if [ ! -z "$RET" ]; then setup_superuser fi fi # Note: configure_webservers uses functions from # /usr/share/apache2/apache2-maintscript-helper, which require an # unmodified environment, including maintainer script arguments "$@" configure_webservers "$@" db_stop # A double transition... # Templates and plugins used to be under /usr/share/dokuwiki/lib. # They were moved to /var/lib/dokuwiki to allow additions within the FHS. # But some plugins need to find DokuWiki's root directory at ../../../, # so they are now installed under /var/lib/dokuwiki/lib to reproduce the # original hierarchy at /var/lib/dokuwiki. # Possible cases for /usr/share/dokuwiki/lib/tpl: # * inexistant, regular file, special file: *abnormal* cases, not handled; # * symlink: no transition needed; # * directory: transition to the new location needed. if [ ! -L /usr/share/dokuwiki/lib/tpl ]; then echo -n "Moving template directory from /usr/share/dokuwiki to /var/lib/dokuwiki/lib... " >/dev/stderr mv /usr/share/dokuwiki/lib/tpl/* /var/lib/dokuwiki/lib/tpl/ 2> /dev/null || true if ! rmdir /usr/share/dokuwiki/lib/tpl; then # Files left on /usr/share/dokuwiki/lib/tpl. # Typical case: the user added files deeply in # /usr/share/dokuwiki/lib/tpl/default. Requires user # intervention. echo >/dev/stderr echo "Some files were left on /usr/share/dokuwiki/lib/tpl:" >/dev/stderr echo "they are backed up on /usr/share/dokuwiki/lib/tpl.old," >/dev/stderr echo "please check them and consider removing them." >/dev/stderr mv /usr/share/dokuwiki/lib/tpl /usr/share/dokuwiki/lib/tpl.old fi ln -s /var/lib/dokuwiki/lib/tpl /usr/share/dokuwiki/lib/ echo "[done]" >/dev/stderr fi # Possible clases for /var/lib/dokuwiki/tpl: # * inexistant: no transition needed; # * regular file, special file, symlink: *abnormal* cases, not handled; # * directory: transition to the new location needed. if [ -d /var/lib/dokuwiki/tpl ]; then echo -n "Moving template directory from /var/lib/dokuwiki to /var/lib/dokuwiki/lib... " >/dev/stderr # A previous version of this script, 0.0.20090214b-3.1, used to # brutally move templates from /usr/share/dokuwiki/lib to # /var/lib/dokuwiki, resulting in files not belonging to the package. # On upgrade, they are left, but can be removed safely as they are now # simply provided by the package. rm -f /var/lib/dokuwiki/tpl/default/images/bullet.gif \ /var/lib/dokuwiki/tpl/default/images/button-cc.gif \ /var/lib/dokuwiki/tpl/default/images/button-css.png \ /var/lib/dokuwiki/tpl/default/images/button-debian.png \ /var/lib/dokuwiki/tpl/default/images/button-debian.png.uue \ /var/lib/dokuwiki/tpl/default/images/button-donate.gif \ /var/lib/dokuwiki/tpl/default/images/button-dw.png \ /var/lib/dokuwiki/tpl/default/images/button-php.gif \ /var/lib/dokuwiki/tpl/default/images/button-rss.png \ /var/lib/dokuwiki/tpl/default/images/buttonshadow.png \ /var/lib/dokuwiki/tpl/default/images/button-xhtml.png \ /var/lib/dokuwiki/tpl/default/images/closed.gif \ /var/lib/dokuwiki/tpl/default/images/favicon.ico \ /var/lib/dokuwiki/tpl/default/images/inputshadow.png \ /var/lib/dokuwiki/tpl/default/images/link_icon.gif \ /var/lib/dokuwiki/tpl/default/images/mail_icon.gif \ /var/lib/dokuwiki/tpl/default/images/open.gif \ /var/lib/dokuwiki/tpl/default/images/tocdot2.gif \ /var/lib/dokuwiki/tpl/default/images/UWEB.png \ /var/lib/dokuwiki/tpl/default/images/UWEBshadow.png \ /var/lib/dokuwiki/tpl/default/images/windows.gif rmdir /var/lib/dokuwiki/tpl/default/images/ 2> /dev/null || true rm -f /var/lib/dokuwiki/tpl/default/design.css \ /var/lib/dokuwiki/tpl/default/detail.php \ /var/lib/dokuwiki/tpl/default/footer.html \ /var/lib/dokuwiki/tpl/default/layout.css \ /var/lib/dokuwiki/tpl/default/main.php \ /var/lib/dokuwiki/tpl/default/media.css \ /var/lib/dokuwiki/tpl/default/mediamanager.php \ /var/lib/dokuwiki/tpl/default/print.css \ /var/lib/dokuwiki/tpl/default/rtl.css \ /var/lib/dokuwiki/tpl/default/style.ini rmdir /var/lib/dokuwiki/tpl/default/ 2> /dev/null || true rm -f /var/lib/dokuwiki/tpl/index.php mv /var/lib/dokuwiki/tpl/* /var/lib/dokuwiki/lib/tpl/ 2> /dev/null || true if ! rmdir /var/lib/dokuwiki/tpl; then # Files left on /var/lib/dokuwiki/tpl. # Typical case: the user added files deeply in # /var/lib/dokuwiki/tpl/default. Requires user # intervention. echo >/dev/stderr echo "Some files were left on /var/lib/dokuwiki/tpl:" >/dev/stderr echo "they are backed up on /var/lib/dokuwiki/tpl.old," >/dev/stderr echo "please check them and consider removing them." >/dev/stderr mv /var/lib/dokuwiki/tpl /var/lib/dokuwiki/tpl.old fi echo "[done]" >/dev/stderr fi # Possible cases for /usr/share/dokuwiki/lib/plugins: # * inexistant, regular file, special file: *abnormal* cases, not handled; # * symlink: no transition needed; # * directory: transition to the new location needed. if [ ! -L /usr/share/dokuwiki/lib/plugins ]; then echo -n "Moving plugins directory from /usr/share/dokuwiki to /var/lib/dokuwiki/lib... " >/dev/stderr mv /usr/share/dokuwiki/lib/plugins/* /var/lib/dokuwiki/lib/plugins/ 2> /dev/null || true if ! rmdir /usr/share/dokuwiki/lib/plugins; then # Files left on /usr/share/dokuwiki/lib/plugins. # Typical case: the user added files deeply in # /usr/share/dokuwiki/lib/plugins/something_provided_by_the_package. # Requires user intervention. echo >/dev/stderr echo "Some files were left on /usr/share/dokuwiki/lib/plugins:" >/dev/stderr echo "they are backed up on /usr/share/dokuwiki/lib/plugins.old," >/dev/stderr echo "please check them and consider removing them." >/dev/stderr mv /usr/share/dokuwiki/lib/plugins /usr/share/dokuwiki/lib/plugins.old fi ln -s /var/lib/dokuwiki/lib/plugins /usr/share/dokuwiki/lib/ echo "[done]" >/dev/stderr fi # Possible cases for /var/lib/dokuwiki/plugins: # * inexistant: no transition needed; # * regular file, special file, symlink: *abnormal* cases, not handled; # * directory: transition to the new location needed. if [ -d /var/lib/dokuwiki/plugins ]; then echo -n "Moving plugins directory from /var/lib/dokuwiki to /var/lib/dokuwiki/lib... " >/dev/stderr mv /var/lib/dokuwiki/plugins/* /var/lib/dokuwiki/lib/plugins/ 2> /dev/null || true if ! rmdir /var/lib/dokuwiki/plugins; then # Files left on /var/lib/dokuwiki/plugins. # Typical case: the user added files deeply in # /var/lib/dokuwiki/plugins/something_provided_by_the_package. # Requires user intervention. echo >/dev/stderr echo "Some files were left on /var/lib/dokuwiki/plugins:" >/dev/stderr echo "they are backed up on /var/lib/dokuwiki/plugins.old," >/dev/stderr echo "please check them and consider removing them." >/dev/stderr mv /var/lib/dokuwiki/plugins /var/lib/dokuwiki/plugins.old fi echo "[done]" >/dev/stderr fi fi