From f057408c9c3b54b6eeb96cd9f0a1333f30610614 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 12 Jul 2010 23:49:20 +0200 Subject: [PATCH] units: introduce emergency.target --- Makefile.am | 10 ++++++++-- man/systemctl.xml | 2 +- man/systemd.special.xml.in | 6 +++--- src/manager.c | 2 +- src/special.h | 2 +- src/systemctl.c | 2 +- units/emergency.service | 9 +++++---- units/fedora/halt.service | 6 +++--- units/fedora/poweroff.service | 6 +++--- units/fedora/reboot.service | 6 +++--- units/fedora/sysinit.service | 4 +--- units/multi-user.target.m4 | 4 ++-- units/rescue.target | 7 ++++--- units/sysinit.target.m4 | 3 ++- 14 files changed, 38 insertions(+), 31 deletions(-) diff --git a/Makefile.am b/Makefile.am index 6351537f..51fe5a94 100644 --- a/Makefile.am +++ b/Makefile.am @@ -113,6 +113,7 @@ dbusinterface_DATA = \ dist_systemunit_DATA = \ units/emergency.service \ + units/emergency.target \ units/basic.target \ units/getty.target \ units/halt.target \ @@ -183,7 +184,8 @@ dist_systemunit_DATA += \ units/fedora/prefdm.service \ units/fedora/rc-local.service \ units/fedora/reboot.service \ - units/fedora/sysinit.service + units/fedora/sysinit.service \ + units/fedora/single.service endif if TARGET_SUSE @@ -755,7 +757,8 @@ install-data-hook: $(LN_S) ../system-services/org.freedesktop.systemd1.service org.freedesktop.systemd1.service ) if TARGET_FEDORA $(MKDIR_P) -m 0755 \ - $(DESTDIR)$(SYSTEM_SYSVINIT_PATH) + $(DESTDIR)$(SYSTEM_SYSVINIT_PATH) \ + $(DESTDIR)$(systemunitdir)/rescue.target.wants ( cd $(DESTDIR)$(pkgsysconfdir)/system && \ rm -f display-manager.service && \ $(LN_S) $(systemunitdir)/prefdm.service display-manager.service ) @@ -765,6 +768,9 @@ if TARGET_FEDORA ( cd $(DESTDIR)$(pkgsysconfdir)/system/multi-user.target.wants && \ rm -f rc-local.service && \ $(LN_S) $(systemunitdir)/rc-local.service rc-local.service ) + ( cd $(DESTDIR)$(systemunitdir)/rescue.target.wants && \ + rm -f single.service && \ + $(LN_S) $(systemunitdir)/single.service single.service ) ( cd $(DESTDIR)$(systemunitdir) && \ rm -f local.service && \ $(LN_S) rc-local.service local.service ) diff --git a/man/systemctl.xml b/man/systemctl.xml index f0de186e..22d3f6ee 100644 --- a/man/systemctl.xml +++ b/man/systemctl.xml @@ -501,7 +501,7 @@ Enter emergency mode. This is mostly equivalent to isolate - emergency.service but also + emergency.target but also prints a wall message to all users. diff --git a/man/systemd.special.xml.in b/man/systemd.special.xml.in index 64e37d11..c6c2393f 100644 --- a/man/systemd.special.xml.in +++ b/man/systemd.special.xml.in @@ -54,7 +54,7 @@ dbus.target, default.target, display-manager.service, - emergency.service, + emergency.target, exit.service, graphical.target, halt.target, @@ -205,9 +205,9 @@ - emergency.service + emergency.target - A special service unit + A special target unit that starts an emergency shell on the main console. This unit is supposed diff --git a/src/manager.c b/src/manager.c index 6dfef713..9667e299 100644 --- a/src/manager.c +++ b/src/manager.c @@ -1947,7 +1947,7 @@ static int manager_process_signal_fd(Manager *m) { static const char * const table[] = { [0] = SPECIAL_DEFAULT_TARGET, [1] = SPECIAL_RESCUE_TARGET, - [2] = SPECIAL_EMERGENCY_SERVICE, + [2] = SPECIAL_EMERGENCY_TARGET, [3] = SPECIAL_HALT_TARGET, [4] = SPECIAL_POWEROFF_TARGET, [5] = SPECIAL_REBOOT_TARGET diff --git a/src/special.h b/src/special.h index 5ecdd3cc..9ffd3d89 100644 --- a/src/special.h +++ b/src/special.h @@ -53,7 +53,7 @@ #define SPECIAL_SYSINIT_TARGET "sysinit.target" #define SPECIAL_RESCUE_TARGET "rescue.target" #define SPECIAL_EXIT_SERVICE "exit.service" -#define SPECIAL_EMERGENCY_SERVICE "emergency.service" +#define SPECIAL_EMERGENCY_TARGET "emergency.target" #define SPECIAL_HALT_TARGET "halt.target" #define SPECIAL_POWEROFF_TARGET "poweroff.target" #define SPECIAL_REBOOT_TARGET "reboot.target" diff --git a/src/systemctl.c b/src/systemctl.c index 32974aec..4218a22b 100644 --- a/src/systemctl.c +++ b/src/systemctl.c @@ -720,7 +720,7 @@ static int start_unit(DBusConnection *bus, char **args, unsigned n) { [ACTION_RUNLEVEL4] = SPECIAL_RUNLEVEL4_TARGET, [ACTION_RUNLEVEL5] = SPECIAL_RUNLEVEL5_TARGET, [ACTION_RESCUE] = SPECIAL_RESCUE_TARGET, - [ACTION_EMERGENCY] = SPECIAL_EMERGENCY_SERVICE, + [ACTION_EMERGENCY] = SPECIAL_EMERGENCY_TARGET, [ACTION_DEFAULT] = SPECIAL_DEFAULT_TARGET }; diff --git a/units/emergency.service b/units/emergency.service index bcedebfa..a5a54bc9 100644 --- a/units/emergency.service +++ b/units/emergency.service @@ -10,16 +10,17 @@ [Unit] Description=Emergency Shell DefaultDependencies=no -Requires=shutdown.target umount.target -After=shutdown.target umount.target +After=shutdown.target [Service] +ExecStartPre=-/bin/plymouth --hide-splash +ExecStartPre=-/bin/echo 'Welcome to emergency mode. Use "systemctl default" to activate default mode.' ExecStart=/bin/sh -StandardInput=tty +StandardInput=tty-force Restart=restart-always RestartSec=0 KillMode=process-group # Bash ignores SIGTERM, so we send SIGHUP first, to ensure that bash # terminates cleanly. -ExecStop=/bin/kill -HUP $(MAINPID) +ExecStop=-/bin/kill -HUP $(MAINPID) diff --git a/units/fedora/halt.service b/units/fedora/halt.service index b957a3fe..4fe0d532 100644 --- a/units/fedora/halt.service +++ b/units/fedora/halt.service @@ -8,9 +8,9 @@ [Unit] Description=Halt DefaultDependencies=no -Requires=shutdown.target killall.service -After=shutdown.target killall.service -Conflicts=dev-hugepages.automount dev-mqueue.automount proc-sys-fs-binfmt_misc.automount sys-kernel-debug.automount sys-kernel-security.automount +Requires=shutdown.target umount.target killall.service +Conflicts=sysinit.service +After=shutdown.target umount.target killall.service sysinit.service [Service] Type=finish diff --git a/units/fedora/poweroff.service b/units/fedora/poweroff.service index 76d030c0..3a538757 100644 --- a/units/fedora/poweroff.service +++ b/units/fedora/poweroff.service @@ -8,9 +8,9 @@ [Unit] Description=Power-Off DefaultDependencies=no -Requires=shutdown.target killall.service -After=shutdown.target killall.service -Conflicts=dev-hugepages.automount dev-mqueue.automount proc-sys-fs-binfmt_misc.automount sys-kernel-debug.automount sys-kernel-security.automount +Requires=shutdown.target umount.target killall.service +Conflicts=sysinit.service +After=shutdown.target umount.target killall.service sysinit.service [Service] Type=finish diff --git a/units/fedora/reboot.service b/units/fedora/reboot.service index 6a93c0b5..0f3e206e 100644 --- a/units/fedora/reboot.service +++ b/units/fedora/reboot.service @@ -8,9 +8,9 @@ [Unit] Description=Reboot DefaultDependencies=no -Requires=shutdown.target killall.service -After=shutdown.target killall.service -Conflicts=dev-hugepages.automount dev-mqueue.automount proc-sys-fs-binfmt_misc.automount sys-kernel-debug.automount sys-kernel-security.automount +Requires=shutdown.target umount.target killall.service +Conflicts=sysinit.service +After=shutdown.target umount.target killall.service sysinit.service [Service] Type=finish diff --git a/units/fedora/sysinit.service b/units/fedora/sysinit.service index 884de8d1..21872e8d 100644 --- a/units/fedora/sysinit.service +++ b/units/fedora/sysinit.service @@ -8,9 +8,7 @@ [Unit] Description=System Initialization DefaultDependencies=no -Before=local-fs.target remote-fs.target swap.target sockets.target -Conflicts=shutdown.target -Before=shutdown.target +Before=emergency.service emergency.target [Service] ExecStart=/etc/rc.d/rc.sysinit diff --git a/units/multi-user.target.m4 b/units/multi-user.target.m4 index 010e7d84..323ba01a 100644 --- a/units/multi-user.target.m4 +++ b/units/multi-user.target.m4 @@ -10,8 +10,8 @@ [Unit] Description=Multi-User Requires=basic.target -After=basic.target -Conflicts=rescue.target +Conflicts=rescue.target shutdown.target +After=basic.target rescue.target m4_dnl m4_ifdef(`TARGET_FEDORA', m4_dnl On Fedora Runlevel 3 is multi-user diff --git a/units/rescue.target b/units/rescue.target index 0398f9bf..638f47c1 100644 --- a/units/rescue.target +++ b/units/rescue.target @@ -8,9 +8,10 @@ # See systemd.special(7) for details [Unit] -Description=Rescue Prompt -Requires=basic.target -After=basic.target +Description=Rescue Mode +Requires=sysinit.target local-fs.target swap.target shutdown.target +Conflicts=emergency.service emergency.target +After=sysinit.target local-fs.target swap.target shutdown.target emergency.service emergency.target Names=runlevel1.target [Install] diff --git a/units/sysinit.target.m4 b/units/sysinit.target.m4 index 48e55a43..29693b3f 100644 --- a/units/sysinit.target.m4 +++ b/units/sysinit.target.m4 @@ -9,7 +9,8 @@ [Unit] Description=Systemd Initialization -Conflicts=emergency.service +Conflicts=emergency.service emergency.target +After=emergency.service emergency.target OnlyByDependency=yes m4_dnl m4_ifdef(`TARGET_FEDORA', -- 2.39.5