Playing Dead Space 3 on Linux using Wine

Found a number of reviews online where people got this running with zero issues. I had loads of issues, mostly with Origin not loading properly when installing. Well I recently discovered Lutris, and I absolutely love it. It’s like a successor to PlayOnLinux (A project I now consider dead). Lutris is an open gaming platform that collects all kinds of games that are available for Linux, be it native through wine or an emulator (SNES, PSP .. etc).

The breakthrough I had here was that I could get Origin to install via the installer that comes for it in Lutris.

Step 1: Install Lutris (Current version: 0.4.18)

Step 2: Using Lutris, install Origin. Pick the x64 installer, not the DXVK one. The Wine version used when I installed was staging-3.12-x86_64. Let the installer finish, then login.

Step 3: Install Dead Space 3 via Origin. It will download, then ask you to install it. Nothing will happen for a while, and if you try to turn off Origin, it will tell you that the game is still being installed. Wait for five minutes, then right click the game in Origin, and chose “Repair”. After the game files have been verified, you should go to menu in Origin: “Origin -> Application Settings”. The most important feature to turn off is “More -> Origin in-game”. I turned off everything under all tabs, except for “Install & Games -> Cloud storage -> Saves”.

Complete list of what I disabled:

Application

  • “Show Origin after gameplay”
  • “Automatic game updates”
  • “Automatically update Origin”
  • “Automatically start Origin”
  • “Origin Helper service”

Diagnostics

  • “Share hardware info”

Notifications

  • Everything

More -> Origin in-game

  • Enable Origin In-Game (Misleading, but it means I disabled it)

After doing this, turn on the game through Origin. You need to go to settings and then visual settings in the game. Set the resolution to your preferred one (1920×1080 for me), and disable v-sync.

For good measure you can now turn off the game, and Origin; then start Origin and the game from Lutris to make sure it still works. That’s it. With the above instructions, the game runs smooth and flawlessly for me.

ds3

Enjoy!

Playing Life Is Strange: Before the Storm on Linux using Wine

This doesn’t really need much explanation since it’s platinum on WineHQ at the moment. If you know how Wine works, you don’t need the info in this post; but if you need a push then this can help. Basically the script, like in other posts I’ve made, will simply install steam and set everything up for you. Then, you have to install the game via Steam and you’re good to go. The desktop file at the end of the post is just for simplicity so that it’s easier to run, but you can run it manually or just create another launcher if you want.

I will gradually make my install scripts better, but this works for now. I’ve always used PlayOnLinux before, but since that platform hasn’t gotten much love lately; I decided to abandon it. I’ve tried multiple times to update my scripts on POL, but nothing ever happens since you need an admin to accept your changes all the time. Thus, I have decided to simply make bash scripts to install all my games, and share my results here. The goal is to have a general script template that I can use (that makes it more user friendly) that helps me and others to install games on Linux using Wine (without making it a larger project like POL). Anyway, enjoy :- ).

https://appdb.winehq.org/objectManager.php?sClass=version&iId=35717

But I’ll include the Steam install script anyway, plus the desktop file to launch it. An important detail about installing this, is that it has to be installed in a 64-bit prefix in Wine.

if ! [ -x "$(command -v wine)" ]; then
        echo "Installing latest wine"
        #Update all repos
        sudo apt-get update

        #Enable 32bit (If you're on 64bit)
        sudo dpkg --add-architecture i386

        #Add wine repo
        wget -nc https://dl.winehq.org/wine-builds/Release.key
        sudo apt-key add Release.key
        sudo apt-add-repository https://dl.winehq.org/wine-builds/ubuntu/

        #Install wine-devel (3.11)
        sudo apt-get update
        sudo apt-get install --install-recommends winehq-devel
fi

#Install latest winetricks
echo "Installing latest winetricks"
wget  https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
chmod +x winetricks
sudo mv winetricks /usr/bin

