mirror of
				https://git.proxmox.com/git/mirror_zfs
				synced 2025-11-04 01:36:09 +00:00 
			
		
		
		
	It turns out that there are two versions of Busybox, at least on Ubuntu 18.04. If you have the busybox-static package installed, you get a busybox that supports `ps a` and `head`. If you only have busybox-initramfs, you don't. Either way, you have `awk`. This change should also make this compatible with GNU ps, if you somehow end up with that in the initramfs environment. Reviewed-by: Tom Caputi <tcaputi@datto.com> Reviewed-by: Andrey Prokopenko <job@terem.fr> Signed-off-by: Richard Laager <rlaager@wiktel.com> Closes #10307
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
set -eu
 | 
						|
if [ ! -e /run/zfs_fs_name ]; then
 | 
						|
	echo "Wait for the root pool to be imported or press Ctrl-C to exit."
 | 
						|
fi
 | 
						|
while [ ! -e /run/zfs_fs_name ]; do
 | 
						|
	if [ -e /run/zfs_unlock_complete ]; then
 | 
						|
		exit 0
 | 
						|
	fi
 | 
						|
	sleep 0.5
 | 
						|
done
 | 
						|
echo
 | 
						|
echo "Unlocking encrypted ZFS filesystems..."
 | 
						|
echo "Enter the password or press Ctrl-C to exit."
 | 
						|
echo
 | 
						|
zfs_fs_name=""
 | 
						|
if [ ! -e /run/zfs_unlock_complete_notify ]; then
 | 
						|
	mkfifo /run/zfs_unlock_complete_notify
 | 
						|
fi
 | 
						|
while [ ! -e /run/zfs_unlock_complete ]; do
 | 
						|
	zfs_fs_name=$(cat /run/zfs_fs_name)
 | 
						|
	zfs_console_askpwd_cmd=$(cat /run/zfs_console_askpwd_cmd)
 | 
						|
	systemd-ask-password "Encrypted ZFS password for ${zfs_fs_name}:" | \
 | 
						|
		/sbin/zfs load-key "$zfs_fs_name" || true
 | 
						|
	if [ "$(/sbin/zfs get -H -ovalue keystatus "$zfs_fs_name" 2> /dev/null)" = "available" ]; then
 | 
						|
		echo "Password for $zfs_fs_name accepted."
 | 
						|
		zfs_console_askpwd_pid=$(ps | awk '!'"/awk/ && /$zfs_console_askpwd_cmd/ { print \$1; exit }")
 | 
						|
		if [ -n "$zfs_console_askpwd_pid" ]; then
 | 
						|
			kill "$zfs_console_askpwd_pid"
 | 
						|
		fi
 | 
						|
		# Wait for another filesystem to unlock.
 | 
						|
		while [ "$(cat /run/zfs_fs_name)" = "$zfs_fs_name" ] && [ ! -e /run/zfs_unlock_complete ]; do
 | 
						|
			sleep 0.5
 | 
						|
		done
 | 
						|
	else
 | 
						|
		echo "Wrong password.  Try again."
 | 
						|
	fi
 | 
						|
done
 | 
						|
echo "Unlocking complete.  Resuming boot sequence..."
 | 
						|
echo "Please reconnect in a while."
 | 
						|
echo "ok" > /run/zfs_unlock_complete_notify
 |