mirror of
				https://git.proxmox.com/git/mirror_zfs
				synced 2025-10-31 00:05:40 +00:00 
			
		
		
		
	 0a9aaa7f0c
			
		
	
	
		0a9aaa7f0c
		
	
	
	
	
		
			
			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
 |