#!/bin/bash # # 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] # basedir="$(dirname $0)" SCRIPT_COMMON=common.sh if [ -f "${basedir}/${SCRIPT_COMMON}" ]; then . "${basedir}/${SCRIPT_COMMON}" else echo "Missing helper script ${SCRIPT_COMMON}" && exit 1 fi PROG=zfs-helpers.sh DRYRUN= INSTALL= REMOVE= VERBOSE= 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=1 ;; i) INSTALL=1 ;; r) REMOVE=1 ;; v) VERBOSE=1 ;; ?) usage exit ;; esac done if [ "${INSTALL}" -a "${REMOVE}" ]; then usage die "Specify -i or -r but not both" fi if [ ! "${INSTALL}" -a ! "${REMOVE}" ]; then usage die "Either -i or -r must be specified" fi if [ $(id -u) != 0 ]; then die "Must run as root" fi if [ "$VERBOSE" ]; then echo "--- Configuration ---" echo "udevdir: $udevdir" echo "udevruledir: $udevruledir" echo "mounthelperdir: $mounthelperdir" echo "sysconfdir: $sysconfdir" echo "DRYRUN: $DRYRUN" echo fi install() { local src=$1 local 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" ]; then mkdir -p $(dirname $dst) &>/dev/null ln -s $src $dst fi fi } remove() { local dst=$1 if [ -h $dst ]; then msg "rm $dst" rm $dst rmdir $(dirname $dst) &>/dev/null fi } if [ ${INSTALL} ]; then install $CMDDIR/mount_zfs/mount.zfs $mounthelperdir/mount.zfs install $CMDDIR/fsck_zfs/fsck.zfs $mounthelperdir/fsck.zfs install $CMDDIR/zvol_id/zvol_id $udevdir/zvol_id install $CMDDIR/vdev_id/vdev_id $udevdir/vdev_id install $UDEVRULEDIR/60-zvol.rules $udevruledir/60-zvol.rules install $UDEVRULEDIR/69-vdev.rules $udevruledir/69-vdev.rules install $UDEVRULEDIR/90-zfs.rules $udevruledir/90-zfs.rules install $CMDDIR/zpool/zpool.d $sysconfdir/zfs/zpool.d else remove $mounthelperdir/mount.zfs remove $mounthelperdir/fsck.zfs remove $udevdir/zvol_id remove $udevdir/vdev_id remove $udevruledir/60-zvol.rules remove $udevruledir/69-vdev.rules remove $udevruledir/90-zfs.rules remove $sysconfdir/zfs/zpool.d fi exit 0