[systemd-devel] multi-user.target only wants network.service if I'm doing 'systemct show runlevel3.target'

Andrei Borzenkov arvidjaar at gmail.com
Wed Dec 24 21:37:34 PST 2014


В Wed, 10 Dec 2014 09:23:16 +0300
Ivan Shapovalov <intelfx100 at gmail.com> пишет:

> On Tuesday 09 December 2014 at 17:25:48, Francis Moreau wrote:	
> > Hello Lennart,
> > 
> > Thanks for answering !
> > 
> > On 12/09/2014 02:10 PM, Lennart Poettering wrote:
> > > On Tue, 09.12.14 11:19, Francis Moreau (francis.moro at gmail.com) wrote:
> > > 
> > >> Hello,
> > >>
> > >> I've a very weird behaviour with systemd 217:
> > >>
> > >> # systemctl show -p Wants multi-user.target | grep network.service
> > >> # systemctl show -p Wants runlevel3.target | grep network.service
> > >> Wants= ... network.service ...
> > >> # systemctl show -p Wants multi-user.target | grep network.service
> > >> Wants=... network.service ...
> > >>
> > >> So basically the network.service is not part of the multi-user target
> > >> dependencies. But if I'm showing the state of the runlevel3 target, the
> > >> network service magically becomes a dep of multi-user.target.
> > >>
> > >> The network.service is an sysv service which is started by rc[345].d and
> > >> has in its LSB:
> > >>
> > >> Provide: $network
> > >>
> > >> Could anybody clarify what I'm facing ?
> > > 
> > > systemd lazy loads services from the file system as they are
> > > referenced. This includes symlinked aliases, which are only loaded when
> > > a unit is referenced by that specific name.
> > > 
> > 
> > Sorry but I don't really understand.
> > 
> > Do you mean that the network.service wasn't loaded although the
> > runlevel3.target, which is an alias for multi-user target (default
> > target) wants it ?
> > 
> > I would be glad if you could enlight me because I'm confused.
> 
> Apparently, network.service gets pulled in only via runlevel3.target, i. e.
> there is a symlink of kind
> 
> /{etc,usr/lib,run}/systemd/system/runlevel3.target.wants/network.service -> network.service
> 
> That is, the Wants= dependency is generated for runlevel3.target only, not for
> multi-user.target.
> 
> And, because systemd loads units lazily, systemd does not know about runlevel3.target
> (and its dependencies) before anything forces systemd to load that unit.
> 

This looks like fallout of moving to generators for sysv units. Before
systemd added dependencies on runlevelX.target directly to units built
from initscripts. This forced runlevelX.target resolution and
everything was OK. Now core systemd never references these targets
directly.

This is a genuine bug which will bite people. But it looks like worked
just by accident before anyway :( So we need possibility to define
aliases for existing units without exhaustive search across all unit
definitions ... may be unit.alias.d?

Cc'ing Thomas as original author of sysv generators :)



More information about the systemd-devel mailing list