aboutsummaryrefslogtreecommitdiffstats
path: root/filesystems/nbd-client-kmod/files
diff options
context:
space:
mode:
authorLexi Winter <ivy@FreeBSD.org>2025-12-01 03:19:41 +0000
committerLexi Winter <ivy@FreeBSD.org>2025-12-01 03:19:41 +0000
commit2e80774d0b20d167bc0a9e2b63dafbfb171c0d22 (patch)
tree25f0138e1af8902b92dacc8cce09b267447c17db /filesystems/nbd-client-kmod/files
parentf85f2b2d6e5b7ed869376eb4b180c3a74a5c5da9 (diff)
parent1a30da80670973368b399f2b01fe9c04b91a1273 (diff)
Merge remote-tracking branch 'freebsd/main' into lf/mainlf/main
Diffstat (limited to 'filesystems/nbd-client-kmod/files')
-rw-r--r--filesystems/nbd-client-kmod/files/gnbd-bin.in3
-rwxr-xr-xfilesystems/nbd-client-kmod/files/gnbd.in174
-rw-r--r--filesystems/nbd-client-kmod/files/patch-lib_Makefile12
3 files changed, 189 insertions, 0 deletions
diff --git a/filesystems/nbd-client-kmod/files/gnbd-bin.in b/filesystems/nbd-client-kmod/files/gnbd-bin.in
new file mode 100644
index 000000000000..94d021b26b05
--- /dev/null
+++ b/filesystems/nbd-client-kmod/files/gnbd-bin.in
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+exec env GEOM_LIBRARY_PATH="%%LOCALBASE%%/lib/geom" /sbin/geom nbd "$@"
diff --git a/filesystems/nbd-client-kmod/files/gnbd.in b/filesystems/nbd-client-kmod/files/gnbd.in
new file mode 100755
index 000000000000..bf54610c7437
--- /dev/null
+++ b/filesystems/nbd-client-kmod/files/gnbd.in
@@ -0,0 +1,174 @@
+#!/bin/sh
+
+# PROVIDE: gnbd
+# REQUIRE: NETWORKING
+#
+# Configuration settings for gnbd in /etc/rc.conf:
+#
+# gnbd_enable (bool): Enable gnbd. (default=NO)
+# gnbd_devices (list): List of devices.
+# gnbd_<device>_host (str): Required. Host to connect to.
+# gnbd_<device>_conns (int): Use this many parallel connections.
+# gnbd_<device>_port (int): Port to connect to.
+# gnbd_<device>_exportname (str): Connect to the named export.
+# gnbd_<device>_cacert (str): Verify TLS connections against the PEM-formatted
+# CA certificate at the given path.
+# gnbd_<device>_cert (str): Make a TLS connection using the PEM-formatted
+# client certificate at the given path.
+# gnbd_<device>_key (str): Make a TLS connection using the PEM-formatted
+# client key at the given path.
+# gnbd_<device>_waitsec (int): Retry until connections are re-established, waiting
+# this many seconds between successive retries.
+#
+# Commands for gnbd:
+#
+# start: Connect to <device>.
+# stop: Disconnect from <device>.
+# restart: Reconnect to <device>.
+# Tip: Use the devd.conf(5) file included with this port.
+# status: Get status of each <device>.
+#
+# Examples:
+#
+# service gnbd start - Connect to all devices.
+# service gnbd stop - Disconnect from all devices.
+# service gnbd start <device> - Connect to a specific device.
+
+. /etc/rc.subr
+
+name="gnbd"
+desc="NBD client for FreeBSD GEOM framework"
+rcvar="${name}_enable"
+start_precmd="gnbd_prestart"
+start_cmd="gnbd_start"
+stop_cmd="gnbd_stop"
+restart_cmd="gnbd_restart"
+status_cmd="gnbd_status"
+gnbd_bin="%%PREFIX%%/sbin/${name}"
+
+load_rc_config $name
+
+: ${gnbd_enable:="NO"}
+
+gnbd_prestart()
+{
+ ${gnbd_bin} load
+}
+
+gnbd_start()
+{
+ local device="$1"
+
+ local host conns port exportname cacert cert key
+ local var
+
+ for var in host conns port exportname cacert cert key; do
+ eval ${var}="\${gnbd_${device}_${var}}"
+
+ local value
+
+ eval value="\$${var}"
+
+ if [ -n "${value}" ]; then
+ debug "${var}=${value}"
+ fi
+ done
+
+ if [ -z "${host}" ]; then
+ echo "gnbd_${device}_host: host is not configured, ignoring this device..."
+ return 1
+ fi
+
+ local gnbd_args=
+
+ if [ -n "${conns}" ]; then
+ gnbd_args="-c ${conns}"
+ fi
+
+ if [ -n "${port}" ]; then
+ gnbd_args="${gnbd_args} -p ${port}"
+ fi
+
+ if [ -n "${exportname}" ]; then
+ gnbd_args="${gnbd_args} -n \"${exportname}\""
+ fi
+
+ if [ -n "${cacert}" ]; then
+ gnbd_args="${gnbd_args} -A \"${cacert}\""
+ fi
+
+ if [ -n "${cert}" ]; then
+ gnbd_args="${gnbd_args} -C \"${cert}\""
+ fi
+
+ if [ -n "${key}" ]; then
+ gnbd_args="${gnbd_args} -K \"${key}\""
+ fi
+
+ if [ -n "${gnbd_args}" ]; then
+ debug "gnbd args: ${gnbd_args}"
+ fi
+
+ if [ ! -c "/dev/${device}" ]; then
+ eval ${gnbd_bin} connect ${gnbd_args} ${host}
+ fi
+}
+
+gnbd_stop()
+{
+ local device="$1"
+
+ if [ -c "/dev/${device}" ]; then
+ ${gnbd_bin} disconnect ${device}
+ fi
+}
+
+gnbd_restart()
+{
+ local device="$1"
+
+ local waitsec
+
+ eval waitsec="\${gnbd_${device}_waitsec}"
+
+ local gnbd_args=
+
+ if [ -n "${waitsec}" ]; then
+ gnbd_args="-r ${waitsec}"
+
+ debug "waitsec=${waitsec}"
+ fi
+
+ if [ -n "${gnbd_args}" ]; then
+ debug "gnbd args: ${gnbd_args}"
+ fi
+
+ eval ${gnbd_bin} reconnect ${gnbd_args} ${device}
+}
+
+gnbd_status()
+{
+ local device="$1"
+
+ if [ -c "/dev/${device}" ]; then
+ ${gnbd_bin} status -s "${device}"
+ fi
+}
+
+cmd="$1"
+
+if [ $# -gt 0 ]; then
+ shift
+fi
+
+if [ -n "$1" ]; then
+ gnbd_devices="$1"
+fi
+
+if [ -z "${gnbd_devices}" ]; then
+ warn "No devices are configured, configure one to make this rc script useful!"
+fi
+
+for device in ${gnbd_devices}; do
+ run_rc_command "${cmd}" "${device}"
+done
diff --git a/filesystems/nbd-client-kmod/files/patch-lib_Makefile b/filesystems/nbd-client-kmod/files/patch-lib_Makefile
new file mode 100644
index 000000000000..72ec380c46c4
--- /dev/null
+++ b/filesystems/nbd-client-kmod/files/patch-lib_Makefile
@@ -0,0 +1,12 @@
+--- lib/Makefile.orig 2025-10-14 17:24:26 UTC
++++ lib/Makefile
+@@ -21,9 +21,6 @@ LDADD+= -lssl -lcrypto
+ LDADD+= -lssl -lcrypto
+ #.endif
+
+-# Not needed when in tree
+-LINKS= /sbin/geom /sbin/gnbd
+-
+ .PATH: ${SRCTOP}/sbin/geom/misc
+
+ .include <bsd.lib.mk>