git: 7047c75f9472 - main - net-mgmt/unifi8: Add new port

From: Juraj Lutter <otis_at_FreeBSD.org>
Date: Tue, 21 Nov 2023 13:10:57 UTC
The branch main has been updated by otis:

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

commit 7047c75f9472714adf97183371f22c57c0ddcdc5
Author:     Juraj Lutter <otis@FreeBSD.org>
AuthorDate: 2023-11-21 13:06:59 +0000
Commit:     Juraj Lutter <otis@FreeBSD.org>
CommitDate: 2023-11-21 13:10:32 +0000

    net-mgmt/unifi8: Add new port
    
    Add unifi network application version 8.0.7.
    
    Release notes: https://community.ui.com/releases/r/network/8.0.7
---
 net-mgmt/Makefile                          |  1 +
 net-mgmt/unifi8/Makefile                   | 98 ++++++++++++++++++++++++++++++
 net-mgmt/unifi8/distinfo                   |  5 ++
 net-mgmt/unifi8/files/pkg-message.extdb.in | 19 ++++++
 net-mgmt/unifi8/files/unifi.in             | 89 +++++++++++++++++++++++++++
 net-mgmt/unifi8/pkg-descr                  |  2 +
 6 files changed, 214 insertions(+)

diff --git a/net-mgmt/Makefile b/net-mgmt/Makefile
index 1a5f608f4f53..38163d7ef545 100644
--- a/net-mgmt/Makefile
+++ b/net-mgmt/Makefile
@@ -395,6 +395,7 @@
     SUBDIR += triton-guesttools
     SUBDIR += unbound_exporter
     SUBDIR += unifi7
+    SUBDIR += unifi8
     SUBDIR += victoria-metrics
     SUBDIR += virt-viewer
     SUBDIR += vmutils
