# Upgrade iRedMail from 0.8.1 to 0.8.2

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

- 2012-09-21: Add link of upgrading iRedAdmin open source edition.
- 2012-09-21: Add link of upgrading iRedAPD.
- 2012-09-21: Add link of upgrading Roundcube webmail.
- 2012-09-21: [LDAP] checkpoint setting must be added after line "suffix dc=xxx,dc=xxx". Thanks Jonathan Vomacka <jjvomacka _at_ gmail.com> for the report.
- 2012-09-08: Add SQL changes for MySQL and PostgreSQL backend, 3 new columns are required: mailbox.isadmin, mailbox.isglobaladmin, mailbox.language.
- 2012-09-08: Remove SpamAssassin score setting: SPF_PASS, SPF_FAIL.
- 2012-06-22: [LDAP] Add checkpoint setting in slapd.conf, used for BDB recovery
- 2012-06-22: [LDAP] Return correct maildir path while using virtual transport.
- 2012-06-21: Add missing log rotate setting for Dovecot log files on OpenBSD and FreeBSD.
- 2012-06-17: [LDAP] Use the latest iRedMail LDAP schema file.
- 2012-06-14: Fix incorrect log rotate setting for iRedAPD on FreeBSD.

## 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.2

### 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

### Remove improper SpamAssassin SPF score settings

Please remove below two settings in SpamAssassin config file:

- On Linux and OpenBSD, it's `/etc/mail/spamassassin/local.cf`.
- On FreeBSD, it's `/usr/local/etc/mail/spamassassin/local.cf`.

    # Part of file: etc/mail/spamassassin/local.cf

    score SPF_PASS -10.000
    score SPF_FAIL 5.00

### Add missing log rotate settings for Dovecot log files on OpenBSD

NOTE: This is only applicable to OpenBSD.

Please add below two lines in `/etc/newsyslog.conf` to rotate Dovecot log files: `/var/log/dovecot.log`, `/var/log/sieve.log`.

    # Part of file: /etc/newsyslog.conf

    /var/log/dovecot.log    vmail:vmail     600  7     *    24    Z "doveadm log reopen"
    /var/log/sieve.log      vmail:vmail     600  7     *    24    Z "doveadm log reopen"

### Add missing log rotate settings for Dovecot log files on FreeBSD

NOTE: This fix is only applicable to FreeBSD.

Please add below two lines in `/etc/newsyslog.conf` to rotate Dovecot log files: `/var/log/dovecot.log`, `/var/log/sieve.log`.

    # Part of file: /etc/newsyslog.conf

    /var/log/dovecot.log    vmail:vmail     600  7     *    24    Z    /var/run/dovecot/master.pid
    /var/log/sieve.log      vmail:vmail     600  7     *    24    Z    /var/run/dovecot/master.pid

### Fix incorrect rotate setting for iRedAPD log file on FreeBSD

NOTE: This fix is only applicable to FreeBSD.

iRedMail-0.8.1 defines incorrectly path of iRedAPD PID file in `/etc/newsyslog.conf`, so please fix it manually by editing `/etc/newsyslog.conf`.

- Make sure you have below line in `/etc/newsyslog.conf`:

    # Part of file: /etc/newsyslog.conf

    /var/log/iredapd.log    root:wheel      640  7     *    24    Z /var/run/iredapd.pid

Be careful, don't use quotes around path of pid file.

- Then restart syslogd service:

    # /etc/rc.d/syslogd restart

## OpenLDAP backend special

### Use the newest schema file

Changes in the newest LDAP schema file shipped in iRedMail-0.8.2:

- It allows normal mail user to use attribute `domainGlobalAdmin`. With this attribute, you can mark mail user as a global admin to manage mail accounts with iRedAdmin-Pro.
- It allows mail list to use `shadowAddress` for alias domain support.

To use the newest iRedMail ldap schem file, we have to:

- Download the newest iRedMail ldap schema file
- Copy old ldap schema file as a backup copy
- Replace the old one
- Restart OpenLDAP service.

Here we go:

- On RHEL/CentOS/Scientific Linux (both release 5.x and 6.x), openSUSE, Gentoo, OpenBSD:

    # cd /tmp
    # wget https://github.com/iredmail/iRedMail/raw/1.0/samples/iredmail/iredmail.schema

    # cd /etc/openldap/schema/
    # cp iredmail.schema iredmail.schema.bak

    # cp -f /tmp/iredmail.schema /etc/openldap/schema/
    # /etc/init.d/slapd restart       # <-- Or: /etc/init.d/ldap restart

- On Debian/Ubuntu:

    # cd /tmp
    # wget https://github.com/iredmail/iRedMail/raw/1.0/samples/iredmail/iredmail.schema

    # cd /etc/ldap/schema/
    # cp iredmail.schema iredmail.schema.bak

    # cp -f /tmp/iredmail.schema /etc/ldap/schema/
    # /etc/init.d/slapd restart

