[systemd-devel] Pairing udev's SYSTEMD_WANTS and systemd's templated units

Ivan Shapovalov intelfx100 at gmail.com
Wed Aug 13 23:02:53 PDT 2014


On Thursday 14 August 2014 at 01:55:26, Lennart Poettering wrote:	
> On Thu, 31.07.14 16:55, Ivan Shapovalov (intelfx100 at gmail.com) wrote:
> 
> > Hello all,
> > 
> > I'm trying to start from an udev rule a templated systemd unit, whose instance
> > should be a properly escaped device node path (so that %i.device would represent
> > an existing unit). Which udev specifier should I use for this?
> > 
> > Or, in more clear wording:
> > 
> > given the rule:
> > 
> > ACTION=="add", ..., TAG+="systemd", ENV{SYSTEMD_WANTS}+="foo@$some_specifier.service"
> > 
> > and the unit foo at .service:
> > 
> > [Unit]
> > After=%i.device
> > BindsTo=%i.device
> > ...
> > 
> > Which $some_specifier should I use in the udev rule to get %i.device in
> > my service file to refer to the valid and corresponding device unit?
> > 
> > The closest match I've got is "sys%p", but it does not work because dashes are not
> > escaped, and I get
> > "sys-devices-pci0000:00-0000:00:1d.0-usb4-4-1-4-1.2.device"
> > instead of
> > "sys-devices-pci0000:00-0000:00:1d.0-usb4-4\x2d1-4\x2d1.2.device"
> > and so on.
> 
> Can you invoke systemd-escape from the udev rule? 
> 
> Lennart
> 
> 

Yes, (built systemd from git) it seems to work.

/etc/udev/rules.d/99-foo.rules:

    ACTION=="add", ..., TAG+="systemd", PROGRAM="/usr/bin/systemd-escape -p %S%p", ENV{SYSTEMD_WANTS}+="foo@%c.service"

/etc/systemd/system/foo at .service:

    [Unit]
    Description=Test unit for %f
    BindsTo=%i.device
    After=%i.device

    [Service]
    Type=oneshot
    RemainAfterExit=no
    ExecStart=/etc/systemd/scripts/foo.sh %f

The only thing: PROGRAM="...", ENV{SYSTEMD_WANTS}+="...%c..." idiom seems a
pretty ugly way to invoke systemd-escape. This looks like a pretty common
thing to do; shouldn't there be a shorthand or something? (just a suggestion)

Thanks!

-- 
Ivan Shapovalov / intelfx /
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 213 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/systemd-devel/attachments/20140814/6e344e8b/attachment.sig>


More information about the systemd-devel mailing list