summaryrefslogtreecommitdiff
path: root/net/nbdkit/files/nbdkit.in
diff options
context:
space:
mode:
Diffstat (limited to 'net/nbdkit/files/nbdkit.in')
-rw-r--r--net/nbdkit/files/nbdkit.in136
1 files changed, 136 insertions, 0 deletions
diff --git a/net/nbdkit/files/nbdkit.in b/net/nbdkit/files/nbdkit.in
new file mode 100644
index 000000000000..3adcbb0e772f
--- /dev/null
+++ b/net/nbdkit/files/nbdkit.in
@@ -0,0 +1,136 @@
+#!/bin/sh
+
+# PROVIDE: nbdkit
+# REQUIRE: NETWORKING
+#
+# Configuration settings for nbdkit in /etc/rc.conf:
+#
+# nbdkit_enable (bool): Enable nbdkit. (default=NO)
+# nbdkit_flags (str): Arguments used by all profiles.
+# nbdkit_profiles (list): Profiles.
+# nbdkit_<profile>_flags (str): Per profile arguments.
+
+. /etc/rc.subr
+
+name="nbdkit"
+desc="Network Block Device server toolkit with stable ABI and permissive license"
+rcvar="${name}_enable"
+start_precmd="nbdkit_prestart"
+start_cmd="nbdkit_start"
+stop_cmd="nbdkit_stop"
+restart_cmd="nbdkit_restart"
+status_cmd="nbdkit_status"
+nbdkit_bin="%%PREFIX%%/sbin/${name}"
+sig_stop=SIGTERM
+pid_directory="/var/run/${name}"
+
+load_rc_config $name
+
+: ${nbdkit_enable:="NO"}
+
+nbdkit_check_pidfile()
+{
+ local profile
+ profile="$1"
+
+ local pidfile
+ pidfile="${pid_directory}/${profile}.pid"
+
+ local rc_pid
+ rc_pid=$(check_pidfile "${pidfile}" "${nbdkit_bin}")
+
+ echo "${rc_pid}"
+}
+
+nbdkit_prestart()
+{
+ if [ ! -d "${pid_directory}" ]; then
+ mkdir -p -- "${pid_directory}"
+ fi
+}
+
+nbdkit_start()
+{
+ local profile
+ profile="$1"
+
+ local rc_pid
+ rc_pid=$(nbdkit_check_pidfile "${profile}")
+
+ if [ -n "${rc_pid}" ]; then
+ echo 1>&2 "nbdkit profile '${profile}' already running? (pid=${rc_pid})"
+ return 1
+ fi
+
+ startmsg "Starting nbdkit profile '${profile}'."
+
+ local flags
+
+ eval flags="\${nbdkit_${profile}_flags}"
+
+ local pidfile
+ pidfile="${pid_directory}/${profile}.pid"
+
+ eval "${nbdkit_bin}" --pidfile "${pidfile}" ${nbdkit_flags} ${flags}
+}
+
+nbdkit_stop()
+{
+ local profile
+ profile="$1"
+
+ local rc_pid
+ rc_pid=$(nbdkit_check_pidfile "${profile}")
+
+ local pidfile
+ pidfile="${pid_directory}/${profile}.pid"
+
+ if [ -z "${rc_pid}" ]; then
+ echo 1>&2 "nbdkit profile '${profile}' not running? (check ${pidfile})"
+ return 1
+ fi
+
+ echo "Stopping nbdkit profile '${profile}'."
+
+ kill -${sig_stop} "${rc_pid}"
+ wait_for_pids "${rc_pid}"
+}
+
+nbdkit_restart()
+{
+ nbdkit_stop "$1"
+ nbdkit_start "$1"
+}
+
+nbdkit_status()
+{
+ local profile
+ profile="$1"
+
+ local rc_pid
+ rc_pid=$(nbdkit_check_pidfile "${profile}")
+
+ if [ -n "${rc_pid}" ]; then
+ echo "nbdkit profile '${profile}' is running as pid ${rc_pid}"
+ else
+ echo "nbdkit profile '${profile}' is not running."
+ fi
+}
+
+cmd="$1"
+
+if [ $# -gt 0 ]; then
+ shift
+fi
+
+if [ -n "$1" ]; then
+ nbdkit_profiles="$1"
+fi
+
+if [ -z "${nbdkit_profiles}" ]; then
+ warn "No profiles are configured, configure one to make this rc script useful!"
+fi
+
+for profile in ${nbdkit_profiles}; do
+ run_rc_command "${cmd}" "${profile}"
+done