Модули поддержки tuxonice для dracut

atratsevskiy
Iurii Blokhin 10 years ago
parent 5bb01b2d36
commit 1cf38168ef

@ -0,0 +1,24 @@
#!/bin/bash
install() {
# install userui
inst tuxoniceui || true
# install splash graphics if exists
my_inst_dir() {
inst_dir $1
for i in $1/*; do
if [ -d "$i" ]; then
my_inst_dir "$i"
else
inst "$i"
fi
done
}
[ -e /etc/splash/tuxonice ] && my_inst_dir /etc/splash/tuxonice
[ -e /etc/splash/suspend2 ] && my_inst_dir /etc/splash/suspend2
inst_hook pre-udev 30 "$moddir/tuxonice-prepare.sh"
inst_hook pre-mount 30 "$moddir/tuxonice-lvmfix.sh"
inst "$moddir"/tuxonice-resumecheck.sh /sbin/tuxonice-resumecheck.sh
}

@ -0,0 +1,13 @@
#!/bin/sh
# fixes an asynchronous problem with lvm/dracut while resuming
# for details see https://bugzilla.redhat.com/show_bug.cgi?id=830447
. /lib/dracut-lib.sh
info "TuxOnIce lvmfix started"
udevadm settle --timeout=30
info "TuxOnIce udev should be now fully settled"
return 0

@ -0,0 +1,99 @@
#!/bin/sh
# prepare parameters for ToI
. /lib/dracut-lib.sh
info "TuxOnIce premodule started"
# first check if ToI support is available
if [ ! -d /sys/power/tuxonice ]; then
info "Kernel has no tuxonice support, aborting"
return 0
else
info "Kernel has tuxonice support, continuing"
fi
if getarg noresume2; then
warn "noresume2 was specified, aborting"
return 0
fi
# prepare UserUI
info "Setting up UserUI"
UI="/sbin/tuxoniceui"
UIOPTS=""
if [ -e "/sys/class/graphics/fb0/state" -a -e "/etc/splash/tuxonice/" ]; then
UIOPTS="$UIOPTS -f"
fi
SYSFS_TUI_UI=/sys/power/tuxonice/user_interface
PROGRAM_PATH=${SYSFS_TUI_UI}/program
ENABLED_PATH=${SYSFS_TUI_UI}/enabled
if [ -e "$UI" ] && [ -e "$PROGRAM_PATH" ] && [ -e "$ENABLED_PATH" ]; then
info "Using $UI with $UIOPTS"
echo "$UI $UIOPTS" >$PROGRAM_PATH
echo 1 >$ENABLED_PATH
else
warn "$UI is not available"
if [ -e "$ENABLED_PATH" ]; then
echo 0 >$ENABLED_PATH
fi
fi
# install udev rule for resume parameter
if resume=$(getarg resume=) && ! getarg noresume2; then
resume="${resume#file:}"
resume="${resume#swap:}"
resume="${resume%:*}"
else
unset resume
fi
info "Installing udev rule for resume parameter"
case "$resume" in
LABEL=*) \
resume="$(echo $resume | sed 's,/,\\x2f,g')"
{
echo "SUBSYSTEM==\"block\", ACTION==\"add|change\", ENV{ID_FS_LABEL}==\"${resume#LABEL=}\", " \
" RUN+=\"/sbin/tuxonice-resumecheck.sh '/dev/%k' 'resume'\"";
} >> /etc/udev/rules.d/99-tuxonice.rules
;;
UUID=*) \
{
echo "SUBSYSTEM==\"block\", ACTION==\"add|change\", ENV{ID_FS_UUID}==\"${resume#UUID=}\", " \
" RUN+=\"/sbin/tuxonice-resumecheck.sh '/dev/%k' 'resume'\"";
} >> /etc/udev/rules.d/99-tuxonice.rules
;;
PARTUUID=*) \
{
echo "SUBSYSTEM==\"block\", ACTION==\"add|change\", ENV{ID_PART_ENTRY_UUID}==\"${resume#PARTUUID=}\", " \
" RUN+=\"/sbin/tuxonice-resumecheck.sh '/dev/%k' 'resume'\"";
} >> /etc/udev/rules.d/99-tuxonice.rules
;;
*) \
{
echo "SUBSYSTEM==\"block\", ACTION==\"add|change\", SYMLINK==\"${resume#/dev/}\", " \
" RUN+=\"/sbin/tuxonice-resumecheck.sh '/dev/%k' 'resume'\"";
} >> /etc/udev/rules.d/99-tuxonice.rules
{
echo "SUBSYSTEM==\"block\", ACTION==\"add|change\", KERNEL==\"${resume#/dev/}\", " \
" RUN+=\"/sbin/tuxonice-resumecheck.sh '/dev/%k' 'resume'\"";
} >> /etc/udev/rules.d/99-tuxonice.rules
;;
esac
# install udev rule for resuming
info "Installing udev rule for ToI resume"
{
echo "SUBSYSTEM==\"block\", ACTION==\"add|change\", ENV{ID_FS_TYPE}==\"suspend|swsuspend|swsupend\", " \
" RUN+=\"/sbin/tuxonice-resumecheck.sh '/dev/%k' 'suspend'\"";
} >> /etc/udev/rules.d/99-tuxonice.rules
# install udev rule to add swapdevice as hibernation target
info "Installing udev rule for ToI swap detection"
{
echo "SUBSYSTEM==\"block\", ACTION==\"add|change\", ENV{ID_FS_TYPE}==\"swap\", " \
" RUN+=\"/sbin/tuxonice-resumecheck.sh '/dev/%k' 'swap'\"";
} >> /etc/udev/rules.d/99-tuxonice.rules

@ -0,0 +1,18 @@
#!/bin/sh
if [ "$2" = "suspend" ]; then
echo "<3>Dracut: found ToI/suspend signature in $1, trying to resume" > /dev/kmsg
OLDDEV=$(cat /sys/power/tuxonice/resume)
echo "swap:$1" >/sys/power/tuxonice/resume
echo 1 >/sys/power/tuxonice/do_resume
echo "<3>Dracut: no resume operation occured, restoring old value ($OLDDEV)" >/dev/kmsg
echo "$OLDDEV" >/sys/power/tuxonice/resume
elif [ "$2" = "swap" ]; then
echo "<3>Dracut: found swap signature in $1, using for ToI" > /dev/kmsg
CURDEV=$(cat /sys/power/tuxonice/resume)
[ -z "$CURDEV" ] && echo "swap:$1" >/sys/power/tuxonice/resume
elif [ "$2" = "resume" ]; then
echo "<3>Dracut: found resume parameter device in $1, trying to resume" > /dev/kmsg
echo 1 >/sys/power/tuxonice/do_resume
echo "<3>Dracut: no resume operation occured" >/dev/kmsg
fi
Loading…
Cancel
Save