This will: * mount all configured filesystems (typically the rootfs on /sysroot and possibl usr on /sysroot/usr) * shut-down and clean-up any daemons running in the initramfs (typically udevd) * switch-root to /sysroot and start the real init
v2: no longer read additional configuration after mounting /sysroot Cc: Harald Hoyer <[email protected]> Cc: Dave Reisner <[email protected]> --- Makefile.am | 6 +++++- units/initrd-cleanup.service | 18 ++++++++++++++++++ units/initrd-switch-root.service | 19 +++++++++++++++++++ units/initrd-switch-root.target | 16 ++++++++++++++++ units/initrd-udevadm-cleanup-db.service | 18 ++++++++++++++++++ 5 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 units/initrd-cleanup.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 790e501..a02efc6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -379,7 +379,11 @@ 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-cleanup.service \ + units/initrd-switch-root.target \ + units/initrd-udevadm-cleanup-db.service \ + units/initrd-switch-root.service nodist_systemunit_DATA = \ units/[email protected] \ diff --git a/units/initrd-cleanup.service b/units/initrd-cleanup.service new file mode 100644 index 0000000..8998696 --- /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-switch-root.service b/units/initrd-switch-root.service new file mode 100644 index 0000000..e076b39 --- /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 0000000..f706d29 --- /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 0000000..983189e --- /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 -- 1.8.1.4 _______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
