mirror of
				https://git.proxmox.com/git/mirror_zfs
				synced 2025-11-04 03:24:44 +00:00 
			
		
		
		
	Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz> Closes #13316
		
			
				
	
	
		
			189 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
# shellcheck disable=SC2154
 | 
						|
#
 | 
						|
# This script is designed to facilitate in-tree development and testing
 | 
						|
# by installing symlinks on your system which refer to in-tree helper
 | 
						|
# utilities.  These helper utilities must be installed to in order to
 | 
						|
# exercise all ZFS functionality.  By using symbolic links and keeping
 | 
						|
# the scripts in-tree during development they can be easily modified
 | 
						|
# and those changes tracked.
 | 
						|
#
 | 
						|
# Use the following configuration option to override the installation
 | 
						|
# paths for these scripts.  The correct path is automatically set for
 | 
						|
# most distributions but you can optionally set it for your environment.
 | 
						|
#
 | 
						|
#   --with-mounthelperdir=DIR  install mount.zfs in dir [/sbin]
 | 
						|
#   --with-udevdir=DIR         install udev helpers [default=check]
 | 
						|
#   --with-udevruledir=DIR     install udev rules [default=UDEVDIR/rules.d]
 | 
						|
#   --sysconfdir=DIR           install zfs configuration files [PREFIX/etc]
 | 
						|
#
 | 
						|
 | 
						|
