Bug#863802: systemd unit breaks ferm in some setups in jessie->stretch upgrade

2017-06-06 Thread Moritz Muehlenhoff
On Wed, May 31, 2017 at 02:08:35PM +0200, Alexander Wirt wrote:
> Someone should decide, which is not me. Therefore I don't think this is
> grave.

Feel free to downgrade. I've only marked it RC due to possible jessie->
stretch upgrade problems.

I'm attaching a service unit which waits for name resolution (for people
rebuilding the package or dropping that one into /etc/systemd/system)

Cheers,
Moritz
[Unit]
Description=ferm firewall configuration
After=nss-lookup.target network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/init.d/ferm start
ExecReload=/etc/init.d/ferm reload
ExecStop=/etc/init.d/ferm stop

[Install]
WantedBy=multi-user.target


Bug#863802: systemd unit breaks ferm in some setups in jessie->stretch upgrade

2017-05-31 Thread Alexander Wirt
On Wed, 31 May 2017, Moritz Muehlenhoff wrote:

> Package: ferm
> Version: 2.3-2
> Severity: grave
> 
> Ferm is broken in stretch for any rule set which contains resolve() 
> statements.
> (There might be others relying on network, didn't check). This got introduced
> in 2.3-2, which now uses a Wants:/Before: network-pre.target
> 
> In jessie, no systemd unit was provided and the sysvinit script translated to
> 
> # systemctl cat ferm
> # /run/systemd/generator.late/ferm.service
> # Automatically generated by systemd-sysv-generator
> 
> [Unit]
> SourcePath=/etc/init.d/ferm
> Description=LSB: ferm firewall configuration
> DefaultDependencies=no
> Before=sysinit.target
> After=network-online.target remote-fs.target
> Wants=network-online.target
>  
> But since ferm.service is now executed before the network is up, any rule
> containing a resolve() statement now leads to a ferm startup failure:
> 
> # journalctl -u ferm
> -- Logs begin at Wed 2017-05-31 10:53:35 UTC, end at Wed 2017-05-31 11:40:57 
> UTC. --
> May 31 10:53:38 ms-be2001 ferm[1038]: Starting Firewall: fermError in 
> /etc/ferm/conf.d/10_example line 4:
> May 31 10:53:38 ms-be2001 ferm[1038]: just.example.org
> May 31 10:53:38 ms-be2001 ferm[1038]: )
> May 31 10:53:38 ms-be2001 ferm[1038]:
> May 31 10:53:38 ms-be2001 ferm[1038]: )
> May 31 10:53:38 ms-be2001 ferm[1038]: <--
> May 31 10:53:38 ms-be2001 ferm[1038]: DNS query for 'just.example.org' 
> failed: query timed out
> May 31 10:53:38 ms-be2001 ferm[1038]:  failed!
> May 31 10:53:38 ms-be2001 systemd[1]: ferm.service: Main process exited, 
> code=exited, status=101/n/a
> May 31 10:53:38 ms-be2001 systemd[1]: Failed to start ferm firewall 
> configuration.
> May 31 10:53:38 ms-be2001 systemd[1]: ferm.service: Unit entered failed state.
> May 31 10:53:38 ms-be2001 systemd[1]: ferm.service: Failed with result 
> 'exit-code'.
>  
> I'm setting severity to "grave" since this breaks existing setups during the 
> update
> from jessie to stretch.
Which is funny. We had a bunch of bugs about ferm starting late where
everyone stated it should be up before the network is up. 

Someone should decide, which is not me. Therefore I don't think this is
grave.

Alex



Bug#863802: systemd unit breaks ferm in some setups in jessie->stretch upgrade

2017-05-31 Thread Moritz Muehlenhoff
Package: ferm
Version: 2.3-2
Severity: grave

Ferm is broken in stretch for any rule set which contains resolve() statements.
(There might be others relying on network, didn't check). This got introduced
in 2.3-2, which now uses a Wants:/Before: network-pre.target

In jessie, no systemd unit was provided and the sysvinit script translated to

# systemctl cat ferm
# /run/systemd/generator.late/ferm.service
# Automatically generated by systemd-sysv-generator

[Unit]
SourcePath=/etc/init.d/ferm
Description=LSB: ferm firewall configuration
DefaultDependencies=no
Before=sysinit.target
After=network-online.target remote-fs.target
Wants=network-online.target
 
But since ferm.service is now executed before the network is up, any rule
containing a resolve() statement now leads to a ferm startup failure:

# journalctl -u ferm
-- Logs begin at Wed 2017-05-31 10:53:35 UTC, end at Wed 2017-05-31 11:40:57 
UTC. --
May 31 10:53:38 ms-be2001 ferm[1038]: Starting Firewall: fermError in 
/etc/ferm/conf.d/10_example line 4:
May 31 10:53:38 ms-be2001 ferm[1038]: just.example.org
May 31 10:53:38 ms-be2001 ferm[1038]: )
May 31 10:53:38 ms-be2001 ferm[1038]:
May 31 10:53:38 ms-be2001 ferm[1038]: )
May 31 10:53:38 ms-be2001 ferm[1038]: <--
May 31 10:53:38 ms-be2001 ferm[1038]: DNS query for 'just.example.org' failed: 
query timed out
May 31 10:53:38 ms-be2001 ferm[1038]:  failed!
May 31 10:53:38 ms-be2001 systemd[1]: ferm.service: Main process exited, 
code=exited, status=101/n/a
May 31 10:53:38 ms-be2001 systemd[1]: Failed to start ferm firewall 
configuration.
May 31 10:53:38 ms-be2001 systemd[1]: ferm.service: Unit entered failed state.
May 31 10:53:38 ms-be2001 systemd[1]: ferm.service: Failed with result 
'exit-code'.
 
I'm setting severity to "grave" since this breaks existing setups during the 
update
from jessie to stretch.

Possible fixes:
- Revert to the status quo from jessie by reverting the changes from 2.3-2 
(ugly)
- Split into two services, e.g. ferm-base.service loading a base rule set which 
runs on
network-pre.target and ferm-extended.service which runs on nss-lookup.target or
network.target

Cheers,
Moritz