[oe] [meta-networking][PATCH v3] dnsmasq: get systemd only working again

Joe MacDonald Joe_MacDonald at mentor.com
Wed Apr 20 18:56:25 UTC 2016


Wow this one is kind of thorny, huh?

How about the attached patch?  I hope it strikes the right balance
between not duplicating too much and not making things too complex to
maintain later on.

-J.

[Re: [meta-networking][PATCH v3] dnsmasq: get systemd only working again] On 16.04.20 (Wed 10:29) Anders Darander wrote:

> * Anders Darander <anders at chargestorm.se> [160420 10:24]:
> 
> > * Joe MacDonald <joe_macdonald at mentor.com> [160419 17:36]:
> 
> > > From: Mark Asselstine <mark.asselstine at windriver.com>
> 
> > > The changes made in commit 2497cf2960537152427c99629b2af412787eb6c2
> > > [dnsmasq: steal resolvconf support from Ubuntu] broke systemd only
> > > dnsmasq runtime. No sysvinit scripts are included in systemd only
> > > builds (and should not be) and the dnsmasq executable has not moved to
> > > /usr/sbin.
> 
> > > Reverting to the previous version of the systemd service file. If
> > > folks want the local dnsmasq instance to be queried before going to
> > > an external DNS they should add 'nameserver 127.0.0.1' to
> > > /etc/resolv.conf. Or submit a change which will work with systemd.
> 
> > > Signed-off-by: Mark Asselstine <mark.asselstine at windriver.com>
> > > Signed-off-by: Joe MacDonald <joe_macdonald at mentor.com>
> > > ---
> 
> > > The previous one should've been v2, so I've named this one v3 explicitly.
> > > After reading more of the systemd documentation I think this approach in
> > > the service file is the current best option available.  It would certainly
> > > be cleaner to store the pidfile name in an environment variable but it
> > > turns out on further inspection that if you pass a varaible to PIDFile,
> > > you get errors (that you only see when the service is stopped, not while
> > > it is running) indicating essentially that it is falling back to the
> > > "guess the MAINPID value" behaviour.  So this seems to be the way we're
> > > supposed to do this type of thing now.
> 
> > > -J.
> 
> > >  .../recipes-support/dnsmasq/dnsmasq.inc            |  9 ++--
> > >  .../dnsmasq/files/dnsmasq-resolvconf-helper        | 62 ++++++++++++++++++++++
> 
> > This file, dnsmasq-resolvconf-helper, isn't include in SRC_URI, neither
> > in do_install(). However it is referenced in the dnsmasq.service, which
> > leads to:
> 
> > Apr 08 11:07:27 ccu dnsmasq[384]: started, version 2.75 cachesize 150
> > Apr 08 11:07:27 ccu dnsmasq[384]: compile time options: IPv6 GNU-getopt no-DBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset auth no-DNSSEC loop- detect inotify
> > Apr 08 11:07:27 ccu dnsmasq-dhcp[384]: DHCP, IP range 192.168.7.1 -- 192.168.7.1, lease time 2m
> > Apr 08 11:07:27 ccu dnsmasq[384]: [[0;1;39mno servers found in /etc/resolv.conf, will retry[[0m
> > Apr 08 11:07:27 ccu dnsmasq[384]: read /etc/hosts - 2 addresses Apr 08 11:07:27 ccu systemd[386]: [[0;1;31mdnsmasq.service: Failed at
> > step EXEC spawning /usr/bin/dnsmasq-resolvconf-helper: No such file or directory[[0m
> 
> This is the actual issue, the dnsmasq.service file will unconditionally
> execute dnsmasq-resolvconf-helper, while it's only installed if the
> PACKAGECONFIG resolved is set.
> 
> Could you add the line 
> 
> ExecStartPost=/usr/bin/dnsmasq-resolvconf-helper start
> 
> to dnsmasq.service conditionally on the PACKAGECONFIG resolved? (Using sed
>  is an option).
> 
> > Apr 08 11:07:27 ccu systemd[1]: [[0;1;39mdnsmasq.service: Control process exited, code=exited status=203[[0m
> > Apr 08 11:07:27 ccu systemd[1]: [[0;1;31mFailed to start DNS forwarder and DHCP server.[[0m
> > Apr 08 11:07:27 ccu systemd[1]: [[0;1;39mdnsmasq.service: Unit entered failed state.[[0m
> > Apr 08 11:07:27 ccu systemd[1]: [[0;1;39mdnsmasq.service: Failed with result 'exit-code'.[[0m
> 
> 
> > Thus, with the following patch amended, I'm happy with this patch!
> 
> No, I was slightly wrong...
> 
> > Cheers,
> > Anders
> 
> > diff --git a/meta-networking/recipes-support/dnsmasq/dnsmasq.inc b/meta-networking/recipes-support/dnsmasq/dnsmasq.inc
> > index df58e5c..db54658 100644
> > --- a/meta-networking/recipes-support/dnsmasq/dnsmasq.inc
> > +++ b/meta-networking/recipes-support/dnsmasq/dnsmasq.inc
> > @@ -11,6 +11,7 @@ SRC_URI = "http://www.thekelleys.org.uk/dnsmasq/${@['archive/', ''][float(d.getV
> >             file://init \
> >             file://dnsmasq.conf \
> >             file://dnsmasq.service \
> > +           file://dnsmasq-resolvconf-helper \
> >  "
> 
> >  inherit pkgconfig update-rc.d systemd
> > @@ -54,7 +55,7 @@ do_install () {
> >      install -m 0644 ${WORKDIR}/dnsmasq.service ${D}${systemd_unitdir}/system
> 
> >      install -m 0755 ${S}/contrib/wrt/dhcp_release ${D}${bindir}
> > -
> > +    install -m 0755 ${WORKDIR}/dnsmasq-resolvconf-helper ${D}${bindir}/dnsmasq-resolvconf-helper
> 
> This line should obviously not be here, as you're actually installing
> dnsmasq-resolvconf-helper, if the PACKAGECONFIG resolved is set.
> 
> >      if [ "${@base_contains('PACKAGECONFIG', 'dbus', 'dbus', '', d)}" != "" ]; then
> >          install -d ${D}${sysconfdir}/dbus-1/system.d
> >          install -m 644 dbus/dnsmasq.conf ${D}${sysconfdir}/dbus-1/system.d/
-- 
-Joe MacDonald.
:wq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-dnsmasq-get-systemd-only-working-again.patch
Type: text/x-diff
Size: 7115 bytes
Desc: not available
URL: <http://lists.openembedded.org/pipermail/openembedded-devel/attachments/20160420/2732ea47/attachment-0002.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: Digital signature
URL: <http://lists.openembedded.org/pipermail/openembedded-devel/attachments/20160420/2732ea47/attachment-0002.sig>


More information about the Openembedded-devel mailing list