BASE_DIR=${0%/*}
 | 
						|
SCRIPT_COMMON=common.sh
 | 
						|
if [ -f "${BASE_DIR}/${SCRIPT_COMMON}" ]; then
 | 
						|
	. "${BASE_DIR}/${SCRIPT_COMMON}"
 | 
						|
else
 | 
						|
	echo "Missing helper script ${SCRIPT_COMMON}" && exit 1
 | 
						|
fi
 | 
						|
 | 
						|
PROG=zfs-helpers.sh
 | 
						|
DRYRUN="no"
 | 
						|
INSTALL="no"
 | 
						|
REMOVE="no"
 | 
						|
VERBOSE="no"
 | 
						|
 | 
						|
fail() {
 | 
						|
	echo "${PROG}: $1" >&2
 | 
						|
	exit 1
 | 
						|
}
 | 
						|
 | 
						|
msg() {
 | 
						|
	if [ "$VERBOSE" = "yes" ]; then
 | 
						|
		echo "$@"
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
usage() {
 | 
						|
cat << EOF
 | 
						|
USAGE:
 | 
						|
$0 [-dhirv]
 | 
						|
 | 
						|
DESCRIPTION:
 | 
						|
	Install/remove the ZFS helper utilities.
 | 
						|
 | 
						|
OPTIONS:
 | 
						|
	-d      Dry run
 | 
						|
	-h      Show this message
 | 
						|
	-i      Install the helper utilities
 | 
						|
	-r      Remove the helper utilities
 | 
						|
	-v      Verbose
 | 
						|
 | 
						|
$0 -iv
 | 
						|
$0 -r
 | 
						|
 | 
						|
EOF
 | 
						|
}
 | 
						|
 | 
						|
while getopts 'hdirv' OPTION; do
 | 
						|
	case $OPTION in
 | 
						|
	h)
 | 
						|
		usage
 | 
						|
		exit 1
 | 
						|
		;;
 | 
						|
	d)
 | 
						|
		DRYRUN="yes"
 | 
						|
		;;
 | 
						|
	i)
 | 
						|
		INSTALL="yes"
 | 
						|
		;;
 | 
						|
	r)
 | 
						|
		REMOVE="yes"
 | 
						|
		;;
 | 
						|
	v)
 | 
						|
		VERBOSE="yes"
 | 
						|
		;;
 | 
						|
	?)
 | 
						|
		usage
 | 
						|
		exit
 | 
						|
		;;
 | 
						|
	*)
 | 
						|
		;;
 | 
						|
	esac
 | 
						|
done
 | 
						|
 | 
						|
if [ "$INSTALL" = "yes" ] && [ "$REMOVE" = "yes" ]; then
 | 
						|
	fail "Specify -i or -r but not both"
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$INSTALL" = "no" ] && [ "$REMOVE" = "no" ]; then
 | 
						|
	fail "Either -i or -r must be specified"
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$(id -u)" != "0" ] && [ "$DRYRUN" = "no" ]; then
 | 
						|
	fail "Must run as root"
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$INTREE" != "yes" ]; then
 | 
						|
	fail "Must be run in-tree"
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$VERBOSE" = "yes" ]; then
 | 
						|
	echo "--- Configuration ---"
 | 
						|
	echo "udevdir:          $INSTALL_UDEV_DIR"
 | 
						|
	echo "udevruledir:      $INSTALL_UDEV_RULE_DIR"
 | 
						|
	echo "mounthelperdir:   $INSTALL_MOUNT_HELPER_DIR"
 | 
						|
	echo "sysconfdir:       $INSTALL_SYSCONF_DIR"
 | 
						|
	echo "pythonsitedir:    $INSTALL_PYTHON_DIR"
 | 
						|
	echo "dryrun:           $DRYRUN"
 | 
						|
	echo
 | 
						|
fi
 | 
						|
 | 
						|
install() {
 | 
						|
	src=$1
 | 
						|
	dst=$2
 | 
						|
 | 
						|
	if [ -h "$dst" ]; then
 | 
						|
		echo "Symlink exists: $dst"
 | 
						|
	elif [ -e "$dst" ]; then
 | 
						|
		echo "File exists: $dst"
 | 
						|
	elif ! [ -e "$src" ]; then
 | 
						|
		echo "Source missing: $src"
 | 
						|
	else
 | 
						|
		msg "ln -s $src $dst"
 | 
						|
 | 
						|
		if [ "$DRYRUN" = "no" ]; then
 | 
						|
			DIR=${dst%/*}
 | 
						|
			mkdir -p "$DIR" >/dev/null 2>&1
 | 
						|
			ln -s "$src" "$dst"
 | 
						|
		fi
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
remove() {
 | 
						|
	dst=$1
 | 
						|
 | 
						|
	if [ -h "$dst" ]; then
 | 
						|
		msg "rm $dst"
 | 
						|
		rm "$dst"
 | 
						|
		DIR=${dst%/*}
 | 
						|
		rmdir "$DIR" >/dev/null 2>&1
 | 
						|
	elif [ -e "$dst" ]; then
 | 
						|
		echo "Expected symlink: $dst"
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
if [ "${INSTALL}" = "yes" ]; then
 | 
						|
	for cmd in "mount.zfs" "fsck.zfs"; do
 | 
						|
		install "$CMD_DIR/$cmd" "$INSTALL_MOUNT_HELPER_DIR/$cmd"
 | 
						|
	done
 | 
						|
	for udev in "$UDEV_CMD_DIR/zvol_id" "$UDEV_SCRIPT_DIR/vdev_id"; do
 | 
						|
		install "$udev" "$INSTALL_UDEV_DIR/${udev##*/}"
 | 
						|
	done
 | 
						|
	for rule in "60-zvol.rules" "69-vdev.rules" "90-zfs.rules"; do
 | 
						|
		install "$UDEV_RULE_DIR/$rule" "$INSTALL_UDEV_RULE_DIR/$rule"
 | 
						|
	done
 | 
						|
	install "$ZPOOL_SCRIPT_DIR"              "$INSTALL_SYSCONF_DIR/zfs/zpool.d"
 | 
						|
	install "$CONTRIB_DIR/pyzfs/libzfs_core" "$INSTALL_PYTHON_DIR/libzfs_core"
 | 
						|
	# Ideally we would install these in the configured ${libdir}, which is
 | 
						|
	# by default "/usr/local/lib and unfortunately not included in the
 | 
						|
	# dynamic linker search path.
 | 
						|
	install "$LIB_DIR"/libzfs_core.so.?.?.? "/lib/libzfs_core.so"
 | 
						|
	install "$LIB_DIR"/libnvpair.so.?.?.?   "/lib/libnvpair.so"
 | 
						|
	[ "$DRYRUN" = "no" ] && ldconfig
 | 
						|
else
 | 
						|
	remove "$INSTALL_MOUNT_HELPER_DIR/mount.zfs"
 | 
						|
	remove "$INSTALL_MOUNT_HELPER_DIR/fsck.zfs"
 | 
						|
	remove "$INSTALL_UDEV_DIR/zvol_id"
 | 
						|
	remove "$INSTALL_UDEV_DIR/vdev_id"
 | 
						|
	remove "$INSTALL_UDEV_RULE_DIR/60-zvol.rules"
 | 
						|
	remove "$INSTALL_UDEV_RULE_DIR/69-vdev.rules"
 | 
						|
	remove "$INSTALL_UDEV_RULE_DIR/90-zfs.rules"
 | 
						|
	remove "$INSTALL_SYSCONF_DIR/zfs/zpool.d"
 | 
						|
	remove "$INSTALL_PYTHON_DIR/libzfs_core"
 | 
						|
	remove "/lib/libzfs_core.so"
 | 
						|
	remove "/lib/libnvpair.so"
 | 
						|
	ldconfig
 | 
						|
fi
 | 
						|
 | 
						|
exit 0
 |