Compiling Courier-MTA from sources on Debian buster/sid

Updated on June 26, 2019, for the upcoming Debian GNU/Linux Buster release.

This aims to be a complete, but not necessarily friendly guide, at least as of today. It contains a list of commands and actions I used to compile Courier-MTA from sources on a very basic Debian stable/testing/sid instance (e.g. a mix of stable, testing and sid).

Why? Because current Courier-MTA packages in Debian are nearly unmantained. I’m sure Markus Wanner (current mantainer) is doing his best and I thank him for his work, but I need a way out, should Courier-MTA ever fall orphaned. I’d like to help him or anyone else if I could, but I understand nothing of Debian packaging tecniques, nor Debian packaging policies. I just happen to use Debian because I like it and Courier-MTA for the very same reason, so I better play it safe and learn how to compile Courier-MTA on Debian myself.

Enough words, now the guide:

I started from the Debian setup itself, using a KVM guest. Please adjust things to match your needs (volume group name, logical volume name, ram size, disk size, network bridge name). You can install Debian in many other ways, this is just one of them. I started from the latest stable release (stretch) and added buster and sid afterwards.

root@kvmhost:~# virt-install \
  --name couriermta --ram 2048 \
  --disk vol=tumblevolgroup/vm-couriermta,bus=virtio \
  --vcpus 2 --os-type linux --os-variant generic \
  --network bridge=virbr20,model=virtio \
  --graphics none --console pty,target_type=serial --location \ \
  --extra-ar gs 'console=ttyS0,115200n8 serial'

When tasksel asked what packages to install, I selected only standard system utilities and SSH server. Then I added my favourite packages after the install:

root@couriermta:~# apt-get install vim vim-tiny- screen ntp

Let’s add sid sources, because I like having recent packages available if needed:

root@couriermta:~# cd /etc/apt/sources.list.d
root@couriermta:/etc/apt/sources.list.d# cat > sid.list << EOF

deb sid main contrib
deb-src sid main contrib

But please note that I configure priorities so that my system will prefer stable, and it will install buster/sid packages only if I explicitly ask it to do so:

root@couriermta:/etc/apt/sources.list.d# cd /etc/apt/preferences.d/
root@couriermta:/etc/apt/preferences.d# cat > sid << EOF
Package: *
Pin: release a=stable
Pin-Priority: 990

Package: *
Pin: release a=testing
Pin-Priority: 700

Package: *
Pin: release a=unstable
Pin-Priority: 600

Next we need to install the gcc compiler and toolchain. While we are at it, we also install some libs that we’ll need later, when we’ll be compiling authlib and Courier-MTA itself. Some of these libraries might already be installed in your system, depending on how you installed Debian and what you choose to install in the tasksel step. If they are, no worries, apt will just skip their installation.

# apt-get update
# apt-get install build-essential libltdl-dev \
  libgdbm-dev libgdbm-compat4 \
  libpcre3-dev libidn11-dev libidn2-0-dev \
  libgnutls28-dev libgcrypt20-dev libperl-dev gnutls-bin
[...] Do you want to continue? [Y/n]

Time to add a non-root user I’ll use to compile Courier-MTA source code:

