In my continuing efforts to entirely self host, fighting spam is hard. I originally configured SpamAssassin on my mail server quite a few years ago, and to be fair it has done it's job. But recently, more spam has been creeping through and my ever growing stack of addons (such as policyd-spf, OpenDKIM, OpenDMARC and others) to SA was eating quite a lot of memory on my poor server.
So I shopped around and found Rspamd. For my needs it sounded wonderful - no more need for MySQL (it's a hard dependency of OpenDMARC) as I much prefer PostgreSQL. SPF, DKIM and DMARC all integrated. Written in C and LUA which is a massive improvement over Perl and Python. Also sports a shiny Web UI to monitor the server and do basic config. Speaking of config, it's still not entirely easy, but it's much easier than configuring the stack I used to have! I did have to patch the build so that it works with OpenSSL-1.1 which is now in pkgsrc. All in all, I anticpated a nice memory reduction once I had it all configured. So far it's using about 200Mb less memory, but it's early days. How much better or worse than SA it is at actual spam filtering remains to be seem, but I have high hopes.
While here, I also replaced procmail with PigeonHole. I didn't really need to do this, but I thought "As I'm here.....". Actually the end result is much nicer as I now only have one Spam folder instead of another two Spam folders for training ham and spam. I just need to hook this final part into how I manage spam on my mlmmj email lists.
I implemented ripoffline(3) in NetBSD and it shipped in -8. It now transpires there were a few problems with the implementation, mainly in regards to screen resizing, which is an extension to POSIX, but supported by ncurses and PDCurses.
Many improvements have been made with regards to compability with NetBSD and the others, but there are the following caveats:
- NetBSD will only resize stdscr, curscr and virtscr windows (like PDCurses)
- NetBSD clears the window when resized
- NetBSD will re-size and re-position the ripped off lines (like ncurses)
- NetBSD will not change LINES when ripoffline is called and may offset stdscr to it's relative position on the screen. This means that portable application should check getbegyx and getmaxyx for the size and location of stdscr.
The expectation is that the client will re-draw all windows, including ripped off windows on a KEY_RESIZE event. It's also expected that the client will re-size any other windows as it has a clearer idea of where things should be on the screen to it's proportion rather than curses guesstimating.