echo "Installing Steam and various"
mkdir -p ~/.wine-apps/lis
WINEARCH=win64 WINEPREFIX=~/.wine-apps/lis/ winetricks tahoma corefonts ie8 allfonts steam

if you get an error saying “The content servers are unreachable” when trying to install the game via steam, then the following Reddit thread might be able to help you with that.

Also, if you want to have a launcher that you can search for in Unity or Gnome, then just create the file steam-lis.desktop with this content (replace USER with your username).

sudo vim /usr/share/applications/steam-lis.desktop

[Desktop Entry]
Name=Steam Life Is Strange - Before The Storm
Exec=env WINEPREFIX="/home/USER/.wine-apps/lis/" wine "/home/USER/.wine-apps/lis/drive_c/Program Files (x86)/Steam/Steam.exe" -no-cef-sandbox
Type=Application
StartupNotify=true
Path="/home/USER/.wine-apps/lis/drive_c/Program Files (x86)/Steam/"
Icon=BAC4_steam.0
StartupWMClass=steam.exe
Name[en_US]=Steam - Life Is Strange - Before The Storm

 

 

Playing Final Fantasy XIV (FFXIV) on Linux using Wine

There’s a pretty neat Reddit thread about this issue, but I don’t want to use Gallium so I just made a simple script to install it for me. Since it took a bit of experimenting to get it work (In the end it was all about the wine version, and not many other prerequisites were needed) I’m posting it in case others find it useful. Note that the last line is how you start the game later, so just make a start script or a desktop shortcut to start it afterwards.

Distro: Ubuntu 18.04 (x64)

if ! [ -x "$(command -v wine)" ]; then
	echo "Installing latest wine"
	#Update all repos
	sudo apt-get update
 
	#Enable 32bit (If you're on 64bit)
	sudo dpkg --add-architecture i386

	#Add wine repo
	wget -nc https://dl.winehq.org/wine-builds/Release.key
	sudo apt-key add Release.key
	sudo apt-add-repository https://dl.winehq.org/wine-builds/ubuntu/
 
	#Install wine-stable (3.0.1)
	sudo apt-get update
	sudo apt-get install --install-recommends winehq-stable
fi

echo "Installing latest winetricks"
wget  https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
chmod +x winetricks
sudo mv winetricks /usr/bin

echo "Creating FFXIV Wine prefix"
mkdir ~/.ffxiv
cd ~/.ffxiv

echo "Downloading FFXIV setup file"
wget http://gdl.square-enix.com/ffxiv/inst/ffxivsetup.exe

echo "Installing required files with winetricks"
WINEARCH=win32 WINEPREFIX=~/.ffxiv winetricks -q corefonts allfonts tahoma #ie8 wininet winhttp wmp9 wmp10 xinput ie8_kb2936068 devenum quartz hosts win7

echo "Installing game client"
WINEARCH=win32 WINEPREFIX=~/.ffxiv wine ffxivsetup.exe

echo "Starting game client. Please login and install the game"
cd "drive_c/Program Files/SquareEnix/FINAL FANTASY XIV - A Realm Reborn/boot"
WINEARCH=win32 WINEPREFIX=~/.ffxiv wine ffxivboot.exe

 

Playing visual novels on Linux using Wine

So I play a lot of visual novels these days. One problem is that most of them are only released on Windows, and I don’t use Windows. So for that I use Wine. Below is a simple script to setup Steam with Wine so that you can play the visual novels available through Steam. Make sure you check the visual novel on steam before you use this solution however, since some of them do have Linux support and can be run via the Steam Linux client.

Distro: Ubuntu 18.04 (x64)

if ! [ -x "$(command -v wine)" ]; then
	echo "Installing latest wine"
	#Update all repos
	sudo apt-get update

	#Enable 32bit (If you're on 64bit)
	sudo dpkg --add-architecture i386

	#Add wine repo
	wget -nc https://dl.winehq.org/wine-builds/Release.key
	sudo apt-key add Release.key
	sudo apt-add-repository https://dl.winehq.org/wine-builds/ubuntu/

	#Install wine-stable (3.0.1)
	sudo apt-get update
	sudo apt-get install --install-recommends winehq-stable
