[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>&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