diff --git a/net-mgmt/unifi8/Makefile b/net-mgmt/unifi8/Makefile
new file mode 100644
index 000000000000..f8fb7fd01904
--- /dev/null
+++ b/net-mgmt/unifi8/Makefile
@@ -0,0 +1,98 @@
+PORTNAME=	unifi8
+PORTVERSION=	8.0.7
+CATEGORIES=	net-mgmt java
+MASTER_SITES=	http://dl.ubnt.com/unifi/%SUBDIR%/:unifi \
+		https://repo1.maven.org/maven2/%SUBDIR%/:jax
+MASTER_SITE_SUBDIR=	${PORTVERSION}/:unifi \
+			javax/activation/${_JAX_DISTNAME}/${_JAX_VERSION}/:jax
+DISTFILES=	unifi_sysvinit_all.deb:unifi \
+		${_JAX_DISTNAME}-${_JAX_VERSION}.jar:jax
+DIST_SUBDIR=	${PORTNAME}-${PORTVERSION}
+EXTRACT_ONLY=	unifi_sysvinit_all.deb
+
+MAINTAINER=	otis@FreeBSD.org
+COMMENT=	UniFi Controller v8
+WWW=		https://help.ui.com/hc/en-us/categories/200320654-UniFi-Wireless
+
+RUN_DEPENDS=	snappyjava>0:archivers/snappy-java
+
+FLAVORS=	default externaldb
+FLAVOR?=	${FLAVORS:[1]}
+
+externaldb_PKGNAMESUFFIX=	-externaldb
+
+USES=		cpe
+
+CPE_VENDOR=	ui
+CPE_PRODUCT=	unifi_controller
+USE_JAVA=	yes
+JAVA_VERSION=	17
+JAVA_RUN=	jre
+USE_RC_SUBR=	unifi
+
+CONFLICTS_INSTALL=	unifi7
+
+EXTRACT_CMD=	${AR}
+EXTRACT_BEFORE_ARGS=	-p
+EXTRACT_AFTER_ARGS=	data.tar.xz | ${TAR} -xf -
+
+NO_ARCH=	yes
+NO_BUILD=	yes
+
+SUB_FILES=	pkg-message
+SUB_LIST+=	GROUPS=${GROUPS} \
+		JAVA=${JAVA} \
+		JAVA_HOME=${JAVA_HOME} \
+		JAVASHAREDIR=${JAVASHAREDIR} \
+		USERS=${USERS}
+
+NO_WRKSUBDIR=	yes
+
+USERS=		unifi
+GROUPS=		unifi
+
+OPTIONS_DEFINE=	EXTERNALDB
+
+.if ${FLAVOR:U} == externaldb
+OPTIONS_DEFAULT+=	EXTERNALDB
+.endif
+
+EXTERNALDB_DESC=	Use external MongoDB server
+EXTERNALDB_VARS=	PKGMESSAGE+=${WRKSRC}/pkg-message.extdb \
+			SUB_FILES+=pkg-message.extdb
+EXTERNALDB_VARS_OFF=	RUN_DEPENDS+=mongodb44>0:databases/mongodb44
+
+_DIR_LIST=	conf data logs run work
+_JAX_DISTNAME=	javax.activation-api
+_JAX_VERSION=	1.2.0
+
+post-extract:
+	${INSTALL_DATA} ${DISTDIR}/${DIST_SUBDIR}/${_JAX_DISTNAME}-${_JAX_VERSION}.jar \
+		${WRKSRC}/usr/lib/unifi/lib/
+
+post-patch:
+	(cd ${WRKSRC}/usr/lib/unifi/lib && \
+		${LN} -f -s ${JAVAJARDIR}/snappy-java.jar snappy-java-*.jar)
+	${RM} -r ${WRKSRC}/usr/lib/unifi/lib/native
+
+do-install:
+	${MKDIR} ${STAGEDIR}${JAVASHAREDIR}/unifi
+	(cd ${WRKSRC}/usr/lib/unifi && \
+		${COPYTREE_SHARE} \* ${STAGEDIR}${JAVASHAREDIR}/unifi/)
+# Create directories that will be writable by unifi
+.for i in data logs run work
+	${MKDIR} ${STAGEDIR}/${JAVASHAREDIR}/unifi/${i}
+.endfor
+
+do-install-EXTERNALDB-off:
+	${LN} -sf ${PREFIX}/bin/mongod ${STAGEDIR}${JAVASHAREDIR}/unifi/bin/mongod
+
+post-install:
+	@${FIND} -s ${STAGEDIR}${JAVASHAREDIR}/unifi -not -type d | \
+		${SORT} | ${SED} -e 's#^${STAGEDIR}${PREFIX}/##' >> ${TMPPLIST}
+.for dir in ${_DIR_LIST}
+	@${ECHO} "@dir(unifi,wheel,) ${JAVASHAREDIR}/unifi/${dir}" >> \
+		${TMPPLIST}
+.endfor
+
+.include <bsd.port.mk>
diff --git a/net-mgmt/unifi8/distinfo b/net-mgmt/unifi8/distinfo
new file mode 100644
index 000000000000..12276528e91b
--- /dev/null
+++ b/net-mgmt/unifi8/distinfo
@@ -0,0 +1,5 @@
+TIMESTAMP = 1700570453
+SHA256 (unifi8-8.0.7/unifi_sysvinit_all.deb) = 4221d7a0f8ce66c58a4f71b70ba6f32e16310429d3fe8165bf0f47bbdb6401a6
+SIZE (unifi8-8.0.7/unifi_sysvinit_all.deb) = 137857346
+SHA256 (unifi8-8.0.7/javax.activation-api-1.2.0.jar) = 43fdef0b5b6ceb31b0424b208b930c74ab58fac2ceeb7b3f6fd3aeb8b5ca4393
+SIZE (unifi8-8.0.7/javax.activation-api-1.2.0.jar) = 56674
diff --git a/net-mgmt/unifi8/files/pkg-message.extdb.in b/net-mgmt/unifi8/files/pkg-message.extdb.in
new file mode 100644
index 000000000000..945b333966c7
--- /dev/null
+++ b/net-mgmt/unifi8/files/pkg-message.extdb.in
@@ -0,0 +1,19 @@
+[
+{ type: install
+  message: <<EOM
+In order to use the external MongoDB server, put the following lines
+into %%JAVASHAREDIR%%/unifi/data/system.properties file:
+
+db.mongo.local=false
+db.mongo.uri=mongodb://ubnt:password@IP_ADDRESS:PORT/unifi-test
+statdb.mongo.uri=mongodb://ubnt:password@IP_ADDRESS:PORT/unifi-test_stat
+unifi.db.name=unifi-test
+
+Adjust username, password, IP_ADDRESS, PORT and database name
+according to your needs.
+
+For more information see:
+https://community.ui.com/questions/External-MongoDB-Server/d311a8f8-43b6-4aeb-859d-eefec9dc1bbc
+EOM
+}
+]
diff --git a/net-mgmt/unifi8/files/unifi.in b/net-mgmt/unifi8/files/unifi.in
new file mode 100644
index 000000000000..a3cdc54627a1
--- /dev/null
+++ b/net-mgmt/unifi8/files/unifi.in
@@ -0,0 +1,89 @@
+#!/bin/sh
+#
+# Created by: Mark Felder <feld@FreeBSD.org>
+
+# PROVIDE: unifi
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+
+#
+# Add the following line to /etc/rc.conf to enable `unifi':
+#
+# unifi_enable="YES"
+#
+# Other configuration settings for unifi that can be set in /etc/rc.conf:
+#
+# unifi_user (str)
+#   This is the user that unifi runs as
+#   Set to %%USERS%% by default
+#
+# unifi_group (str)
+#   This is the group that unifi runs as
+#   Set to %%GROUPS%% by default
+#
+# unifi_chdir (str)
+#   This is the directory that unifi chdirs into before starting
+#   Set to %%JAVASHAREDIR%%/unifi by default
+#
+# unifi_java_home (str)
+#   The path to the base directory for the Java to use to run unifi
+#   Defaults to %%JAVA_HOME%%
+#
+# unifi_javaflags (str)
+#   Flags passed to Java to run unifi
+#   Set to "-Djava.awt.headless=true -Xmx1024M" by default
+#
+
+. /etc/rc.subr
+name=unifi
+
+rcvar=unifi_enable
+load_rc_config ${name}
+
+: ${unifi_enable:=NO}
+: ${unifi_user:=%%USERS%%}
+: ${unifi_group:=%%GROUPS%%}
+: ${unifi_chdir=%%JAVASHAREDIR%%/unifi}
+: ${unifi_java_home=%%JAVA_HOME%%}
+: ${unifi_javaflags="-Djava.awt.headless=true -Xmx1024M \
+	--add-opens java.base/java.lang=ALL-UNNAMED \
+	--add-opens java.base/java.time=ALL-UNNAMED \
+	--add-opens java.base/sun.security.util=ALL-UNNAMED \
+	--add-opens java.base/java.io=ALL-UNNAMED \
+	--add-opens java.rmi/sun.rmi.transport=ALL-UNNAMED"}
+
+pidfile="/var/run/unifi/${name}.pid"
+procname=${unifi_java_home}/bin/java
+command=/usr/sbin/daemon
+command_args="-f -p ${pidfile} ${unifi_java_home}/bin/java ${unifi_javaflags} -jar lib/ace.jar start"
+start_precmd=start_precmd
+stop_precmd=stop_precmd
+stop_postcmd=stop_postcmd
+
+export CLASSPATH=$(echo ${unifi_chdir}/lib/*.jar | tr ' ' ':')
+
+start_precmd()
+{
+	if [ ! -e /var/run/unifi ] ; then
+		install -d -o %%USERS%% -g %%GROUPS%% /var/run/unifi;
+	fi
+}
+
+stop_precmd()
+{
+	if [ -r ${pidfile} ]; then
+		_UNIFIPID=$(check_pidfile ${pidfile} ${procname})
+		export _UNIFI_CHILDREN=$(pgrep -P ${_UNIFIPID})
+	fi
+}
+
+stop_postcmd()
+{
+	if ! [ -z ${_UNIFI_CHILDREN} ]; then
+		echo "Cleaning up leftover child processes."
+		kill $sig_stop ${_UNIFI_CHILDREN}
+		wait_for_pids ${_UNIFI_CHILDREN}
+	fi
+}
+
+run_rc_command "$1"
diff --git a/net-mgmt/unifi8/pkg-descr b/net-mgmt/unifi8/pkg-descr
new file mode 100644
index 000000000000..36573c9e0af5
--- /dev/null
+++ b/net-mgmt/unifi8/pkg-descr
@@ -0,0 +1,2 @@
+The UniFi Controller allows you to manage Wireless, Routing & Switching,
+VoIP and Video of Ubiquiti Networks.