[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#595759: new partman-zfs



Here's a new patch.  It takes into account that filesystem
creation is stateful with ZFS (once a pool is created, it
remains "registered"), but partman expects it to be stateless.

The workaround is to export the pool inmediately after
creating it, then import it when mounting it.

-- 
Robert Millan
diff -Nurp -x changelog partman-zfs.old/check.d/zfs_root partman-zfs/check.d/zfs_root
--- partman-zfs.old/check.d/zfs_root	2010-09-02 14:37:52.966988000 +0200
+++ partman-zfs/check.d/zfs_root	1970-01-01 01:00:00.000000000 +0100
@@ -1,44 +0,0 @@
-#!/bin/sh
-# Check that the root partition is of type ZFS.
-
-case "$(udpkg --print-os)" in
-	"kfreebsd")
-	;;
-	*)
-		exit 0
-	;;
-esac
-
-. /lib/partman/lib/base.sh
-
-for dev in $DEVICES/*; do
-	[ -d "$dev" ] || continue
-	cd $dev
-	open_dialog PARTITIONS
-	while { read_line num id size type fs path name; [ "$id" ]; }; do
-		[ "$fs" != free ] || continue
-		[ -f $id/method ] || continue
-		[ -f $id/acting_filesystem ] || continue
-		[ -f $id/mountpoint ] || continue
-		mountpoint=$(cat $id/mountpoint)
-		filesystem=$(cat $id/acting_filesystem)
-		if [ "$mountpoint" = / ]; then
-			root_fs=$filesystem
-			root_type=$type
-			root_path=$path
-		fi
-	done
-	close_dialog
-done
-
-# We need a root ZFS filesystem
-if [ "$root_fs" != zfs ]; then
-	db_set partman-zfs/root_not_zfs true
-	db_input critical partman-zfs/root_not_zfs || true
-	db_go || true
-	db_get partman-zfs/root_not_zfs
-	if [ "$RET" = true ]; then
-		exit 1
-	fi
-fi
-
diff -Nurp -x changelog partman-zfs.old/commit.d/format_zfs partman-zfs/commit.d/format_zfs
--- partman-zfs.old/commit.d/format_zfs	2010-09-02 14:37:52.887885000 +0200
+++ partman-zfs/commit.d/format_zfs	2010-10-12 14:19:57.274494104 +0200
@@ -63,11 +63,13 @@ for dev in $DEVICES/*; do
 			fi
 
 			code=0
-			# Ensure label is quoted correctly
 			log-output -t partman --pass-stdout \
-				mkfs.zfs ${label:+-L "$label"} \
-					 ${reserved:+-m $reserved} \
+				zpool create -f -m none "$(hostname)-$(basename $device)" \
 					 $device >/dev/null || code=$?
+			# will import in mount.d/zfs
+			log-output -t partman --pass-stdout \
+				zpool export "$(hostname)-$(basename $device)" \
+					 >/dev/null || code=$?
 			sync
 			db_progress STOP
 
diff -Nurp -x changelog partman-zfs.old/debian/control partman-zfs/debian/control
--- partman-zfs.old/debian/control	2010-09-02 14:37:53.748294000 +0200
+++ partman-zfs/debian/control	2010-09-03 22:07:45.787581939 +0200
@@ -9,6 +9,6 @@ Vcs-Svn: svn://svn.debian.org/d-i/trunk/
 Package: partman-zfs
 XC-Package-Type: udeb
 Architecture: all
-Depends: ${misc:Depends}, zfsutils-udeb, zfs-modules, partman-basicfilesystems (>= 59), partman-base (>= 124)
+Depends: ${misc:Depends}, zfsutils-udeb (>= 8.1-4), zfs-modules, partman-basicfilesystems (>= 59), partman-base (>= 124)
 Provides: partman-filesystem
 Description: Add to partman support for ZFS
diff -Nurp -x changelog partman-zfs.old/debian/partman-zfs.templates partman-zfs/debian/partman-zfs.templates
--- partman-zfs.old/debian/partman-zfs.templates	2010-09-02 14:37:53.509041000 +0200
+++ partman-zfs/debian/partman-zfs.templates	2010-09-03 22:07:45.793583540 +0200
@@ -4,18 +4,6 @@ Type: text
 # File system name (untranslatable in many languages)
 _Description: zfs
 
-Template: partman/filesystem_long/freebsd-zfs
-Type: text
-# :sl3:
-# File system name
-_Description: ZFS file system
-
-Template: partman/filesystem_short/freebsd-zfs
-Type: text
-# :sl3:
-# Short file system name (untranslatable in many languages)
-_Description: zfs
-
 Template: partman/filesystem_short/zfs
 Type: text
 # :sl3:
@@ -27,15 +15,3 @@ Type: text
 # :sl3:
 # File system name
 _Description: ZFS file system
-
-Template: partman-zfs/root_not_zfs
-Type: boolean
-# :sl3:
-_Description: Go back to the menu and correct this problem?
- Your root partition has not been configured with the ZFS file
- system. This is needed by your machine in order to boot. Please go
- back and use ZFS file system.
- .
- If you do not go back to the partitioning menu and correct this error,
- the partition will be used as is.  This means that you may not be able
- to boot from your hard disk.
diff -Nurp -x changelog partman-zfs.old/fstab.d/zfs partman-zfs/fstab.d/zfs
--- partman-zfs.old/fstab.d/zfs	2010-09-02 14:37:53.074038000 +0200
+++ partman-zfs/fstab.d/zfs	2010-09-04 01:41:13.444628012 +0200
@@ -24,15 +24,7 @@ for dev in $DEVICES/*; do
 			if [ "$options" = defaults ]; then
 				options="rw"
 			fi
-			if [ "$mountpoint" = / ]; then
-				if ! echo "$options" | grep -q '\(^\|,\)r\(o\|w\)\(,\|$\)' ; then
-					options="${options},rw"
-				fi
-				pass=1
-			else
-				pass=2
-			fi
-			echo "$path" "$mountpoint" zfs $options 0 $pass
+			echo "$(hostname)-$(basename $path)" "$mountpoint" zfs $options 0 0
 			;;
 		esac
 	done
diff -Nurp -x changelog partman-zfs.old/mount.d/zfs partman-zfs/mount.d/zfs
--- partman-zfs.old/mount.d/zfs	2010-09-02 14:37:53.415994000 +0200
+++ partman-zfs/mount.d/zfs	2010-10-12 14:23:36.118500815 +0200
@@ -11,8 +11,9 @@ pass=$6
 
 case $type in
     zfs)
-	mount  ${type:+-t "$type"} ${options:+-o "$options"} $fs /target$mp || exit 1
-	echo "umount /target$mp"
+	zpool import -f $fs || exit 1
+	zfs set mountpoint=/target${mp%/} $fs || exit 1
+	echo "zpool export $fs"
 	exit 0
 	;;
 esac
diff -Nurp -x changelog partman-zfs.old/parted_names/zfs partman-zfs/parted_names/zfs
--- partman-zfs.old/parted_names/zfs	2010-09-02 14:37:52.795790000 +0200
+++ partman-zfs/parted_names/zfs	2010-09-03 22:07:45.793583540 +0200
@@ -1 +1 @@
-freebsd-zfs
+zfs
diff -Nurp -x changelog partman-zfs.old/valid_filesystems/zfs partman-zfs/valid_filesystems/zfs
--- partman-zfs.old/valid_filesystems/zfs	2010-09-02 14:37:53.289811000 +0200
+++ partman-zfs/valid_filesystems/zfs	2010-09-03 22:07:45.793583540 +0200
@@ -15,7 +15,7 @@ case $property in
 	fs=$(cat $id/detected_filesystem)
 
 	case "$fs" in
-	    freebsd-zfs|zfs)
+	    zfs)
 		echo zfs
 		;;
 	esac

Reply to: