Upgrade iRedMail from 0.8.0 to 0.8.1

Attention

Check out the lightweight on-premises email archiving software developed by iRedMail team: Spider Email Archiver.

Paid Remote Upgrade Support

We offer remote upgrade support if you don't want to get your hands dirty, check the details and contact us.

ChangeLog

General (All backends should apply these upgrade steps)

Update /etc/iredmail-release with iRedMail version number

iRedMail stores the release version in /etc/iredmail-release after installation, it's recommended to update this file after you upgraded iRedMail, so that you can know which version of iRedMail you're running. For example:

# File: /etc/iredmail-release

0.8.1

Upgrade Roundcube webmail to the latest stable release

Please follow Roundcube official tutorial to upgrade Roundcube webmail to the latest stable release immediately: How to upgrade Roundcube.

Upgrade iRedAPD (Postfix policy server) to the latest stable release

Please follow below tutorial to upgrade iRedAPD to the latest stable release: Upgrade iRedAPD to the latest stable release

Upgrade iRedAdmin (open source edition) to the latest stable release

Please follow this tutorial to upgrade iRedAdmin open source edition to the latest stable release: Upgrade iRedAdmin to the latest stable release

Add missing auth service in Dovecot for Dovecot-2

NOTE: This is applicable to only Dovecot-2.x. You can check Dovecot version and its main config file with command:

# dovecot -n | head -1
2.0.17 ...
# Part of file: dovecot.conf

service auth {
    ...
    unix_listener auth-userdb {
        user = vmail
        group = vmail
        mode = 0660
    }
}

Add missing config for IMAP share folder in Dovecot

NOTE: This is applicable to both Dovecot-1.2 and Dovecot-2.

# Part of file: dovecot-share-folder.conf

# To share mailbox to anyone, please uncomment 'acl_anyone = allow' in
# dovecot.conf
map {
    pattern = shared/shared-boxes/anyone/$from
    table = anyone_shares
    value_field = dummy
    fields {
        from_user = $from
    }
}

Note: We will mention how to create required SQL table later in this upgrade tutorial.

Rotate iRedAPD log file on FreeBSD and OpenBSD

NOTE: This fix is only applicable to FreeBSD and OpenBSD.

# Part of file: /etc/newsyslog.conf

/var/log/iredapd.log    root:wheel      640  7     *    24    Z /var/run/iredapd.pid
# Part of file: /etc/newsyslog.conf

/var/log/iredapd.log    root:wheel      640  7     *    24    Z "/etc/rc.d/iredapd restart"

Then restart syslogd service on either FreeBSD or OpenBSD:

# /etc/rc.d/syslogd restart

OpenLDAP backend special

Deliver emails to mail list members without enabledService=smtp

With default Postfix settings in iRedMail-0.7.4 and earlier versions, if a mail user is not allowed to use SMTP service to send out email (without enabledService=smtp), user cannot receive emails which delivered to the mail lists which the user belongs to. Below steps fix this issue.

# Part of file: main.cf

# OLD SETTING
#virtual_alias_maps = ..., proxy:ldap:/etc/postfix/ldap/sender_login_maps.cf, ...

# NEW SETTING
virtual_alias_maps = ..., proxy:ldap:/etc/postfix/ldap/virtual_group_members_maps.cf, ...
# Part of file: virtual_group_members_maps.cf

# ---- OLD SETTING ----
#query_filter    = ...(enabledService=smtp)...

# ---- NEW SETTING ----
query_filter    = ...(enabledService=deliver)...
# ---- On Linux and FreeBSD ----
# chown root:postfix virtual_group_members_maps.cf
# chmod 0640 virtual_group_members_maps.cf

# ---- On OpenBSD ----
# chown root:_postfix virtual_group_members_maps.cf
# chmod 0640 virtual_group_members_maps.cf

Add new attribute/value required by IMAP share folder in Dovecot: enabledService=lib-storage

Note: This step is required in Dovecot-2.x, but you must apply it no matter which Dovecot version you're running, so that it won't be an issue while you upgrading from Dovecot-1.x to 2.x.

Dovecot-2.x requires enabledService=lib-storage for IMAP folder sharing. Below steps are used to add it for all mail users.

# cd /root/
# wget https://github.com/iredmail/iRedMail/raw/1.0/update/ldap/updateLDAPValues_080_to_081.py
# Part of file: updateLDAPValues_080_to_081.py

uri = 'ldap://127.0.0.1:389'
basedn = 'o=domains,dc=iredmail,dc=org'
bind_dn = 'cn=vmailadmin,dc=iredmail,dc=org'
bind_pw = 'passwd'

