mirror of
https://github.com/dracutdevs/dracut.git
synced 2024-10-27 00:55:34 +03:00
shutdown on demand
Do not save and restore the initramfs, but instead, just unpack the default initramfs for shutdown on shutdown.
This commit is contained in:
parent
4cfd24d179
commit
fb67e4aa36
9
Makefile
9
Makefile
@ -40,7 +40,7 @@ install: doc
|
||||
mkdir -p $(DESTDIR)$(sysconfdir)/dracut.conf.d
|
||||
install -m 0755 dracut-functions $(DESTDIR)$(pkglibdir)/dracut-functions
|
||||
install -m 0755 dracut-logger $(DESTDIR)$(pkglibdir)/dracut-logger
|
||||
install -m 0755 dracut-initramfs-backup.sh $(DESTDIR)$(pkglibdir)/dracut-initramfs-backup
|
||||
install -m 0755 dracut-initramfs-restore.sh $(DESTDIR)$(pkglibdir)/dracut-initramfs-restore
|
||||
cp -arx modules.d $(DESTDIR)$(pkglibdir)
|
||||
install -m 0644 dracut.8 $(DESTDIR)$(mandir)/man8/dracut.8
|
||||
install -m 0644 dracut-catimages.8 $(DESTDIR)$(mandir)/man8/dracut-catimages.8
|
||||
@ -50,12 +50,9 @@ install: doc
|
||||
ln -s dracut.cmdline.7 $(DESTDIR)$(mandir)/man7/dracut.kernel.7
|
||||
if [ -n "$(systemdsystemunitdir)" ]; then \
|
||||
mkdir -p $(DESTDIR)$(systemdsystemunitdir); \
|
||||
install -m 0644 dracut-backup.service $(DESTDIR)$(systemdsystemunitdir); \
|
||||
install -m 0644 dracut-restore.service $(DESTDIR)$(systemdsystemunitdir); \
|
||||
mkdir -p $(DESTDIR)$(systemdsystemunitdir)/sysinit.target.wants; \
|
||||
install -m 0644 dracut-shutdown.service $(DESTDIR)$(systemdsystemunitdir); \
|
||||
mkdir -p $(DESTDIR)$(systemdsystemunitdir)/reboot.target.wants; \
|
||||
ln -s ../dracut-backup.service $(DESTDIR)$(systemdsystemunitdir)/sysinit.target.wants/dracut-backup.service; \
|
||||
ln -s ../dracut-restore.service $(DESTDIR)$(systemdsystemunitdir)/reboot.target.wants/dracut-restore.service; \
|
||||
ln -s ../dracut-shutdown.service $(DESTDIR)$(systemdsystemunitdir)/reboot.target.wants/dracut-shutdown.service; \
|
||||
fi
|
||||
|
||||
clean:
|
||||
|
@ -1,15 +0,0 @@
|
||||
# This file is part of systemd.
|
||||
#
|
||||
# systemd is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
[Unit]
|
||||
Description=Save /run/initramfs
|
||||
ConditionPathExists=/run/initramfs
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/lib/dracut/dracut-initramfs-backup backup
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
@ -1,22 +0,0 @@
|
||||
#!/bin/sh
|
||||
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||
|
||||
set -e
|
||||
cd /run/initramfs
|
||||
|
||||
if [ "x$1" = "xbackup" ]; then
|
||||
compress="gzip"
|
||||
command -v pigz > /dev/null 2>&1 && compress="pigz"
|
||||
find . |cpio -H newc -o --quiet \
|
||||
| pigz > /var/lib/initramfs/_run_initramfs-backup.cpio.gz
|
||||
mv -f /var/lib/initramfs/_run_initramfs-backup.cpio.gz \
|
||||
/var/lib/initramfs/run_initramfs-backup.cpio.gz
|
||||
rm -fr etc bin lib lib64 sbin shutdown tmp usr var
|
||||
> .backuped
|
||||
elif [ "x$1" = "xrestore" ]; then
|
||||
[ -f .backuped -a -f /var/lib/initramfs/run_initramfs-backup.cpio.gz ] || exit 1
|
||||
zcat /var/lib/initramfs/run_initramfs-backup.cpio.gz | cpio -id >/dev/null 2>&1
|
||||
rm .backuped
|
||||
rm -f /var/lib/initramfs/run_initramfs-backup.cpio.gz
|
||||
fi
|
10
dracut-initramfs-restore.sh
Normal file
10
dracut-initramfs-restore.sh
Normal file
@ -0,0 +1,10 @@
|
||||
#!/bin/sh
|
||||
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||
|
||||
set -e
|
||||
cd /run/initramfs
|
||||
IMG="/boot/initramfs-$(uname -r).img"
|
||||
[ -f .need_shutdown -a -f "$IMG" ] || exit 1
|
||||
zcat "$IMG" | cpio -id >/dev/null 2>&1
|
||||
rm .need_shutdown
|
@ -10,9 +10,9 @@ Description=Restore /run/initramfs
|
||||
After=getty@tty1.service prefdm.service
|
||||
Before=reboot.service
|
||||
DefaultDependencies=no
|
||||
ConditionPathExists=/run/initramfs/.backuped
|
||||
ConditionPathExists=/run/initramfs/.need_shutdown
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/lib/dracut/dracut-initramfs-backup restore
|
||||
ExecStart=/usr/lib/dracut/dracut-initramfs-restore
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
RemainAfterExit=yes
|
@ -5,6 +5,5 @@ i18n_vars="/etc/sysconfig/keyboard:KEYTABLE-KEYMAP /etc/sysconfig/i18n:SYSFONT-F
|
||||
add_dracutmodules+=" rpmversion "
|
||||
omit_dracutmodules+=" dash "
|
||||
stdloglvl=3
|
||||
prefix=/run/initramfs
|
||||
realinitpath="/usr/lib/systemd/systemd"
|
||||
install_items+=" vi /etc/virc ps grep cat rm openvt "
|
||||
|
@ -223,7 +223,7 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%dir %{dracutlibdir}/modules.d
|
||||
%{dracutlibdir}/dracut-functions
|
||||
%{dracutlibdir}/dracut-logger
|
||||
%{dracutlibdir}/dracut-initramfs-backup
|
||||
%{dracutlibdir}/dracut-initramfs-restore
|
||||
%config(noreplace) /etc/dracut.conf
|
||||
%if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel} > 6
|
||||
%config /etc/dracut.conf.d/01-dist.conf
|
||||
|
@ -117,6 +117,7 @@ unset device luksname luksfile
|
||||
# mark device as asked
|
||||
>> /tmp/cryptroot-asked-$2
|
||||
|
||||
need_shutdown
|
||||
udevsettle
|
||||
|
||||
exit 0
|
||||
|
@ -40,3 +40,4 @@ else
|
||||
done
|
||||
fi
|
||||
|
||||
need_shutdown
|
||||
|
@ -206,4 +206,6 @@ fi
|
||||
ln -s /dev/mapper/live-rw /dev/root
|
||||
printf '/bin/mount %s /dev/mapper/live-rw %s\n' "$ROOTFLAGS" "$NEWROOT" > $hookdir/mount/01-$$-live.sh
|
||||
|
||||
need_shutdown
|
||||
|
||||
exit 0
|
||||
|
@ -126,3 +126,5 @@ if [ "$lvmwritten" ]; then
|
||||
rm -f /etc/lvm/lvm.conf
|
||||
fi
|
||||
unset lvmwritten
|
||||
|
||||
need_shutdown
|
||||
|
@ -13,11 +13,11 @@ for md in /dev/md[0-9_]*; do
|
||||
containers="$containers $md"
|
||||
continue
|
||||
fi
|
||||
mdadm -S "$md" >/dev/null 2>&1
|
||||
mdadm -S "$md" >/dev/null 2>&1 || need_shutdown
|
||||
done
|
||||
|
||||
for md in $containers; do
|
||||
mdadm -S "$md" >/dev/null 2>&1
|
||||
mdadm -S "$md" >/dev/null 2>&1 || need_shutdown
|
||||
done
|
||||
|
||||
unset containers udevinfo
|
||||
|
@ -5,6 +5,7 @@
|
||||
if [ -e /etc/multipath.conf ]; then
|
||||
modprobe dm-multipath
|
||||
multipathd -B || multipathd
|
||||
need_shutdown
|
||||
else
|
||||
rm /etc/udev/rules.d/??-multipath.rules 2>/dev/null
|
||||
fi
|
||||
|
@ -46,3 +46,5 @@ elif [ "$netdriver" = "bnx2x" ]; then
|
||||
else
|
||||
echo -n "$netif" > /sys/module/fcoe/parameters/create
|
||||
fi
|
||||
|
||||
need_shutdown
|
||||
|
@ -205,6 +205,8 @@ else
|
||||
handle_netroot $iroot
|
||||
fi
|
||||
|
||||
need_shutdown
|
||||
|
||||
# now we have a root filesystem somewhere in /dev/sda*
|
||||
# let the normal block handler handle root=
|
||||
exit 0
|
||||
|
@ -107,4 +107,5 @@ fi
|
||||
# NBD doesn't emit uevents when it gets connected, so kick it
|
||||
echo change > /sys/block/nbd0/uevent
|
||||
udevadm settle
|
||||
need_shutdown
|
||||
exit 0
|
||||
|
@ -106,4 +106,4 @@ echo 'settle_exit_if_exists="--exit-if-exists=/dev/root"; rm "$job"' > $hookdir/
|
||||
# force udevsettle to break
|
||||
> $hookdir/initqueue/work
|
||||
|
||||
|
||||
need_shutdown
|
||||
|
@ -11,6 +11,16 @@ mount_usr()
|
||||
# check, if we have to mount the /usr filesystem
|
||||
while read _dev _mp _fs _opts _rest; do
|
||||
if [ "$_mp" = "/usr" ]; then
|
||||
case "$_dev" in
|
||||
LABEL=*)
|
||||
_dev="$(echo $_dev | sed 's,/,\\x2f,g')"
|
||||
_dev="/dev/disk/by-label/${_dev#LABEL=}"
|
||||
;;
|
||||
UUID=*)
|
||||
_dev="${_dev#block:}"
|
||||
_dev="/dev/disk/by-uuid/${_dev#UUID=}"
|
||||
;;
|
||||
esac
|
||||
echo "$_dev ${NEWROOT}${_mp} $_fs ${_opts} $_rest"
|
||||
_usr_found="1"
|
||||
break
|
||||
|
@ -738,3 +738,7 @@ killproc() {
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
need_shutdown() {
|
||||
>/run/initramfs/.need_shutdown
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user