fi

#Install latest winetricks
echo "Installing latest winetricks"
wget  https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
chmod +x winetricks
sudo mv winetricks /usr/bin

echo "Installing Steam and various"
mkdir -p ~/.wine-apps/steam
WINEARCH=win32 WINEPREFIX=~/.wine-apps/steam/ winetricks tahoma corefonts ie8 allfonts steam

echo "Login to steam and install the Visual Novel"

 

Also, if you need a desktop icon for the Steam client, you can put it in the file /usr/share/applications/steam-windows.desktop (Remember to replace USER with your username).

[Desktop Entry]
Name=Steam
Exec=env WINEPREFIX="/home/USER/.wine-apps/steam" wine "/home/USER/.wine-apps/steam/drive_c/Program Files/Steam/Steam.exe" -no-cef-sandbox
Type=Application
StartupNotify=true
Path=/home/USER/.wine-apps/steam/dosdevices/c:/Program Files/Steam
Icon=BAC4_steam.0
StartupWMClass=steam.exe
Name[en_US]=Steam - Windows

 

For other visual novels not on Steam, I just create a folder called “Games” under “/home/USER/.wine-apps/steam/dosdevices/c:/Program Files/” and put them there. Then you can add another shortcut to that specific game like below.

[Desktop Entry]
Name=VisualNovel
Exec=env WINEPREFIX="/home/USER/.wine-apps/steam" wine "/home/USER/.wine-apps/steam/drive_c/Program Files/Games/VN/VisualNovel.exe"
Type=Application
StartupNotify=true
Path=/home/USER/.wine-apps/steam/dosdevices/c:/Program Files/Games
Icon=/path/to/icon/file
StartupWMClass=VisualNovel.exe
Name[en_US]=VisualNovel

For steam download issue: https://www.reddit.com/r/wine_gaming/comments/8r0gh6/steam_in_winedevel_content_servers_unreachable/

Also, some visual novels outside of Steam may run into all sorts of problems. You can install a separate Wine prefix for that and do individual settings for such games. The following worked for me for one game that crashed when going into full screen. Generally I try to stick with the ones on Steam as I keep having the most luck with them using Wine. Sometimes they simply aren’t available though.

mkdir -p ~/.wine-apps/vn
WINEARCH=win32 WINEPREFIX=~/.wine-apps/vn/ winetricks tahoma corefonts ie8 allfonts d3dx9_36 wmp9 quartz ddr=gdi win7

#Start game
env WINEPREFIX="/home/USER/.wine-apps/vn" wine "/home/USER/.wine-apps/vn/drive_c/Program Files/Games/vn/vn.exe"

 

Installing EiskaltDC++ 2.2.10 on Ubuntu 18.04

Nothing really special, I just keep forgetting which packages I need (And it’s bothersome to keep going through the list of requirements). So here’s a quick guide/script of how to download and compile it. Mostly for myself, but I thought maybe someone else could make use of it.

sudo apt-get -y build-dep eiskaltdcpp-qt eiskaltdcpp eiskaltdcpp-cli eiskaltdcpp-common libeiskaltdcpp-devlibeiskaltdcpp-dev

sudo apt-get -y install libqt5core5a qt5-default qttools5-dev-tools qtmultimedia5-dev libbz2-dev libssl1.0-dev libidn11-dev libboost1.65-dev libaspell-dev libre2-dev libminiupnpc-dev lua5.1 liblua5.1-dev liblua50-dev libboost-system1.65-dev qml-module-qtquick2 libdee-qt5-dev qtscript5-dev qtdeclarative5-dev libqt4-dev libqt4-declarative

git clone https://github.com/eiskaltdcpp/eiskaltdcpp.git

cd eiskaltdcpp/

