Package: initramfs-tools
Version: 0.133ubuntu10
Severity: normal
Dear Maintainer,
The resume hook script (/usr/share/initramfs-tools/hooks/resume) does not check
for a swap file. It checks for a swap device referenced by the RESUME variable.
The RESUME_OFFSET variable is additionally used to point to a file in the
RESUME device that acts as the swap device. In this case, since RESUME points
to a standard file system, a warning is generated:
W: initramfs-tools configuration sets RESUME=$RESUME
W: but no matching swap device is available.
The following contains a possible solution to check for a swap file. It relies
on a set RESUME_OFFSET variable indicating a swap file. At least two files
should be modified: 1) the resume hook script and 2) the mkinitramfs script.
The resume script contains the following line numbered items. The unnumbered
lines contain a possible fix to check for the use of a swap file.
20 # First check if a location is set and is a valid swap partition.
21 # If so, the config file will be copied in and there is nothing to do.
22 if [ -n "$RESUME" ] && [ "$RESUME" != auto ]; then
23 if [ "$RESUME" = none ]; then
24 exit 0
25 fi
if resume_dev_node="$(resolve_device "$RESUME")"; then
if [ -z "$RESUME_OFFSET" ] && \
blkid -p -n swap "$resume_dev_node" >/dev/null 2>&1;
then
exit 0
fi
# Assume RESUME_OFFSET is a proper offset pointing to
# the first data block of an inode in RESUME.
# Then, the swap filename should be in /proc/swaps.
# Get largest filename that is NOT a /dev/...
for resume_filename in $( grep -v ^/dev/ /proc/swaps |
grep ^/ | sort -rnk3 | cut -d " " -f 1 ); do
if [ -n "$resume_filename" ] && \
blkid -p -n swap "$resume_filename"
>/dev/null 2>&1; then
exit 0
fi
break
done
echo >&2 "W: initramfs-tools configuration sets
RESUME=$RESUME and
echo >&2 "W:
RESUME_OFFSET=$RESUME_OFFSET"
echo >&2 "W: but no matching swap file is available."
29 fi
30
31 echo >&2 "W: initramfs-tools configuration sets RESUME=$RESUME"
32 echo >&2 "W: but no matching swap device is available."
33 fi
Getting a file name from an inode from a block offset might be done, but is
problematic as tools related to this are dependent on the file system. For
ext*, this could be:
resume_inode=$( debugfs -R "icheck $RESUME_OFFSET" $resume_dev_node
2>/dev/null | tail -1 | cut -f2 )
resume_fn=$( debugfs -R "ncheck ${RESUME_INODE}" ${RESUME_DEV} 2>/dev/null |
tail -1 | cut -f2 )
However, this process is not generic and may not be available for every file
system.
Additionally, the mkinitramfs script (/usr/sbin/mkinitramfs) does not export
the RESUME_OFFSET variable. It should be exported for use by the hook scripts.
242 # Export environment for hook scripts.
243 #
244 export MODULESDIR
245 export version
246 export CONFDIR
247 export DESTDIR
248 export DPKG_ARCH
249 export verbose
250 export MODULES
251 export BUSYBOX
252 export COMPCACHE_SIZE
253 export RESUME
export RESUME_OFFSET
254
-- System Information:
Debian Release: buster/sid
APT prefers eoan-updates
APT policy: (500, 'eoan-updates'), (500, 'eoan-security'), (500, 'eoan'),
(100, 'eoan-backports')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 5.3.0-23-generic (SMP w/8 CPU cores)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_OOT_MODULE,
TAINT_UNSIGNED_MODULE
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US
(charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
Versions of packages initramfs-tools depends on:
ii initramfs-tools-core 0.133ubuntu10
ii linux-base4.5ubuntu2
initramfs-tools recommends no packages.
Versions of packages initramfs-tools suggests:
ii bash-completion 1:2.9-1ubuntu1
-- no debconf information