add systemd module
parent
8aeec251e3
commit
2c431e8ec4
|
@ -0,0 +1,27 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||||
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||||
|
|
||||||
|
NEWROOT="/sysroot"
|
||||||
|
[ -d $NEWROOT ] || mkdir -p -m 0755 $NEWROOT
|
||||||
|
[ -d /run/initramfs ] || mkdir -p -m 0755 /run/initramfs
|
||||||
|
[ -d /run/lock ] || mkdir -p -m 0755 /run/lock
|
||||||
|
|
||||||
|
exec </dev/console >/dev/console 2>&1
|
||||||
|
|
||||||
|
if [ -f /dracut-state.sh ]; then
|
||||||
|
. /dracut-state.sh || :
|
||||||
|
fi
|
||||||
|
. /lib/dracut-lib.sh
|
||||||
|
source_conf /etc/conf.d
|
||||||
|
|
||||||
|
# run scriptlets to parse the command line
|
||||||
|
getarg 'rd.break=cmdline' 'rdbreak=cmdline' && emergency_shell -n cmdline "Break before cmdline"
|
||||||
|
source_hook cmdline
|
||||||
|
|
||||||
|
[ -z "$root" ] && die "No or empty root= argument"
|
||||||
|
[ -z "$rootok" ] && die "Don't know how to handle 'root=$root'"
|
||||||
|
|
||||||
|
export root rflags fstype netroot NEWROOT
|
||||||
|
|
||||||
|
export -p > /dracut-state.sh
|
|
@ -0,0 +1,27 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
# See systemd.special(7) for details
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Dracut initqueue hook
|
||||||
|
DefaultDependencies=no
|
||||||
|
After=systemd-udev-trigger.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Environment=HOME=/
|
||||||
|
WorkingDirectory=/
|
||||||
|
ExecStart=-/bin/dracut-initqueue
|
||||||
|
Type=simple
|
||||||
|
StandardInput=tty-force
|
||||||
|
StandardOutput=inherit
|
||||||
|
StandardError=inherit
|
||||||
|
KillMode=process
|
||||||
|
|
||||||
|
# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
|
||||||
|
# terminates cleanly.
|
||||||
|
KillSignal=SIGHUP
|
|
@ -0,0 +1,111 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||||
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||||
|
exec </dev/console >/dev/console 2>&1
|
||||||
|
|
||||||
|
if [ -f /dracut-state.sh ]; then
|
||||||
|
. /dracut-state.sh || :
|
||||||
|
fi
|
||||||
|
. /lib/dracut-lib.sh
|
||||||
|
source_conf /etc/conf.d
|
||||||
|
source_hook pre-trigger
|
||||||
|
|
||||||
|
getarg 'rd.break=initqueue' 'rdbreak=initqueue' && emergency_shell -n initqueue "Break before initqueue"
|
||||||
|
|
||||||
|
RDRETRY=$(getarg rd.retry 'rd_retry=')
|
||||||
|
RDRETRY=${RDRETRY:-20}
|
||||||
|
RDRETRY=$(($RDRETRY*2))
|
||||||
|
export RDRETRY
|
||||||
|
|
||||||
|
main_loop=0
|
||||||
|
export main_loop
|
||||||
|
|
||||||
|
while :; do
|
||||||
|
|
||||||
|
check_finished && break
|
||||||
|
|
||||||
|
udevsettle
|
||||||
|
|
||||||
|
check_finished && break
|
||||||
|
|
||||||
|
if [ -f $hookdir/initqueue/work ]; then
|
||||||
|
rm $hookdir/initqueue/work
|
||||||
|
fi
|
||||||
|
|
||||||
|
for job in $hookdir/initqueue/*.sh; do
|
||||||
|
[ -e "$job" ] || break
|
||||||
|
job=$job . $job
|
||||||
|
check_finished && break 2
|
||||||
|
done
|
||||||
|
|
||||||
|
$UDEV_QUEUE_EMPTY >/dev/null 2>&1 || continue
|
||||||
|
|
||||||
|
for job in $hookdir/initqueue/settled/*.sh; do
|
||||||
|
[ -e "$job" ] || break
|
||||||
|
job=$job . $job
|
||||||
|
check_finished && break 2
|
||||||
|
done
|
||||||
|
|
||||||
|
$UDEV_QUEUE_EMPTY >/dev/null 2>&1 || continue
|
||||||
|
|
||||||
|
# no more udev jobs and queues empty.
|
||||||
|
sleep 0.5
|
||||||
|
|
||||||
|
|
||||||
|
if [ $main_loop -gt $(($RDRETRY/2)) ]; then
|
||||||
|
for job in $hookdir/initqueue/timeout/*.sh; do
|
||||||
|
[ -e "$job" ] || break
|
||||||
|
job=$job . $job
|
||||||
|
main_loop=0
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
main_loop=$(($main_loop+1))
|
||||||
|
[ $main_loop -gt $RDRETRY ] \
|
||||||
|
&& { flock -s 9 ; emergency_shell "Unable to process initqueue"; } 9>/.console_lock
|
||||||
|
done
|
||||||
|
|
||||||
|
unset job
|
||||||
|
unset queuetriggered
|
||||||
|
unset main_loop
|
||||||
|
unset RDRETRY
|
||||||
|
|
||||||
|
|
||||||
|
# pre-mount happens before we try to mount the root filesystem,
|
||||||
|
# and happens once.
|
||||||
|
getarg 'rd.break=pre-mount' 'rdbreak=pre-mount' && emergency_shell -n pre-mount "Break pre-mount"
|
||||||
|
source_hook pre-mount
|
||||||
|
|
||||||
|
|
||||||
|
getarg 'rd.break=mount' 'rdbreak=mount' && emergency_shell -n mount "Break mount"
|
||||||
|
# mount scripts actually try to mount the root filesystem, and may
|
||||||
|
# be sourced any number of times. As soon as one suceeds, no more are sourced.
|
||||||
|
i=0
|
||||||
|
while :; do
|
||||||
|
if ismounted "$NEWROOT"; then
|
||||||
|
usable_root "$NEWROOT" && break;
|
||||||
|
umount "$NEWROOT"
|
||||||
|
fi
|
||||||
|
for f in $hookdir/mount/*.sh; do
|
||||||
|
[ -f "$f" ] && . "$f"
|
||||||
|
if ismounted "$NEWROOT"; then
|
||||||
|
usable_root "$NEWROOT" && break;
|
||||||
|
warn "$NEWROOT has no proper rootfs layout, ignoring and removing offending mount hook"
|
||||||
|
umount "$NEWROOT"
|
||||||
|
rm -f "$f"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
i=$(($i+1))
|
||||||
|
[ $i -gt 20 ] \
|
||||||
|
&& { flock -s 9 ; emergency_shell "Can't mount root filesystem"; } 9>/.console_lock
|
||||||
|
done
|
||||||
|
|
||||||
|
{
|
||||||
|
echo -n "Mounted root filesystem "
|
||||||
|
while read dev mp rest; do [ "$mp" = "$NEWROOT" ] && echo $dev; done < /proc/mounts
|
||||||
|
} | vinfo
|
||||||
|
|
||||||
|
systemctl switch-root
|
||||||
|
|
||||||
|
export -p > /dracut-state.sh
|
|
@ -0,0 +1,27 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
# See systemd.special(7) for details
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Dracut pre-pivot and cleanup hook
|
||||||
|
DefaultDependencies=no
|
||||||
|
Before=switch-root.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Environment=HOME=/
|
||||||
|
WorkingDirectory=/
|
||||||
|
ExecStart=-/bin/dracut-pre-pivot
|
||||||
|
Type=oneshot
|
||||||
|
StandardInput=tty-force
|
||||||
|
StandardOutput=inherit
|
||||||
|
StandardError=inherit
|
||||||
|
KillMode=process
|
||||||
|
|
||||||
|
# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
|
||||||
|
# terminates cleanly.
|
||||||
|
KillSignal=SIGHUP
|
|
@ -0,0 +1,54 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||||
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||||
|
|
||||||
|
exec </dev/console >/dev/console 2>&1
|
||||||
|
if [ -f /dracut-state.sh ]; then
|
||||||
|
. /dracut-state.sh || :
|
||||||
|
fi
|
||||||
|
. /lib/dracut-lib.sh
|
||||||
|
source_conf /etc/conf.d
|
||||||
|
|
||||||
|
# pre pivot scripts are sourced just before we doing cleanup and switch over
|
||||||
|
# to the new root.
|
||||||
|
getarg 'rd.break=pre-pivot' 'rdbreak=pre-pivot' && emergency_shell -n pre-pivot "Break pre-pivot"
|
||||||
|
source_hook pre-pivot
|
||||||
|
|
||||||
|
# pre pivot cleanup scripts are sourced just before we switch over to the new root.
|
||||||
|
getarg 'rd.break=cleanup' 'rdbreak=cleanup' && emergency_shell -n cleanup "Break cleanup"
|
||||||
|
source_hook cleanup
|
||||||
|
|
||||||
|
# By the time we get here, the root filesystem should be mounted.
|
||||||
|
# Try to find init.
|
||||||
|
for i in "$(getarg real_init=)" "$(getarg init=)" $(getargs rd.distroinit=) /sbin/init; do
|
||||||
|
[ -n "$i" ] || continue
|
||||||
|
|
||||||
|
__p=$(readlink -f "${NEWROOT}/${i}")
|
||||||
|
if [ -x "$__p" ]; then
|
||||||
|
INIT="$i"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$INIT" ]; then
|
||||||
|
{
|
||||||
|
echo "NEWROOT=\"$NEWROOT\""
|
||||||
|
echo "NEWINIT=\"$INIT\""
|
||||||
|
} > /etc/switch-root.conf
|
||||||
|
else
|
||||||
|
echo "Cannot find init!"
|
||||||
|
echo "Please check to make sure you passed a valid root filesystem!"
|
||||||
|
emergency_shell
|
||||||
|
fi
|
||||||
|
|
||||||
|
udevadm control --stop-exec-queue
|
||||||
|
systemctl stop udevd.service
|
||||||
|
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"
|
||||||
|
info "Switching root"
|
||||||
|
|
||||||
|
export -p > /dracut-state.sh
|
|
@ -0,0 +1,28 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
# See systemd.special(7) for details
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Dracut pre-trigger hook
|
||||||
|
DefaultDependencies=no
|
||||||
|
After=systemd-udev.service
|
||||||
|
Before=systemd-udev-trigger.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Environment=HOME=/
|
||||||
|
WorkingDirectory=/
|
||||||
|
ExecStart=-/bin/dracut-pre-trigger
|
||||||
|
Type=oneshot
|
||||||
|
StandardInput=tty-force
|
||||||
|
StandardOutput=inherit
|
||||||
|
StandardError=inherit
|
||||||
|
KillMode=process
|
||||||
|
|
||||||
|
# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
|
||||||
|
# terminates cleanly.
|
||||||
|
KillSignal=SIGHUP
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||||
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||||
|
exec </dev/console >/dev/console 2>&1
|
||||||
|
|
||||||
|
if [ -f /dracut-state.sh ]; then
|
||||||
|
. /dracut-state.sh || :
|
||||||
|
fi
|
||||||
|
. /lib/dracut-lib.sh
|
||||||
|
source_conf /etc/conf.d
|
||||||
|
|
||||||
|
getargbool 0 rd.udev.info -y rdudevinfo && udevadm control "$UDEV_LOG_PRIO_ARG=info"
|
||||||
|
getargbool 0 rd.udev.debug -y rdudevdebug && udevadm control "$UDEV_LOG_PRIO_ARG=debug"
|
||||||
|
udevproperty "hookdir=$hookdir"
|
||||||
|
|
||||||
|
source_hook pre-trigger
|
||||||
|
|
||||||
|
udevadm control --reload >/dev/null 2>&1 || :
|
||||||
|
|
||||||
|
export -p > /dracut-state.sh
|
|
@ -0,0 +1,27 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
# See systemd.special(7) for details
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Dracut pre-trigger hook
|
||||||
|
DefaultDependencies=no
|
||||||
|
Before=systemd-udev.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Environment=HOME=/
|
||||||
|
WorkingDirectory=/
|
||||||
|
ExecStart=-/bin/dracut-pre-udev
|
||||||
|
Type=oneshot
|
||||||
|
StandardInput=tty-force
|
||||||
|
StandardOutput=inherit
|
||||||
|
StandardError=inherit
|
||||||
|
KillMode=process
|
||||||
|
|
||||||
|
# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
|
||||||
|
# terminates cleanly.
|
||||||
|
KillSignal=SIGHUP
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||||
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||||
|
|
||||||
|
exec </dev/console >/dev/console 2>&1
|
||||||
|
if [ -f /dracut-state.sh ]; then
|
||||||
|
. /dracut-state.sh || :
|
||||||
|
fi
|
||||||
|
. /lib/dracut-lib.sh
|
||||||
|
source_conf /etc/conf.d
|
||||||
|
|
||||||
|
# pre pivot scripts are sourced just before we doing cleanup and switch over
|
||||||
|
# to the new root.
|
||||||
|
getarg 'rd.break=pre-udev' 'rdbreak=pre-udev' && emergency_shell -n pre-udev "Break pre-udev"
|
||||||
|
source_hook pre-udev
|
||||||
|
|
||||||
|
export -p > /dracut-state.sh
|
|
@ -0,0 +1,30 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
# See systemd.special(7) for details
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Emergency Shell
|
||||||
|
DefaultDependencies=no
|
||||||
|
Conflicts=shutdown.target
|
||||||
|
Before=shutdown.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Environment=HOME=/
|
||||||
|
WorkingDirectory=/
|
||||||
|
ExecStart=-/bin/sh -i -l
|
||||||
|
ExecStopPost=-/usr/bin/systemctl --fail --no-block switch-root
|
||||||
|
Type=idle
|
||||||
|
StandardInput=tty-force
|
||||||
|
StandardOutput=inherit
|
||||||
|
StandardError=inherit
|
||||||
|
KillMode=process
|
||||||
|
IgnoreSIGPIPE=no
|
||||||
|
|
||||||
|
# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
|
||||||
|
# terminates cleanly.
|
||||||
|
KillSignal=SIGHUP
|
|
@ -0,0 +1,150 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||||
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||||
|
|
||||||
|
check() {
|
||||||
|
[[ $mount_needs ]] && return 1
|
||||||
|
[ -x /lib/systemd/systemd ] && return 255
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
depends() {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
install() {
|
||||||
|
|
||||||
|
for i in \
|
||||||
|
systemd \
|
||||||
|
systemd-cgroups-agent \
|
||||||
|
systemd-initctl \
|
||||||
|
systemd-shutdownd \
|
||||||
|
systemd-shutdown \
|
||||||
|
systemd-modules-load \
|
||||||
|
systemd-remount-fs \
|
||||||
|
systemd-reply-password \
|
||||||
|
systemd-fsck \
|
||||||
|
systemd-timestamp \
|
||||||
|
systemd-ac-power \
|
||||||
|
systemd-sysctl \
|
||||||
|
systemd-udevd \
|
||||||
|
systemd-journald \
|
||||||
|
systemd-coredump \
|
||||||
|
systemd-vconsole-setup \
|
||||||
|
systemd-cryptsetup \
|
||||||
|
systemd-localed \
|
||||||
|
system/emergency.target \
|
||||||
|
system/sysinit.target \
|
||||||
|
system/basic.target \
|
||||||
|
system/halt.target \
|
||||||
|
system/kexec.target \
|
||||||
|
system/local-fs.target \
|
||||||
|
system/local-fs-pre.target \
|
||||||
|
system/remote-fs.target \
|
||||||
|
system/remote-fs-pre.target \
|
||||||
|
system/network.target \
|
||||||
|
system/nss-lookup.target \
|
||||||
|
system/nss-user-lookup.target \
|
||||||
|
system/poweroff.target \
|
||||||
|
system/reboot.target \
|
||||||
|
system/rescue.target \
|
||||||
|
system/rpcbind.target \
|
||||||
|
system/shutdown.target \
|
||||||
|
system/final.target \
|
||||||
|
system/sigpwr.target \
|
||||||
|
system/sockets.target \
|
||||||
|
system/swap.target \
|
||||||
|
system/systemd-initctl.socket \
|
||||||
|
system/systemd-shutdownd.socket \
|
||||||
|
system/bluetooth.target \
|
||||||
|
system/systemd-ask-password-console.path \
|
||||||
|
system/systemd-udev-control.socket \
|
||||||
|
system/systemd-udev-kernel.socket \
|
||||||
|
system/systemd-ask-password-plymouth.path \
|
||||||
|
system/systemd-journald.socket \
|
||||||
|
system/cryptsetup.target \
|
||||||
|
system/console-shell.service \
|
||||||
|
system/console-getty.service \
|
||||||
|
system/systemd-initctl.service \
|
||||||
|
system/systemd-shutdownd.service \
|
||||||
|
system/systemd-modules-load.service \
|
||||||
|
system/systemd-remount-fs.service \
|
||||||
|
system/systemd-ask-password-console.service \
|
||||||
|
system/halt.service \
|
||||||
|
system/poweroff.service \
|
||||||
|
system/reboot.service \
|
||||||
|
system/kexec.service \
|
||||||
|
system/fsck@.service \
|
||||||
|
system/systemd-udev.service \
|
||||||
|
system/systemd-udev-trigger.service \
|
||||||
|
system/systemd-udev-settle.service \
|
||||||
|
system/systemd-ask-password-plymouth.service \
|
||||||
|
system/systemd-journald.service \
|
||||||
|
system/systemd-vconsole-setup.service \
|
||||||
|
system/systemd-localed.service \
|
||||||
|
system/sysinit.target.wants/systemd-modules-load.service \
|
||||||
|
system/sysinit.target.wants/systemd-ask-password-console.path \
|
||||||
|
system/sysinit.target.wants/systemd-journald.service \
|
||||||
|
system/sysinit.target.wants/systemd-vconsole-setup.service \
|
||||||
|
system/sysinit.target.wants/cryptsetup.target \
|
||||||
|
system/sockets.target.wants/systemd-initctl.socket \
|
||||||
|
system/sockets.target.wants/systemd-shutdownd.socket \
|
||||||
|
system/sockets.target.wants/systemd-udev-control.socket \
|
||||||
|
system/sockets.target.wants/systemd-udev-kernel.socket \
|
||||||
|
system/sockets.target.wants/systemd-journald.socket \
|
||||||
|
system/basic.target.wants/systemd-udev.service \
|
||||||
|
system/basic.target.wants/systemd-udev-trigger.service \
|
||||||
|
system/local-fs.target.wants/systemd-remount-fs.service \
|
||||||
|
system/local-fs.target.wants/fsck-root.service \
|
||||||
|
system/local-fs.target.wants/tmp.mount \
|
||||||
|
system/ctrl-alt-del.target \
|
||||||
|
system/autovt@.service \
|
||||||
|
system/single.service \
|
||||||
|
system/syslog.socket \
|
||||||
|
system/syslog.target \
|
||||||
|
system/switch-root.target \
|
||||||
|
system/switch-root.service \
|
||||||
|
system/umount.target \
|
||||||
|
;do
|
||||||
|
[ -e "/lib/systemd/$i" ] && dracut_install "/lib/systemd/$i"
|
||||||
|
done
|
||||||
|
for i in /etc/systemd/*.conf; do
|
||||||
|
dracut_install "$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
ln -fs /lib/systemd/systemd "$initdir/init"
|
||||||
|
|
||||||
|
{
|
||||||
|
echo "LogLevel=debug"
|
||||||
|
echo "LogTarget=console"
|
||||||
|
} >> "$initdir/etc/systemd/system.conf"
|
||||||
|
|
||||||
|
rm -f "$initdir/lib/systemd/system/emergency.service"
|
||||||
|
inst "$moddir/emergency.service" /lib/systemd/system/emergency.service
|
||||||
|
rm -f "$initdir/lib/systemd/system/rescue.service"
|
||||||
|
inst "$moddir/rescue.service" /lib/systemd/system/rescue.service
|
||||||
|
inst "$moddir/switch-root.target" /lib/systemd/system/switch-root.target
|
||||||
|
inst "$moddir/switch-root.service" /lib/systemd/system/switch-root.service
|
||||||
|
ln -s basic.target "$initdir/lib/systemd/system/default.target"
|
||||||
|
|
||||||
|
inst "$moddir/dracut-cmdline.sh" /lib/systemd/system-generators/dracut-cmdline.sh
|
||||||
|
|
||||||
|
inst "$moddir/dracut-pre-udev.sh" /bin/dracut-pre-udev
|
||||||
|
inst "$moddir/dracut-pre-udev.service" /lib/systemd/system/dracut-pre-udev.service
|
||||||
|
ln -s ../dracut-pre-udev.service "$initdir/lib/systemd/system/basic.target.wants/dracut-pre-udev.service"
|
||||||
|
|
||||||
|
inst "$moddir/dracut-pre-trigger.sh" /bin/dracut-pre-trigger
|
||||||
|
inst "$moddir/dracut-pre-trigger.service" /lib/systemd/system/dracut-pre-trigger.service
|
||||||
|
ln -s ../dracut-pre-trigger.service "$initdir/lib/systemd/system/basic.target.wants/dracut-pre-trigger.service"
|
||||||
|
|
||||||
|
inst "$moddir/dracut-initqueue.sh" /bin/dracut-initqueue
|
||||||
|
inst "$moddir/dracut-initqueue.service" /lib/systemd/system/dracut-initqueue.service
|
||||||
|
ln -s ../dracut-initqueue.service "$initdir/lib/systemd/system/basic.target.wants/dracut-initqueue.service"
|
||||||
|
|
||||||
|
inst "$moddir/dracut-pre-pivot.sh" /bin/dracut-pre-pivot
|
||||||
|
inst "$moddir/dracut-pre-pivot.service" /lib/systemd/system/dracut-pre-pivot.service
|
||||||
|
mkdir -p "$initdir/lib/systemd/system/switch-root.target.wants"
|
||||||
|
ln -s ../dracut-pre-pivot.service "$initdir/lib/systemd/system/switch-root.target.wants/dracut-pre-pivot.service"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
# See systemd.special(7) for details
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Rescue Shell
|
||||||
|
DefaultDependencies=no
|
||||||
|
Conflicts=shutdown.target
|
||||||
|
After=basic.target plymouth-start.service
|
||||||
|
Before=shutdown.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Environment=HOME=/
|
||||||
|
WorkingDirectory=/
|
||||||
|
ExecStart=-/bin/sh -i -l
|
||||||
|
#ExecStopPost=-/usr/bin/systemctl --fail --no-block switch-root /sysroot /sbin/init
|
||||||
|
ExecStopPost=-/usr/bin/systemctl --fail --no-block switch-root
|
||||||
|
Type=idle
|
||||||
|
StandardInput=tty-force
|
||||||
|
StandardOutput=inherit
|
||||||
|
StandardError=inherit
|
||||||
|
KillMode=process
|
||||||
|
|
||||||
|
# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
|
||||||
|
# terminates cleanly.
|
||||||
|
KillSignal=SIGHUP
|
|
@ -0,0 +1,17 @@
|
||||||
|
# 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
|
||||||
|
Requires=shutdown.target final.target
|
||||||
|
After=shutdown.target final.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
EnvironmentFile=/etc/switch-root.conf
|
||||||
|
ExecStart=/usr/bin/systemctl --force switch-root ${NEWROOT} ${NEWINIT}
|
|
@ -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.
|
||||||
|
|
||||||
|
# See systemd.special(7) for details
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Switch Root
|
||||||
|
DefaultDependencies=no
|
||||||
|
Requires=switch-root.service
|
||||||
|
After=switch-root.service
|
||||||
|
AllowIsolate=yes
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
|
||||||
|
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
|
||||||
|
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
|
||||||
|
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
|
||||||
|
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
|
||||||
|
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
|
||||||
|
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
|
||||||
|
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"
|
|
@ -0,0 +1,10 @@
|
||||||
|
all:
|
||||||
|
@make -s --no-print-directory -C ../.. all
|
||||||
|
@basedir=../.. testdir=../ ./test.sh --all
|
||||||
|
setup:
|
||||||
|
@make --no-print-directory -C ../.. all
|
||||||
|
@basedir=../.. testdir=../ ./test.sh --setup
|
||||||
|
clean:
|
||||||
|
@basedir=../.. testdir=../ ./test.sh --clean
|
||||||
|
run:
|
||||||
|
@basedir=../.. testdir=../ ./test.sh --run
|
|
@ -0,0 +1,23 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# don't let udev and this script step on eachother's toes
|
||||||
|
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
|
||||||
|
> "/etc/udev/rules.d/$x"
|
||||||
|
done
|
||||||
|
rm /etc/lvm/lvm.conf
|
||||||
|
udevadm control --reload-rules
|
||||||
|
set -e
|
||||||
|
# save a partition at the beginning for future flagging purposes
|
||||||
|
sfdisk -C 1280 -H 2 -S 32 -L /dev/sda <<EOF
|
||||||
|
,16
|
||||||
|
,
|
||||||
|
EOF
|
||||||
|
|
||||||
|
mkfs.ext3 -L dracut /dev/sda2
|
||||||
|
mkdir -p /root
|
||||||
|
mount /dev/sda2 /root
|
||||||
|
cp -a -t /root /source/*
|
||||||
|
mkdir -p /root/run
|
||||||
|
umount /root
|
||||||
|
echo "dracut-root-block-created" >/dev/sda1
|
||||||
|
poweroff -f
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
[ -b /dev/mapper/$2 ] && exit 0
|
||||||
|
echo -n test >/keyfile
|
||||||
|
/sbin/cryptsetup luksOpen $1 $2 </keyfile
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
getarg rd.shell || poweroff -f
|
||||||
|
getarg failme && poweroff -f
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/sh
|
||||||
|
export PATH=/sbin:/bin:/usr/sbin:/usr/bin
|
||||||
|
strstr() { [ "${1#*$2*}" != "$1" ]; }
|
||||||
|
CMDLINE=$(while read line; do echo $line;done < /proc/cmdline)
|
||||||
|
plymouth --quit
|
||||||
|
exec </dev/console >/dev/console 2>&1
|
||||||
|
echo "dracut-root-block-success" >/dev/sda1
|
||||||
|
export TERM=linux
|
||||||
|
export PS1='initramfs-test:\w\$ '
|
||||||
|
[ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab
|
||||||
|
[ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab
|
||||||
|
stty sane
|
||||||
|
echo "made it to the rootfs!"
|
||||||
|
if strstr "$CMDLINE" "rd.shell"; then
|
||||||
|
strstr "$(setsid --help)" "control" && CTTY="-c"
|
||||||
|
setsid $CTTY sh -i
|
||||||
|
fi
|
||||||
|
echo "Powering down."
|
||||||
|
mount -n -o remount,ro /
|
||||||
|
poweroff -f
|
|
@ -0,0 +1,95 @@
|
||||||
|
#!/bin/bash
|
||||||
|
TEST_DESCRIPTION="root filesystem on a ext3 filesystem"
|
||||||
|
|
||||||
|
KVERSION=${KVERSION-$(uname -r)}
|
||||||
|
|
||||||
|
# Uncomment this to debug failures
|
||||||
|
#DEBUGFAIL="rd.shell"
|
||||||
|
test_run() {
|
||||||
|
$testdir/run-qemu \
|
||||||
|
-hda $TESTDIR/root.ext3 \
|
||||||
|
-m 256M -nographic \
|
||||||
|
-net none -kernel /boot/vmlinuz-$KVERSION \
|
||||||
|
-append "root=LABEL=dracut rw loglevel=77 systemd.log_level=debug systemd.log_target=console rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL" \
|
||||||
|
-initrd $TESTDIR/initramfs.testing
|
||||||
|
grep -m 1 -q dracut-root-block-success $TESTDIR/root.ext3 || return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
test_setup() {
|
||||||
|
rm -f $TESTDIR/root.ext3
|
||||||
|
# Create the blank file to use as a root filesystem
|
||||||
|
dd if=/dev/null of=$TESTDIR/root.ext3 bs=1M seek=40
|
||||||
|
|
||||||
|
kernel=$KVERSION
|
||||||
|
# Create what will eventually be our root filesystem onto an overlay
|
||||||
|
(
|
||||||
|
initdir=$TESTDIR/overlay/source
|
||||||
|
mkdir -p $initdir
|
||||||
|
. $basedir/dracut-functions.sh
|
||||||
|
dracut_install sh df free ls shutdown poweroff stty cat ps ln ip route \
|
||||||
|
mount dmesg ifconfig dhclient mkdir cp ping dhclient \
|
||||||
|
umount strace less setsid
|
||||||
|
for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
|
||||||
|
[ -f ${_terminfodir}/l/linux ] && break
|
||||||
|
done
|
||||||
|
dracut_install -o ${_terminfodir}/l/linux
|
||||||
|
inst "$basedir/modules.d/40network/dhclient-script" "/sbin/dhclient-script"
|
||||||
|
inst "$basedir/modules.d/40network/ifup" "/sbin/ifup"
|
||||||
|
dracut_install grep
|
||||||
|
inst ./test-init.sh /sbin/init
|
||||||
|
find_binary plymouth >/dev/null && dracut_install plymouth
|
||||||
|
(cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
|
||||||
|
cp -a /etc/ld.so.conf* $initdir/etc
|
||||||
|
sudo ldconfig -r "$initdir"
|
||||||
|
)
|
||||||
|
|
||||||
|
# second, install the files needed to make the root filesystem
|
||||||
|
(
|
||||||
|
initdir=$TESTDIR/overlay
|
||||||
|
. $basedir/dracut-functions.sh
|
||||||
|
dracut_install sfdisk mkfs.ext3 poweroff cp umount
|
||||||
|
inst_hook initqueue 01 ./create-root.sh
|
||||||
|
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
|
||||||
|
)
|
||||||
|
|
||||||
|
# create an initramfs that will create the target root filesystem.
|
||||||
|
# We do it this way so that we do not risk trashing the host mdraid
|
||||||
|
# devices, volume groups, encrypted partitions, etc.
|
||||||
|
$basedir/dracut.sh -l -i $TESTDIR/overlay / \
|
||||||
|
-m "dash udev-rules base rootfs-block kernel-modules" \
|
||||||
|
-d "piix ide-gd_mod ata_piix ext3 sd_mod" \
|
||||||
|
--nomdadmconf \
|
||||||
|
-f $TESTDIR/initramfs.makeroot $KVERSION || return 1
|
||||||
|
rm -rf $TESTDIR/overlay
|
||||||
|
# Invoke KVM and/or QEMU to actually create the target filesystem.
|
||||||
|
|
||||||
|
$testdir/run-qemu \
|
||||||
|
-hda $TESTDIR/root.ext3 \
|
||||||
|
-m 256M -nographic -net none \
|
||||||
|
-kernel "/boot/vmlinuz-$kernel" \
|
||||||
|
-append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
|
||||||
|
-initrd $TESTDIR/initramfs.makeroot || return 1
|
||||||
|
grep -m 1 -q dracut-root-block-created $TESTDIR/root.ext3 || return 1
|
||||||
|
|
||||||
|
|
||||||
|
(
|
||||||
|
initdir=$TESTDIR/overlay
|
||||||
|
. $basedir/dracut-functions.sh
|
||||||
|
dracut_install poweroff shutdown
|
||||||
|
inst_hook emergency 000 ./hard-off.sh
|
||||||
|
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
|
||||||
|
)
|
||||||
|
sudo $basedir/dracut.sh -l -i $TESTDIR/overlay / \
|
||||||
|
-a "debug systemd" \
|
||||||
|
-o "network" \
|
||||||
|
-d "piix ide-gd_mod ata_piix ext3 sd_mod" \
|
||||||
|
-f $TESTDIR/initramfs.testing $KVERSION || return 1
|
||||||
|
|
||||||
|
# -o "plymouth network md dmraid multipath fips caps crypt btrfs resume dmsquash-live dm"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_cleanup() {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
. $testdir/test-functions
|
Loading…
Reference in New Issue