root@couriermta:~# adduser couriermta
Adding user `couriermta' ...
Adding new group `couriermta' (1001) ...
Adding new user `couriermta' (1001) with group `couriermta' ...
Creating home directory `/home/couriermta' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully 
Changing the user information for couriermta
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]
root@couriermta:/etc/apt/preferences.d# mkdir \
  -p /opt/courier/sources
root@couriermta:/etc/apt/preferences.d# chown \
  -R couriermta.couriermta /opt/courier/
root@couriermta:/etc/apt/preferences.d# su - couriermta
couriermta@couriermta:~$ cd /opt/courier/sources/

Let the party begin. We download the source code (unicode library, authlib and Courier-MTA itself):

couriermta@couriermta:/opt/courier/sources$ wget ''
couriermta@couriermta:/opt/courier/sources$ wget ''
couriermta@couriermta:/opt/courier/sources$ wget ''
couriermta@couriermta:/opt/courier/sources$ for i in *.bz2 ; do tar xjf $i ; done

We start compiling and installing the unicode library. Please note that I chose to install it in /opt/courier/unicode, but you can choose any other directory that suits your needs. All commands below, until the end of this giude, will assume you chose /opt/courier/unicode, so you might need to customize them too if you choose a different location:

couriermta@couriermta:/opt/courier/sources$ cd courier-unicode-2.1/
couriermta@couriermta:/opt/courier/sources/courier-unicode-2.1$ ./configure --prefix=/opt/courier/unicode
couriermta@couriermta:/opt/courier/sources/courier-unicode-2.1$ make
couriermta@couriermta:/opt/courier/sources/courier-unicode-2.1$ su
root@couriermta:/opt/courier/sources/courier-unicode-2.1# make install
root@couriermta:/opt/courier/sources/courier-unicode-2.1# exit

Now we compile the authentication library. Likewise, I chose /opt/courier/authlib, but it’s up to you.

$ cd /opt/courier/sources/courier-authlib-0.69.0
$ mkdir ../include
$ ln -s /opt/courier/sources/courier-unicode-2.1/ /opt/courier/sources/include/unicode
$ ./configure --prefix=/opt/courier/authlib CFLAGS='-I/opt/courier/sources/include/unicode' LDFLAGS='-L/opt/courier/unicode/lib'
$ make
$ su
root@couriermta:/opt/courier/sources/courier-authlib-0.69.0# make install
root@couriermta:/opt/courier/sources/courier-authlib-0.69.0# exit

We’re all set, we can now compile Courier-MTA itself:

$ cd ../courier-1.0.8/
$ ln -s /opt/courier/sources/courier-authlib-0.69.0/ /opt/courier/sources/include/authlib
$ export COURIERAUTHCONFIG=/opt/courier/authlib/bin/courierauthconfig 
$ export CPATH=/opt/courier/sources/include/authlib:/opt/courier/sources/include/unicode
$ ./configure --prefix=/opt/courier/courier --with-gnutls --with-notice=unicode CFLAGS="-I/opt/courier/sources/include/authlib -I/opt/courier/sources/include/unicode" LDFLAGS="-L/opt/courier/authlib/lib/courier-authlib -L/opt/courier/unicode/lib"
$ make
$ make check
$ su
root@couriermta:/opt/courier/sources/courier-1.0.8# make install
root@couriermta:/opt/courier/sources/courier-1.0.8# make install-configure

And that’s all about it, meaning Courier-MTA is compiled, assuming you got no error messages with the commands above. However barely compiling it is of no use if we don’t actually run it,  and, before running it, we need a bit of configuration. Let’s add some essential paths to out PATH variable:

# echo 'export PATH=$PATH:/opt/courier/courier/bin:/opt/courier/courier/sbin' >> $HOME/.bashrc

There seemed to be a bug in the imapd script, at least in the August 2018 development release that I used for the first version of this document. Now it seems fixed, anyway I keep this here for a while until I’m sure it’s not needed anymore. The imapd script did not correctly set permissions on the TLS_CACHEFILE. If that happens to you, either manually fix permissions:

# chmod g+rw \
# chgrp daemon \

or manually fix the script:

# vi /opt/courier/courier/share/imapd
replace @authmailuser@ and @authmailgroup@ 
with "daemon", save and exit.

I won’t delve into details of configuring and running Courier-MTA here, because you can find extensive documentation about it at the Courier-MTA website, and there’s nothing Debian specific in that procedure.  However I feel like giving a few final hints.

if you are running a KVM guest in a NAT-ted network of virtual servers, which happens to be my setup, don’t forget to limit the smtpaccess that comes by default with Courier-MTA:

# vi /opt/courier/courier/etc/smtpaccess/default

Comment out the following lines, that are line 13 and line 14 in the release of Courier-MTA I downloaded:

192.168 allow,RELAYCLIENT

Those lines should look like this:

#192.168 allow,RELAYCLIENT

Then run, as root

# makesmtpaccess

That will avoid a open relay inside the virtual servers network (and also outsite it, if you ever map the public IP 25/tcp port to your Courier-MTA instance).

If you plan to use SSL/TLS enctypted connections (and you SHOULD!), you need to provide Courier with valid certificates. You can use LetsEncrypt to obtain valid certificates for your serve for free, but, before that, you may need at least a test (hence not valid) certificate, just to check encrypted connections are actually working.

The mkimapdcert script can be used to create such test certificate. Just run it and you’re done. You can now test your IMAP server with any client: just make sure you tell it to accept your invalid certificate.

That’s all, you can now continue reading the official documentation from the “Installation” chapter on, which will work without modifications in Debian too.

After you have configured Courier basic settings, you may need a handy script to start, stop and gracefully restart Courier. Here’s mine /opt/courier/scripts/


/opt/courier/authlib/sbin/authdaemond $1
/opt/courier/courier/sbin/courierfilter $1
/opt/courier/courier/sbin/courier $1
/opt/courier/courier/sbin/esmtpd $1
/opt/courier/courier/sbin/esmtpd-msa $1

Then I added a /etc/rc.local file containing

/opt/courier/scripts/ start

So far so good. However if you reached this point, you’ll likely want to send emails too. Nowadays sending emails can be a tough job. Times when you could script telnet to forge a sender address and drop messages into random mailboxes are over. A default Courier setup is far better than that, but it does not include DKIM signatures. Please note, DKIM is not mandatory, but its adoption is rising and you might want to jump on that bandwagon too. So let’s install some packages required to compile and run zdkimfilter:

# apt-get install libopendkim-dev opendkim opendkim-tools libunistring-dev

Then we download and compile zdkimfilter. We need to tell configure where to find the courer-config binary and specify a fake courier version manually (the latter because of a bug in version 1.6 of zdkimfilter):

# su - couriermta
$ mkdir /opt/courier/sources/zdkimfilter/
$ cd /opt/courier/sources/zdkimfilter/
$ wget ''
$ tar xzf zdkimfilter-1.6.tar.gz
$ cd zdkimfilter-1.6/
$ ./configure --with-courier-version=60 --prefix=/opt/courier/zdkimfilter COURIER_CONFIG=/opt/courier/courier/bin/courier-config
$ make
$ su
# make install

All the rest is up to you and not documented here, e.g. adding SPF and DKIM DNS records, and DMARC policies as well. You can find extensive documentation about those out there on the internet. The same is true for zdkimfilter configuration too, but I like to share this last bit, which is a script I use to enable DKIM for a particular domain:

# Simple script to create DKIM keys for Courier/zdkimfilter.
# Copyright © 2017 Lucio Crusca <>
# No warranty whatsoever. 
# This is PUBLIC DOMAIN code: you can use it for whatever you want, except for 
# holding me responsible for anything. If you choose to use this code, you agree
# to take full responsibility for your actions.
# End of legal nonsense

HEADEND=$(grep -n 'End of legal nonsense' "$0" | head -n 1 | cut -d':' -f1)
HEADEND=$(( ${HEADEND} - 1))
cat "$0" | head -n ${HEADEND} | tail -n $(( ${HEADEND} - 1 )) | sed -e 's/^#//'


if [ "${DOMAIN}" == "" ] ; then
  echo "Please specify the domain for the new DKIM key, e.g.:"
  echo "$0"
  exit 1

if ! [ -d "${KEYSDIR}" ] ; then
  echo "${KEYSDIR} is not a directory. Please edit $0 to match your Courier setup."
  exit 2

NOW=$(date +%F+%T | sed -e 's/-//g' | sed -e 's/+//g' | sed -e 's/://g')

cd "${KEYSDIR}"
if [ -L ${DOMAIN} ] ; then
  echo "DKIM keys seem to already exist for ${DOMAIN}."
  echo "You may replace them if you want, further confirmation will be asked before actual replacement."
  echo -n "Do you want to proceed and create new keys (y/N)? "
  read REPLACE
  if [ "${REPLACE}" != "y" ] && [ "${REPLACE}" != 'Y' ] ; then
    echo "Nothing changed."
    exit 0

opendkim-genkey -b 4096 -d "${DOMAIN}" -D "${KEYSDIR}" -s ${SELECTOR} -r nosubdomains -v
chmod 640 ${KEYSDIR}/${SELECTOR}.*
chown root.daemon ${KEYSDIR}/${SELECTOR}.*
echo "DKIM Keys created."
echo "Please add the following TXT record to ${DOMAIN} domain and let it propagate."
cat ${SELECTOR}.txt | sed -e "s/^${DOMAIN}//" cat ${SELECTOR}.txt echo if [ "${REPLACE}" != "" ] ; then echo "Since you have choosen to replace the current DKIM keys, you need to decide when the new keys will be activated." echo "By now your system is still using the current keys to sign messages." while [ "${ACTIVATENOW}" != "NOW" ] ; do echo -n "Please type NOW (uppercase) followed by Return to replace the current keys with the new ones: " read ACTIVATENOW if [ "${ACTIVATENOW}" != "" ] && [ "${ACTIVATENOW}" != "NOW" ] ; then echo "You need to type NOW. You may also hit Ctrl+C to break the script and handle the activation manually." fi done rm -f "${DOMAIN}" fi ln -s "${SELECTOR}.private" "${DOMAIN}"

Nobody Oracle

Now this is for real nerds only. And you need to know a bit of good music in order to understand the wit. Only less than 1% of people understand all the references in this song, but there’s a walkthrough for others at the end…

Music by Roger Waters (Pink Floyd)
Lyrics by me

I’ve got a linux black box with my programs in it
Got a bash, using twofish and a login
When I’m a good OP they sometimes throw me a like in.

I got elastic cloud keepin’ my sites on
Got those stolen source codes
I got thirteen panels that sit on the display to choose from
I’ve got unending nights
And I’ve got petabytes
I got amazing powers of the super cow
And that is how I know
When I try to get through
On the terminal to UEK
There’ll be no files in /home

I’ve got directory rwx perm.
And the inevitable enroll forms
All down the front of my favorite satin shirt.
I’ve got caffeine stains on my teeth.
I’ve got a mining pool and blockchain.
Got a grand keyboard to prop up Oracle remains.

I’ve got wild staring eyes
And I’ve got a strong urge to fry
’cause I got no heatsink on the CPU
Ooh…racle when I pick up the logs
there’s still no files in /home

Walkthrough (WARNING! Spoilers ahead!) :

I’ve got a linux black box with my programs in it
Got a bash, using twofish and a login
When I’m a good OP they sometimes throw me a like in.

I got elastic cloud keepin’ my sites on
Got those stolen source codes
I got thirteen panels that sit on the display to choose from
I’ve got unending nights
And I’ve got petabytes
I got amazing powers of the super cow
And that is how I know
When I try to get through
On the terminal to UEK
There’ll be no files in /home/…

I’ve got directory rwx perm.
And the inevitable enroll forms
All down the front of my favorite satin shirt.
I’ve got caffeine stains on my teeth.
I’ve got a mining pool and blockchain.
Got a grand keyboard to prop up Oracle remains.

I’ve got wild staring eyes
And I’ve got a strong urge to fry
’cause I got no heatsink on the CPU
Ooh…racle when I pick up the logs
there’s still no files in /home/…

L’anno di Linux sul desktop sarà il 2096.

Microsoft cesserà il supporto di Windows XP a breve. Io nel 2006 scrivevo che quello era l’anno di Linux sul desktop (non su questo blog). In quell’anno qualcosa era cambiato, in effetti, probabilmente grazie alla crescente popolarità di Ubuntu. Siamo però ormai nel 2013 (2014 fra qualche ora) e ci chiediamo ancora quando sarà l’anno di Linux sul desktop. Ubuntu ha cambiato strada, pensa al mobile. Le altre distribuzioni non sono sostanzialmente diverse dal 2006 e non hanno guadagnato quell’appeal che attira le masse. Quale sarà dunque l’anno di Linux sul desktop? La risposta è mai. Oppure il 2096, che poi significa mai.

Gli utenti non passeranno in massa a Linux nell’arco di un anno per lo stesso motivo per cui non l’hanno fatto fino ad oggi: il prodotto migliore non è necessariamente il più usato. Fra qualche mese il 40% dei PC si troveranno con un Windows XP non più supportato. Gli utenti sommessamente, poco alla volta, acquisteranno un PC nuovo con Windows 8, non con Linux. Se ne lamenteranno, pagheranno per il PC nuovo, pagheranno per aggiornare tutti i software, pagheranno per cambiare la stampante che con XP funzionava ma che non ha un driver per Windows 8, pagheranno ancora per il tempo che ciò gli farà perdere, odieranno questa nuova versione di Windows perché completamente diversa dalla vecchia a loro nota e grideranno contro il cielo che il mondo è ingiusto. Tuttavia non installeranno Linux in massa.

Qualcuno, veramente stufo di essere maltrattato, cercherà di installare Linux dopo qualche mese dall’acquisto del PC nuovo, ma scoprirà di non poterlo fare a causa del SecureBoot di Microsoft. La colpa ovviamente sarà di Linux che non è compatibile.
Se Linux un giorno diventerà il sistema più usato sul desktop, sarà solo perché gli altri sistemi proprietari saranno lentamente passati di moda e non saranno più una fonte di guadagno interessante per chi li produce: a quel punto sarà Microsoft stessa a consigliare ai propri utenti di aggiornare da Windows 27 a Linux, fornendo tutte le istruzioni per farlo. Questo succederà quando i PC stessi saranno completamente passati di moda e di necessità. Di moda son già passati adesso, ma continuano ad essere una necessità, perché non mi si venga a raccontare che con un tablet si fa tutto quello che si fa con un PC, tanto non è vero. Un giorno, forse non lontano, potrebbe però diventare un po’ più vero: quel giorno i PC non interesseranno più a nessuno e Linux diventerà il sistema operativo più utilizzato sui PC.

Prima di allora ci sono troppi soldi in ballo e non succederà.

Ovvio, quindi taciuto. Virtualizzazione con libvirt e KVM.

Ora se avete voglia provate a cercare una pagina che descriva, passo passo, con linguaggio tecnico capibile da un amministratore Linux che però non hai mai usato KVM, come fare a creare un firewall Linux in un sistema guest virtualizzato con libvirt e KVM.

Le informazioni sono tutte là fuori, da qualche parte, su questo non c’è dubbio. Io però non ho trovato un posto in cui fossero raccolte tutte e solo quelle necessarie a creare un firewall in un guest. Per esempio, è abbastanza intuitivo che per creare un firewall virtualizzato la scheda di rete virtuale dovrà essere posta in bridging con quella fisica e non sottoposta a NAT. Non pretendo che questo mi venga spiegato, se non lo capisco da me, ho sbagliato lavoro oppure devo prima studiare e poi mettermi a fare. Quello che però vorrei che mi fosse scritto a chiare lettere, è che il bridge, con la scheda di rete virbr0 (abbreviazione di “VIRtual BRidge 0”), non si può fare. E di nuovo, non è che non ci sia scritto, solo che è scritto in una noticina al fondo di una pagina all’interno del capitolo del networking sulla guida ufficiale RedHat che parla di libvirt. Il che è quasi come se non fosse scritto.

Ma dico io, una cosa con cui non si può fare un bridge, vai a chiamarla “Virtual Bridge 0”? E poi vai a nascondere in una nota a fondo pagina il fatto che si chiama Bridge, ma non è quello che la maggior parte degli amministratori Linux intende per Bridge? Potevano chiamarlo Bridge in riferimento al famoso gioco di carte e sarebbero stati più chiari! E tanto per ridere, si chiama bridge, ma serve a fare il NAT, cioè la configurazione diametralmente opposta ad un bridge!

Comunque sia, capito quello (e non ci è voluto esattamente poco), i giochi si fanno più semplici. Basta creare un bridge con le normali configurazioni di Linux (quel bridge che tutti i sysadmin conoscono), metterci dentro una sola scheda di rete fisica, ed assegnare quel bridge come scheda di rete al sistema guest, invece di virbr0. Ovviamente se il firewall, come probabile, dovrà gestire più schede di rete, si creano tanti bridge quante sono le schede di rete e si assegnano tutti al firewall guest. Ah sì, ma un bridge non dovrebbe servire a mettere in comunicazione due reti fisicamente separate e quindi non dovrebbe contenere due schede di rete invece di una sola? Certo, infatti è così: una delle due schede di rete nel bridge ce la mettete voi (quella fisica), l’altra ce la mette KVM (quella virtuale). Capito ora? Non dovete mettere in bridge la scheda di rete fisica con virbr0, ma dovete creare un bridge lasciando l’altro endpoint vuoto, mettendogli quindi una sola scheda di rete. Esempio di configurazione in /etc/network/interfaces, per sistemi host Debian e derivati:

iface br-eth0 inet static
  bridge_ports eth0
  bridge_stp off
  bridge_waitport 0
  bridge_fd 0

Ovviamente l’indirizzo è quello che si assegna alla scheda di rete per il sistema host. Il sistema guest (il firewall) assegnerà un indirizzo IP diverso, magari anche in una sottorete diversa. I due indirizzi alla fine coesisteranno (multihoming) sulla stessa scheda di rete fisica.

Bene, fin qui sembra abbastanza chiaro. Mancano dei pezzi però. Esempio: come assegno gli indirizzi IP all’interno del firewall? Come voglio (ovvero statici o dhcp, funzionano entrambi).

E alla fine, come faccio il firewall? Anche qui, come mi piace di più. Posso usare regole di iptables inserite a mano, oppure qualcosa come Shorewall o ancora una distro apposita.

Lo so, questo non è un how-to e non sopperisce alla mancanza di un how-to vero e proprio. Forse un giorno avrò il tempo di scrivere un vero how-to, ma per ora… accontentatevi!

Cheat codes per giochi su Linux

Inizio il mio blog con qualcosa di poco impegnativo, qualcosa che non rischi di ricevere critiche troppo aspre, qualcosa che in fondo, se vi interessa, vi può anche piacere e se invece non vi interessa, come dire, quella è la porta!
Da programmatore, il bello di giocare con il PC non è tanto giocare e neppure vincere, quanto fregare il PC. Purtroppo non sono un videogamer molto abile e farmi fregare dal PC non è una cosa che mi piace molto. Ecco allora alcuni cheat codes per altrettanti giochini che si possono trovare su Linux. Ti piace vincere facile?


Il gioco è un evergreen, scelta l’alzata, la gittata e l’arma con cui sparare, vince chi fa più danni al carro armato avversario. In questo caso il cheat code è particolarmente semplice. I menù di configurazione del gioco permettono di scegliere con quanti soldi parte ogni giocatore, ma pongono un limite a tale cifra, ovvero non più di 200mila dollari. Il gioco ricorda la cifra da una volta all’altra che lo avviate scrivendola in un file di configurazione, in formato testo semplice. È sufficiente modificare la cifra in quel file per alzarla a piacimento e poi avviare il gioco. Il file è $HOME/.atanks/atanks-config.txt e lo si può aprire con qualsiasi editor di testi (attenzione però, la cartella $HOME/.atanks è nascosta, dovete attivare la visualizzazione dei files nascosti nel vostro file manager per vederla).

Ora il bello è che alzando di MOLTO la cifra con cui partono i giocatori, quando si gioca contro il computer diventa facilissimo vincere, perché oltre una certa cifra il computer non usa più i soldi a disposizione per acquistare armi e scudi. È sufficiente quindi spendere l’intera fortuna per armare il vostro carro fino all’inverosimile e sarete sicuri di avere la macchina da guerra virtuale più potente di tutte le altre. Boom.


E se Atomic Tanks è un evergreen, che dire di questo? Intramontabile pure lui. Peccato che cinque spruzzatine di pepe contro quella miriade di verdure ed uova che non vedono l’ora di farci la festa siano davvero poche… in questo modo il gioco è decisamente difficile e ci vogliono troppe ore di esercizio per riuscire a vedere tutti i livelli. Non pensate anche voi che sarebbe meglio disporre di un macinapepe magico che non si svuota mai e darne una spolveratina nell’occhio dell’uovo al tegamino ogni volta che ne abbiamo voglia? Bene, nulla di più semplice. Invece di avviare il gioco dal menù, aprite un terminale ed avviatelo in scrivendo:

$ INFINITEPEPPER=1 burgerspace

Et voilà, spruzzate pepe quanto volete, non finirà mai.


Altro giochino vecchio stile. Si tratta di pilotare un aereo ad elica ed abbattere l’aereo avversario avendo a disposizione una mitragliatrice e cinque bombe. È possibile scegliere se giocare con l’aereo blu o rosso e far pilotare l’altro al PC. A me piace il rosso perché preferisco partire alla sinistra dello schermo, ma a parte ciò, i due aerei sono equivalenti. O meglio, sono equivalenti fino a quando non apportiamo qualche personalizzazione ad uno dei due, tipo qualche adesivo qua e là perché anche l’occhio vuole la sua parte, o una mano di colore sgargiante sul bullone centrale dell’elica o, perché no, una dotazione di cinque MILIONI di bombe, invece che solamente cinque…

redplane.nr_bombs 5000000

Il file di configurazione nascosto in cui dovete modificare la riga e farla diventare come quella qui sopra è $HOME/.airstrikerc e vedrete che nello stesso file ci sono tante altre cose con cui divertirsi per personalizzarsi l’aereo in meglio (o in peggio se agiamo sulle righe blueplane… ovvero l’aereo avversario).


Continuiamo a volare. Anche questo gioco è un remake di vecchie stelle a 8/16 bit. L’idea è di riprodurre il gioco originale per MSDOS nel modo più fedele possibile. Purtroppo l’originale era molto difficile da giocare e, dato che questo remake cerca di riprodurlo in modo fedele, anch’esso è molto difficile. In questo caso però non è difficile solo il gioco, ma è difficile anche il cheat code, perché non ci sono files di configurazione dove il programma vada ingenuamente a leggere le caratteristiche dell’aereo. Se vogliamo vincere facilmente possiamo solo modificare il programma. Le modifiche le ho già fatte io per voi e se avete un sistema Debian o Ubuntu a 64 bit, potete installare direttamente il pacchetto triplane_1.0.8-1_amd64 invece di quello che trovate nel repository ufficiale della vostra distro, ma il bello non è certo prendere un gioco craccato e vincere: il bello è craccarlo! (Dove per craccarlo qui si intende modificare il codice sorgente, nulla di illegale).

Se quindi volete divertirvi a modificare a piacere le caratteristiche del vostro aereo, seguite queste istruzioni.

  1. Scaricate il codice sorgente del gioco in una cartella (se usate Debian o Ubuntu potete scaricarlo con “apt-get source triplane” poi “sudo apt-get build-dep triplane”)
  2. applicate la patch triplane-cheats (ovvero “cd cartella_coidice_sorgente_di_triplane” poi “patch -Np1 < triplane-cheats.diff”)
  3. compilate il programma (su Debian/Ubuntu “dpkg-source –commit”, date un nome a caso, salvate il file che vi viene proposto e poi “dpkg-buildpackage”)
  4. installate il programma così compilato (su Debian/Ubuntu “cd ..” poi “sudo dpkg -i triplane*.deb”)
  5. Avviate il gioco dal menù


Gioco di esplorazione di dungeon con annessa disintegrazione molecolare di mostriciattoli brutti e cattivi. A spasso per i dungeon le armi non sono mai troppe, quindi ecco a voi la patch per poter esplorare senza tante preoccupazioni. La procedura è la stessa usata per Triplane con ovvi adattamenti, non sto a rispiegarla e questa volta vi lascio solo il codice sorgente, così vi divertite un po’ anche voi e magari migliorate la patch. meritous-cheats

Per oggi basta così, in futuro man mano che mi diverto a storpiare giochini, vi farò sapere…