[Mimedefang] REVISED: postfix/mimedefang socket
Bill Cole
mdlist-20140424 at billmail.scconsult.com
Sun Sep 24 13:22:53 EDT 2017
On 23 Sep 2017, at 20:37, Michael Fox wrote:
> Thanks Bill,
>
> After some more research I found the bug and I think I've "fixed" it.
> See below.
>
>>> Option 1: Use inet socket
>>> ------------------------------------------------
>>> /etc/default/mimedefang:
>>> SOCKET=inet:8899 at localhost
>>>
>>> /etc/postfix/main.cf
>>> smtpd_milters = inet:localhost:8899
>>>
>>> This works for Ubuntu 14.04/MIMEDefang 2.73.
>>> But it fails with Ubuntu 16.04/MIMEDefang 2.78. If Postfix is
>>> already
>>> running, and MIMEDefang is restarted, I get the following in
>>> /var/log/mail.err:
>>>
>>> mimedefang[27605]: MIMEDefang-2.78: Unable to bind to port
>>> inet:8899 at localhost: Address already in use
>>> mimedefang[27605]: MIMEDefang-2.78: Unable to create listening
>>> socket on conn inet:8899 at localhost
>>
>> That's odd. Given your other options, I'd try to figure out what
>> exactly
>> is going on here and fix it. I.e. what process actually has taken
>> that
>> port.
>
> Yes, odd.
>
> I've continued to research and just found this, which is my problem.
>
> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=807078
>
> The problem occurs for me in MIMEDefang 2.78 (package for Ubuntu
> 16.04), which is the version reported in the above bug. Apparently,
> the problem is that when using "systemctl restart mimedefang" it
> doesn't wait for itself to completely stop before it tries to start
> again. And I can confirm that. If I use "systemctl stop ...", then
> wait for it to stop, then "systemctl start ...", then it works.
I kinda wanted to blame the abomination of systemd and/or the
Debian/Ubuntu packagers who regularly 'fix' things that are not broken
but since I had nothing more solid than my own bile, I refrained...
> The bug report says it's fixed in v2.79 and v2.79 is in the Ubuntu
> 17.04 package.
> According to
> https://ubuntu.pkgs.org/17.04/ubuntu-universe-i386/mimedefang_2.79-2_i386.deb.html
> , on 2016-12-23 the init stop action was changed to always wait.
As the "restart" action has been in the distribution's included init
scripts for as long as I've used MD (over a decade) and I suspect
forever. There's no rationale I can think of to always wait on a 'stop'
action but it isn't really harmful, beyond delaying shutdown for
(normally) a few seconds.
> So here's what I did to "fix" it in Ubuntu 16.04/MIMEDefang 2.78:
>
> In /etc/init.d/mimedefang, in the stop_it() function:
>
> # if [ "$1" = "wait" ] ; then
> ....
> # fi
>
> In other words, just comment out the conditional wait so that the
> "waiting" part inside the IF statement always runs.
>
> When I tried to run systemctl restart mimedefang, I got:
> Warning: mimedefang.service changed on disk. Run 'systemctl
> daemon-reload' to reload units.
>
> So, I did that. And then: systemctl restart mimedefang seems to work
> just fine.
>
> I'd appreciate it if any of the developers can verify that what I did
> shouldn't cause some other unintended consequence.
Dianne will likely give a definitive authoritative answer but having
adapted the MD startup script to multiple system control environments, I
don't see anything especially risky. The only potential issue I can
think of is if you're trying to shut down or reboot in a pathological
circumstance where the mimedefang.pl worker perl sub-processes refuse to
exit and the supervisory process (e.g. init) has no last resort
mechanism to arbitrarily slaughter hung children. There's nothing quite
so annoying as a "hung going down" system.
More information about the MIMEDefang
mailing list