diff options
Diffstat (limited to 'filesystems/nbd-client-kmod')
| -rw-r--r-- | filesystems/nbd-client-kmod/Makefile | 36 | ||||
| -rw-r--r-- | filesystems/nbd-client-kmod/distinfo | 3 | ||||
| -rw-r--r-- | filesystems/nbd-client-kmod/files/gnbd-bin.in | 3 | ||||
| -rwxr-xr-x | filesystems/nbd-client-kmod/files/gnbd.in | 174 | ||||
| -rw-r--r-- | filesystems/nbd-client-kmod/files/patch-lib_Makefile | 12 | ||||
| -rw-r--r-- | filesystems/nbd-client-kmod/pkg-descr | 5 | ||||
| -rw-r--r-- | filesystems/nbd-client-kmod/pkg-plist | 5 |
7 files changed, 238 insertions, 0 deletions
diff --git a/filesystems/nbd-client-kmod/Makefile b/filesystems/nbd-client-kmod/Makefile new file mode 100644 index 000000000000..22fa6868384c --- /dev/null +++ b/filesystems/nbd-client-kmod/Makefile @@ -0,0 +1,36 @@ +PORTNAME= nbd-client +DISTVERSION= g20251120 +CATEGORIES= filesystems +PKGNAMESUFFIX= -kmod + +MAINTAINER= dtxdf@FreeBSD.org +COMMENT= Kernel NBD client for FreeBSD GEOM framework +WWW= https://github.com/ryan-moeller/kernel-nbd-client + +LICENSE= BSD2CLAUSE +LICENSE_FILE= ${WRKSRC}/LICENSE + +BROKEN_i386= format specifies type 'unsigned long' but the argument has type 'uint64_t' (aka 'unsigned long long') + +ONLY_FOR_ARCHS= amd64 + +USES= kmod ssl uidfix +USE_GITHUB= yes +GH_ACCOUNT= ryan-moeller +GH_PROJECT= kernel-nbd-client +GH_TAGNAME= 7ab975351a15301fab5d7bbc1cbe83f12c39acbb +USE_RC_SUBR= gnbd + +MAKE_ENV= GEOM_CLASS_DIR="${PREFIX}/lib/geom" \ + MANDIR="${PREFIX}/share/man/man" + +SUB_FILES= gnbd-bin + +pre-install: + @${MKDIR} ${STAGEDIR}${PREFIX}/lib/geom + +post-install: + ${INSTALL_SCRIPT} ${WRKDIR}/gnbd-bin ${STAGEDIR}${PREFIX}/sbin/gnbd + ${INSTALL_DATA} ${WRKSRC}/devd.conf.sample ${STAGEDIR}${PREFIX}/etc/devd/${PORTNAME}.conf.sample + +.include <bsd.port.mk> diff --git a/filesystems/nbd-client-kmod/distinfo b/filesystems/nbd-client-kmod/distinfo new file mode 100644 index 000000000000..ed7fba9c8e04 --- /dev/null +++ b/filesystems/nbd-client-kmod/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1763853271 +SHA256 (ryan-moeller-kernel-nbd-client-g20251120-7ab975351a15301fab5d7bbc1cbe83f12c39acbb_GH0.tar.gz) = df9eb355b40e6701e26eb2cc78928c68f31ca819aba4a9b4dc42d2d63bb8ec7d +SIZE (ryan-moeller-kernel-nbd-client-g20251120-7ab975351a15301fab5d7bbc1cbe83f12c39acbb_GH0.tar.gz) = 39789 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> diff --git a/filesystems/nbd-client-kmod/pkg-descr b/filesystems/nbd-client-kmod/pkg-descr new file mode 100644 index 000000000000..199e3750eea1 --- /dev/null +++ b/filesystems/nbd-client-kmod/pkg-descr @@ -0,0 +1,5 @@ +FreeBSD Geom NBD Client is a Network Block Device (NBD) client for +the FreeBSD kernel GEOM framework. + +The project consists of a kernel driver for the NBD GEOM class in +mod/ and a user library for the geom(8) control utility in lib/. diff --git a/filesystems/nbd-client-kmod/pkg-plist b/filesystems/nbd-client-kmod/pkg-plist new file mode 100644 index 000000000000..6467c9b1e620 --- /dev/null +++ b/filesystems/nbd-client-kmod/pkg-plist @@ -0,0 +1,5 @@ +/%%KMODDIR%%/geom_nbd.ko +lib/geom/geom_nbd.so +share/man/man8/gnbd.8.gz +sbin/gnbd +@sample etc/devd/nbd-client.conf.sample |
