]> git.proxmox.com Git - mirror_zfs.git/blob - scripts/zfs-helpers.sh
tests: clean out more temporary files
[mirror_zfs.git] / scripts / zfs-helpers.sh
1 #!/bin/sh
2 # shellcheck disable=SC2154
3 #
4 # This script is designed to facilitate in-tree development and testing
5 # by installing symlinks on your system which refer to in-tree helper
6 # utilities. These helper utilities must be installed to in order to
7 # exercise all ZFS functionality. By using symbolic links and keeping
8 # the scripts in-tree during development they can be easily modified
9 # and those changes tracked.
10 #
11 # Use the following configuration option to override the installation
12 # paths for these scripts. The correct path is automatically set for
13 # most distributions but you can optionally set it for your environment.
14 #
15 # --with-mounthelperdir=DIR install mount.zfs in dir [/sbin]
16 # --with-udevdir=DIR install udev helpers [default=check]
17 # --with-udevruledir=DIR install udev rules [default=UDEVDIR/rules.d]
18 # --sysconfdir=DIR install zfs configuration files [PREFIX/etc]
19 #
20
21 BASE_DIR=$(dirname "$0")
22 SCRIPT_COMMON=common.sh
23 if [ -f "${BASE_DIR}/${SCRIPT_COMMON}" ]; then
24 . "${BASE_DIR}/${SCRIPT_COMMON}"
25 else
26 echo "Missing helper script ${SCRIPT_COMMON}" && exit 1
27 fi
28
29 PROG=zfs-helpers.sh
30 DRYRUN="no"
31 INSTALL="no"
32 REMOVE="no"
33 VERBOSE="no"
34
35 fail() {
36 echo "${PROG}: $1" >&2
37 exit 1
38 }
39
40 msg() {
41 if [ "$VERBOSE" = "yes" ]; then
42 echo "$@"
43 fi
44 }
45
46 usage() {
47 cat << EOF
48 USAGE:
49 $0 [dhirv]
50
51 DESCRIPTION:
52 Install/remove the ZFS helper utilities.
53
54 OPTIONS:
55 -d Dry run
56 -h Show this message
57 -i Install the helper utilities
58 -r Remove the helper utilities
59 -v Verbose
60
61 $0 -iv
62 $0 -r
63
64 EOF
65 }
66
67 while getopts 'hdirv' OPTION; do
68 case $OPTION in
69 h)
70 usage
71 exit 1
72 ;;
73 d)
74 DRYRUN="yes"
75 ;;
76 i)
77 INSTALL="yes"
78 ;;
79 r)
80 REMOVE="yes"
81 ;;
82 v)
83 VERBOSE="yes"
84 ;;
85 ?)
86 usage
87 exit
88 ;;
89 *)
90 ;;
91 esac
92 done
93
94 if [ "$INSTALL" = "yes" ] && [ "$REMOVE" = "yes" ]; then
95 fail "Specify -i or -r but not both"
96 fi
97
98 if [ "$INSTALL" = "no" ] && [ "$REMOVE" = "no" ]; then
99 fail "Either -i or -r must be specified"
100 fi
101
102 if [ "$(id -u)" != "0" ]; then
103 fail "Must run as root"
104 fi
105
106 if [ "$INTREE" != "yes" ]; then
107 fail "Must be run in-tree"
108 fi
109
110 if [ "$VERBOSE" = "yes" ]; then
111 echo "--- Configuration ---"
112 echo "udevdir: $INSTALL_UDEV_DIR"
113 echo "udevruledir: $INSTALL_UDEV_RULE_DIR"
114 echo "mounthelperdir: $INSTALL_MOUNT_HELPER_DIR"
115 echo "sysconfdir: $INSTALL_SYSCONF_DIR"
116 echo "pythonsitedir: $INSTALL_PYTHON_DIR"
117 echo "dryrun: $DRYRUN"
118 echo
119 fi
120
121 install() {
122 src=$1
123 dst=$2
124
125 if [ -h "$dst" ]; then
126 echo "Symlink exists: $dst"
127 elif [ -e "$dst" ]; then
128 echo "File exists: $dst"
129 elif [ ! -e "$src" ]; then
130 echo "Source missing: $src"
131 else
132 msg "ln -s $src $dst"
133
134 if [ "$DRYRUN" = "no" ]; then
135 DIR=$(dirname "$dst")
136 mkdir -p "$DIR" >/dev/null 2>&1
137 ln -s "$src" "$dst"
138 fi
139 fi
140 }
141
142 remove() {
143 dst=$1
144
145 if [ -h "$dst" ]; then
146 msg "rm $dst"
147 rm "$dst"
148 DIR=$(dirname "$dst")
149 rmdir "$DIR" >/dev/null 2>&1
150 elif [ -e "$dst" ]; then
151 echo "Expected symlink: $dst"
152 fi
153 }
154
155 if [ "${INSTALL}" = "yes" ]; then
156 install "$CMD_DIR/mount_zfs/mount.zfs" \
157 "$INSTALL_MOUNT_HELPER_DIR/mount.zfs"
158 install "$CMD_DIR/fsck_zfs/fsck.zfs" \
159 "$INSTALL_MOUNT_HELPER_DIR/fsck.zfs"
160 install "$CMD_DIR/zvol_id/zvol_id" \
161 "$INSTALL_UDEV_DIR/zvol_id"
162 install "$CMD_DIR/vdev_id/vdev_id" \
163 "$INSTALL_UDEV_DIR/vdev_id"
164 install "$UDEV_RULE_DIR/60-zvol.rules" \
165 "$INSTALL_UDEV_RULE_DIR/60-zvol.rules"
166 install "$UDEV_RULE_DIR/69-vdev.rules" \
167 "$INSTALL_UDEV_RULE_DIR/69-vdev.rules"
168 install "$UDEV_RULE_DIR/90-zfs.rules" \
169 "$INSTALL_UDEV_RULE_DIR/90-zfs.rules"
170 install "$CMD_DIR/zpool/zpool.d" \
171 "$INSTALL_SYSCONF_DIR/zfs/zpool.d"
172 install "$CONTRIB_DIR/pyzfs/libzfs_core" \
173 "$INSTALL_PYTHON_DIR/libzfs_core"
174 # Ideally we would install these in the configured ${libdir}, which is
175 # by default "/usr/local/lib and unfortunately not included in the
176 # dynamic linker search path.
177 install "$(find "$LIB_DIR/libzfs_core" -type f -name 'libzfs_core.so*')" \
178 "/lib/libzfs_core.so"
179 install "$(find "$LIB_DIR/libnvpair" -type f -name 'libnvpair.so*')" \
180 "/lib/libnvpair.so"
181 ldconfig
182 else
183 remove "$INSTALL_MOUNT_HELPER_DIR/mount.zfs"
184 remove "$INSTALL_MOUNT_HELPER_DIR/fsck.zfs"
185 remove "$INSTALL_UDEV_DIR/zvol_id"
186 remove "$INSTALL_UDEV_DIR/vdev_id"
187 remove "$INSTALL_UDEV_RULE_DIR/60-zvol.rules"
188 remove "$INSTALL_UDEV_RULE_DIR/69-vdev.rules"
189 remove "$INSTALL_UDEV_RULE_DIR/90-zfs.rules"
190 remove "$INSTALL_SYSCONF_DIR/zfs/zpool.d"
191 remove "$INSTALL_PYTHON_DIR/libzfs_core"
192 remove "/lib/libzfs_core.so"
193 remove "/lib/libnvpair.so"
194 ldconfig
195 fi
196
197 exit 0