From 28573c90d1f19be8a1f0a56cb2df6652182ea6b0 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Mon, 6 Aug 2018 22:34:11 +0200 Subject: [PATCH] build: Add support for systemd D-Bus activation --- Makefile.am | 5 +++- configure.ac | 49 +++++++++++++++++++++++-------------- src/iwd.service.in | 3 +++ src/net.connman.iwd.service | 5 ++++ 4 files changed, 43 insertions(+), 19 deletions(-) create mode 100644 src/net.connman.iwd.service diff --git a/Makefile.am b/Makefile.am index 60422376..c2d3d1b7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -122,6 +122,9 @@ src_iwd_DEPENDENCIES += src/iwd.service systemd_unitdir = @SYSTEMD_UNITDIR@ systemd_unit_DATA = src/iwd.service + +dbus_busdir = @DBUS_BUSDIR@ +dbus_bus_DATA = src/net.connman.iwd.service endif if CLIENT @@ -314,7 +317,7 @@ if BUILD_DOCS dist_man_MANS = $(manual_pages) endif -EXTRA_DIST = src/genbuiltin src/iwd.service.in \ +EXTRA_DIST = src/genbuiltin src/iwd.service.in src/net.connman.iwd.service \ doc/main.conf $(manual_pages:.1=.txt) AM_CFLAGS = -fvisibility=hidden diff --git a/configure.ac b/configure.ac index 818dd5bd..4c95f56a 100644 --- a/configure.ac +++ b/configure.ac @@ -104,6 +104,37 @@ AC_ARG_ENABLE([monitor], AC_HELP_STRING([--disable-monitor], [enable_monitor=${enableval}]) AM_CONDITIONAL(MONITOR, test "${enable_monitor}" != "no") +AC_ARG_ENABLE([systemd-service], AC_HELP_STRING([--disable-systemd-service], + [don't install systemd service file]), + [enable_systemd_service=${enableval}]) +AM_CONDITIONAL(SYSTEMD_SERVICE, test "${enable_systemd_service}" != "no") + +AC_ARG_WITH([systemd-unitdir], AC_HELP_STRING([--with-systemd-unitdir=DIR], + [path to systemd unit directory]), + [path_systemd_unitdir=${withval}]) +if (test "${enable_systemd_service}" != "no" && test -z "${path_systemd_unitdir}"); then + AC_MSG_CHECKING([systemd unit directory]) + path_systemd_unitdir="`$PKG_CONFIG --variable=systemdsystemunitdir systemd`" + if (test -z "${path_systemd_unitdir}"); then + AC_MSG_ERROR([systemd unit directory is required]) + fi + AC_MSG_RESULT([${path_systemd_unitdir}]) +fi +AC_SUBST(SYSTEMD_UNITDIR, [${path_systemd_unitdir}]) + +AC_ARG_WITH([dbus-busdir], AC_HELP_STRING([--with-dbus-busdir=DIR], + [path to D-Bus bus services directory]), + [path_dbus_busdir=${withval}]) +if (test "${enable_systemd_service}" != "no" && test -z "${path_dbus_busdir}"); then + AC_MSG_CHECKING([D-Bus bus services directory]) + path_dbus_busdir="`$PKG_CONFIG --variable=system_bus_services_dir dbus-1`" + if (test -z "${path_dbus_busdir}"); then + AC_MSG_ERROR([D-Bus bus services directory is required]) + fi + AC_MSG_RESULT([${path_dbus_busdir}]) +fi +AC_SUBST(DBUS_BUSDIR, [${path_dbus_busdir}]) + AC_ARG_ENABLE([dbus-policy], AC_HELP_STRING([--disable-dbus-policy], [don't install D-Bus system policy file]), [enable_dbus_policy=${enableval}]) @@ -125,24 +156,6 @@ if (test "${enable_dbus_policy}" != "no" && test -z "${path_dbus_datadir}"); the fi AC_SUBST(DBUS_DATADIR, [${path_dbus_datadir}]) -AC_ARG_ENABLE([systemd-service], AC_HELP_STRING([--disable-systemd-service], - [don't install systemd service file]), - [enable_systemd_service=${enableval}]) -AM_CONDITIONAL(SYSTEMD_SERVICE, test "${enable_systemd_service}" != "no") - -AC_ARG_WITH([systemd-unitdir], AC_HELP_STRING([--with-systemd-unitdir=DIR], - [path to systemd unit directory]), - [path_systemd_unitdir=${withval}]) -if (test "${enable_systemd_service}" != "no" && test -z "${path_systemd_unitdir}"); then - AC_MSG_CHECKING([systemd unit directory]) - path_systemd_unitdir="`$PKG_CONFIG --variable=systemdsystemunitdir systemd`" - if (test -z "${path_systemd_unitdir}"); then - AC_MSG_ERROR([systemd unit directory is required]) - fi - AC_MSG_RESULT([${path_systemd_unitdir}]) -fi -AC_SUBST(SYSTEMD_UNITDIR, [${path_systemd_unitdir}]) - AC_ARG_ENABLE([docs], AC_HELP_STRING([--enable-docs], [build documentation and manual pages]), [enable_docs=${enableval}]) diff --git a/src/iwd.service.in b/src/iwd.service.in index 28a172cb..13d12f1c 100644 --- a/src/iwd.service.in +++ b/src/iwd.service.in @@ -2,8 +2,11 @@ Description=Wireless service [Service] +Type=dbus +BusName=net.connman.iwd ExecStart=@libexecdir@/iwd LimitNPROC=1 [Install] WantedBy=multi-user.target +Alias=dbus-net.connman.iwd.service diff --git a/src/net.connman.iwd.service b/src/net.connman.iwd.service new file mode 100644 index 00000000..928abdf8 --- /dev/null +++ b/src/net.connman.iwd.service @@ -0,0 +1,5 @@ +[D-BUS Service] +Name=net.connman.iwd +Exec=/bin/false +User=root +SystemdService=dbus-net.connman.iwd.service