mkdir builddir && cd builddir

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DUSE_QT=ON -DUSE_GTK=ON -DUSE_JS=ON -DUSE_ASPELL=ON -DUSE_QT_QML=ON -DUSE_QT_SQLITE=ON -DLUA_SCRIPT=ON -DWITH_LUASCRIPTS=ON -DWITH_SOUNDS=ON -DPERL_REGEX=ON -DNO_UI_DAEMON=ON -DJSONRPC_DAEMON=ON -DUSE_CLI_JSONRPC=ON -DUSE_MINIUPNP=ON -DLOCAL_MINIUPNP=ON ..

make

sudo make install

‘make install’ will create a desktop file for you, so you should be able to reach it from whatever menu system you’re using, and add it to favorites/create a shortcut. I know there are some stuff that could be improved, but meh. If anyone feels like pointing them out, then feel free to do so 🙂

Don’t litter

I’ve always hate when people throw their thrash around. My opinion about someone can go from “respectable citizen that I look up to” to “Obvious douche-bag that doesn’t respect anyone but him/herself” if I see them throw stuff on the ground. I often see people do it, and I try to lecture them whenever I catch them in the act. My hopes are of course that they will feel at least some bit of shame and maybe change their behaviour in the future.

Anyway, so near our apartment there’s this recycling station. A few containers where you can throw paper, plastic, metal and glass. The usual. Once a week there’s this pile of crap that keeps showing up. It almost always follows the same pattern and always ends up at the same spot, which makes me think that it might be the same person doing it. The trash in the pile is usually empty boxes from some fast food place (kebab and then some text in Arabic or something) and then usually a few electronics.

It always irritates me to the point where I would like to catch them in the act. But I never do. Well, until now. Or I didn’t really catch them in the act. It was more about what they dumped this time. On Wednesday this week, in the morning when I was leaving some plastic in the container, I noticed something in the “illegally placed trash pile”. Two computers (My time to shine)! I checked if there were any hard drives in them, and there were. So I decided that if the machines were still there when I came back after work, I would go there with a screwdriver and take out the drives. I was a bit worried since it was the day when they usually empty the containers, so the risk was that they would just bring the computers with them when they emptied everything else.

When I came back after work, the containers were empty but the computers were still there on the ground. So I went home, took a screwdriver and went back. It was a strange case that had a locking mechanism for the hard drives which was not easy to get off. Also, during the time I was sitting there in the dark with my screwdriver and flashlight, someone came to empty their recyclables. I quickly stood up and hid my stuff under a plastic bag, then proceeded to empty some plastic I had brought with me, in the container (to seem less suspicious. It’s all about the looks!). When the person had left I continue with my secret mission, and managed to take out all three drives.

I plugged them into my dock at home and took a quick look at the first drive. Unformated as expected with Windows Vista installed (bleh). I created a virtual drive for VirtualBox so that I could try to start the operating system on it.

VBoxManage internalcommands createrawvmdk -filename “henrietta.vmdk” -rawdisk /dev/sdg

However, the operating system was damaged and the repair process didn’t seem to work. It might have been a driver issue since it tried to load some ATI drivers before it crashed every time. I wasn’t too interested in spending a large amount of time on this, so I proceeded to just look at the data on the drive from my Linux machine. It appears to have been owned by a Ukranian lady (both machines seems to have been owned by her). They could of course have been stolen from her, so shouldn’t be too quick to blame. But i rule that out as the browser history and the programs installed all followed a consistent pattern, and all accounts saved in the browser (chrome) were using the same email and password. For the sake of our lady of the day (Henrietta), I will not disclose any detailed personal info.

The first hard drive with Windows Vista contained everything I would need to hijack the targets Internet life.

  • Browser history
  • Cookies
  • Email address (henr*************@hotmail.com)
  • Account names
  • Passwords
  • Personal files (A lot of text documents)
  • Images (hundreds)
  • Videos
  • Music