- On FreeBSD:

    # cd /tmp
    # wget https://github.com/iredmail/iRedMail/raw/1.0/samples/iredmail/iredmail.schema

    # cd /usr/local/etc/openldap/schema/
    # cp iredmail.schema iredmail.schema.bak

    # cp -f /tmp/iredmail.schema /usr/local/etc/openldap/schema/
    # service slapd restart

### Return correct maildir path while using `virtual` transport

Postfix setting `virtual_mailbox_maps` doesn't return correct maildir path. Usually, this is fine because iRedMail uses transport program provided by Dovecot (command name `deliver`). But if you want to use Postfix built-in transport program `virtual`, mails will be delivered to incorrect path.

To fix it, please open `/etc/postfix/ldap/virtual_mailbox_maps.cf` (on Linux and OpenBSD) or `/usr/local/etc/postfix/ldap/virtual_mailbox_maps.cf` (on FreeBSD), append parameter `result_format = %s/Maildir/` line after line `result_attribute= mailMessageStore`.

    # Part of file: etc/postfix/ldap/virtual_mailbox_maps.cf

    result_attribute = mailMessageStore
    result_format   = %s/Maildir/

Restarting Postfix service is required.

### Add checkpoint setting in slapd.conf, used for BDB recovery

Add below lines in your OpenLDAP config file, `slapd.conf`, after the line `suffix dc=xxx,dc=xxx`. Please read comments below for more details about what it's used for.

    * On RHEL/CentOS/Scientific Linux, openSUSE, Gentoo, OpenBSD, it's `/etc/openldap/slapd.conf`.
    * On Debian, Ubuntu, it's `/etc/ldap/slapd.conf`.
    * On FreeBSD, it's `/usr/local/etc/openldap/slapd.conf`.

    # Part of file: slapd.conf

    # This directive specifies how often to checkpoint the BDB transaction log.
    # A checkpoint operation flushes the database buffers to disk and writes a
    # checkpoint record in the log. The checkpoint will occur if either <kbyte>
    # data has been written or <min> minutes have passed since the last checkpoint.
    # Both arguments default to zero, in which case they are ignored. When the
    # <min> argument is non-zero, an internal task will run every <min> minutes
    # to perform the checkpoint. See the Berkeley DB reference guide for more
    # details.
    #
    # OpenLDAP default is NO CHECKPOINTING.
    #
    # whenever 128kb data bytes written or 5 minutes has elapsed
    checkpoint  128 5

Restarting OpenLDAP service is required.

## MySQL backend special

### Add 3 new columns required by iRedAdmin

New version of iRedAdmin (both open source edition and iRedAdmin-Pro) requires three new columns: `mailbox.isadmin`, `mailbox.isglobaladmin`, `mailbox.language`.

    * With `mailbox.isadmin=1`, this user is a domain admin.
    * With `mailbox.isadmin=1` AND `mailbox.isglobaladmin=1`, this user is a
      global admin.
    * Column `mailbox.language` is used to store short code of language. e.g.
      de_DE for German, cs_CZ for Czech.

Please login to MySQL server as root user, execute SQL commands to add required columns and indexes.

    # mysql -uroot -p
    mysql> USE vmail;
    mysql> ALTER TABLE mailbox ADD COLUMN isadmin TINYINT(1) NOT NULL DEFAULT 0;
    mysql> ALTER TABLE mailbox ADD COLUMN isglobaladmin TINYINT(1) NOT NULL DEFAULT 0;
    mysql> ALTER TABLE mailbox ADD COLUMN language VARCHAR(5) NOT NULL DEFAULT 'en_US';
    mysql> ALTER TABLE mailbox ADD INDEX (isadmin);
    mysql> ALTER TABLE mailbox ADD INDEX (isglobaladmin);

## PostgreSQL backend special

### Add 3 new columns required by iRedAdmin

New version of iRedAdmin (both open source edition and iRedAdmin-Pro) requires three new columns: `mailbox.isadmin`, `mailbox.isglobaladmin`, `mailbox.language`.

    * With `mailbox.isadmin=1`, this user becomes a domain admin.
    * With `mailbox.isadmin=1` AND `mailbox.isglobaladmin=1`, this user becomes
      a global admin.
    * Column `mailbox.language` is used to store short code of language. e.g.
      de_DE for German, cs_CZ for Czech.

Please switch to PostgreSQL daemon user, then execute SQL commands to add required columns and indexes:

    * On Linux, PostgreSQL daemon user is `postgres`.
    * On FreeBSD, PostgreSQL daemon user is `pgsql`.
    * On OpenBSD, PostgreSQL daemon user is `_postgresql`.

    # su - postgres
    $ psql -d vmail
    sql> ALTER TABLE mailbox ADD COLUMN isadmin INT2 NOT NULL DEFAULT 0;
    sql> ALTER TABLE mailbox ADD COLUMN isglobaladmin INT2 NOT NULL DEFAULT 0;
    sql> ALTER TABLE mailbox ADD COLUMN language VARCHAR(5) NOT NULL DEFAULT 'en_US';
    sql> CREATE INDEX idx_mailbox_isadmin ON mailbox (isadmin);
    sql> CREATE INDEX idx_mailbox_isglobaladmin ON mailbox (isglobaladmin);