[pkg-cryptsetup-devel] Bug#838001: cryptsetup does not support ZFS

Richard Laager rlaager at wiktel.com
Fri Sep 16 09:32:24 UTC 2016


Package: cryptsetup

I use Ubuntu, not Debian, and filed this bug:
https://bugs.launchpad.net/ubuntu/+source/cryptsetup/+bug/1612906

It was suggested there that I look at Debian bug #820888, titled
cryptsetup: initramfs cryptroot zfs support:
https://bugs.debian.org/820888

I think that's a separate issue, but I'm not 100% sure. Either way, it'd
be nice to upstream the patch below into Debian's cryptsetup, if the
patch is in fact suitable for Debian.

On to the actual issue...

This happens on Ubuntu 16.04:
$ sudo update-initramfs -c -k all
update-initramfs: Generating /boot/initrd.img-4.4.0-34-generic
cryptsetup: WARNING: could not determine root device from /etc/fstab
update-initramfs: Generating /boot/initrd.img-4.4.0-31-generic
cryptsetup: WARNING: could not determine root device from /etc/fstab

The attached patch adds ZFS support to cryptsetup.

-- 
Richard
-------------- next part --------------
diff -Nru cryptsetup-1.7.2/debian/changelog cryptsetup-1.7.2/debian/changelog
--- cryptsetup-1.7.2/debian/changelog	2016-07-01 03:57:14.000000000 -0500
+++ cryptsetup-1.7.2/debian/changelog	2016-08-03 11:35:40.000000000 -0500
@@ -1,3 +1,9 @@
+cryptsetup (2:1.7.2-0ubuntu2~rlaager1) yakkety; urgency=medium
+
+  * Support ZFS in the cryptroot initramfs-tools hook.
+
+ -- Richard Laager <rlaager at wiktel.com>  Wed, 03 Aug 2016 11:30:29 -0500
+
 cryptsetup (2:1.7.2-0ubuntu1) yakkety; urgency=medium
 
   * New upstream release, merge from Debian unstable (LP: #1548137). Remaining
diff -Nru cryptsetup-1.7.2/debian/initramfs/cryptroot-hook cryptsetup-1.7.2/debian/initramfs/cryptroot-hook
--- cryptsetup-1.7.2/debian/initramfs/cryptroot-hook	2016-04-29 01:18:05.000000000 -0500
+++ cryptsetup-1.7.2/debian/initramfs/cryptroot-hook	2016-08-03 11:35:57.000000000 -0500
@@ -20,11 +20,7 @@
 	local device mount type options dump pass
 	local wantmount="$1"
 
-	if [ ! -r /etc/fstab ]; then
-		return 1
-	fi
-
-	grep -s '^[^#]' /etc/fstab | \
+	grep -s '^[^#]' /etc/fstab 2>/dev/null | \
 	while read device mount type options dump pass; do
 		if [ "$mount" = "$wantmount" ]; then
 			local devices
@@ -39,6 +35,21 @@
 			return
 		fi
 	done
+
+	zfs list -H -o name,canmount,mountpoint 2>/dev/null | \
+	while read name canmount mountpoint; do
+		[ "$canmount" = off ] && continue
+		if [ "$mountpoint" = "$wantmount" ]; then
+			local devices
+			for dev in $(zpool status -P "${name%%/*}" 2>/dev/null | awk '($1 ~ /\//) {print $1}'); do
+				devices="$devices $(canonical_device "$dev")"
+			done
+			echo "$devices"
+			return
+		fi
+	done
+
+	return 1
 }
 
 get_resume_devices() {


More information about the pkg-cryptsetup-devel mailing list