mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	 7fcf82451c
			
		
	
	
		7fcf82451c
		
			
		
	
	
	
	
		
			
			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
 |