diff options
author | Tom Gundersen <teg@jklm.no> | 2013-02-24 17:40:36 +0100 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2013-03-01 22:52:36 +0100 |
commit | cf843477946451fabf9b5d17eec8ec81515057b6 (patch) | |
tree | a95ad3843fc36ce2707e6f9e2f5e0af7d07f4660 | |
parent | 3d22d1ab57bf44c92e4d9ca95d9728105dd3fb0d (diff) |
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
<https://mailman.archlinux.org/pipermail/arch-projects/2013-February/003628.html>.
Cc: Harald Hoyer <harald.hoyer@gmail.com>
Cc: Dave Reisner <d@falconindy.com>
-rw-r--r-- | Makefile.am | 7 | ||||
-rw-r--r-- | units/initrd-cleanup.service | 18 | ||||
-rw-r--r-- | units/initrd-parse-etc.service | 19 | ||||
-rw-r--r-- | units/initrd-switch-root.service | 19 | ||||
-rw-r--r-- | units/initrd-switch-root.target | 16 | ||||
-rw-r--r-- | units/initrd-udevadm-cleanup-db.service | 18 |
6 files changed, 96 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am index 790e5014be..b69794994d 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 0000000000..89986964ea --- /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 0000000000..4bfbb0f9fb --- /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 0000000000..e076b391de --- /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 0000000000..f706d29ba6 --- /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 0000000000..983189e8b0 --- /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 |