]> git.proxmox.com Git - mirror_zfs-debian.git/blame - scripts/zfs-helpers.sh
Install init scripts to support non-systemd setups. (Closes: #826994)
[mirror_zfs-debian.git] / scripts / zfs-helpers.sh
CommitLineData
cae5b340
AX
1#!/bin/bash
2#
3# This script is designed to facilitate in-tree development and testing
4# by installing symlinks on your system which refer to in-tree helper
5# utilities. These helper utilities must be installed to in order to
6# exercise all ZFS functionality. By using symbolic links and keeping
7# the scripts in-tree during development they can be easily modified
8# and those changes tracked.
9#
10# Use the following configuration option to override the installation
11# paths for these scripts. The correct path is automatically set for
12# most distributions but you can optionally set it for your environment.
13#
14# --with-mounthelperdir=DIR install mount.zfs in dir [/sbin]
15# --with-udevdir=DIR install udev helpers [default=check]
16# --with-udevruledir=DIR install udev rules [default=UDEVDIR/rules.d]
17# --sysconfdir=DIR install zfs configuration files [PREFIX/etc]
18#
19
20basedir="$(dirname $0)"
21
22SCRIPT_COMMON=common.sh
23if [ -f "${basedir}/${SCRIPT_COMMON}" ]; then
24. "${basedir}/${SCRIPT_COMMON}"
25else
26echo "Missing helper script ${SCRIPT_COMMON}" && exit 1
27fi
28
29PROG=zfs-helpers.sh
30DRYRUN=
31INSTALL=
32REMOVE=
33VERBOSE=
34
35usage() {
36cat << EOF
37USAGE:
38$0 [dhirv]
39
40DESCRIPTION:
41 Install/remove the ZFS helper utilities.
42
43OPTIONS:
44 -d Dry run
45 -h Show this message
46 -i Install the helper utilities
47 -r Remove the helper utilities
48 -v Verbose
49
50$0 -iv
51$0 -r
52
53EOF
54}
55
56while getopts 'hdirv' OPTION; do
57 case $OPTION in
58 h)
59 usage
60 exit 1
61 ;;
62 d)
63 DRYRUN=1
64 ;;
65 i)
66 INSTALL=1
67 ;;
68 r)
69 REMOVE=1
70 ;;
71 v)
72 VERBOSE=1
73 ;;
74 ?)
75 usage
76 exit
77 ;;
78 esac
79done
80
81if [ "${INSTALL}" -a "${REMOVE}" ]; then
82 usage
83 die "Specify -i or -r but not both"
84fi
85
86if [ ! "${INSTALL}" -a ! "${REMOVE}" ]; then
87 usage
88 die "Either -i or -r must be specified"
89fi
90
91if [ $(id -u) != 0 ]; then
92 die "Must run as root"
93fi
94
95if [ "$VERBOSE" ]; then
96 echo "--- Configuration ---"
97 echo "udevdir: $udevdir"
98 echo "udevruledir: $udevruledir"
99 echo "mounthelperdir: $mounthelperdir"
100 echo "sysconfdir: $sysconfdir"
101 echo "DRYRUN: $DRYRUN"
102 echo
103fi
104
105install() {
106 local src=$1
107 local dst=$2
108
109 if [ -h $dst ]; then
110 echo "Symlink exists: $dst"
111 elif [ -e $dst ]; then
112 echo "File exists: $dst"
113 elif [ ! -e $src ]; then
114 echo "Source missing: $src"
115 else
116 msg "ln -s $src $dst"
117
118 if [ ! "$DRYRUN" ]; then
119 mkdir -p $(dirname $dst) &>/dev/null
120 ln -s $src $dst
121 fi
122 fi
123}
124
125remove() {
126 local dst=$1
127
128 if [ -h $dst ]; then
129 msg "rm $dst"
130 rm $dst
131 rmdir $(dirname $dst) &>/dev/null
132 fi
133}
134
135if [ ${INSTALL} ]; then
136 install $CMDDIR/mount_zfs/mount.zfs $mounthelperdir/mount.zfs
137 install $CMDDIR/fsck_zfs/fsck.zfs $mounthelperdir/fsck.zfs
138 install $CMDDIR/zvol_id/zvol_id $udevdir/zvol_id
139 install $CMDDIR/vdev_id/vdev_id $udevdir/vdev_id
140 install $UDEVRULEDIR/60-zvol.rules $udevruledir/60-zvol.rules
141 install $UDEVRULEDIR/69-vdev.rules $udevruledir/69-vdev.rules
142 install $UDEVRULEDIR/90-zfs.rules $udevruledir/90-zfs.rules
143 install $CMDDIR/zpool/zpool.d $sysconfdir/zfs/zpool.d
144else
145 remove $mounthelperdir/mount.zfs
146 remove $mounthelperdir/fsck.zfs
147 remove $udevdir/zvol_id
148 remove $udevdir/vdev_id
149 remove $udevruledir/60-zvol.rules
150 remove $udevruledir/69-vdev.rules
151 remove $udevruledir/90-zfs.rules
152 remove $sysconfdir/zfs/zpool.d
153fi
154
155exit 0