printf '[ -e "%s" ] && { ln -s "%s" /dev/root 2>/dev/null; rm "$job"; }\n' \
"${root#block:}" "${root#block:}" > $hookdir/initqueue/settled/blocksymlink.sh
- if [ -d /lib/systemd/system/ ]; then
- echo "${root#block:} $NEWROOT ${fstype:-auto} ${rflags:-defaults} 1 1" >> /etc/fstab
- {
- echo '[Unit]'
- echo 'Description=New Root File System'
- echo 'DefaultDependencies=no'
- echo 'Before=switch-root.service'
- echo '[Mount]'
- echo "What=${root#block:}"
- echo "Where=$NEWROOT"
+ # if [ -d /lib/systemd/system/ ]; then
+ # echo "${root#block:} $NEWROOT ${fstype:-auto} ${rflags:-defaults} 1 1" >> /etc/fstab
+ # {
+ # echo '[Unit]'
+ # echo 'Description=New Root File System'
+ # echo 'DefaultDependencies=no'
+ # echo 'Before=initrd-switch-root.service'
+ # echo '[Mount]'
+ # echo "What=${root#block:}"
+ # echo "Where=$NEWROOT"
- } >/lib/systemd/system/${NEWROOT#/}.mount
+ # } >/lib/systemd/system/${NEWROOT#/}.mount
- mkdir -p /lib/systemd/system/switch-root.target.wants
- ln -s ../${NEWROOT#/}.mount /lib/systemd/system/switch-root.target.wants/${NEWROOT#/}.mount
- fi
+ # mkdir -p /lib/systemd/system/initrd-switch-root.target.requires
+ # ln -s ../${NEWROOT#/}.mount /lib/systemd/system/initrd-switch-root.target.requires/${NEWROOT#/}.mount
+ # fi
wait_for_dev "${root#block:}"
fi
ConditionPathExists=/etc/initrd-release
[Service]
-Environment=HOME=/
-WorkingDirectory=/
-ExecStart=-/bin/dracut-cmdline
Type=oneshot
+ExecStart=-/bin/dracut-cmdline
StandardInput=null
StandardOutput=syslog
StandardError=syslog+console
ConditionPathExists=/etc/initrd-release
[Service]
-Environment=HOME=/
-WorkingDirectory=/
+Type=oneshot
ExecStart=-/bin/dracut-initqueue
-Type=simple
StandardInput=null
StandardOutput=syslog
StandardError=syslog+console
export -p > /dracut-state.sh
-systemctl isolate initrd-switch-root.target
exit 0
[Unit]
Description=Dracut pre-pivot and cleanup hook
DefaultDependencies=no
-Before=initrd-switch-root.service
+After=dracut-initqueue.service
ConditionPathExists=/etc/initrd-release
[Service]
-Environment=HOME=/
-WorkingDirectory=/
-ExecStart=-/bin/dracut-pre-pivot
Type=oneshot
+ExecStart=-/bin/dracut-pre-pivot
+ExecStopPost=-/usr/bin/systemctl isolate initrd-switch-root.target
StandardInput=null
StandardOutput=syslog
StandardError=syslog+console
echo "NEWROOT=\"$NEWROOT\"" >> /run/initramfs/switch-root.conf
-udevadm control --stop-exec-queue
-
-for i in systemd-udevd.service; do
- systemctl is-active $i >/dev/null 2>&1 && systemctl stop $i
-done
-
-udevadm info --cleanup-db
-
# remove helper symlink
[ -h /dev/root ] && rm -f /dev/root
getarg rd.break rdbreak && emergency_shell -n switch_root "Break before switch_root"
-cp -avr /lib/systemd/system/dracut*.service /run/systemd/system/
-
-export -p > /dracut-state.sh
exit 0
ConditionPathExists=/etc/initrd-release
[Service]
-Environment=HOME=/
-WorkingDirectory=/
-ExecStart=-/bin/dracut-pre-trigger
Type=oneshot
+ExecStart=-/bin/dracut-pre-trigger
StandardInput=null
StandardOutput=syslog
StandardError=syslog+console
ConditionPathExists=/etc/initrd-release
[Service]
-Environment=HOME=/
-WorkingDirectory=/
-ExecStart=-/bin/dracut-pre-udev
Type=oneshot
+ExecStart=-/bin/dracut-pre-udev
StandardInput=null
StandardOutput=syslog
StandardError=syslog+console
Description=Switch Root
DefaultDependencies=no
ConditionPathExists=/etc/initrd-release
+OnFailure=emergency.service
[Service]
Type=oneshot
EnvironmentFile=/run/initramfs/switch-root.conf
ExecStart=/usr/bin/systemctl --force switch-root ${NEWROOT} ${NEWINIT}
-ExecStopPost=-/usr/bin/systemctl isolate default.target
+ExecStopPost=-/usr/bin/systemctl restart systemd-journald.service
+StandardInput=null
+StandardOutput=null
+StandardError=null
Requires=initrd-switch-root.service
Before=initrd-switch-root.service
AllowIsolate=yes
-
+Wants=systemd-journald.service
$systemdsystemunitdir/systemd-ask-password-console.service \
$systemdsystemunitdir/halt.service \
$systemdsystemunitdir/poweroff.service \
- $systemdsystemunitdir/reboot.service \
+ $systemdsystemunitdir/systemd-reboot.service \
$systemdsystemunitdir/kexec.service \
$systemdsystemunitdir/fsck@.service \
$systemdsystemunitdir/systemd-udevd.service \
inst_script "$moddir/dracut-pre-pivot.sh" /bin/dracut-pre-pivot
inst_simple "$moddir/dracut-pre-pivot.service" ${systemdsystemunitdir}/dracut-pre-pivot.service
- mkdir -p "${initdir}${systemdsystemunitdir}/initrd-switch-root.target.wants"
- ln -fs ../dracut-pre-pivot.service "${initdir}${systemdsystemunitdir}/initrd-switch-root.target.wants/dracut-pre-pivot.service"
+ ln -fs ../dracut-pre-pivot.service "${initdir}${systemdsystemunitdir}/basic.target.wants/dracut-pre-pivot.service"
+ inst_simple "$moddir/udevadm-cleanup-db.service" ${systemdsystemunitdir}/udevadm-cleanup-db.service
+ mkdir -p "${initdir}${systemdsystemunitdir}/initrd-switch-root.target.requires"
+ ln -fs ../udevadm-cleanup-db.service "${initdir}${systemdsystemunitdir}/initrd-switch-root.target.requires/udevadm-cleanup-db.service"
+
+ inst_script "$moddir/service-to-run.sh" $systemdutildir/system-generators/service-to-run
}
--- /dev/null
+#!/bin/sh
+
+cp -a /lib/systemd/system/dracut*.service /run/systemd/system/
+cp -a /lib/systemd/system/initrd-* /run/systemd/system/
+cp -a /lib/systemd/system/udevadm*.service /run/systemd/system/
+
--- /dev/null
+# 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
+Before=initrd-switch-root.service
+
+[Service]
+Type=oneshot
+ExecStart=-/usr/bin/udevadm info --cleanup-db
+StandardInput=null
+StandardOutput=null
+StandardError=null