From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yann E. MORIN Date: Sun, 7 Jun 2020 00:20:16 +0200 Subject: [Buildroot] [PATCH] package/dbusbroker: new package In-Reply-To: <20200605231038.15209-1-nolange79@gmail.com> References: <20200605231038.15209-1-nolange79@gmail.com> Message-ID: <20200606222016.GI13972@scaer> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: buildroot@busybox.net Norbert, All, On 2020-06-06 01:10 +0200, Norbert Lange spake thusly: > Add dbus-broker, which is a drop-in replacement > for the dbus-daemon. So, is it possible to have both dbus and dbus-broker in the same system? It sould seem so, as far as I can see: one or the other can serve as the system bus daemon. As for the session, each user may opt for running one or the other, it seems. However, dbus-broker does not provide libdbus. So packages that wqant to link with libdbus will still need to select the origian dbus package. > Its possible to use this package standalone (without the dbus > package - if buildroot's systemd would not depend on dbus). > This is sufficient to provide systemd's (d)bus functionality. > To allow standalone usage, the necessary config files are > copied and adopted over from dbus. Sorry, but this explanation does not make sense to me... So you mean you;d like to be able to uses sytemd with dbus-broker rather than with the original dbus? In that case, you can change systemd' Config.in to something like: select BR2_PACKAGE_DBUS if !BR2_PACKAGE_DBUS_BROKER # runtime ... in a followup patch Also, the part about the config files should probably bne a separate paragraph, otherwise it gets confusing... [--SNIP--] > diff --git a/package/dbusbroker/Config.in b/package/dbusbroker/Config.in > new file mode 100644 > index 0000000000..aa628b4d5b > --- /dev/null > +++ b/package/dbusbroker/Config.in > @@ -0,0 +1,23 @@ > +config BR2_PACKAGE_DBUSBROKER > + bool "dbusbroker" The name as defined upstream is dbus-borker, so this is what we should be using too: package/dbus-broker/ BR2_PACKAGE_DBUS_BROKER > + depends on BR2_TOOLCHAIN_HAS_THREADS > + depends on BR2_USE_MMU Dependency on MMU should be first. > + depends on BR2_INIT_SYSTEMD > + select BR2_PACKAGE_EXPAT > + select BR2_PACKAGE_SYSTEMD No, you can't select BR2_PACKAGE_SYSTEMD. For one, it is forcibly enabled by BR2_INIT_SYSTEMD, so as you depend on it, you areguaranteed it is availbe. However, systemd does not look like it is a mandatory dependency of dbus-broker. Indeed, systemd is only needed for the launcher, which is optional. So you should drop the depenency on BR2_INIT_SYSTEMD, and you must drop the select on BR2_PACKAGE_SYSTEMD. [--SNIP--] > diff --git a/package/dbusbroker/dbusbroker.hash b/package/dbusbroker/dbusbroker.hash > new file mode 100644 > index 0000000000..4eefe63725 > --- /dev/null > +++ b/package/dbusbroker/dbusbroker.hash > @@ -0,0 +1,3 @@ > +# Locally calculated > +sha256 95adfde56bce898c3b69eee0524732365e802348dd8189a35d5d00c30990dc81 dbus-broker-23.tar.xz > +sha256 3cda3630283eda0eab825abe5ac84d191248c6b3fe1c232a118124959b96c6a4 LICENSE The convention is to use two spaces to spearate the fields now. > diff --git a/package/dbusbroker/dbusbroker.mk b/package/dbusbroker/dbusbroker.mk > new file mode 100644 > index 0000000000..71d13e5ebe > --- /dev/null > +++ b/package/dbusbroker/dbusbroker.mk > @@ -0,0 +1,45 @@ > +################################################################################ > +# > +# dbusbroker > +# > +# Launching services is delegated to systemd so there is very little else > +# needed. No separate user is necessary and no helper for launching. > +# > +# Service + Config files were copied over from dbus, > +# uneeded / unecessary entries removed for clarity. > +# > +################################################################################ > + > +DBUSBROKER_VERSION = 23 > +DBUSBROKER_SOURCE = dbus-broker-$(DBUSBROKER_VERSION).tar.xz > +DBUSBROKER_SITE = https://github.com/bus1/dbus-broker/releases/download/v$(DBUSBROKER_VERSION) > + > +DBUSBROKER_LICENSE = Apache-2.0 > +DBUSBROKER_LICENSE_FILES = LICENSE > +# Compatibility Launcher requires this > +DBUSBROKER_DEPENDENCIES += expat systemd Do not use += on the first assignment of DEPENDENCIES (unless said first assignment is in a conditional block). However, systemd is not a mandatory requirement; it is only needed for the launcher. So: # BR2_COREUTILS_HOST_DEPENDENCY to be able to use ln --relative ifeq ($(BR2_PACKAGE_SYSTEMD),y) DBUS_BROKER_DEPENDENCIES += $(BR2_COREUTILS_HOST_DEPENDENCY) expat systemd DBUS_BROKER_CONF_OPTS += -Dlauncher=true else DBUS_BROKER_CONF_OPTS += -Dlauncher=false endif # Do not install units for system bus daemon if original dbus present ifeq ($(BR2_PACKAGE_DBUS),) define DBUS_BROKER_INSTALL_INIT_SYSTEMD $(INSTALL) -D -m644 $(DBUSBROKER_PKGDIR)/dbus.socket \ $(TARGET_DIR)/usr/lib/systemd/system/dbus.socket $(HOST_MAKE_ENV) ln -sf --relative \ $(TARGET_DIR)/usr/lib/systemd/system/dbus.socket \ $(TARGET_DIR)/usr/lib/systemd/system/sockets.target.wants/dbus.socket endef endif But you also need to provide startup script for the non-systemd case: # Do not install startup script for system bus daemon if original dbus present ifeq ($(BR2_PACKAGE_DBUS),) define DBUS_BROKER_INSTALL_INIT_SYSV $(INSTALL) -D -m 0755 $(DBUSBROKER_PKGDIR)/S30dbus-broker \ $(TARGET_DIR)/etc/init.d/S30dbus-broker endef endif (use your imagination to come up with a good startup script; use package/busybox/S01syslogd as reference.) > +ifeq ($(BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17),y) > +DBUSBROKER_CONF_OPTS += -Dlinux-4-17=true We want to explicitly disable that otherwise: else DBUSBROKER_CONF_OPTS += -Dlinux-4-17=false endif > +endif > + > +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) > +DBUSBROKER_DEPENDENCIES += libselinux > +DBUSBROKER_CONF_OPTS += -Dselinux=true > +else > +DBUSBROKER_CONF_OPTS += -Dselinux=false > +endif > + > +# Only install config and service files if dbus is not available > +ifeq ($(BR2_PACKAGE_DBUS),) > +define DBUSBROKER_INSTALL_TARGET_POST This macro name is not explict. What about: DBUS_BROKER_INSTALL_CONFIG_FILES > + $(INSTALL) -D -m644 $(DBUSBROKER_PKGDIR)/dbus.socket $(TARGET_DIR)/usr/lib/systemd/system/dbus.socket > + ln -sf ../dbus.socket $(TARGET_DIR)/usr/lib/systemd/system/sockets.target.wants/dbus.socket The systemd-related files should only be installed if systemd is enabled (see above). > + $(INSTALL) -D -m644 $(DBUSBROKER_PKGDIR)/session.conf $(TARGET_DIR)/usr/share/dbus-1/session.conf > + $(INSTALL) -D -m644 $(DBUSBROKER_PKGDIR)/system.conf $(TARGET_DIR)/usr/share/dbus-1/system.conf Split lines that are too long. Also, even if the original dbus is enabled (e.g. as the system bus, but one uses dbus-broker as session bus), one may still need those files on the target. So we may want to unconditionally install both of them as: $(TARGET_DIR)/usr/share/dbus-1/system-broker.conf $(TARGET_DIR)/usr/share/dbus-1/session-broker.conf ... and when the origian dbus is not enabled, then we symlink those two to be the default ones. > +endef > + > +DBUSBROKER_POST_INSTALL_TARGET_HOOKS += DBUSBROKER_INSTALL_TARGET_POST > +endif I think we also need a user to run the system daemon, like is done with the original dbus: define DBUS_BROKER_USERS dbus-broker -1 dbus-broker -1 * /var/run/dbus-broker - - dbus-broker messagebus user endef > +$(eval $(meson-package)) > diff --git a/package/dbusbroker/session.conf b/package/dbusbroker/session.conf > new file mode 100644 > index 0000000000..e4758fa218 > --- /dev/null > +++ b/package/dbusbroker/session.conf > @@ -0,0 +1,65 @@ [--SNIP--] I would like that we have a very simple, basic session config file, that does not filter anything for the owning user, and does not allow any other user to connect. People who need more complex configurations will have to provide their own session config file. > diff --git a/package/dbusbroker/system.conf b/package/dbusbroker/system.conf > new file mode 100644 > index 0000000000..a1e8df7367 > --- /dev/null > +++ b/package/dbusbroker/system.conf > @@ -0,0 +1,120 @@ > + > + > + > + > + + "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> > + > + > + > + system And we should use the 'dbus-broker' user: dbus-broker > + > + With systemd, isn't this playing badly with systemd's monitoring of processes? I.e. this implies setting forking=tru in the unit for this dameon, while systemd is usually very capable and spawning dameons in the background. > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + + send_interface="org.freedesktop.DBus" /> > + + send_interface="org.freedesktop.DBus.Introspectable"/> > + + send_interface="org.freedesktop.DBus.Properties"/> > + > + + send_interface="org.freedesktop.DBus" > + send_member="UpdateActivationEnvironment"/> > + + send_interface="org.freedesktop.DBus.Debug.Stats"/> > + + send_interface="org.freedesktop.systemd1.Activator"/> > + > + > + > + > + + send_interface="org.freedesktop.systemd1.Activator"/> > + > + > + > + > + + send_interface="org.freedesktop.DBus.Monitoring"/> > + > + > + > + > + + send_interface="org.freedesktop.DBus.Debug.Stats"/> > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + system.d > + > + /etc/dbus-1/system.d > + > + > + /etc/dbus-1/system-local.conf > + > + contexts/dbus_contexts > + > + > -- > 2.26.2 > > _______________________________________________ > buildroot mailing list > buildroot at busybox.net > http://lists.busybox.net/mailman/listinfo/buildroot -- .-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 561 099 427 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------'