aboutsummaryrefslogtreecommitdiff
path: root/straper/db/public/zfs/etc-zfs/zfs-functions
diff options
context:
space:
mode:
Diffstat (limited to 'straper/db/public/zfs/etc-zfs/zfs-functions')
-rw-r--r--straper/db/public/zfs/etc-zfs/zfs-functions434
1 files changed, 0 insertions, 434 deletions
diff --git a/straper/db/public/zfs/etc-zfs/zfs-functions b/straper/db/public/zfs/etc-zfs/zfs-functions
deleted file mode 100644
index 8c30894..0000000
--- a/straper/db/public/zfs/etc-zfs/zfs-functions
+++ /dev/null
@@ -1,434 +0,0 @@
-# SPDX-License-Identifier: BSD-2-Clause
-# This is a script with common functions etc used by zfs-import, zfs-load-key,
-# zfs-mount, zfs-share and zfs-zed.
-#
-# It is _NOT_ to be called independently
-#
-# Released under the 2-clause BSD license.
-#
-# This script is based on debian/zfsutils.zfs.init from the
-# Debian GNU/kFreeBSD zfsutils 8.1-3 package, written by Aurelien Jarno.
-
-PATH=/sbin:/bin:/usr/bin:/usr/sbin
-
-# Source function library
-if [ -f /etc/rc.d/init.d/functions ]; then
- # RedHat and derivatives
- . /etc/rc.d/init.d/functions
-elif [ -L /etc/init.d/functions.sh ]; then
- # Gentoo
- . /etc/init.d/functions.sh
-elif [ -f /lib/lsb/init-functions ]; then
- # LSB, Debian, and derivatives
- . /lib/lsb/init-functions
-fi
-
-# Of course the functions we need are called differently
-# on different distributions - it would be way too easy
-# otherwise!!
-if type log_failure_msg > /dev/null 2>&1 ; then
- # LSB functions - fall through
- zfs_log_begin_msg() { log_begin_msg "$1"; }
- zfs_log_end_msg() { log_end_msg "$1"; }
- zfs_log_failure_msg() { log_failure_msg "$1"; }
- zfs_log_progress_msg() { log_progress_msg "$1"; }
-elif type success > /dev/null 2>&1 ; then
- # Fedora/RedHat functions
- zfs_set_ifs() {
- # For some reason, the init function library have a problem
- # with a changed IFS, so this function goes around that.
- local tIFS="$1"
- if [ -n "$tIFS" ]
- then
- TMP_IFS="$IFS"
- IFS="$tIFS"
- fi
- }
-
- zfs_log_begin_msg() { printf "%s" "$1 "; }
- zfs_log_end_msg() {
- # shellcheck disable=SC2154
- zfs_set_ifs "$OLD_IFS"
- if [ "$1" -eq 0 ]; then
- success
- else
- failure
- fi
- echo
- zfs_set_ifs "$TMP_IFS"
- }
- zfs_log_failure_msg() {
- zfs_set_ifs "$OLD_IFS"
- failure
- echo
- zfs_set_ifs "$TMP_IFS"
- }
- zfs_log_progress_msg() { printf "%s" "$""$1"; }
-elif type einfo > /dev/null 2>&1 ; then
- # Gentoo functions
- zfs_log_begin_msg() { ebegin "$1"; }
- zfs_log_end_msg() { eend "$1"; }
- zfs_log_failure_msg() { eend "$1"; }
-# zfs_log_progress_msg() { printf "%s" "$1"; }
- zfs_log_progress_msg() { :; }
-else
- # Unknown - simple substitutes.
- zfs_log_begin_msg() { printf "%s" "$1"; }
- zfs_log_end_msg() {
- ret=$1
- if [ "$ret" -ge 1 ]; then
- echo " failed!"
- else
- echo " success"
- fi
- return "$ret"
- }
- zfs_log_failure_msg() { echo "$1"; }
- zfs_log_progress_msg() { printf "%s" "$1"; }
-fi
-
-# Paths to what we need
-ZFS="/usr/sbin/zfs"
-ZED="/usr/sbin/zed"
-ZPOOL="/usr/sbin/zpool"
-ZPOOL_CACHE="/etc/zfs/zpool.cache"
-
-# Sensible defaults
-ZFS_LOAD_KEY='yes'
-ZFS_UNLOAD_KEY='no'
-ZFS_MOUNT='yes'
-ZFS_UNMOUNT='yes'
-ZFS_SHARE='yes'
-ZFS_UNSHARE='yes'
-
-# Source zfs configuration, overriding the defaults
-if [ -f /etc/default/zfs ]; then
- . /etc/default/zfs
-fi
-
-# ----------------------------------------------------
-
-export ZFS ZED ZPOOL ZPOOL_CACHE ZFS_LOAD_KEY ZFS_UNLOAD_KEY ZFS_MOUNT ZFS_UNMOUNT \
- ZFS_SHARE ZFS_UNSHARE
-
-zfs_action()
-{
- local MSG="$1"; shift
- local CMD="$*"
- local ret
-
- zfs_log_begin_msg "$MSG "
- $CMD
- ret=$?
- if [ "$ret" -eq 0 ]; then
- zfs_log_end_msg "$ret"
- else
- zfs_log_failure_msg "$ret"
- fi
-
- return "$ret"
-}
-
-# Returns
-# 0 if daemon has been started
-# 1 if daemon was already running
-# 2 if daemon could not be started
-# 3 if unsupported
-#
-zfs_daemon_start()
-{
- local PIDFILE="$1"; shift
- local DAEMON_BIN="$1"; shift
-
- if type start-stop-daemon > /dev/null 2>&1 ; then
- # LSB functions
- start-stop-daemon --start --quiet --pidfile "$PIDFILE" \
- --exec "$DAEMON_BIN" --test > /dev/null || return 1
-
- # shellcheck disable=SC2086
- start-stop-daemon --start --quiet --exec "$DAEMON_BIN" -- \
- "$@" || return 2
-
- # On Debian, there's a 'sendsigs' script that will
- # kill basically everything quite early and zed is stopped
- # much later than that. We don't want zed to be among them,
- # so add the zed pid to list of pids to ignore.
- if [ -f "$PIDFILE" ] && [ -d /run/sendsigs.omit.d ]
- then
- ln -sf "$PIDFILE" /run/sendsigs.omit.d/zed
- fi
- elif type daemon > /dev/null 2>&1 ; then
- # Fedora/RedHat functions
- # shellcheck disable=SC2086
- daemon --pidfile "$PIDFILE" "$DAEMON_BIN" "$@"
- return $?
- else
- # Unsupported
- return 3
- fi
-
- return 0
-}
-
-# Returns
-# 0 if daemon has been stopped
-# 1 if daemon was already stopped
-# 2 if daemon could not be stopped
-# 3 if unsupported
-#
-zfs_daemon_stop()
-{
- local PIDFILE="$1"
- local DAEMON_BIN="$2"
- local DAEMON_NAME="$3"
-
- if type start-stop-daemon > /dev/null 2>&1 ; then
- # LSB functions
- start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \
- --pidfile "$PIDFILE" --name "$DAEMON_NAME"
- ret="$?"
- [ "$ret" = 0 ] && rm -f "$PIDFILE"
-
- return "$ret"
- elif type killproc > /dev/null 2>&1 ; then
- # Fedora/RedHat functions
- killproc -p "$PIDFILE" "$DAEMON_NAME"
- ret="$?"
- [ "$ret" = 0 ] && rm -f "$PIDFILE"
-
- return "$ret"
- else
- # Unsupported
- return 3
- fi
-
- return 0
-}
-
-# Returns status
-zfs_daemon_status()
-{
- local PIDFILE="$1"
- local DAEMON_BIN="$2"
- local DAEMON_NAME="$3"
-
- if type status_of_proc > /dev/null 2>&1 ; then
- # LSB functions
- status_of_proc "$DAEMON_NAME" "$DAEMON_BIN"
- return $?
- elif type status > /dev/null 2>&1 ; then
- # Fedora/RedHat functions
- status -p "$PIDFILE" "$DAEMON_NAME"
- return $?
- else
- # Unsupported
- return 3
- fi
-
- return 0
-}
-
-zfs_daemon_reload()
-{
- local PIDFILE="$1"
- local DAEMON_NAME="$2"
-
- if type start-stop-daemon > /dev/null 2>&1 ; then
- # LSB functions
- start-stop-daemon --stop --signal 1 --quiet \
- --pidfile "$PIDFILE" --name "$DAEMON_NAME"
- return $?
- elif type killproc > /dev/null 2>&1 ; then
- # Fedora/RedHat functions
- killproc -p "$PIDFILE" "$DAEMON_NAME" -HUP
- return $?
- else
- # Unsupported
- return 3
- fi
-
- return 0
-}
-
-zfs_installed()
-{
- if [ ! -x "$ZPOOL" ]; then
- return 1
- else
- # Test if it works (will catch missing/broken libs etc)
- "$ZPOOL" -? > /dev/null 2>&1
- return $?
- fi
-
- if [ ! -x "$ZFS" ]; then
- return 2
- else
- # Test if it works (will catch missing/broken libs etc)
- "$ZFS" -? > /dev/null 2>&1
- return $?
- fi
-
- return 0
-}
-
-# Trigger udev and wait for it to settle.
-udev_trigger()
-{
- if [ -x /sbin/udevadm ]; then
- /sbin/udevadm trigger --action=change --subsystem-match=block
- /sbin/udevadm settle
- elif [ -x /sbin/udevsettle ]; then
- /sbin/udevtrigger
- /sbin/udevsettle
- fi
-}
-
-# Do a lot of checks to make sure it's 'safe' to continue with the import.
-checksystem()
-{
- if grep -qiE '(^|[^\\](\\\\)* )zfs=(off|no|0)( |$)' /proc/cmdline;
- then
- # Called with zfs=(off|no|0) - bail because we don't
- # want anything import, mounted or shared.
- # HOWEVER, only do this if we're called at the boot up
- # (from init), not if we're running interactively (as in
- # from the shell - we know what we're doing).
- # shellcheck disable=SC2154
- [ -n "$init" ] && exit 3
- fi
-
- # Check if ZFS is installed.
- zfs_installed || return 5
-
- # Just make sure that /dev/zfs is created.
- udev_trigger
-
- return 0
-}
-
-get_root_pool()
-{
- # shellcheck disable=SC2046
- set -- $(mount | grep ' on / ')
- [ "$5" = "zfs" ] && echo "${1%%/*}"
-}
-
-# Check if a variable is 'yes' (any case) or '1'
-# Returns TRUE if set.
-check_boolean()
-{
- local var="$1"
-
- echo "$var" | grep -Eiq "^yes$|^on$|^true$|^1$" && return 0 || return 1
-}
-
-check_module_loaded()
-{
- module="$1"
-
- [ -r "/sys/module/${module}/version" ] && return 0 || return 1
-}
-
-load_module()
-{
- module="$1"
-
- # Load the zfs module stack
- if ! check_module_loaded "$module"; then
- if ! /sbin/modprobe "$module"; then
- return 5
- fi
- fi
- return 0
-}
-
-# first parameter is a regular expression that filters mtab
-read_mtab()
-{
- local match="$1"
- local fs mntpnt fstype opts rest
-
- # Unset all MTAB_* variables
- # shellcheck disable=SC2046
- unset $(env | sed -e '/^MTAB_/!d' -e 's,=.*,,')
-
- while read -r fs mntpnt fstype opts rest; do
- if echo "$fs $mntpnt $fstype $opts" | grep -qE "$match"; then
- # * Fix problems (!?) in the mounts file. It will record
- # 'rpool 1' as 'rpool\0401' instead of 'rpool\00401'
- # which seems to be the correct (at least as far as
- # 'printf' is concerned).
- # * We need to use the external echo, because the
- # internal one would interpret the backslash code
- # (incorrectly), giving us a  instead.
- mntpnt=$(/bin/echo "$mntpnt" | sed 's,\\0,\\00,g')
- fs=$(/bin/echo "$fs" | sed 's,\\0,\\00,')
-
- # Remove 'unwanted' characters.
- mntpnt=$(printf '%b' "$mntpnt" | tr -d '/. -')
- fs=$(printf '%b' "$fs")
-
- # Set the variable.
- eval export "MTAB_$mntpnt=\"$fs\""
- fi
- done < /proc/self/mounts
-}
-
-in_mtab()
-{
- local mntpnt="$1"
- # Remove 'unwanted' characters.
- mntpnt=$(printf '%b' "$mntpnt" | tr -d '/. -')
- local var
-
- var="$(eval echo "MTAB_$mntpnt")"
- [ "$(eval echo "$""$var")" != "" ]
- return "$?"
-}
-
-# first parameter is a regular expression that filters fstab
-read_fstab()
-{
- local match="$1"
- local i var
-
- # Unset all FSTAB_* variables
- # shellcheck disable=SC2046
- unset $(env | sed -e '/^FSTAB_/!d' -e 's,=.*,,')
-
- i=0
- while read -r fs mntpnt fstype opts; do
- echo "$fs" | grep -qE '^#|^$' && continue
- echo "$mntpnt" | grep -qE '^none|^swap' && continue
- echo "$fstype" | grep -qE '^swap' && continue
-
- if echo "$fs $mntpnt $fstype $opts" | grep -qE "$match"; then
- eval export "FSTAB_dev_$i=$fs"
- fs=$(printf '%b' "$fs" | tr '/' '_')
- eval export "FSTAB_$i=$mntpnt"
-
- i=$((i + 1))
- fi
- done < /etc/fstab
-}
-
-in_fstab()
-{
- local var
-
- var="$(eval echo "FSTAB_$1")"
- [ "${var}" != "" ]
- return $?
-}
-
-is_mounted()
-{
- local mntpt="$1"
- local mp
-
- while read -r _ mp _; do
- [ "$mp" = "$mntpt" ] && return 0
- done < /proc/self/mounts
-
- return 1
-}