You can find required LDAP credential in iRedAdmin config file or iRedMail.tips file under your iRedMail installation directory. Using either cn=Manager,dc=xx,dc=xx or cn=vmailadmin,dc=xx,dc=xx as bind dn is ok.

# python updateLDAPValues_080_to_081.py

Add missing SQL table anyone_shares in MySQL database iredadmin

If you want to share IMAP folder to anyone, you have to create new SQL table anyone_shares in MySQL database iredadmin. Steps:

# mysql -uroot -p
sql> USE iredadmin;
sql> CREATE TABLE IF NOT EXISTS anyone_shares (
    from_user VARCHAR(255) NOT NULL,
    dummy CHAR(1) DEFAULT '1',
    PRIMARY KEY (from_user)
);

Make per-user BCC settings have higher priority than per-domain settings

To make sure per-user BCC settings have higher priority than per-domain settings, please edit Postfix main config file main.cf, reverse the lookup maps in both sender_bcc_maps and recipient_bcc_maps.

* On Linux and OpenBSD, it's `/etc/postfix/main.cf`.
* On FreeBSD, it's `/usr/local/etc/postfix/main.cf`.
# Part of file: main.cf

# OLD SETTINGS
#recipient_bcc_maps = proxy:ldap:/etc/postfix/ldap/recipient_bcc_maps_domain.cf, proxy:ldap:/etc/postfix/ldap/recipient_bcc_maps_user.cf
#sender_bcc_maps = proxy:ldap:/etc/postfix/ldap/sender_bcc_maps_domain.cf, proxy:ldap:/etc/postfix/ldap/sender_bcc_maps_user.cf

# NEW SETTINGS
recipient_bcc_maps = proxy:ldap:/etc/postfix/ldap/recipient_bcc_maps_user.cf, proxy:ldap:/etc/postfix/ldap/recipient_bcc_maps_domain.cf
sender_bcc_maps = proxy:ldap:/etc/postfix/ldap/sender_bcc_maps_user.cf, proxy:ldap:/etc/postfix/ldap/sender_bcc_maps_domain.cf

MySQL backend special

Fix incorrect maildir path with 'virtual' transport

iRedMail uses Dovecot LDA as transport by default, but if you use transport virtual, the Postfix built-in transport, it will use different maildir path from Dovecot LDA. Below step is used to fix it.

# Part of file: mysql/virtual_mailbox_maps.cf

# OLD SETTING
#query       = SELECT CONCAT(mailbox.storagenode, '/', mailbox.maildir) FROM ...

# NEW SETTING
query       = SELECT CONCAT(mailbox.storagenode, '/', mailbox.maildir, '/Maildir/') FROM ...

Make per-user BCC settings have higher priority than per-domain settings

To make sure per-user BCC settings have higher priority than per-domain settings, please edit Postfix main config file main.cf, reverse the lookup maps in both sender_bcc_maps and recipient_bcc_maps.

* On Linux and OpenBSD, it's `/etc/postfix/main.cf`.
* On FreeBSD, it's `/usr/local/etc/postfix/main.cf`.
# Part of file: main.cf

# OLD SETTINGS
#recipient_bcc_maps = proxy:mysql:/etc/postfix/mysql/recipient_bcc_maps_domain.cf, proxy:mysql:/etc/postfix/mysql/recipient_bcc_maps_user.cf
#sender_bcc_maps = proxy:mysql:/etc/postfix/mysql/sender_bcc_maps_domain.cf, proxy:mysql:/etc/postfix/mysql/sender_bcc_maps_user.cf

# NEW SETTINGS
recipient_bcc_maps = proxy:mysql:/etc/postfix/mysql/recipient_bcc_maps_user.cf, proxy:mysql:/etc/postfix/mysql/recipient_bcc_maps_domain.cf
sender_bcc_maps = proxy:mysql:/etc/postfix/mysql/sender_bcc_maps_user.cf, proxy:mysql:/etc/postfix/mysql/sender_bcc_maps_domain.cf

Add new column required by IMAP share folder in Dovecot-2: enablelib-storage=1

Dovecot-2.x requires mailbox.enablelib-storage=1 for IMAP folder sharing. Below steps are used to add it for all mail users.

# mysql -uroot -p
sql> USE vmail;
sql> ALTER TABLE mailbox ADD COLUMN `enablelib-storage` TINYINT(1) NOT NULL DEFAULT 1;
sql> CREATE INDEX idx_mailbox_lib_storage ON mailbox (`enablelib-storage`);

-- Add missing index
sql> CREATE INDEX idx_mailbox_enabledoveadm ON mailbox (enabledoveadm);
# Part of file: dovecot-mysql.conf

# OLD SETTING
#    AND mailbox.enable%Ls%Lc=1 \

