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>
This commit is contained in:
Tom Gundersen 2013-02-24 17:40:36 +01:00
parent 3d22d1ab57
commit cf84347794
6 changed files with 96 additions and 1 deletions

View File

@ -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 \

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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