02.05.2012 00:14, Wietse Venema wrote: > Michael Tokarev: > [using "unix" instead of "fifo"] >> And yes, I verified the socket code (instead of pipe code) on linux >> a few days ago and it appears to work fine there too. So indeed, this >> is a very good possibility too, but it does not cover solaris well. > > The preferred pickup/qmgr IPC type (fifo or unix) can be a main.cf > parameter setting (with an OS-dependent default value, e.g., fifo > for Solaris and unix for everything else), and post-install can be > updated to edit master.cf accordingly.
Maybe this is something which don't really need any configuration parameters, just pick up whatever is best on current OS, from prior knowlege. But indeed, config parameter there will do the job, and will even let us test easily if things have changed on solaris, without a need to recompile postfix. I'm a bit afraid of possible questions this change may generate in the future, when people will start asking "what it is for, why can't it be hardcoded" etc. :) > This solves the "idle" mtime update problem a manner that is 100% > maintainable. It involves adding one configuration parameter to > main.cf, and adding a few lines to post-install that edit master.cf > accordingly. Yes, it should solve the idle mtime update issue. Hopefully unix sockets does not have this problem -- at least on linux, mtime on these isn't updated on write. >> By default these dirs -- /var/spool/postfix/run/{pid,private,public} - >> should be created at install time just like now these dirs are create >> in /var/spool/postfix. The only change I'm asking about is to move >> the "runtime" directories into a subdir (suggesting to name it "run"), >> I don't ask to mount anything in there or to create these on boot. > > Sorry, that is not how Postfix is maintained. > > All aspects of Postfix are meant to be for general use, so that > they are widely used, so that they can be routinely tested during > development, so that they can be properly supported, and so that > they don't break as Postfix evolves. Renaming directories does not break this. But see below... > Also, mounting stuff over Postfix directories breaks the basic model > of how Postfix manages its files, and I definitely don't want some > (Linux) distro maintainer to pick up on the idea. I have enough > work on my hands to deal with damage control of (Linux) distro > maintainers. Well, I already suggested this to Debian - to mount /var/spool/postfix/run and change pid, private and public dirs to be symlinks into subdirs in run/ -- exactly how I manage it locally for many years. Switching to unix sockets should eliminate the need for this. But yet again, see below... > [empty run directory] > You seem to believe that Postfix IPC endpoints don't need to exist > while Postfix is not running. > >> the mix -- pid, private, public -- the directories where the files >> makes any sense at all till postfix is running _only_. Files in >> there does not exist, so to say, when it is not running - even if >> formally corresponding inodes do exist. > > That is incorrect. > > For example, the postdrop program will produce a warning message > if the public/pickup node does not exist. By design this program > MUST be able to run without errors while NO Postfix daemons are > running. Normally, a missing public/pickup node is a sign of great > trouble (mail would be queued forever) and it would therefore be > wrong to shut up the error message. Aha. And that's exactly what I overlooked. I didn't knw that in case public/pickup is not present, postdrop will complain loudly. Indeed, this is a serious enough reason to rethink the whole idea. So I'll hold on with the mentioned changes for debian, I definitely don't want to break postfix in any way. Besides, the same issue (missing pickup node) exists when postfix has been installed but hasn't been run even once. That one appears to be of much less severity. So, to sum it all up, it looks like the best solution will be to switch to unix sockets, either with a config parameter or without. In any way, I'd pick saner per-OS defaults for this, with sockets for everything but solaris which will continue using fifos. Thanks, /mjt