On Tue, 30 Jul 2013, Askar Safin escribió:
1. uswsusp will use the initramfs resume device. So, uswsusp should read the
file included in the initrd image at conf/conf.d/resume. Is ok?
If you mean configure time (i. e. dpkg-reconfigure uswsusp) or suspending
time, then, of course, no. Because this requires unpacking initramfs, and
this is slow.
Use /etc/initramfs-tools/conf.d/resume . Of course, at wake up time use
/conf/conf.d/resume.
6. What file should read s2disk and s2both to find the resume device when
they save the image?
They should use same device which used by early userspace when this userspace
perform waking up (to be sure waking up is possible). So, we should read
/etc/initramfs-tools/conf.d/resume .
8a. I am not sure about this, because initramfs-tools is required by the
kernel, but there are case that uswsusp doesn't depends on initramfs-tools
and use the resume device in /etc/uswsusp.conf if initramfs-tools is not
installed? Could be initramfs-tools not installed and uswsusp installed?
Yes. Kernel depends on initramfs-tools | linux-initramfs-tool and
linux-initramfs-tool is virtual package provided by initramfs-tools and
dracut. So, this is possible if you using dracut instead of initramfs-tools.
(This information is about sid.)
8. debian/control file: uswsusp will depends on initramfs-tools?
uswsusp triggers initramfs rebuilding. So, if you want initramfs-tools, add
dependency initramfs-tools. If you can work with both initramfs-tools and
dracut, add dependency initramfs-tools | linux-initramfs-tool.
So, initramfs-tools should read /etc/uswsusp.conf and add the resume
device to the resume file?
I think, yes.
Then, when the user run dpkg-reconfigure uswsusp,
update-initramfs-tools will update the initrd resume file and then the
system know where find the resume file.
Yes
Askar
Hi Askar,
thanks a lot for your reply. Could this initramfs-tools patch solve the problem?
Some tips:
1. The patch reads the /etc/uswsusp.conf, and check if the file exists. The
value is not changed to UUID.
2. I check if uswsusp is installed if the s2disk binary exists. Checking the
config file only could be an error if the package was removed (not purged).
3. The resume device is created always, not only when initramfs-tools is
installed. Because the user can change the device.
Comments are welcome.
Cheers,
kix
diff -ur initramfs-tools-0.113.orig/debian/initramfs-tools.preinst initramfs-tools-0.113/debian/initramfs-tools.preinst
--- initramfs-tools-0.113.orig/debian/initramfs-tools.preinst 2013-07-30 01:46:30.0 +0200
+++ initramfs-tools-0.113/debian/initramfs-tools.preinst 2013-07-30 01:11:08.0 +0200
@@ -2,43 +2,9 @@
set -e
-chrooted() {
- # borrowed from udev's postinst
- if [ $(stat -c %d/%i /) = $(stat -Lc %d/%i /proc/1/root 2/dev/null) ]; then
- # the devicenumber/inode pair of / is the same as that of
- # /sbin/init's root, so we're *not* in a chroot and hence
- # return false.
- return 1
- fi
- return 0
-}
-
case $1 in
install)
mkdir -p /etc/initramfs-tools/conf.d
-
- # First time install. Can we autodetect the RESUME partition?
- if [ -r /proc/swaps ]; then
- RESUME=$(grep ^/dev/ /proc/swaps | sort -rk3 \
-| head -n 1 | cut -d -f 1)
- if command -v blkid /dev/null 21; then
-UUID=$(blkid -s UUID -o value $RESUME || true)
- # FIXME: post-Wheezy remove vol_id invocations
- elif command -v vol_id /dev/null 21; then
-UUID=$(vol_id -u $RESUME || true)
- elif [ -x /lib/udev/vol_id ]; then
-UUID=$(/lib/udev/vol_id -u $RESUME || true)
- fi
- if [ -n $UUID ]; then
-RESUME=UUID=$UUID
- fi
- fi
-
- # write conf.d/resume if not in a chroot
- if [ -n ${RESUME} ] ! chrooted; then
- echo RESUME=${RESUME} /etc/initramfs-tools/conf.d/resume
- fi
-
;;
esac
diff -ur initramfs-tools-0.113.orig/update-initramfs initramfs-tools-0.113/update-initramfs
--- initramfs-tools-0.113.orig/update-initramfs 2013-07-30 01:46:30.0 +0200
+++ initramfs-tools-0.113/update-initramfs 2013-07-30 01:48:19.0 +0200
@@ -68,7 +68,7 @@
# return false.
return 1
fi
-return 0
+ return 0
}
mild_panic()
@@ -161,6 +161,45 @@
verbose Removing ${initramfs_bak}
}
+# Update the resume device
+update_resume_device()
+{
+ USWSUSPCFG=/etc/uswsusp.conf
+ S2DISK=/usr/sbin/s2disk
+
+ # If uswsusp installed, use that swap device
+ if [ -r ${USWSUSPCFG} ] [ -x ${S2DISK} ]; then
+ RESUME=`sed -n 's/^[[:space:]]*'resume device'[[:space:]]*[=:][[:space:]]*\([^[:space:]]*\)/\1/ p' $USWSUSPCFG`
+
+ if [ ! -e ${RESUME} ]; then
+ RESUME=
+ fi
+ fi
+
+ # If not found in uswsusp config, get from running system
+ if [ -z ${RESUME} ]; then
+ if [ -r /proc/swaps ]; then
+ RESUME=$(grep ^/dev/ /proc/swaps | sort -rk3 \
+| head -n 1 | cut -d -f 1)
+ if command -v blkid /dev/null 21; then
+UUID=$(blkid -s UUID -o value $RESUME || true)
+ # FIXME: post-Wheezy remove vol_id