git: b1a8f824cc1c - main - sysutils/swtpm: Add rc script

From: Muhammad Moinur Rahman <bofh_at_FreeBSD.org>
Date: Wed, 15 Nov 2023 11:54:26 UTC
The branch main has been updated by bofh:

URL: https://cgit.FreeBSD.org/ports/commit/?id=b1a8f824cc1c3a7e3ce0870509ef38d715f53c52

commit b1a8f824cc1c3a7e3ce0870509ef38d715f53c52
Author:     Goran Mekić <meka@tilda.center>
AuthorDate: 2023-11-15 11:52:26 +0000
Commit:     Muhammad Moinur Rahman <bofh@FreeBSD.org>
CommitDate: 2023-11-15 11:54:07 +0000

    sysutils/swtpm: Add rc script
    
    - Pet portclippy while I am here
    
    PR:             274786
    Approved by:    submitter is maintainer
---
 sysutils/swtpm/Makefile       |  16 +++---
 sysutils/swtpm/files/swtpm.in | 120 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 130 insertions(+), 6 deletions(-)

diff --git a/sysutils/swtpm/Makefile b/sysutils/swtpm/Makefile
index f5081098617d..d0bb04eaeafd 100644
--- a/sysutils/swtpm/Makefile
+++ b/sysutils/swtpm/Makefile
@@ -1,6 +1,7 @@
 PORTNAME=	swtpm
 DISTVERSIONPREFIX=	v
 DISTVERSION=	0.8.1
+PORTREVISION=	1
 CATEGORIES=	sysutils
 
 MAINTAINER=	meka@tilda.center
@@ -10,23 +11,26 @@ WWW=		https://github.com/stefanberger/swtpm
 LICENSE=	BSD3CLAUSE
 LICENSE_FILE=	${WRKSRC}/LICENSE
 
-LIB_DEPENDS=	libfuse.so:sysutils/fusefs-libs \
-		libgnutls.so:security/gnutls \
-		libjson-glib-1.0.so:devel/json-glib \
-		libtasn1.so:security/libtasn1 \
-		libtpms.so:sysutils/libtpms
 BUILD_DEPENDS=	base64>=0:converters/base64 \
 		bash>=0:shells/bash \
 		expect>=0:lang/expect \
 		gawk>=0:lang/gawk \
 		socat>=0:net/socat
+LIB_DEPENDS=	libfuse.so:sysutils/fusefs-libs \
+		libgnutls.so:security/gnutls \
+		libjson-glib-1.0.so:devel/json-glib \
+		libtasn1.so:security/libtasn1 \
+		libtpms.so:sysutils/libtpms
 
 USES=		autoreconf gettext-runtime gmake gnome libtool pathfix \
 		pkgconfig ssl
-USE_GNOME+=	glib20
 USE_GITHUB=	yes
 GH_ACCOUNT=	stefanberger
+USE_GNOME+=	glib20
+USE_RC_SUBR=	swtpm
+
 GNU_CONFIGURE=	yes
+
 INSTALL_TARGET=	install-strip
 
 .include <bsd.port.mk>
diff --git a/sysutils/swtpm/files/swtpm.in b/sysutils/swtpm/files/swtpm.in
new file mode 100644
index 000000000000..83ab0eec2a37
--- /dev/null
+++ b/sysutils/swtpm/files/swtpm.in
@@ -0,0 +1,120 @@
+#!/bin/sh
+
+# PROVIDE: swtpm
+# KEYWORD: shutdown
+
+#
+# Add the following lines to /etc/rc.conf.local, /etc/rc.conf or
+# /etc/rc.conf.d/swtpm to enable this service:
+#
+# swtpm_enable (bool):    Set to NO by default.
+#                               Set it to "YES" to enable swtpm.
+# swtpm_configs (string): List of configurations to use
+#                               Default is "tpm"
+# swtpm_tpm (string):     Arguments passed to swtpm config named tpm
+
+. /etc/rc.subr
+
+name=swtpm
+desc="Software TPM manager"
+rcvar=${name}_enable
+start_precmd="${name}_precmd"
+start_cmd="${name}_start"
+stop_cmd="${name}_stop"
+status_cmd="${name}_status"
+
+command="%%PREFIX%%/bin/swtpm"
+command_args="socket"
+pidpath="/var/run/${name}"
+
+# required_modules="cuse"
+swtpm_default_args="\
+  --daemon \
+  --tpmstate dir=${pidpath} \
+  --tpm2 \
+  --log level=20"
+configs=
+
+load_rc_config $name
+
+: ${swtpm_enable:="NO"}
+: ${swtpm_configs:="tpm"}
+: ${swtpm_tpm:="$swtpm_default_args"}
+
+swtpm_pids()
+{
+  pids=$(pgrep -d ' ' $name)
+  pids=${pids% }
+  printf "${pids}"
+}
+
+swtpm_precmd()
+{
+  /usr/bin/install -d -m 0755 -o root ${pidpath}
+}
+
+start_instance()
+{
+  config=$*
+  instance_args=$(eval "echo \$swtpm_${config}")
+  if [ -z "${instance_args}" ]; then
+    echo "No such config ${config}"
+  else
+    echo -n "Starting SWTPM config ${config} ..."
+    ${command} \
+      ${command_args} \
+      --pid file=${pidpath}/${config}.pid \
+      --ctrl type=unixio,path=${pidpath}/${config} \
+      ${instance_args}
+    echo " done"
+  fi
+}
+
+stop_instance()
+{
+  config=$*
+  instance_args=`eval "echo \$swtpm_${config}"`
+  if [ -z "${instance_args}" ]; then
+    echo "No such config ${config}"
+  elif [ -e "${pidpath}/${config}.pid" ]; then
+    pid=$(check_pidfile ${pidpath}/${config}.pid %%PREFIX%%/bin/swtpm)
+    if [ ! -z "${pid}" ]; then
+      echo -n "Stopping SWTPM config ${config} ... "
+      kill $pid
+      rm -f ${pidpath}/${config}.pid
+      echo "done"
+    fi
+  fi
+}
+
+swtpm_start()
+{
+  configs=$*
+  [ -z "${configs}" ] && configs="${swtpm_configs}"
+  for config in ${configs}; do
+    start_instance $config
+  done
+}
+
+swtpm_stop()
+{
+  configs=$*
+  [ -z "${configs}" ] && configs="${swtpm_configs}"
+  for config in ${configs}; do
+    stop_instance ${config}
+  done
+}
+
+swtpm_status()
+{
+  pids=$(swtpm_pids)
+
+  if [ "${pids}" ]; then
+    echo "${name} is running as pid ${pids}."
+  else
+    echo "${name} is not running."
+    return 1
+  fi
+}
+
+run_rc_command $*