And loads of other sensitive data. I took a look at the data and then I threw everything away. No accounts were ever tested or anything unethical like that. One could argue that just taking theses drives were unethical, but if you throw something on the ground with the intention of dumping it where it’s not supposed to be, you sort of resign your ownership of it. Still there is the possibility of it being stolen. None of the operating systems worked on the machines, and the hardware was very old and some of the cards were even visibly broken. So I doubt it was stolen and then dumped there. Why would a thief go to the trouble of dumping it at “almost” the right location.

The second harddrive followed the same pattern but had Windows XP installed on it. The same user and the same type of websites had been visited. It also had a data partition with hundreds of family photos, photos of the suspected owner, and all sorts of sensitive personal data.

The third drive was completely dead and I didn’t put any more time into it.

All drives will be given to a friend who will physically destroy them (take them apart and render them useless).

Anyway, if you’re a complete ass who can’t take responsibility for your crap and just throw everything around you as you please, at least don’t throw crap that could potentially be traced back to you. Or, maybe continue, so that it’s easier to catch you. Right, Henrietta?

Installing Postfix and Courier with MySQL and SASL on Debian 7

I recently had to move to a new server and had some troube getting Postfix and Courier to work as I wanted. The tutorial I used to follow a bunch of years ago is gone and the tutorials I found were either outdated, wrong or didn’t do it my way. So with some inspiration from other tutorials including the old one I used to have, I have written my own modified version.

Step 1: Prepare your certificate now as you will be using it later
If you don’t already have one you can get one for free at StartSSL
This tutorial wont cover the steps at StartSSL as there are other documents for that.

Files that you will need:

– yourcert.crt
– yourprivatekey.key (in a decrypted state for server purpose)
– ca.pem
– sub.class1.server.ca.pem

Place them in a folder like /etc/ssl/StartCom/year-month-day
For example, I use /etc/ssl/StartCom/2015-08-10 since that is the expiration date for one of my certs.
When the files have been placed there you need to do the following:

cat yourcert.crt yourprivatekey.key ca.pem sub.class1.server.ca.pem > combined.pem

This is because Courier wants it in a pem file later, while Postfix wants them separated.
There might be a way to keep it consistent but I haven’t checked.

Also remember to set permissions to this folder!

chown -R root:root /etc/ssl/StartCom
chmod -R 640 /etc/ssl/StartCom

Your private key is in there and you need to protect it.

Step 2: Install required software

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass

Step 3: Setup MySQL database

mysql -u root -p
CREATE mail;
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail'@'localhost' IDENTIFIED BY 'mail_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail'@'localhost.localdomain' IDENTIFIED BY 'mail_password';
FLUSH PRIVILEGES;

USE mail;

CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
ENGINE=MyISAM;

CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
ENGINE=MyISAM;

CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
PRIMARY KEY (email)
) ENGINE=MyISAM;

CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) ENGINE=MyISAM;

exit

Step 4: Configure postfix

Create these files below and paste the content that follows.
Remember to replace the user and password with whatever you chose before.

vim /etc/postfix/mysql-virtual_domains.cf

user = mail
password = mail_password
dbname = mail
table = domains
select_field = 'virtual'
where_field = domain
hosts = 127.0.0.1
vim /etc/postfix/mysql-virtual_forwardings.cf

user = mail
password = mail_password
dbname = mail
table = forwardings
select_field = destination
where_field = source
hosts = 127.0.0.1
vim /etc/postfix/mysql-virtual_mailboxes.cf

user = mail
password = mail_password
dbname = mail
table = users
select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
where_field = email
hosts = 127.0.0.1
vim /etc/postfix/mysql-virtual_email2email.cf

user = mail
password = mail_password
dbname = mail
table = users
select_field = email
where_field = email
hosts = 127.0.0.1
vim /etc/postfix/mysql-virtual_transports.cf

user = mail
password = mail_password
dbname = mail
table = transport
select_field = transport
where_field = domain
hosts = 127.0.0.1

