[systemd-commits] 5 commits - configure.ac fixme Makefile.am man/daemon.xml man/systemd.special.xml.in src/automount.c src/mount.c src/special.h src/systemctl.c units/dbus.target units/dbus.target.in units/.gitignore units/umount.target

Lennart Poettering lennart at kemper.freedesktop.org
Fri Jul 9 17:41:33 PDT 2010


 Makefile.am                |    7 ++----
 configure.ac               |   32 ++++++++---------------------
 fixme                      |    8 -------
 man/daemon.xml             |   49 ++++++++++++++++++++++++++++++++++++++++-----
 man/systemd.special.xml.in |    6 ++---
 src/automount.c            |   10 +++++++++
 src/mount.c                |    4 +++
 src/special.h              |    4 ---
 src/systemctl.c            |   14 +++++++++++-
 units/.gitignore           |    1 
 units/dbus.target          |   11 ++++++++++
 units/dbus.target.in       |   17 ---------------
 units/umount.target        |   12 +++++++++++
 13 files changed, 111 insertions(+), 64 deletions(-)

New commits:
commit 41e450596adebf7f74e4a7e66c1d0466ea4e323c
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Jul 10 02:41:25 2010 +0200

    automount: refuse automounts for the root file system

diff --git a/src/automount.c b/src/automount.c
index b5003b3..26fec45 100644
--- a/src/automount.c
+++ b/src/automount.c
@@ -154,6 +154,11 @@ static int automount_verify(Automount *a) {
         if (a->meta.load_state != UNIT_LOADED)
                 return 0;
 
+        if (path_equal(a->where, "/")) {
+                log_error("Cannot have an automount unit for the root directory. Refusing.");
+                return -EINVAL;
+        }
+
         if (!(e = unit_name_from_path(a->where, ".automount")))
                 return -ENOMEM;
 
commit 4e67ddd6b39c2847cc399ab0874427baa7ea8935
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Jul 10 02:41:06 2010 +0200

    units: introduce umount.target for unmounting all file systems

diff --git a/Makefile.am b/Makefile.am
index f6ae7d6..57b8aa5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -126,6 +126,7 @@ dist_systemunit_DATA = \
 	units/rpcbind.target \
 	units/rtc-set.target \
 	units/shutdown.target \
+	units/umount.target \
 	units/sigpwr.target \
 	units/sockets.target \
 	units/swap.target \
diff --git a/fixme b/fixme
index cd5a23f..3b3d0f7 100644
--- a/fixme
+++ b/fixme
@@ -35,8 +35,6 @@
 
 * selinux
 
-* introduce umount.target
-
 * pull in umount.target and shutdown.target from emergency.service (?)
 
 * Show exit status auf auxiliary programs in systemctl status
diff --git a/src/automount.c b/src/automount.c
index 39eb3dd..b5003b3 100644
--- a/src/automount.c
+++ b/src/automount.c
@@ -36,6 +36,7 @@
 #include "unit-name.h"
 #include "dbus-automount.h"
 #include "bus-errors.h"
+#include "special.h"
 
 static const UnitActiveState state_translation_table[_AUTOMOUNT_STATE_MAX] = {
         [AUTOMOUNT_DEAD] = UNIT_INACTIVE,
@@ -194,6 +195,10 @@ static int automount_load(Unit *u) {
 
                 if ((r = unit_add_dependency(u, UNIT_BEFORE, UNIT(a->mount), true)) < 0)
                         return r;
+
+                if (a->meta.default_dependencies)
+                        if ((r = unit_add_two_dependencies_by_name(UNIT(a), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true)) < 0)
+                                return r;
         }
 
         return automount_verify(a);
diff --git a/src/mount.c b/src/mount.c
index 498732e..57c258f 100644
--- a/src/mount.c
+++ b/src/mount.c
@@ -367,6 +367,10 @@ static int mount_load(Unit *u) {
 
                 if ((r = unit_add_default_cgroup(u)) < 0)
                         return r;
+
+                if (m->meta.default_dependencies && !path_equal(m->where, "/"))
+                        if ((r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true)) < 0)
+                                return r;
         }
 
         return mount_verify(m);
diff --git a/src/special.h b/src/special.h
index 9ddabde..5ecdd3c 100644
--- a/src/special.h
+++ b/src/special.h
@@ -29,6 +29,7 @@
  * it to bring all services down that want to be brought down on
  * system shutdown. */
 #define SPECIAL_SHUTDOWN_TARGET "shutdown.target"
+#define SPECIAL_UMOUNT_TARGET "umount.target"
 
 #define SPECIAL_LOGGER_SOCKET "systemd-logger.socket"
 
diff --git a/units/umount.target b/units/umount.target
new file mode 100644
index 0000000..a5f31e0
--- /dev/null
+++ b/units/umount.target
@@ -0,0 +1,12 @@
+#  This file is part of systemd.
+#
+#  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.
+
+# See systemd.special(7) for details
+
+[Unit]
+Description=Unmount All Filesystems
+OnlyByDependency=yes
commit b8131a87ccdd9376882ca0a8dd3cfe45172e4c46
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Jul 10 00:55:44 2010 +0200

    systemctl: show connection counters only for Accept=yes sockets

diff --git a/fixme b/fixme
index 37c6288..cd5a23f 100644
--- a/fixme
+++ b/fixme
@@ -39,8 +39,6 @@
 
 * pull in umount.target and shutdown.target from emergency.service (?)
 
-* Don't show Accepted/Connected for non-Accept sockets
-
 * Show exit status auf auxiliary programs in systemctl status
 
 External:
diff --git a/src/systemctl.c b/src/systemctl.c
index 0314337..dc6fb5e 100644
--- a/src/systemctl.c
+++ b/src/systemctl.c
@@ -947,6 +947,7 @@ typedef struct UnitStatusInfo {
         /* Socket */
         unsigned n_accepted;
         unsigned n_connections;
+        bool accept;
 
         /* Device */
         const char *sysfs_path;
@@ -997,7 +998,7 @@ static void print_status_info(UnitStatusInfo *i) {
         if (i->status_text)
                 printf("\t  Status: \"%s\"\n", i->status_text);
 
-        if (i->id && endswith(i->id, ".socket"))
+        if (i->accept)
                 printf("\tAccepted: %u; Connected: %u\n", i->n_accepted, i->n_connections);
 
         if (i->main_pid > 0 || i->control_pid > 0) {
@@ -1093,6 +1094,17 @@ static int status_property(const char *name, DBusMessageIter *iter, UnitStatusIn
                 break;
         }
 
+        case DBUS_TYPE_BOOLEAN: {
+                dbus_bool_t b;
+
+                dbus_message_iter_get_basic(iter, &b);
+
+                if (streq(name, "Accept"))
+                        i->accept = b;
+
+                break;
+        }
+
         case DBUS_TYPE_UINT32: {
                 uint32_t u;
 
commit 828f33e89bc2fa7ee9bc9f977c04d0e30336d848
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Jul 10 00:49:00 2010 +0200

    man: update daemon man page a little

diff --git a/fixme b/fixme
index d05d0a3..37c6288 100644
--- a/fixme
+++ b/fixme
@@ -35,16 +35,14 @@
 
 * selinux
 
-* .socket should refuse start when .service is already up to avoid overwriting the socket
-
 * introduce umount.target
 
 * pull in umount.target and shutdown.target from emergency.service (?)
 
-* extend recommendations to depend on syslog.target via "After"
-
 * Don't show Accepted/Connected for non-Accept sockets
 
+* Show exit status auf auxiliary programs in systemctl status
+
 External:
 
 * patch /etc/init.d/functions with:
diff --git a/man/daemon.xml b/man/daemon.xml
index b708bdc..fb22e6c 100644
--- a/man/daemon.xml
+++ b/man/daemon.xml
@@ -678,7 +678,8 @@
                                 <listitem><para>If your daemon
                                 registers a D-Bus name on the bus,
                                 make sure to use
-                                <varname>Type=dbus</varname> if
+                                <varname>Type=dbus</varname> in the
+                                service file if
                                 possible.</para></listitem>
 
                                 <listitem><para>Make sure to set a
@@ -703,16 +704,45 @@
                                 operating
                                 system-independent.</para></listitem>
 
+                                <listitem><para>Since not all syslog
+                                implementations are socket-activatable
+                                yet, it is recommended to place an
+                                <varname>After=syslog.target</varname>
+                                dependency in service files for
+                                daemons that can log to
+                                syslog. <filename>syslog.target</filename>
+                                then either pulls in the syslog daemon
+                                itself or simply the activation
+                                socket. A <varname>Wants=</varname> or
+                                even <varname>Requires=</varname>
+                                dependency should generally not be
+                                added, since it should be up to the
+                                administrator whether he wants to
+                                enable logging or not, and most syslog
+                                clients work fine if no log daemon is
+                                running.</para></listitem>
+
                                 <listitem><para>Make sure to include
-                                an <literal>[Install]</literal> section including
-                                installation information for the unit
-                                file. See
+                                an <literal>[Install]</literal>
+                                section including installation
+                                information for the unit file. See
                                 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
                                 for details. To activate your service
                                 on boot make sure to add a
                                 <varname>WantedBy=multi-user.target</varname>
                                 or
-                                <varname>WantedBy=graphical.target</varname> directive.</para></listitem>
+                                <varname>WantedBy=graphical.target</varname>
+                                directive. To activate your socket on
+                                boot, make sure to add
+                                <varname>WantedBy=sockets.target</varname>. Usually
+                                you also want to make sure that when
+                                your service is installed your socket
+                                is installed too, hence add
+                                <varname>Also=foo.socket</varname> in
+                                your service file
+                                <filename>foo.service</filename>, for
+                                a hypothetical program
+                                <filename>foo</filename>.</para></listitem>
 
                         </orderedlist>
                 </refsect2>
@@ -800,6 +830,15 @@ if [ "$1" -eq 0 ]; then
         /usr/bin/systemd-install --realize disable foobar.service foobar.socket >/dev/null 2>&amp;1 || :
 fi</programlisting>
 
+                        <para>Depending on whether your service should
+                        or should not be started/stopped/restarted
+                        during package installation, deinstallation or
+                        upgrade, a different argument to
+                        <option>--realize=</option> may be
+                        specified. See
+                        <citerefentry><refentrytitle>systemd-install</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                        for details.</para>
+
                 </refsect2>
         </refsect1>
 
commit 83bda35801aa3d7ed180ec374a4bcdfe9dc1a8e4
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Jul 10 00:22:38 2010 +0200

    build-sys: drop special name hack for dbus.service since a native service file is now shipped upstream dbus

diff --git a/Makefile.am b/Makefile.am
index 115197e..f6ae7d6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -129,6 +129,7 @@ dist_systemunit_DATA = \
 	units/sigpwr.target \
 	units/sockets.target \
 	units/swap.target \
+	units/dbus.target \
 	units/systemd-initctl.socket \
 	units/systemd-logger.socket \
 	units/dev-hugepages.automount \
@@ -152,8 +153,7 @@ nodist_systemunit_DATA = \
 	units/multi-user.target \
 	units/systemd-initctl.service \
 	units/systemd-logger.service \
-	units/syslog.target \
-	units/dbus.target
+	units/syslog.target
 
 dist_sessionunit_DATA = \
 	units/session/default.target
@@ -171,7 +171,6 @@ EXTRA_DIST = \
 	units/systemd-initctl.service.in \
 	units/systemd-logger.service.in \
 	units/syslog.target.in \
-	units/dbus.target.in \
 	units/session/exit.service.in \
 	systemd.pc.in
 
@@ -573,7 +572,6 @@ SED_PROCESS = \
 	$(AM_V_GEN)$(MKDIR_P) $(dir $@) && \
 	$(SED)  -e 's, at rootlibexecdir\@,$(rootlibexecdir),g' \
 		-e 's, at SPECIAL_SYSLOG_SERVICE\@,$(SPECIAL_SYSLOG_SERVICE),g' \
-		-e 's, at SPECIAL_DBUS_SERVICE\@,$(SPECIAL_DBUS_SERVICE),g' \
 		-e 's, at SYSTEMCTL\@,$(rootbindir)/systemctl,g' \
 		-e 's, at pkgsysconfdir\@,$(pkgsysconfdir),g' \
 		-e 's, at pkgdatadir\@,$(pkgdatadir),g' \
diff --git a/configure.ac b/configure.ac
index 45b7ada..e7c74cb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -101,7 +101,7 @@ PKG_CHECK_MODULES(UDEV, [ libudev >= 154 ])
 AC_SUBST(UDEV_CFLAGS)
 AC_SUBST(UDEV_LIBS)
 
-PKG_CHECK_MODULES(DBUS, [ dbus-1 ])
+PKG_CHECK_MODULES(DBUS, [ dbus-1 >= 1.3.2 ])
 AC_SUBST(DBUS_CFLAGS)
 AC_SUBST(DBUS_LIBS)
 
@@ -215,7 +215,6 @@ fi
 with_distro=`echo ${with_distro} | tr '[[:upper:]]' '[[:lower:]]' `
 
 # Default generic names
-SPECIAL_DBUS_SERVICE=dbus.service
 SPECIAL_SYSLOG_SERVICE=syslog.service
 
 # Location of the init scripts as mandated by LSB
@@ -228,17 +227,16 @@ case $with_distro in
                 SYSTEM_SYSVINIT_PATH=/etc/rc.d/init.d
                 SYSTEM_SYSVRCND_PATH=/etc/rc.d
 
-                # A little background why we define these special unit
+                # A little background why we define this special unit
                 # names here in configure.ac: SysV services currently
                 # cannot have aliases. As long as syslog is started
-                # via a SysV init script we hence define these names
-                # to the actual SysV name here. Later on when SysV
-                # init scripts are not used anymore it is advisable to
-                # use the generic names instead and use symlinks in
-                # the unit directories to point to the right native
-                # unit file.
-
-                SPECIAL_DBUS_SERVICE=messagebus.service
+                # via a SysV init script we hence define this name to
+                # the actual SysV name here. Later on when SysV init
+                # scripts are not used anymore it is advisable to use
+                # the generic name instead and use symlinks in the
+                # unit directories to point to the right native unit
+                # file.
+
                 SPECIAL_SYSLOG_SERVICE=rsyslog.service
                 AC_DEFINE(TARGET_FEDORA, [], [Target is Fedora/RHEL])
                 M4_DISTRO_FLAG=-DTARGET_FEDORA=1
@@ -270,7 +268,6 @@ case $with_distro in
         slackware)
                 SYSTEM_SYSVINIT_PATH=/etc/rc.d/init.d
                 SYSTEM_SYSVRCND_PATH=/etc/rc.d
-                SPECIAL_DBUS_SERVICE=messagebus.service
                 AC_DEFINE(TARGET_SLACKWARE, [], [Target is Slackware])
                 M4_DISTRO_FLAG=-DTARGET_SLACKWARE=1
                 ;;
@@ -279,8 +276,6 @@ case $with_distro in
                         [AC_MSG_ERROR([With --distro=other, you must pass --with-sysvinit-path= to configure])])
                 AS_IF([test "x$with_sysvrcd_path" = "x"],
                         [AC_MSG_ERROR([With --distro=other, you must pass --with-sysvrcd-path= to configure])])
-                AS_IF([test "x$with_dbus_service" = "x"],
-                        [AC_MSG_ERROR([With --distro=other, you must pass --with-dbus-service= to configure])])
                 AS_IF([test "x$with_syslog_service" = "x"],
                         [AC_MSG_ERROR([With --distro=other, you must pass --with-syslog-service= to configure])])
                 ;;
@@ -301,12 +296,6 @@ AC_ARG_WITH([sysvrcd-path],
         [SYSTEM_SYSVRCND_PATH="$withval"],
         [])
 
-AC_ARG_WITH([dbus-service],
-        [AS_HELP_STRING([--with-dbus-service=UNIT],
-                [Specify the name of the special DBus service @<:@default=based on distro@:>@])],
-        [SPECIAL_DBUS_SERVICE="$withval"],
-        [])
-
 AC_ARG_WITH([syslog-service],
         [AS_HELP_STRING([--with-syslog-service=UNIT],
                 [Specify the name of the special syslog service @<:@default=based on distro@:>@])],
@@ -315,7 +304,6 @@ AC_ARG_WITH([syslog-service],
 
 AC_SUBST(SYSTEM_SYSVINIT_PATH)
 AC_SUBST(SYSTEM_SYSVRCND_PATH)
-AC_SUBST(SPECIAL_DBUS_SERVICE)
 AC_SUBST(SPECIAL_SYSLOG_SERVICE)
 AC_SUBST(M4_DISTRO_FLAG)
 
@@ -326,7 +314,6 @@ AM_CONDITIONAL(TARGET_ARCH, test x"$with_distro" = xarch)
 AM_CONDITIONAL(TARGET_GENTOO, test x"$with_distro" = xgentoo)
 AM_CONDITIONAL(TARGET_SLACKWARE, test x"$with_distro" = xslackware)
 
-AC_DEFINE_UNQUOTED(SPECIAL_DBUS_SERVICE, ["$SPECIAL_DBUS_SERVICE"], [D-Bus service name])
 AC_DEFINE_UNQUOTED(SPECIAL_SYSLOG_SERVICE, ["$SPECIAL_SYSLOG_SERVICE"], [Syslog service name])
 
 AC_ARG_WITH([dbuspolicydir],
@@ -382,7 +369,6 @@ echo "
         SysV init scripts:       ${SYSTEM_SYSVINIT_PATH}
         SysV rc?.d directories:  ${SYSTEM_SYSVRCND_PATH}
         Syslog service:          ${SPECIAL_SYSLOG_SERVICE}
-        D-Bus service:           ${SPECIAL_DBUS_SERVICE}
         Gtk:                     ${have_gtk}
         tcpwrap:                 ${have_tcpwrap}
         PAM:                     ${have_pam}
diff --git a/man/systemd.special.xml.in b/man/systemd.special.xml.in
index 49dc389..ac9f0f5 100644
--- a/man/systemd.special.xml.in
+++ b/man/systemd.special.xml.in
@@ -50,7 +50,7 @@
         <refsynopsisdiv>
                 <para><filename>basic.target</filename>,
                 <filename>ctrl-alt-del.target</filename>,
-                <filename>@SPECIAL_DBUS_SERVICE@</filename>,
+                <filename>dbus.service</filename>,
                 <filename>dbus.target</filename>,
                 <filename>default.target</filename>,
                 <filename>display-manager.service</filename>,
@@ -134,7 +134,7 @@
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
-                                <term><filename>@SPECIAL_DBUS_SERVICE@</filename></term>
+                                <term><filename>dbus.service</filename></term>
                                 <listitem>
                                         <para>A special unit for the
                                         D-Bus system bus. As soon as
@@ -160,7 +160,7 @@
                                         ensure that this target pulls
                                         in a service unit with the
                                         name or alias of
-                                        <filename>@SPECIAL_DBUS_SERVICE@</filename>
+                                        <filename>dbus.service</filename>
                                         (or a socket unit that
                                         activates this
                                         service).</para>
diff --git a/src/special.h b/src/special.h
index 8cb500b..9ddabde 100644
--- a/src/special.h
+++ b/src/special.h
@@ -56,10 +56,7 @@
 #define SPECIAL_HALT_TARGET "halt.target"
 #define SPECIAL_POWEROFF_TARGET "poweroff.target"
 #define SPECIAL_REBOOT_TARGET "reboot.target"
-
-#ifndef SPECIAL_DBUS_SERVICE
 #define SPECIAL_DBUS_SERVICE "dbus.service"
-#endif
 
 #ifndef SPECIAL_SYSLOG_SERVICE
 #define SPECIAL_SYSLOG_SERVICE "syslog.service"
diff --git a/units/.gitignore b/units/.gitignore
index 75d3bfd..ea85dc0 100644
--- a/units/.gitignore
+++ b/units/.gitignore
@@ -6,4 +6,3 @@ graphical.target
 multi-user.target
 getty at .service
 remote-fs.target
-dbus.target
diff --git a/units/dbus.target b/units/dbus.target
new file mode 100644
index 0000000..6389768
--- /dev/null
+++ b/units/dbus.target
@@ -0,0 +1,11 @@
+#  This file is part of systemd.
+#
+#  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.
+
+# See systemd.special(7) for details
+
+[Unit]
+Description=D-Bus
diff --git a/units/dbus.target.in b/units/dbus.target.in
deleted file mode 100644
index 6faf58d..0000000
--- a/units/dbus.target.in
+++ /dev/null
@@ -1,17 +0,0 @@
-#  This file is part of systemd.
-#
-#  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.
-
-# See systemd.special(7) for details
-
-[Unit]
-Description=D-Bus
-
-# As soon as D-Bus has native files this explicit dependency should be
-# dropped, and replaced by an alias symlink in the .wants/ directory,
-# to either the .service or .socket unit of the D-Bus service.
-Requires=@SPECIAL_DBUS_SERVICE@
-After=@SPECIAL_DBUS_SERVICE@


More information about the systemd-commits mailing list