14 KiB
Upgrade iRedMail from 0.8.0 to 0.8.1
[TOC]
ChangeLog
- 2012-06-14: Fix incorrect logrotate setting for iRedAPD on FreeBSD. Thanks openbsdnoob for the report.
- 2012-06-06: Add new column
mailbox.language
in MySQL & PGSQL backends, used by iRedAdmin. - 2012-05-22: Make per-user BCC settings have higher priority than per-domain settings.
- 2012-05-20: Add Dovecot share folder: anyone_shares.
General (All backends should apply these upgrade steps)
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 ...
- Edit
/etc/dovecot/dovecot.conf
, add serviceauth-userdb
in sectionservice auth {}
:
# Part of file: dovecot.conf
service auth {
...
unix_listener auth-userdb {
user = vmail
group = vmail
mode = 0660
}
}
- Restarting Dovecot service is required.
Add missing config for IMAP share folder in Dovecot
NOTE: This is applicable to both Dovecot-1.2 and Dovecot-2.
-
Edit
/etc/dovecot/dovecot-share-folder.conf
, append below lines:- The config file is
/etc/dovecot/share-folder.conf
if you're running old iRedMail versions, and it's/usr/local/etc/dovecot/dovecot-share-folder.conf
on FreeBSD.
- The config file is
# 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
}
}
- Restarting Dovecot service is required.
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.
- For FreeBSD, please append below line to
/etc/newsyslog.conf
to rotate iRedAPD log file:
# Part of file: /etc/newsyslog.conf
/var/log/iredapd.log root:wheel 640 7 * 24 Z /var/run/iredapd.pid
- For OpenBSD, please append below line to
/etc/newsyslog.conf
to rotate iRedAPD log file:
# 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.
-
Edit Postfix config file,
main.cf
, updatevirtual_alias_maps
to replacesender_login_maps.cf
byvirtual_group_members_maps.cf
:- On Linux and OpenBSD, it's
/etc/postfix/main.cf
. - On FreeBSD, it's
/usr/local/etc/postfix/main.cf
. And you should use/usr/local/etc/postfix/ldap/virtual_group_members_maps.cf
in Postfix setting described below.
- On Linux and OpenBSD, it's
# 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, ...
-
Create new file
virtual_group_members_maps.cf
:- Copy
sender_login_maps.cf
tovirtual_group_members_maps.cf
. - Edit
virtual_group_members_maps.cf
, replaceenabledService=smtp
byenabledService=deliver
and save it.
- Copy
# Part of file: virtual_group_members_maps.cf
# ---- OLD SETTING ----
#query_filter = ...(enabledService=smtp)...
# ---- NEW SETTING ----
query_filter = ...(enabledService=deliver)...
- Fix file permission:
# ---- 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
- Restarting Postfix service is required.
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.
- Download python script used to adding missing values.
# cd /root/
# wget https://bitbucket.org/zhb/iredmail/raw/cb7d2492563d/extra/update/updateLDAPValues_080_to_081.py
- Open
updateLDAPValues_080_to_081.py
, config LDAP server related settings in file head. e.g.
# 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.
- Execute this script, it will add missing values for mail accounts:
# 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.
- Edit
/etc/postfix/mysql/virtual_mailbox_maps.cf
, updatequery =
:
# 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 ...
- Restart Postfix service to make it use new setting.
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.
- Login to MySQL server as root user, execute SQL commands to add required
column
mailbox.enablelib-storage
:
# 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);
- Update
/etc/dovecot/dovecot-mysql.conf
, add ``` (not single quote) aroundenable%Ls%Lc
.
# 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.
- Please login to MySQL server as root user, execute SQL commands to add
required column
mailbox.language
:
# 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.
- Edit
/etc/postfix/mysql/virtual_mailbox_maps.cf
, updatequery =
:
# 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 ...
- Restart Postfix service to make it use new setting.
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.
-
Please switch to PostgreSQL daemon user, and execute SQL commands to add required column
mailbox.enablelib-storage
:- 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
.
- On Linux, the daemon user of PostgreSQL is
# 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;
- Update
/etc/dovecot/dovecot-pgsql.conf
, add quotes for columnmailbox.enable%Ls%Lc
:
# 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.
-
Please switch to PostgreSQL daemon user, and execute SQL commands to add required column
mailbox.language
:- 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
.
- On Linux, the daemon user of PostgreSQL is
# su - postgres
# psql -d vmail
sql> ALTER TABLE mailbox ADD COLUMN language VARCHAR(5) NOT NULL DEFAULT 'en_US';