Notqmail: Collaborative open-source successor to qmail
github.com
github.com
A good description of their goals can be found on the wiki:
* https://github.com/notqmail/notqmail/wiki
> [Notqmail] will provide stable, compatible, small releases that do not conflict with or break your local site customization or the other software you run in your mail system. notqmail also aims higher: we are developing a qmail-derived system that is extensible, easily packaged, and increasingly applicable to a wide variety of modern needs
An idea of upcoming changes can be found on the roadmap:
* https://github.com/notqmail/notqmail/wiki/Release-Roadmap
There's also an interesting discussion of Notqmail, with responses from many of the team, on Lobste.rs:
* https://lobste.rs/s/2r3stk/notqmail_collaborative_open_sourc...
The downside is its limited integration with other systems and especially databases. If you want to configure qmail, it has to be through text files. But if you want to operate one of the common cases of a relay-only host or a single UNIX host delivering mail to its local users, it works very well.
https://en.m.wikipedia.org/wiki/Daemontools
http://cr.yp.to/daemontools.html
I’ve been using parts of it for many many years without issue but it does feel odd that nothing has required an update in nearly 20 years. Maybe the Unix philosophy and DJB is just that good!
diff -Nur admin.orig/daemontools-0.76/src/supervise.c admin/daemontools-0.76/src/supervise.c
--- admin.orig/daemontools-0.76/src/supervise.c 2010-02-19 11:08:15.000000000 +0100
+++ admin/daemontools-0.76/src/supervise.c 2010-02-19 12:53:16.000000000 +0100
@@ -86,6 +86,8 @@
const char *run[2] = { "./run", 0 };
+int flagfailed = 0;
+
void trystart(void)
{
int f;
@@ -94,6 +96,7 @@
case -1:
strerr_warn4(WARNING,"unable to fork for ",dir,", sleeping 60 seconds: ",&strerr_sys);
deepsleep(60);
+ flagfailed = 1;
trigger();
return;
case 0:
@@ -153,6 +156,11 @@
}
}
+ if (flagfailed && flagwant && flagwantup){
+ flagfailed = 0;
+ trystart();
+ }
+
if (read(fdcontrol,&ch,1) == 1)
switch(ch) {
case 'd':
diff -Nur admin.orig/daemontools-0.76/src/supervise.c admin/daemontools-0.76/src/supervise.c
--- admin.orig/daemontools-0.76/src/supervise.c 2001-07-12 18:49:49.000000000 +0200
+++ admin/daemontools-0.76/src/supervise.c 2012-12-23 21:54:20.437771704 +0100
@@ -97,6 +97,8 @@
trigger();
return;
case 0:
+ setsid();
+ setpgid(0,0);
sig_uncatch(sig_child);
sig_unblock(sig_child);
execve(*run,run,environ);
@@ -158,7 +160,7 @@
case 'd':
flagwant = 1;
flagwantup = 0;
- if (pid) { kill(pid,SIGTERM); kill(pid,SIGCONT); flagpaused = 0; }
+ if (pid) { killpg(pid,SIGTERM); killpg(pid,SIGCONT); flagpaused = 0; }
announce();
break;
case 'u':
@@ -173,29 +175,29 @@
if (!pid) trystart();
break;
case 'a':
- if (pid) kill(pid,SIGALRM);
+ if (pid) killpg(pid,SIGALRM);
break;
case 'h':
- if (pid) kill(pid,SIGHUP);
+ if (pid) killpg(pid,SIGHUP);
break;
case 'k':
- if (pid) kill(pid,SIGKILL);
+ if (pid) killpg(pid,SIGKILL);
break;
case 't':
- if (pid) kill(pid,SIGTERM);
+ if (pid) killpg(pid,SIGTERM);
break;
case 'i':
- if (pid) kill(pid,SIGINT);
+ if (pid) killpg(pid,SIGINT);
break;
case 'p':
flagpaused = 1;
announce();
- if (pid) kill(pid,SIGSTOP);
+ if (pid) killpg(pid,SIGSTOP);
break;
case 'c':
flagpaused = 0;
announce();
- if (pid) kill(pid,SIGCONT);
+ if (pid) killpg(pid,SIGCONT);
break;
case 'x':
flagexit = 1;There is also s6, s6-rc and its associated tools, done in essentially the same spirit, micromanaged into the smallest possible units. At least it feels like that. Which leads to strange experiences if you lazily try to integrate them into your system, because they are so fast that you almost never see them appear in something like htop, not even as a short blip. Even on some small ARM idling at 200Mhz. One really has to watch the logs, and do it in a systematical way. But i like that. One of the rare pieces of software which don't make me aggressive or want to vomit, like very precise and exact clock work, or very good bicycle gearing. Silent and satisfying!
[1] http://skarnet.org/software/
Then there is
[2] http://web.obarun.org/software/
which is an attempt to ease that micromanagement from an archlinux derivative, which uses this instead of systemd.
Furthermore there is
[3] https://jdebp.eu/Softwares/nosh/
with the same goals, looking very impressive on paper, but written in C++? I don't know what to make of that. But probably try it out some time, even if only for the user space virtual terminal from there.
So... daemon tooling is far from dead!
but there was a lot to like about qmail+vpopmail+qmailadmin
The last time I used qmail, it was quite a pain to collect up all the required patches and build, just to make a reliable MTA. I'm thinking things like the TCP DNS patch so you could send e-mail to AOL.
I realize netqmail came along later to try to fix this. I guess I had just assumed that everyone had moved on to postfix like I had.
Anyone who used http://xmailserver.org/ ? The project looks dead for many years now. We used the software on production Mail servers for years. It was very-simple to setup and use, and also very-very flexible.
There is also forum https://xmailforum.marketmix.com/ . I loved to read the forum daily :) 10 years ago.
I think the last feature added vas SSL support, back then in 2010. For me this is a masterpiece of software when it comes to mail servers. (I loved the minimalistic approach)
> Netqmail 1.06 is produced by this motley krewe
netqmail 1.06, which none of us notqmail people were involved in, was produced by a handful of people I have often referred to as "list elders". They were very informed, very conservative, and very careful.
Nothing wrong with heuristics. It's a busy world out there. I appreciate that you're aware you're using one here, and I thought you might like to know it's led you astray. As a notqmail developer, I hope we live up to the standards set by the netqmail folks.
README netqmail 1.06 4 years ago
I suppose the readme hasn't been edited yet. notqmail begins where netqmail left off