From cf843477946451fabf9b5d17eec8ec81515057b6 Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Sun, 24 Feb 2013 17:40:36 +0100 Subject: [PATCH] initrd: add unit files needed for basic systemd-in-initrd support This will: * mount all configured filesystems (typically the rootfs on /sysroot) * reload the configuration to pick up anything from the mounted fs (typically /sysroot/etc/fstab) * mount any newly configured filesystems (typically /usr on /sysroot/usr, if applicable) * shut-down and clean-up any daemons running in the initramfs (typically udevd) * switch-root to /sysroot and start the real init For an example of what files should be included in an initramfs based on this see . Cc: Harald Hoyer Cc: Dave Reisner --- Makefile.am | 7 ++++++- units/initrd-cleanup.service | 18 ++++++++++++++++++ units/initrd-parse-etc.service | 19 +++++++++++++++++++ units/initrd-switch-root.service | 19 +++++++++++++++++++ units/initrd-switch-root.target | 16 ++++++++++++++++ units/initrd-udevadm-cleanup-db.service | 18 ++++++++++++++++++ 6 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 units/initrd-cleanup.service create mode 100644 units/initrd-parse-etc.service create mode 100644 units/initrd-switch-root.service create mode 100644 units/initrd-switch-root.target create mode 100644 units/initrd-udevadm-cleanup-db.service diff --git a/Makefile.am b/Makefile.am index 790e5014b..b69794994 100644 --- a/Makefile.am +++ b/Makefile.am @@ -379,7 +379,12 @@ dist_systemunit_DATA = \ units/systemd-ask-password-console.path \ units/systemd-udevd-control.socket \ units/systemd-udevd-kernel.socket \ - units/system-update.target + units/system-update.target \ + units/initrd-parse-etc.service \ + units/initrd-cleanup.service \ + units/initrd-switch-root.target \ + units/initrd-udevadm-cleanup-db.service \ + units/initrd-switch-root.service nodist_systemunit_DATA = \ units/getty@.service \ diff --git a/units/initrd-cleanup.service b/units/initrd-cleanup.service new file mode 100644 index 000000000..89986964e --- /dev/null +++ b/units/initrd-cleanup.service @@ -0,0 +1,18 @@ +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Cleaning Up and Shutting Down Daemons +DefaultDependencies=no +ConditionPathExists=/etc/initrd-release +OnFailure=emergency.target +Requires=local-fs.target swap.target +After=local-fs.target swap.target + +[Service] +Type=oneshot +ExecStart=/usr/bin/systemctl --no-block isolate initrd-switch-root.target diff --git a/units/initrd-parse-etc.service b/units/initrd-parse-etc.service new file mode 100644 index 000000000..4bfbb0f9f --- /dev/null +++ b/units/initrd-parse-etc.service @@ -0,0 +1,19 @@ +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Reload Configuration from the Real Root +DefaultDependencies=no +Requires=local-fs.target swap.target +After=local-fs.target swap.target +OnFailure=emergency.target +ConditionPathExists=/etc/initrd-release + +[Service] +Type=oneshot +ExecStartPre=/usr/bin/systemctl daemon-reload +ExecStart=/usr/bin/systemctl --no-block start initrd-cleanup.service diff --git a/units/initrd-switch-root.service b/units/initrd-switch-root.service new file mode 100644 index 000000000..e076b391d --- /dev/null +++ b/units/initrd-switch-root.service @@ -0,0 +1,19 @@ +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Switch Root +DefaultDependencies=no +ConditionPathExists=/etc/initrd-release +OnFailure=emergency.target +AllowIsolate=yes + +[Service] +Type=oneshot +# we have to use "--force" here, otherwise systemd would umount /run +ExecStart=/usr/bin/systemctl --no-block --force switch-root /sysroot +KillMode=none diff --git a/units/initrd-switch-root.target b/units/initrd-switch-root.target new file mode 100644 index 000000000..f706d29ba --- /dev/null +++ b/units/initrd-switch-root.target @@ -0,0 +1,16 @@ +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Switch Root +ConditionPathExists=/etc/initrd-release +DefaultDependencies=no +Requires=initrd-switch-root.service +Before=initrd-switch-root.service +AllowIsolate=yes +Wants=initrd-udevadm-cleanup-db.service local-fs.target swap.target systemd-journald.service +After=initrd-udevadm-cleanup-db.service local-fs.target swap.target emergency.service emergency.target diff --git a/units/initrd-udevadm-cleanup-db.service b/units/initrd-udevadm-cleanup-db.service new file mode 100644 index 000000000..983189e8b --- /dev/null +++ b/units/initrd-udevadm-cleanup-db.service @@ -0,0 +1,18 @@ +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Cleanup udevd DB +DefaultDependencies=no +ConditionPathExists=/etc/initrd-release +Conflicts=systemd-udevd.service systemd-udevd-control.socket systemd-udevd-kernel.socket +After=systemd-udevd.service systemd-udevd-control.socket systemd-udevd-kernel.socket +Before=initrd-switch-root.target + +[Service] +Type=oneshot +ExecStart=-/usr/bin/udevadm info --cleanup-db -- 2.30.2