Change permissions of the files

chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf

Create user vmail

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Set options in the Postfix configuration file.
Replace server1.example.com with a FQDN of your server.
Also replace the cert and key file with the cert and key file in your StartCom folder.
For example instead of /etc/postfix/smtpd.cert you write /etc/ssl/StartCom/2015-08-10/yourcert.crt

postconf -e 'myhostname = server1.example.com'
postconf -e 'mydestination = localhost, localhost.localdomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'virtual_alias_domains ='
postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base = /home/vmail'
postconf -e 'virtual_uid_maps = static:5000'
postconf -e 'virtual_gid_maps = static:5000'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_auth_only = yes'
postconf -e 'smtpd_tls_received_header = yes'
postconf -e 'smtpd_helo_required = yes'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'
postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'
postconf -e 'smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3'
postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'

Now open /etc/postfix/master.cf and uncomment the following section.
The format of these lines are important so only remove the comment characters (#) and nothing else.

#smtps     inet  n       -       -       -       -       smtpd
#  -o syslog_name=postfix/smtps
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING

Step 5: Configure Saslauthd

Create a folder for saslauthd

mkdir -p /var/spool/postfix/var/run/saslauthd

Open the following file.
Set START to yes and change the line OPTIONS=”-c -m /var/run/saslauthd” to OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r”.

vim /etc/default/saslauthd

Open the following file and configure pam to use MySQL to authenticate you.

vim /etc/pam.d/smtp
auth    required   pam_mysql.so user=mail passwd=mail_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=mail passwd=mail_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

Edit smtpd.conf and configure sasl to use the sql plugin to authenticate users.

vim /etc/postfix/sasl/smtpd.conf

pwcheck_method: saslauthd
mech_list: plain login
allow_plaintext: true
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: mail
sql_passwd: mail_password
sql_database: mail
sql_select: select password from users where email = '%u@%r'

Add the postfix user to the sasl group

adduser postfix sasl

Restart postfix and saslauthd

/etc/init.d/postfix restart
/etc/init.d/saslauthd restart

Step 6: Configure courier

Edit Courier to use MySQL to authenticate

vim /etc/courier/authdaemonrc

[...]
authmodulelist="authmysql"
[...]
cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null > /etc/courier/authmysqlrc
vim /etc/courier/authmysqlrc

MYSQL_SERVER localhost
MYSQL_USERNAME mail_admin
MYSQL_PASSWORD mail_password
MYSQL_PORT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE users
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD 5000
MYSQL_GID_FIELD 5000
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD "/home/vmail"
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')

Now configure Courier to use your StartSSL cert for imap.
Courier wants the combined pem file.

vim /etc/courier/imapd-ssl

Find the row TLS_CERTFILE and change the path.
For example: TLS_CERTFILE=/etc/ssl/StartCom/2015-08-10/combined.pem

Also find the the following rows and make sure they are set to the values below.

IMAPDSTARTTLS=YES
IMAP_TLS_REQUIRED=1
TLS_PROTOCOL=TLS1
TLS_STARTTLS_PROTOCOL=TLS1

Since I don’t use pop3 I will make sure to disable it.

vim /etc/courier/pop3-ssl

Find the the following row and make sure it’s set to the value below.

POP3DSSLSTART=NO
vim /etc/courier/pop3
POP3DSTART=NO

Restart courier

/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restart

Step 7: Modify aliases

vim /etc/aliases

[...]
postmaster: root
root: postmaster@yourdomain.tld
[...]

Issue this command to update the aliases

newaliases

That should be all.
Don’t forget to populate the database with a user and a domain.

INSERT INTO domains VALUES('somedomain.com');
INSERT INTO users VALUES('user@somedomain.com', ENCRYPT('mypassword'));

If you have any comments or feedback then feel free to leave them in the comment section below.
This tutorial will be updated later with some more security related settings to protect against certain SSL/TLS attacks.