Browse Source

shutdown on demand

Do not save and restore the initramfs, but instead, just unpack the
default initramfs for shutdown on shutdown.
master
Harald Hoyer 12 years ago
parent
commit
fb67e4aa36
  1. 9
      Makefile
  2. 15
      dracut-backup.service
  3. 22
      dracut-initramfs-backup.sh
  4. 10
      dracut-initramfs-restore.sh
  5. 6
      dracut-shutdown.service
  6. 1
      dracut.conf.d/fedora.conf.example
  7. 2
      dracut.spec
  8. 1
      modules.d/90crypt/cryptroot-ask.sh
  9. 1
      modules.d/90dmraid/dmraid.sh
  10. 2
      modules.d/90dmsquash-live/dmsquash-live-root
  11. 2
      modules.d/90lvm/lvm_scan.sh
  12. 4
      modules.d/90mdraid/mdraid-cleanup.sh
  13. 1
      modules.d/90multipath/multipathd.sh
  14. 2
      modules.d/95fcoe/fcoe-up
  15. 2
      modules.d/95iscsi/iscsiroot
  16. 1
      modules.d/95nbd/nbdroot
  17. 2
      modules.d/95nfs/nfsroot
  18. 10
      modules.d/98usrmount/mount-usr.sh
  19. 4
      modules.d/99base/dracut-lib.sh

9
Makefile

@ -40,7 +40,7 @@ install: doc @@ -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 @@ -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:

15
dracut-backup.service

@ -1,15 +0,0 @@ @@ -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

22
dracut-initramfs-backup.sh

@ -1,22 +0,0 @@ @@ -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

@ -0,0 +1,10 @@ @@ -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

6
dracut-restore.service → dracut-shutdown.service

@ -10,9 +10,9 @@ Description=Restore /run/initramfs @@ -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

1
dracut.conf.d/fedora.conf.example

@ -5,6 +5,5 @@ i18n_vars="/etc/sysconfig/keyboard:KEYTABLE-KEYMAP /etc/sysconfig/i18n:SYSFONT-F @@ -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 "

2
dracut.spec

@ -223,7 +223,7 @@ rm -rf $RPM_BUILD_ROOT @@ -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

1
modules.d/90crypt/cryptroot-ask.sh

@ -117,6 +117,7 @@ unset device luksname luksfile @@ -117,6 +117,7 @@ unset device luksname luksfile
# mark device as asked
>> /tmp/cryptroot-asked-$2

need_shutdown
udevsettle

exit 0

1
modules.d/90dmraid/dmraid.sh

@ -40,3 +40,4 @@ else @@ -40,3 +40,4 @@ else
done
fi

need_shutdown

2
modules.d/90dmsquash-live/dmsquash-live-root

@ -206,4 +206,6 @@ fi @@ -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

2
modules.d/90lvm/lvm_scan.sh

@ -126,3 +126,5 @@ if [ "$lvmwritten" ]; then @@ -126,3 +126,5 @@ if [ "$lvmwritten" ]; then
rm -f /etc/lvm/lvm.conf
fi
unset lvmwritten

need_shutdown

4
modules.d/90mdraid/mdraid-cleanup.sh

@ -13,11 +13,11 @@ for md in /dev/md[0-9_]*; do @@ -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

1
modules.d/90multipath/multipathd.sh

@ -5,6 +5,7 @@ @@ -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

2
modules.d/95fcoe/fcoe-up

@ -46,3 +46,5 @@ elif [ "$netdriver" = "bnx2x" ]; then @@ -46,3 +46,5 @@ elif [ "$netdriver" = "bnx2x" ]; then
else
echo -n "$netif" > /sys/module/fcoe/parameters/create
fi

need_shutdown

2
modules.d/95iscsi/iscsiroot

@ -205,6 +205,8 @@ else @@ -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

1
modules.d/95nbd/nbdroot

@ -107,4 +107,5 @@ fi @@ -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

2
modules.d/95nfs/nfsroot

@ -106,4 +106,4 @@ echo 'settle_exit_if_exists="--exit-if-exists=/dev/root"; rm "$job"' > $hookdir/ @@ -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

10
modules.d/98usrmount/mount-usr.sh

@ -11,6 +11,16 @@ mount_usr() @@ -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

4
modules.d/99base/dracut-lib.sh

@ -738,3 +738,7 @@ killproc() { @@ -738,3 +738,7 @@ killproc() {
fi
done
}

need_shutdown() {
>/run/initramfs/.need_shutdown
}

Loading…
Cancel
Save