diff options
Diffstat (limited to 'filesystems/nbd-client-kmod')
| -rw-r--r-- | filesystems/nbd-client-kmod/Makefile | 13 | ||||
| -rw-r--r-- | filesystems/nbd-client-kmod/distinfo | 6 | ||||
| -rw-r--r-- | filesystems/nbd-client-kmod/files/gnbd-bin.in | 3 | ||||
| -rwxr-xr-x[-rw-r--r--] | filesystems/nbd-client-kmod/files/gnbd.in | 173 |
4 files changed, 187 insertions, 8 deletions
diff --git a/filesystems/nbd-client-kmod/Makefile b/filesystems/nbd-client-kmod/Makefile index 27d78925a28d..5e4091b0a6b4 100644 --- a/filesystems/nbd-client-kmod/Makefile +++ b/filesystems/nbd-client-kmod/Makefile @@ -1,5 +1,5 @@ PORTNAME= nbd-client -DISTVERSION= g20250928 +DISTVERSION= g20251024 CATEGORIES= filesystems PKGNAMESUFFIX= -kmod @@ -10,22 +10,27 @@ 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= df0528162deffaabaae4365394b4b6e75ff3fcaf +GH_TAGNAME= ad543b462714b978f47a278a94a404d41b7ccf38 +USE_RC_SUBR= gnbd MAKE_ENV= GEOM_CLASS_DIR="${PREFIX}/lib/geom" \ MANDIR="${PREFIX}/share/man/man" -SUB_FILES= gnbd +SUB_FILES= gnbd-bin pre-install: @${MKDIR} ${STAGEDIR}${PREFIX}/lib/geom post-install: - ${INSTALL_SCRIPT} ${WRKDIR}/gnbd ${STAGEDIR}${PREFIX}/sbin/gnbd + ${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 index 8d781e318f51..e3fe12731825 100644 --- a/filesystems/nbd-client-kmod/distinfo +++ b/filesystems/nbd-client-kmod/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1760457302 -SHA256 (ryan-moeller-kernel-nbd-client-g20250928-df0528162deffaabaae4365394b4b6e75ff3fcaf_GH0.tar.gz) = 9e6b66d41ae86c5eb52f9cb835b7517775d2a58a0523d7617ff55d91384f792f -SIZE (ryan-moeller-kernel-nbd-client-g20250928-df0528162deffaabaae4365394b4b6e75ff3fcaf_GH0.tar.gz) = 39296 +TIMESTAMP = 1761347192 +SHA256 (ryan-moeller-kernel-nbd-client-g20251024-ad543b462714b978f47a278a94a404d41b7ccf38_GH0.tar.gz) = a9521671e6a9b5f23842150bb8766c6b747f199e1714a659d502cbe1aeb5788f +SIZE (ryan-moeller-kernel-nbd-client-g20251024-ad543b462714b978f47a278a94a404d41b7ccf38_GH0.tar.gz) = 39480 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 index 94d021b26b05..bf54610c7437 100644..100755 --- a/filesystems/nbd-client-kmod/files/gnbd.in +++ b/filesystems/nbd-client-kmod/files/gnbd.in @@ -1,3 +1,174 @@ #!/bin/sh -exec env GEOM_LIBRARY_PATH="%%LOCALBASE%%/lib/geom" /sbin/geom nbd "$@" +# 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 |
