[systemd-devel] [ PATCH-v2 ] dnsmasq ebuild and unit files for dnsmasq

Henry Gebhardt hsggebhardt at googlemail.com
Sun May 22 08:22:30 PDT 2011


On Sun, May 22, 2011 at 02:50:00PM +0800, microcai wrote:
> Heya,
> 
> Here is the 2nd version.
> 
> Split the DHCP and TFTP socket and use Servie=dnsmasq.servie to point to
> dnsmasq.
> 
> Add einfo to the user tell then how to do with the socket unit files.
> 
> both DNS and tftp have been test. I haven't test DHCP activation,  But I
> think it will works.
> 
> CC systemd for other people to review the socket unit files.

CC'ing Michal, I hope you don't mind. But one question: Should
services/sockets be enabled by default (e.g. using your
systemd_enable_services() function)?

> 
> Thanks.
> 

> # Copyright 1999-2011 Gentoo Foundation
> # Distributed under the terms of the GNU General Public License v2
> # $Header: /var/cvsroot/gentoo-x86/net-dns/dnsmasq/dnsmasq-2.57.ebuild,v 1.6 2011/04/16 18:23:07 armin76 Exp $
> 
> EAPI=2
> 
> inherit eutils toolchain-funcs flag-o-matic systemd systemd-local

Don't use systemd-local. It isn't needed anymore and will go away soon.

> 
> MY_P="${P/_/}"
> MY_PV="${PV/_/}"
> DESCRIPTION="Small forwarding DNS server"
> HOMEPAGE="http://www.thekelleys.org.uk/dnsmasq/"
> SRC_URI="http://www.thekelleys.org.uk/dnsmasq/${MY_P}.tar.lzma"
> 
> LICENSE="GPL-2"
> SLOT="0"
> KEYWORDS="alpha amd64 arm hppa ia64 ~mips ~ppc ~ppc64 s390 sh sparc x86 ~sparc-fbsd ~x86-fbsd"
> IUSE="dbus +dhcp idn ipv6 nls tftp systemd"

We can do without the systemd use-flag.

> 
> RDEPEND="dbus? ( sys-apps/dbus )
> 	idn? ( net-dns/libidn )
> 	nls? (
> 		sys-devel/gettext
> 		net-dns/libidn
> 	)
> 	systemd? (
> 		>=sys-apps/systemd-26
> 	)
> "

It doesn't need systemd, it works fine without it, and we don't need the
systemd use-flag.

> 
> DEPEND="${RDEPEND}
> 	dev-util/pkgconfig
> 	|| ( app-arch/xz-utils app-arch/lzma-utils )"
> 
> S="${WORKDIR}/${PN}-${MY_PV}"
> 
> src_prepare() {
> 	# dnsmasq on FreeBSD wants the config file in a silly location, this fixes
> 	epatch "${FILESDIR}/${PN}-2.47-fbsd-config.patch"
> 	use systemd && epatch "${FILESDIR}/${P}-systemd.patch"
> }

Just always apply that patch.

> 
> src_configure() {
> 	COPTS=""
> 	use tftp || COPTS+=" -DNO_TFTP"
> 	use dhcp || COPTS+=" -DNO_DHCP"
> 	use ipv6 || COPTS+=" -DNO_IPV6"
> 	use dbus && COPTS+=" -DHAVE_DBUS"
> 	use idn  && COPTS+=" -DHAVE_IDN"
> }
> 
> src_compile() {
> 	emake \
> 		PREFIX=/usr \
> 		CC="$(tc-getCC)" \
> 		CFLAGS="${CFLAGS}" \
> 		COPTS="${COPTS}" \
> 		all$(use nls && echo "-i18n") || die
> }
> 
> src_install() {
> 	emake \
> 		PREFIX=/usr \
> 		MANDIR=/usr/share/man \
> 		DESTDIR="${D}" \
> 		install$(use nls && echo "-i18n") || die
> 
> 	dodoc CHANGELOG FAQ
> 	dohtml *.html
> 
> 	newinitd "${FILESDIR}"/dnsmasq-init dnsmasq
> 	newconfd "${FILESDIR}"/dnsmasq.confd dnsmasq
> 	insinto /etc
> 	newins dnsmasq.conf.example dnsmasq.conf
> 
> 	if use dbus ; then
> 		insinto /etc/dbus-1/system.d
> 		doins dbus/dnsmasq.conf
> 	fi
> 
> 	if use systemd ; then
> 		doservices "${FILESDIR}/dnsmasq.service"
> 		doservices "${FILESDIR}/dnsmasq.socket"
> 		doservices "${FILESDIR}/dnsmasq-dhcp.socket"
> 		doservices "${FILESDIR}/dnsmasq-tftp.socket"
> 	fi
> }

Always install the unit files, and use systemd_dounit() from the systemd
eclass.

> 
> pkg_postinst(){
> 	if use systemd ; then
> 		einfo "You have enabled systemd use flag, enable dnsmasq with "
> 		einfo "systemctl enable dnsmasq.socket"
> 		einfo "If you want to enable dhcp and ftp support in ${PN}, don't forget to run "
> 		einfo "systemctl enable dnsmasq-dhcp.socket "
> 		einfo "and"
> 		einfo "systemctl enable dnsmasq-tftp.socket"
> 		einfo "When you enable it in the configure file"
> 	fi
> }
> 

If we get rid of the systemd use-flag, you could either always print
this message, or use systemd_enable_service() in src_install() to enable
them by default.

> #  This file is part of systemd.

Well, it isn't...

> #
> #  systemd is free software; you can redistribute it and/or modify it
> #  under the terms of the GNU General Public License as published by
> #  the Free Software Foundation; either version 2 of the License, or
> #  (at your option) any later version.
> 
> [Unit]
> Description=dnsmasq

I think a more descriptive description is in order. How about
"Forwarding DNS server"?

> After=syslog.socket
> 
> [Service]
> StandardOutput=syslog
> StandardError=syslog
> 
> ExecStart=/usr/sbin/dnsmasq -d -k 
> 

> [Unit]
> Description=dnsmasq socket
> 
> [Socket]
> 
> BindIPv6Only=ipv6-only
> 
> #DNS
> ListenDatagram=0.0.0.0:53
> ListenStream=0.0.0.0:53
> ListenDatagram=[::]:53
> ListenStream=[::]:53
> 
> #DHCP uncomment this to use dhcp 
> #ListenDatagram=0.0.0.0:67
> #ListenDatagram=[::]:67
> 
> #TFTP, uncomment this to have tftp support
> #ListenDatagram=[::]:69
> #ListenDatagram=0.0.0.0:69

The commented lines are no longer needed with the units below.

> 
> [Install]
> WantedBy=sockets.target

> [Unit]
> Description=dnsmasq DHCP mode socket
> 
> [Socket]
> 
> BindIPv6Only=ipv6-only
> 
> 
> ListenDatagram=0.0.0.0:67
> ListenDatagram=[::]:67
> 
> Service=dnsmasq.service
> 
> [Install]
> WantedBy=sockets.target

> [Unit]
> Description=dnsmasq tftp mode socket
> 
> [Socket]
> 
> BindIPv6Only=ipv6-only
> 
> 
> #TFTP, uncomment this to have tftp support

This comment isn't needed anymore.

> ListenDatagram=[::]:69
> ListenDatagram=0.0.0.0:69
> 
> Service=dnsmasq.service
> 
> [Install]
> WantedBy=sockets.target


Thanks,

Henry


More information about the systemd-devel mailing list