# NEW SETTING
    AND mailbox.`enable%Ls%Lc`=1 \

Add missing SQL table anyone_shares in MySQL database vmail

If you want to share IMAP folder to anyone, you have to create new SQL table anyone_shares in MySQL database vmail. Steps:

# mysql -uroot -p
sql> USE vmail;
sql> CREATE TABLE IF NOT EXISTS anyone_shares (
    from_user VARCHAR(255) NOT NULL,
    dummy CHAR(1) DEFAULT '1',
    PRIMARY KEY (from_user)
);

Add new column language in table vmail.mailbox

Column mailbox.language is used to store short code of user preferred language used by iRedAdmin.

# mysql -uroot -p
sql> USE vmail;
sql> ALTER TABLE mailbox ADD COLUMN language VARCHAR(5) NOT NULL DEFAULT 'en_US';

PostgreSQL backend special

Fix incorrect maildir path with 'virtual' transport

iRedMail uses Dovecot LDA as transport by default, but if you use transport virtual, the Postfix built-in transport, it will use different maildir path from Dovecot LDA. Below step is used to fix it.

# Part of file: mysql/virtual_mailbox_maps.cf

# OLD SETTING
#query       = SELECT (mailbox.storagenode || '/' || mailbox.maildir) FROM ...

# NEW SETTING
query       = SELECT CONCAT(mailbox.storagenode, '/', mailbox.maildir, '/Maildir/') FROM ...

Make per-user BCC settings have higher priority than per-domain settings

To make sure per-user BCC settings have higher priority than per-domain settings, please edit Postfix main config file main.cf, reverse the lookup maps in both sender_bcc_maps and recipient_bcc_maps.

* On Linux and OpenBSD, it's `/etc/postfix/main.cf`.
* On FreeBSD, it's `/usr/local/etc/postfix/main.cf`.
# Part of file: main.cf

# OLD SETTINGS
#recipient_bcc_maps = proxy:pgsql:/etc/postfix/pgsql/recipient_bcc_maps_domain.cf, proxy:pgsql:/etc/postfix/pgsql/recipient_bcc_maps_user.cf
#sender_bcc_maps = proxy:pgsql:/etc/postfix/pgsql/sender_bcc_maps_domain.cf, proxy:pgsql:/etc/postfix/pgsql/sender_bcc_maps_user.cf

# NEW SETTINGS
recipient_bcc_maps = proxy:pgsql:/etc/postfix/pgsql/recipient_bcc_maps_user.cf, proxy:pgsql:/etc/postfix/pgsql/recipient_bcc_maps_domain.cf
sender_bcc_maps = proxy:pgsql:/etc/postfix/pgsql/sender_bcc_maps_user.cf, proxy:pgsql:/etc/postfix/pgsql/sender_bcc_maps_domain.cf

Add new column required by IMAP share folder in Dovecot-2: enablelib-storage=1

Dovecot-2.x requires mailbox.enablelib-storage=1 for IMAP folder sharing. Below steps are used to add it for all mail users.

# su - postgres
# psql -d vmail
sql> ALTER TABLE mailbox ADD COLUMN "enablelib-storage" INT2 NOT NULL DEFAULT 1;
sql> CREATE INDEX idx_mailbox_lib_storage ON mailbox ("enablelib-storage");

-- Add missing index
sql> CREATE INDEX idx_mailbox_enabledoveadm ON mailbox (enabledoveadm);

sql> GRANT SELECT ON mailbox TO vmail;
sql> GRANT SELECT,UPDATE,INSERT,DELETE ON mailbox to vmailadmin;
# Part of file: dovecot-pgsql.conf

# OLD SETTING
#    AND mailbox.enable%Ls%Lc=1 \

# NEW SETTING
    AND mailbox."enable%Ls%Lc"=1 \

Add missing SQL table anyone_shares in PostgreSQL database vmail

If you want to share IMAP folder to anyone, you have to create new SQL table anyone_shares in PostgreSQL database vmail. Steps:

* On Linux, the daemon user of PostgreSQL is `postgres`.
* On FreeBSD, the daemon user of PostgreSQL is `pgsql`.
* On OpenBSD, the daemon user of PostgreSQL is `_postgresql`.
# su - postgres
# psql -d vmail
sql> CREATE TABLE anyone_shares (
    from_user VARCHAR(255) NOT NULL,
    dummy CHAR(1),
    PRIMARY KEY (from_user)
);

Add new column language in table vmail.mailbox

Column mailbox.language is used to store short code of user preferred language used by iRedAdmin.

# su - postgres
# psql -d vmail
sql> ALTER TABLE mailbox ADD COLUMN language VARCHAR(5) NOT NULL DEFAULT 'en_US';