Page MenuHomeFreeBSD

D57369.id181330.diff
No OneTemporary

D57369.id181330.diff

diff --git a/net-mgmt/Makefile b/net-mgmt/Makefile
--- a/net-mgmt/Makefile
+++ b/net-mgmt/Makefile
@@ -413,6 +413,7 @@
SUBDIR += unbound_exporter
SUBDIR += unifi10
SUBDIR += unifi9
+ SUBDIR += uptime-kuma
SUBDIR += victoria-logs
SUBDIR += victoria-metrics
SUBDIR += virt-viewer
diff --git a/net-mgmt/uptime-kuma/Makefile b/net-mgmt/uptime-kuma/Makefile
new file mode 100644
--- /dev/null
+++ b/net-mgmt/uptime-kuma/Makefile
@@ -0,0 +1,249 @@
+PORTNAME= uptime-kuma
+DISTVERSION= 2.4.0
+CATEGORIES= net-mgmt www
+MASTER_SITES= LOCAL/dch/${PORTNAME}/:npmcache \
+ https://github.com/louislam/${PORTNAME}/releases/download/${DISTVERSION}/:dist
+DISTFILES= ${PORTNAME}-npm-cache-${DISTVERSION}${EXTRACT_SUFX}:npmcache \
+ dist.tar.gz:dist
+DIST_SUBDIR= ${PORTNAME}
+EXTRACT_ONLY= ${PORTNAME}-npm-cache-${DISTVERSION}${EXTRACT_SUFX} \
+ louislam-${PORTNAME}-${DISTVERSION}_GH0.tar.gz
+
+MAINTAINER= dch@FreeBSD.org
+COMMENT= Self-hosted server monitoring tool
+WWW= https://github.com/louislam/uptime-kuma
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+BUILD_DEPENDS= ${LOCALBASE}/bin/npm:www/npm \
+ esbuild:devel/esbuild \
+ ${PYTHON_PKGNAMEPREFIX}setuptools>0:devel/py-setuptools@${PY_FLAVOR}
+LIB_DEPENDS= libsqlite3.so:databases/sqlite3
+
+USES= gmake nodejs:lts,build,run python:build
+USE_GITHUB= yes
+GH_ACCOUNT= louislam
+USE_RC_SUBR= uptimekuma
+
+WWWDIR= ${PREFIX}/www/${PORTNAME}
+
+PLIST_FILES= "@dir(${USERS},${GROUPS},750) /var/db/${PORTNAME}" \
+ "@dir(${USERS},${GROUPS},750) /var/log/${PORTNAME}" \
+ "@dir(${USERS},${GROUPS},750) /var/run/${PORTNAME}"
+
+SUB_LIST+= GROUPS=${GROUPS} \
+ USERS=${USERS}
+
+USERS= www
+GROUPS= www
+
+_NODE_ARCH= ${ARCH:S/aarch64/arm64/:S/amd64/x64/}
+_NPM_CACHE= ${WRKDIR}/.npm
+_PRUNE_EXTRA_DIRS= beta kuma-pr release uptime-kuma-push \
+ push-examples/typescript-fetch
+_PRUNE_NODE_FILES= -name '*.map' -o -name '*.d.ts' -o -name '*.ts' \
+ -o -name '*.cts' -o -name '*.mts' \
+ -o -name '*.tsbuildinfo'
+_PRUNE_NODE_EXPR= -name .github -o -name .circleci -o -name __pycache__ \
+ -o -name benchmark -o -name benchmarks -o -name coverage \
+ -o -name docs -o -name example -o -name examples \
+ -o -name test -o -name tests
+_PRUNE_NODE_MODULES= @azure @azure-rest @mapbox/node-pre-gyp @typespec \
+ are-we-there-yet cacache gauge make-fetch-happen node-gyp \
+ nopt npmlog playwright-core tar
+
+post-extract:
+ @${MKDIR} ${_NPM_CACHE}
+ ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/dist.tar.gz -C ${WRKSRC}
+
+post-patch:
+ ${REINPLACE_CMD} \
+ -e '/monitorTypeList\["real-browser"\]/d' \
+ -e '/RealBrowserMonitorType/d' \
+ ${WRKSRC}/server/uptime-kuma-server.js
+ ${REINPLACE_CMD} \
+ -e '/remoteBrowserSocketHandler/d' \
+ -e '/resetChrome/d' \
+ -e '/Chrome executable is changed/d' \
+ ${WRKSRC}/server/server.js
+ ${REINPLACE_CMD} \
+ -e 's#const { testChrome } = require("../monitor-types/real-browser-monitor-type");#const testChrome = async () => { throw new Error("Real browser monitor is not supported on FreeBSD."); };#' \
+ ${WRKSRC}/server/socket-handlers/general-socket-handler.js
+ ${REINPLACE_CMD} \
+ -e 's#const { testRemoteBrowser } = require("../monitor-types/real-browser-monitor-type");#const testRemoteBrowser = async () => { throw new Error("Real browser monitor is not supported on FreeBSD."); };#' \
+ ${WRKSRC}/server/socket-handlers/remote-browser-socket-handler.js
+
+do-build:
+ cd ${WRKSRC} && \
+ ${SETENV} ${MAKE_ENV} HOME=${WRKDIR} npm_config_cache=${_NPM_CACHE} \
+ npm_config_offline=true npm_config_python=${PYTHON_CMD} \
+ npm_config_nodedir=${LOCALBASE} CFLAGS="-I${LOCALBASE}/include" \
+ CXXFLAGS="-I${LOCALBASE}/include" npm ci --ignore-scripts \
+ --legacy-peer-deps --no-audit --no-fund --no-progress
+# hack out the esbuild version check and let us use whats in ports
+ ${SED} -i '' \
+ '/checkAndPreparePackage()\.then/,$$d' \
+ ${WRKSRC}/node_modules/esbuild/install.js
+ ${ECHO_CMD} 'checkAndPreparePackage();' >> ${WRKSRC}/node_modules/esbuild/install.js
+ cd ${WRKSRC} && \
+ ${SETENV} ${MAKE_ENV} HOME=${WRKDIR} npm_config_cache=${_NPM_CACHE} \
+ npm_config_offline=true npm_config_python=${PYTHON_CMD} \
+ npm_config_nodedir=${LOCALBASE} ESBUILD_BINARY_PATH=${LOCALBASE}/bin/esbuild \
+ CFLAGS="-I${LOCALBASE}/include" CXXFLAGS="-I${LOCALBASE}/include" \
+ npm rebuild --legacy-peer-deps --no-audit --no-fund --no-progress
+ cd ${WRKSRC} && \
+ ${SETENV} ${MAKE_ENV} HOME=${WRKDIR} npm_config_cache=${_NPM_CACHE} \
+ npm_config_offline=true npm prune --omit=dev --ignore-scripts \
+ --legacy-peer-deps --no-audit --no-fund --no-progress
+
+post-build:
+ ${ECHO_CMD} "module.exports = require('./binding/napi-v6-freebsd-${_NODE_ARCH}/node_sqlite3.node');" \
+ > ${WRKSRC}/node_modules/@louislam/sqlite3/lib/sqlite3-binding.js
+ ${REINPLACE_CMD} \
+ -e '/"test-e2e":/d' \
+ -e '/"test-e2e-ui":/d' \
+ -e '/"playwright-codegen":/d' \
+ -e '/"playwright-show-report":/d' \
+ -e '/"playwright-core":/d' \
+ -e '/"@playwright\/test":/d' \
+ ${WRKSRC}/package.json
+ ${REINPLACE_CMD} \
+ -e 's#var _identity = require("@azure/identity");#var _identity = {};#' \
+ -e 's#var _coreAuth = require("@azure/core-auth");#var _coreAuth = { isTokenCredential: function() { return false; } };#' \
+ -e '/@azure\/identity/d' \
+ -e "/type !== 'default'.*azure-active-directory-default/s#^.*# if (type !== 'default' \&\& type !== 'ntlm') {#" \
+ -e "/must one of/s#^.*# throw new TypeError('Only default and ntlm SQL Server authentication are supported in the FreeBSD port.');#" \
+ ${WRKSRC}/node_modules/tedious/lib/connection.js
+ ${REINPLACE_CMD} \
+ -e '/"@azure\//d' \
+ ${WRKSRC}/node_modules/tedious/package.json
+ ${REINPLACE_CMD} \
+ -e '/"azure",/d' \
+ ${WRKSRC}/node_modules/mssql/package.json
+
+do-install:
+ ${MKDIR} ${STAGEDIR}${WWWDIR}
+.for d in server db extra dist dist-frontend
+ if [ -d ${WRKSRC}/${d} ]; then \
+ (cd ${WRKSRC} && \
+ ${COPYTREE_SHARE} ${d} ${STAGEDIR}${WWWDIR}); \
+ fi
+.endfor
+ ${MKDIR} ${STAGEDIR}${WWWDIR}/src
+ ${INSTALL_DATA} ${WRKSRC}/src/util.js \
+ ${STAGEDIR}${WWWDIR}/src
+ ${INSTALL_DATA} ${WRKSRC}/package.json \
+ ${STAGEDIR}${WWWDIR}
+ (cd ${WRKSRC} && \
+ ${COPYTREE_SHARE} node_modules ${STAGEDIR}${WWWDIR})
+ ${RM} -r ${STAGEDIR}${WWWDIR}/node_modules/@esbuild
+ ${RM} -r ${STAGEDIR}${WWWDIR}/node_modules/@rollup
+ ${RM} -r ${STAGEDIR}${WWWDIR}/node_modules/@louislam/sqlite3/build-tmp-napi-v6
+ ${RM} ${STAGEDIR}${WWWDIR}/node_modules/@louislam/node-addon-api/node_api.Makefile
+ ${RM} ${STAGEDIR}${WWWDIR}/node_modules/@louislam/node-addon-api/nothing.target.mk
+ ${RM} -r ${STAGEDIR}${WWWDIR}/node_modules/cpu-features/build/Release/.deps
+ ${RM} -r ${STAGEDIR}${WWWDIR}/node_modules/cpu-features/build/Release/obj.target
+ ${RM} ${STAGEDIR}${WWWDIR}/node_modules/cpu-features/build/Release/cpu_features.a
+ ${RM} ${STAGEDIR}${WWWDIR}/node_modules/cpu-features/build/Makefile
+ ${RM} ${STAGEDIR}${WWWDIR}/node_modules/cpu-features/build/binding.Makefile
+ ${RM} ${STAGEDIR}${WWWDIR}/node_modules/cpu-features/build/config.gypi
+ ${RM} ${STAGEDIR}${WWWDIR}/node_modules/cpu-features/build/cpufeatures.target.mk
+ ${RM} -r ${STAGEDIR}${WWWDIR}/node_modules/cpu-features/build/deps
+ ${RM} -r ${STAGEDIR}${WWWDIR}/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps
+ ${RM} -r ${STAGEDIR}${WWWDIR}/node_modules/ssh2/lib/protocol/crypto/build/Release/obj.target
+ ${RM} ${STAGEDIR}${WWWDIR}/node_modules/ssh2/lib/protocol/crypto/build/Makefile
+ ${RM} ${STAGEDIR}${WWWDIR}/node_modules/ssh2/lib/protocol/crypto/build/binding.Makefile
+ ${RM} ${STAGEDIR}${WWWDIR}/node_modules/ssh2/lib/protocol/crypto/build/config.gypi
+ ${RM} ${STAGEDIR}${WWWDIR}/node_modules/ssh2/lib/protocol/crypto/build/sshcrypto.target.mk
+ ${MKDIR} ${STAGEDIR}/var/db/${PORTNAME}
+ ${MKDIR} ${STAGEDIR}/var/log/${PORTNAME}
+ ${MKDIR} ${STAGEDIR}/var/run/${PORTNAME}
+
+# The plist is generated from the staged tree below, so pruning has to
+# happen before TMPPLIST is appended. Native artefacts are treated
+# differently from JS helpers: keep and strip FreeBSD ELF modules, but
+# delete Linux, Mach-O, PE, and other non-FreeBSD binaries. Do not
+# blindly remove JS platform dispatchers; some packages, e.g.
+# @louislam/ping, statically require Linux/macOS/Windows helpers even
+# when running on FreeBSD. Yes.
+#
+# Pruning:
+#
+# Files/modules Saving Functionality lost
+# ------------------------------------ -------------- -----------------------
+# package-lock/.package-lock files 1.2MB/3 files None at runtime
+# node_modules/*.map 42MB/6.7k Source-level debugging
+# node_modules TS decl/source files 27MB/7.9k None if JS dist exists
+# README*/CHANGELOG* 4.9MB/700 Bundled package docs
+# extra dev/release/test helper scripts <100KB Only those helpers
+# node-gyp/npm fetch/build stack 2.9MB/375 Patched sqlite loader
+# Playwright 6.9MB/291 Real browser monitor
+# Azure auth/key-vault deps 10MB/1.8k AAD auth/AKV encryption
+#
+# Possible further pruning savings, if people don't use these:
+# SQL Server 4MB/500 SQL Server monitor
+# MongoDB 2.7MB/315 MongoDB monitor
+# Redis 3.4MB/2.3k Redis monitor
+# Oracle 1.2MB/113 Oracle DB monitor
+# Nostr 7.6MB/827 Nostr notifications
+post-install:
+.for d in ${_PRUNE_EXTRA_DIRS}
+ ${RM} -r ${STAGEDIR}${WWWDIR}/extra/${d}
+.endfor
+ ${RM} ${STAGEDIR}${WWWDIR}/extra/remove-playwright-test-data.js
+.for d in ${_PRUNE_NODE_MODULES}
+ ${RM} -r ${STAGEDIR}${WWWDIR}/node_modules/${d}
+.endfor
+ ${RM} ${STAGEDIR}${WWWDIR}/node_modules/tedious/lib/always-encrypted/keystore-provider-azure-key-vault.js
+ ${FIND} -s ${STAGEDIR}${WWWDIR}/node_modules -type d \
+ \( ${_PRUNE_NODE_EXPR} \) -prune \
+ -exec ${RM} -r {} +
+ ${FIND} -s ${STAGEDIR}${WWWDIR} -type f \
+ \( ${_PRUNE_NODE_FILES} \) -delete
+ ${FIND} -s -L ${STAGEDIR}${WWWDIR}/node_modules/.bin -type l \
+ -exec ${RM} {} +
+ ${FIND} -s ${STAGEDIR}${WWWDIR} -type f \
+ \( -name '*.orig' -o -name '*.bak' -o -name '.gitignore' \
+ -o -name 'package-lock.json' -o -name '.package-lock.json' \) \
+ -delete
+ ${RM} ${STAGEDIR}${WWWDIR}/server/monitor-types/real-browser-monitor-type.js
+ ${RM} -r ${STAGEDIR}${WWWDIR}/node_modules/oracledb/build
+ ${FIND} -s ${STAGEDIR}${WWWDIR} -type f \
+ \( -name '*.node' -o -name '*.bare' -o -name '*.so' \
+ -o -name '*.dylib' -o -name '*.dll' -o -name '*.exe' \) -exec \
+ ${SH} -c 'for f do \
+ case "$$(${FILE} -b "$$f")" in \
+ *ELF*FreeBSD*) ${STRIP_CMD} "$$f";; \
+ *ELF*|*Mach-O*|*PE32*) ${RM} "$$f";; \
+ esac; \
+ done' sh {} +
+ ${FIND} -s ${STAGEDIR}${WWWDIR} -depth -type d -empty -delete
+ ${FIND} -s ${STAGEDIR}${WWWDIR} -not -type d | ${SORT} | \
+ ${SED} -e 's#^${STAGEDIR}${PREFIX}/##' >> ${TMPPLIST}
+
+# generate npm cache tarball for offline builds.
+tarball: fetch-src npm-populate npm-cache upload-npm-cache
+
+_NPM_CACHE_SRC_URL= https://github.com/${GH_ACCOUNT}/${PORTNAME}/archive/${DISTVERSION}${EXTRACT_SUFX}
+_NPM_CACHE_TARBALL= ${PORTNAME}-npm-cache-${DISTVERSION}${EXTRACT_SUFX}
+
+fetch-src:
+ @${RM} -rf ${WRKDIR}
+ @${MKDIR} ${WRKDIR}
+ ${FETCH_CMD} -o ${WRKDIR}/src${EXTRACT_SUFX} ${_NPM_CACHE_SRC_URL}
+ ${TAR} xf ${WRKDIR}/src${EXTRACT_SUFX} -C ${WRKDIR}
+
+npm-populate:
+ (cd ${WRKSRC} && \
+ ${SETENV} HOME=${WRKDIR} npm_config_cache=${_NPM_CACHE} \
+ npm ci --legacy-peer-deps --no-audit --no-fund)
+
+npm-cache:
+ (cd ${WRKDIR} && \
+ ${TAR} czf ${_NPM_CACHE_TARBALL} .npm)
+
+upload-npm-cache:
+ rsync -Phv --chmod=F0644 ${WRKDIR}/${_NPM_CACHE_TARBALL} freefall.freebsd.org:public_distfiles/${PORTNAME}/
+
+.include <bsd.port.mk>
diff --git a/net-mgmt/uptime-kuma/distinfo b/net-mgmt/uptime-kuma/distinfo
new file mode 100644
--- /dev/null
+++ b/net-mgmt/uptime-kuma/distinfo
@@ -0,0 +1,7 @@
+TIMESTAMP = 1783331489
+SHA256 (uptime-kuma/uptime-kuma-npm-cache-2.4.0.tar.gz) = dab69365670e8bbd9968983f43bf6f0cb0af171a1c62c437cbfb8a7f15b55c85
+SIZE (uptime-kuma/uptime-kuma-npm-cache-2.4.0.tar.gz) = 88195474
+SHA256 (uptime-kuma/dist.tar.gz) = 015ebb4df74b72bd8c303bdc41b71e2de8bdc72862ddc2d65db69a92316df835
+SIZE (uptime-kuma/dist.tar.gz) = 7059039
+SHA256 (uptime-kuma/louislam-uptime-kuma-2.4.0_GH0.tar.gz) = 0ad39c4cbe2de5a2dd4869d02a8a4f0398b7b16217b0aeaff98d78cf37500c42
+SIZE (uptime-kuma/louislam-uptime-kuma-2.4.0_GH0.tar.gz) = 2076193
diff --git a/net-mgmt/uptime-kuma/files/patch-server_uptime-kuma-server.js b/net-mgmt/uptime-kuma/files/patch-server_uptime-kuma-server.js
new file mode 100644
--- /dev/null
+++ b/net-mgmt/uptime-kuma/files/patch-server_uptime-kuma-server.js
@@ -0,0 +1,18 @@
+--- server/uptime-kuma-server.js.orig
++++ server/uptime-kuma-server.js
+@@ -342,12 +342,13 @@ class UptimeKumaServer {
+ * @returns {void}
+ */
+ static errorLog(error, outputToConsole = true) {
+- const errorLogStream = fs.createWriteStream(path.join(Database.dataDir, "/error.log"), {
++ const errorLogPath = process.env.UPTIME_KUMA_ERROR_LOG || path.join(Database.dataDir, "error.log");
++ const errorLogStream = fs.createWriteStream(errorLogPath, {
+ flags: "a",
+ });
+
+ errorLogStream.on("error", () => {
+- log.info("", "Cannot write to error.log");
++ log.info("", `Cannot write to error log: ${errorLogPath}`);
+ });
+
+ if (errorLogStream) {
diff --git a/net-mgmt/uptime-kuma/files/uptimekuma.in b/net-mgmt/uptime-kuma/files/uptimekuma.in
new file mode 100644
--- /dev/null
+++ b/net-mgmt/uptime-kuma/files/uptimekuma.in
@@ -0,0 +1,75 @@
+#!/bin/sh
+
+# PROVIDE: uptimekuma
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
+# to enable this service:
+#
+# uptimekuma_enable (bool): Set to NO by default.
+# Set it to YES to enable uptimekuma.
+# uptimekuma_user (string): User account to run as.
+# Default is "%%USERS%%".
+# uptimekuma_group (string): Group to run as.
+# Default is "%%GROUPS%%".
+# uptimekuma_datadir (string): Directory for application data and database.
+# Default is "/var/db/uptime-kuma".
+# uptimekuma_host (string): IP address to listen on.
+# Default is "0.0.0.0".
+# uptimekuma_port (string): TCP port to listen on.
+# Default is "3001".
+# uptimekuma_options (string): Additional command-line arguments appended
+# after --data-dir.
+# Default is "".
+# uptimekuma_errorlog (string): Path for unexpected application errors.
+# Default is
+# "/var/log/uptime-kuma/error.log".
+# uptimekuma_env (string): Additional environment variables.
+# Defaults are typically required, so append.
+
+. /etc/rc.subr
+
+name="uptimekuma"
+rcvar="${name}_enable"
+
+load_rc_config $name
+
+: ${uptimekuma_enable:="NO"}
+: ${uptimekuma_user:="%%USERS%%"}
+: ${uptimekuma_group:="%%GROUPS%%"}
+: ${uptimekuma_datadir:="/var/db/uptime-kuma"}
+: ${uptimekuma_host:="0.0.0.0"}
+: ${uptimekuma_port:="3001"}
+: ${uptimekuma_options:=""}
+: ${uptimekuma_errorlog:="/var/log/uptime-kuma/error.log"}
+: ${uptimekuma_env:="LC_ALL=en_US.UTF-8 PLAYWRIGHT_BROWSERS_PATH=/nonexistent"}
+
+logfile="/var/log/uptime-kuma/uptime-kuma.log"
+pidfile="/var/run/uptime-kuma/${name}.pid"
+
+procname="/usr/sbin/daemon"
+
+uptimekuma_chdir="%%WWWDIR%%"
+
+command="/usr/sbin/daemon"
+command_args="-H -r -f -o ${logfile} -P ${pidfile} -t ${name} \
+ /usr/bin/env ${uptimekuma_env} UPTIME_KUMA_ERROR_LOG=${uptimekuma_errorlog} \
+ /usr/local/bin/node %%WWWDIR%%/server/server.js \
+ --host=${uptimekuma_host} --port=${uptimekuma_port} \
+ --data-dir=${uptimekuma_datadir} ${uptimekuma_options}"
+
+start_precmd="${name}_precmd"
+
+uptimekuma_precmd()
+{
+ install -d -o ${uptimekuma_user} -g ${uptimekuma_group} ${uptimekuma_datadir}
+ install -d -o ${uptimekuma_user} -g ${uptimekuma_group} /var/run/uptime-kuma
+ install -d -o ${uptimekuma_user} -g ${uptimekuma_group} /var/log/uptime-kuma
+ install -d -o ${uptimekuma_user} -g ${uptimekuma_group} "$(dirname "${uptimekuma_errorlog}")"
+ install -o ${uptimekuma_user} -g ${uptimekuma_group} /dev/null ${pidfile}
+ touch ${logfile} ${uptimekuma_errorlog}
+ chown ${uptimekuma_user}:${uptimekuma_group} ${logfile} ${uptimekuma_errorlog}
+}
+
+run_rc_command "$1"
diff --git a/net-mgmt/uptime-kuma/pkg-descr b/net-mgmt/uptime-kuma/pkg-descr
new file mode 100644
--- /dev/null
+++ b/net-mgmt/uptime-kuma/pkg-descr
@@ -0,0 +1,16 @@
+Uptime Kuma is a self-hosted monitoring tool similar to "Uptime Robot".
+
+Features include:
+- Monitoring uptime for HTTP(s), TCP, HTTP(s) keyword, HTTP(s) JSON
+ query, ping, DNS record, push, Steam game server, Docker containers
+- Fancy, reactive, fast UI/UX
+- Notifications via Telegram, Discord, Gotify, Slack, Pushover, email
+ (SMTP), and 90+ notification services
+- 20-second intervals
+- Multi-language support
+- Multiple status pages
+- Map status pages to specific domains
+- Ping chart
+- Certificate info
+- Proxy support
+- 2FA support
diff --git a/net-mgmt/uptime-kuma/pkg-message b/net-mgmt/uptime-kuma/pkg-message
new file mode 100644
--- /dev/null
+++ b/net-mgmt/uptime-kuma/pkg-message
@@ -0,0 +1,18 @@
+[
+{ type: install
+ message: <<EOM
+This port aggressively prunes the node_modules tree to reduce the installed
+size, including removing TypeScript sources, source maps, build tooling,
+test suites, Azure AD/Key Vault dependencies, and Playwright. It is
+possible that a required file was inadvertently removed.
+
+If you encounter a runtime error such as "Cannot find module ..." or
+missing functionality loss, please report a bug at:
+
+ https://bugs.freebsd.org/bugzilla/
+
+Include the full error message, the output of `pkg info uptime-kuma`,
+and any relevant configuration options or settings.
+EOM
+}
+]

File Metadata

Mime Type
text/plain
Expires
Thu, Jul 16, 11:17 PM (4 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35151422
Default Alt Text
D57369.id181330.diff (18 KB)

Event Timeline