2014-10-20 20:20:24 +00:00
|
|
|
#!/bin/bash
|
2014-09-21 20:05:11 +00:00
|
|
|
# Webmail with Roundcube
|
|
|
|
# ----------------------
|
2013-09-07 20:53:25 +00:00
|
|
|
|
2014-06-03 11:12:38 +00:00
|
|
|
source setup/functions.sh # load our functions
|
2014-03-17 00:46:59 +00:00
|
|
|
source /etc/mailinabox.conf # load global vars
|
|
|
|
|
2014-09-21 20:05:11 +00:00
|
|
|
# ### Installing Roundcube
|
|
|
|
|
|
|
|
# We install Roundcube from sources, rather than from Ubuntu, because:
|
|
|
|
#
|
|
|
|
# 1. Ubuntu's `roundcube-core` package has dependencies on Apache & MySQL, which we don't want.
|
2014-07-08 00:37:53 +00:00
|
|
|
#
|
2014-09-21 20:05:11 +00:00
|
|
|
# 2. The Roundcube shipped with Ubuntu is consistently out of date.
|
2014-07-08 00:37:53 +00:00
|
|
|
#
|
2014-09-21 20:05:11 +00:00
|
|
|
# 3. It's packaged incorrectly --- it seems to be missing a directory of files.
|
2014-07-08 00:37:53 +00:00
|
|
|
#
|
|
|
|
# So we'll use apt-get to manually install the dependencies of roundcube that we know we need,
|
|
|
|
# and then we'll manually install roundcube from source.
|
2014-04-25 12:25:47 +00:00
|
|
|
|
2014-09-21 20:05:11 +00:00
|
|
|
# These dependencies are from `apt-cache showpkg roundcube-core`.
|
2014-05-01 19:13:00 +00:00
|
|
|
apt_install \
|
2014-04-25 12:25:47 +00:00
|
|
|
dbconfig-common \
|
|
|
|
php5 php5-sqlite php5-mcrypt php5-intl php5-json php5-common php-auth php-net-smtp php-net-socket php-net-sieve php-mail-mime php-crypt-gpg php5-gd php5-pspell \
|
|
|
|
tinymce libjs-jquery libjs-jquery-mousewheel libmagic1
|
2013-09-07 20:53:25 +00:00
|
|
|
|
2014-10-04 21:57:26 +00:00
|
|
|
# We used to install Roundcube from Ubuntu, without triggering the dependencies #NODOC
|
|
|
|
# on Apache and MySQL, by downloading the debs and installing them manually. #NODOC
|
|
|
|
# Now that we're beyond that, get rid of those debs before installing from source. #NODOC
|
|
|
|
apt-get purge -qq -y roundcube* #NODOC
|
2013-09-07 20:53:25 +00:00
|
|
|
|
2014-09-24 12:46:42 +00:00
|
|
|
# Install Roundcube from source if it is not already present or if it is out of date.
|
2015-02-13 13:22:46 +00:00
|
|
|
VERSION=1.1.0
|
2014-09-24 12:46:42 +00:00
|
|
|
needs_update=0 #NODOC
|
|
|
|
if [ ! -f /usr/local/lib/roundcubemail/version ]; then
|
2014-10-04 21:57:26 +00:00
|
|
|
# not installed yet #NODOC
|
2014-09-24 12:46:42 +00:00
|
|
|
needs_update=1 #NODOC
|
|
|
|
elif [[ $VERSION != `cat /usr/local/lib/roundcubemail/version` ]]; then
|
|
|
|
# checks if the version is what we want
|
|
|
|
needs_update=1 #NODOC
|
|
|
|
fi
|
|
|
|
if [ $needs_update == 1 ]; then
|
2015-02-10 14:27:36 +00:00
|
|
|
echo installing roundcube webmail $VERSION...
|
2014-07-08 00:37:53 +00:00
|
|
|
rm -f /tmp/roundcube.tgz
|
2014-09-26 14:26:35 +00:00
|
|
|
wget -qO /tmp/roundcube.tgz http://downloads.sourceforge.net/project/roundcubemail/roundcubemail/$VERSION/roundcubemail-$VERSION.tar.gz
|
2014-07-08 00:37:53 +00:00
|
|
|
tar -C /usr/local/lib -zxf /tmp/roundcube.tgz
|
2014-10-20 12:48:12 +00:00
|
|
|
rm -rf /usr/local/lib/roundcubemail
|
2014-09-24 12:46:42 +00:00
|
|
|
mv /usr/local/lib/roundcubemail-$VERSION/ /usr/local/lib/roundcubemail
|
2014-07-08 00:37:53 +00:00
|
|
|
rm -f /tmp/roundcube.tgz
|
2014-09-24 12:46:42 +00:00
|
|
|
echo $VERSION > /usr/local/lib/roundcubemail/version
|
2014-07-08 00:37:53 +00:00
|
|
|
fi
|
2013-09-07 20:53:25 +00:00
|
|
|
|
2014-09-21 20:05:11 +00:00
|
|
|
# ### Configuring Roundcube
|
|
|
|
|
2014-07-08 00:37:53 +00:00
|
|
|
# Generate a safe 24-character secret key of safe characters.
|
2014-08-26 20:16:31 +00:00
|
|
|
SECRET_KEY=$(dd if=/dev/random bs=1 count=18 2>/dev/null | base64 | fold -w 24 | head -n 1)
|
2014-07-08 00:37:53 +00:00
|
|
|
|
|
|
|
# Create a configuration file.
|
|
|
|
#
|
|
|
|
# For security, temp and log files are not stored in the default locations
|
|
|
|
# which are inside the roundcube sources directory. We put them instead
|
|
|
|
# in normal places.
|
2014-09-21 20:05:11 +00:00
|
|
|
cat > /usr/local/lib/roundcubemail/config/config.inc.php <<EOF;
|
2014-07-08 00:37:53 +00:00
|
|
|
<?php
|
|
|
|
/*
|
|
|
|
* Do not edit. Written by Mail-in-a-Box. Regenerated on updates.
|
|
|
|
*/
|
|
|
|
\$config = array();
|
|
|
|
\$config['log_dir'] = '/var/log/roundcubemail/';
|
|
|
|
\$config['temp_dir'] = '/tmp/roundcubemail/';
|
|
|
|
\$config['db_dsnw'] = 'sqlite:///$STORAGE_ROOT/mail/roundcube/roundcube.sqlite?mode=0640';
|
|
|
|
\$config['default_host'] = 'ssl://localhost';
|
|
|
|
\$config['default_port'] = 993;
|
|
|
|
\$config['imap_timeout'] = 15;
|
|
|
|
\$config['smtp_server'] = 'tls://localhost';
|
|
|
|
\$config['smtp_port'] = 587;
|
|
|
|
\$config['smtp_user'] = '%u';
|
|
|
|
\$config['smtp_pass'] = '%p';
|
|
|
|
\$config['support_url'] = 'https://mailinabox.email/';
|
|
|
|
\$config['product_name'] = 'Mail-in-a-Box/Roundcube Webmail';
|
|
|
|
\$config['des_key'] = '$SECRET_KEY';
|
2014-07-10 07:40:51 +00:00
|
|
|
\$config['plugins'] = array('archive', 'zipdownload', 'password', 'managesieve');
|
2014-07-11 21:52:46 +00:00
|
|
|
\$config['skin'] = 'classic';
|
2014-07-08 00:37:53 +00:00
|
|
|
\$config['login_autocomplete'] = 2;
|
|
|
|
\$config['password_charset'] = 'UTF-8';
|
|
|
|
\$config['junk_mbox'] = 'Spam';
|
|
|
|
?>
|
|
|
|
EOF
|
|
|
|
|
|
|
|
# Create writable directories.
|
|
|
|
mkdir -p /var/log/roundcubemail /tmp/roundcubemail $STORAGE_ROOT/mail/roundcube
|
2015-01-24 10:29:16 +00:00
|
|
|
chown -R www-data:www-data /var/log/roundcubemail /tmp/roundcubemail $STORAGE_ROOT/mail/roundcube
|
2013-09-07 20:53:25 +00:00
|
|
|
|
2014-04-30 17:07:15 +00:00
|
|
|
# Password changing plugin settings
|
|
|
|
# The config comes empty by default, so we need the settings
|
|
|
|
# we're not planning to change in config.inc.dist...
|
2014-07-08 00:37:53 +00:00
|
|
|
cp /usr/local/lib/roundcubemail/plugins/password/config.inc.php.dist \
|
|
|
|
/usr/local/lib/roundcubemail/plugins/password/config.inc.php
|
2014-04-30 17:07:15 +00:00
|
|
|
|
2014-07-08 00:37:53 +00:00
|
|
|
tools/editconf.py /usr/local/lib/roundcubemail/plugins/password/config.inc.php \
|
|
|
|
"\$config['password_minimum_length']=6;" \
|
|
|
|
"\$config['password_db_dsn']='sqlite:///$STORAGE_ROOT/mail/users.sqlite';" \
|
|
|
|
"\$config['password_query']='UPDATE users SET password=%D WHERE email=%u';" \
|
|
|
|
"\$config['password_dovecotpw']='/usr/bin/doveadm pw';" \
|
|
|
|
"\$config['password_dovecotpw_method']='SHA512-CRYPT';" \
|
|
|
|
"\$config['password_dovecotpw_with_method']=true;"
|
2013-09-07 20:53:25 +00:00
|
|
|
|
2014-07-08 00:37:53 +00:00
|
|
|
# so PHP can use doveadm, for the password changing plugin
|
2014-04-30 17:07:15 +00:00
|
|
|
usermod -a -G dovecot www-data
|
|
|
|
|
|
|
|
# set permissions so that PHP can use users.sqlite
|
|
|
|
# could use dovecot instead of www-data, but not sure it matters
|
2015-01-24 10:29:16 +00:00
|
|
|
chown root:www-data $STORAGE_ROOT/mail
|
2014-04-30 17:07:15 +00:00
|
|
|
chmod 775 $STORAGE_ROOT/mail
|
2015-01-24 10:29:16 +00:00
|
|
|
chown root:www-data $STORAGE_ROOT/mail/users.sqlite
|
2014-04-30 18:50:11 +00:00
|
|
|
chmod 664 $STORAGE_ROOT/mail/users.sqlite
|
2014-04-30 17:07:15 +00:00
|
|
|
|
2014-04-18 00:17:24 +00:00
|
|
|
# Enable PHP modules.
|
|
|
|
php5enmod mcrypt
|
2014-08-12 11:00:54 +00:00
|
|
|
restart_service php5-fpm
|