git: 13cedaa5d239 - main - textproc/kibana93: Repocopy from textproc/kibana92
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 15 Mar 2026 01:51:43 UTC
The branch main has been updated by vvd:
URL: https://cgit.FreeBSD.org/ports/commit/?id=13cedaa5d2393cf97d0a1ba9a5fcffecc8c03bf9
commit 13cedaa5d2393cf97d0a1ba9a5fcffecc8c03bf9
Author: Vladimir Druzenko <vvd@FreeBSD.org>
AuthorDate: 2026-03-15 01:35:31 +0000
Commit: Vladimir Druzenko <vvd@FreeBSD.org>
CommitDate: 2026-03-15 01:48:16 +0000
textproc/kibana93: Repocopy from textproc/kibana92
PR: 290979
Approved by: elastic (maintainer, implicit - inactive for more than 6 months)
---
textproc/kibana93/Makefile | 158 +++++++++++++++++++++
textproc/kibana93/distinfo | 7 +
.../files/extra-node-re2-binding-gyp.patch | 131 +++++++++++++++++
textproc/kibana93/files/kibana.in | 83 +++++++++++
textproc/kibana93/files/patch-config_kibana.yml | 15 ++
textproc/kibana93/files/patch-config_node.options | 11 ++
..._kbn_setup-node-env_node__version__validator.js | 16 +++
textproc/kibana93/files/pkg-deinstall.in | 20 +++
textproc/kibana93/files/pkg-message.in | 8 ++
textproc/kibana93/pkg-descr | 6 +
10 files changed, 455 insertions(+)
diff --git a/textproc/kibana93/Makefile b/textproc/kibana93/Makefile
new file mode 100644
index 000000000000..2d00886771c4
--- /dev/null
+++ b/textproc/kibana93/Makefile
@@ -0,0 +1,158 @@
+PORTNAME= kibana
+DISTVERSION= 9.2.6
+DISTVERSIONSUFFIX= -linux-x86_64
+CATEGORIES= textproc www
+MASTER_SITES= https://artifacts.elastic.co/downloads/kibana/ \
+ LOCAL/vvd/elastic
+PKGNAMESUFFIX= 92
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
+
+MAINTAINER= elastic@FreeBSD.org
+COMMENT= Browser-based analytics and search interface to Elasticsearch (${DISTVERSION:R}.x version)
+WWW= https://www.elastic.co/products/kibana
+
+LICENSE= APACHE20
+
+BUILD_DEPENDS= npm-node${NODEJS_VERSION}>=11.10.0:www/npm-node${NODEJS_VERSION}
+LIB_DEPENDS= libre2.so:devel/re2 \
+ libuv.so:devel/libuv
+
+USES= compiler:c++17-lang cpe nodejs:24,build,run python:build
+CPE_VENDOR= elastic
+USE_CXXSTD= c++17
+USE_GITHUB= nodefault
+GH_TUPLE= nodejs:nan:v${_NODE_NAN_VER}:node_nan \
+ uhop:node-re2:${_NODE_RE2_VER}:node_re2
+USE_RC_SUBR= ${PORTNAME}
+
+CONFLICTS= ${PORTNAME}8 ${PORTNAME}91 ${PORTNAME}93
+
+WWWDIR= ${PREFIX}/www/${PORTNAME}${PKGNAMESUFFIX}
+
+PORTSCOUT= limit:^9\.2\.
+
+SUB_FILES= pkg-deinstall pkg-message
+SUB_LIST= BINDIR=${PREFIX}/bin \
+ PKGNAMESUFFIX=${PKGNAMESUFFIX} \
+ PORTNAME=${PORTNAME} \
+ KIBANAUSER=${KIBANAUSER} \
+ KIBANAGROUP=${KIBANAGROUP}
+
+WRKSRC= ${WRKDIR}/${PORTNAME}-${DISTVERSION}
+
+KIBANAUSER?= www
+KIBANAGROUP?= ${KIBANAUSER}
+.if ${KIBANAUSER} == www
+USERS= ${KIBANAUSER}
+.endif
+.if ${KIBANAGROUP} == www
+GROUPS= ${KIBANAGROUP}
+.endif
+
+BINS= kibana-encryption-keys kibana-health-gateway kibana-keystore \
+ kibana-plugin kibana-setup kibana-verification-code
+
+#######################################################################
+# Set node-nan version here
+_NODE_NAN_VER= 2.25.0
+# Set node-re version here
+_NODE_RE2_VER= 1.23.3
+#######################################################################
+
+_NODECMD= ${LOCALBASE}/bin/node --version
+_DEVDIR:= ${WRKDIR}/.devdir
+
+_RE2DIR= ${WRKDIR}/node-re2-${_NODE_RE2_VER}
+
+# Extra patch files must be updated whenever node-re2 changes
+_RE2PATCHES= ${PATCHDIR}/extra-node-re2-binding-gyp.patch
+
+# Directories to prune
+_DIR2DEL= node_modules
+
+post-patch:
+.for _dirdel in ${_DIR2DEL}
+ ${FIND} -s ${WRKSRC}/${_dirdel} -type d -empty -delete
+.endfor
+ ${REINPLACE_CMD} -e "s|%%WWWDIR%%|${WWWDIR}|g" \
+ ${WRKSRC}/config/kibana.yml
+ cd ${_RE2DIR} && ${PATCH} -p0 < ${_RE2PATCHES}
+ ${REINPLACE_CMD} -e "s|%%PREFIX%%|${PREFIX}|g" \
+ -e "s|%%DEVDIR%%|${_DEVDIR}|g" ${_RE2DIR}/binding.gyp
+
+pre-configure:
+ ( \
+ _NODEVER=$$(${_NODECMD} | ${SED} -n 's|^v\(.*\)|\1|p') && \
+ ${MKDIR} ${_DEVDIR}/$${_NODEVER}/include && \
+ ${RLN} ${LOCALBASE}/include/node ${_DEVDIR}/$${_NODEVER}/include/node && \
+ ${ECHO} "10" > ${_DEVDIR}/$${_NODEVER}/installVersion \
+ )
+
+do-configure:
+ ${MKDIR} ${_DEVDIR}/nan
+ (cd ${WRKDIR}/nan-${_NODE_NAN_VER} && ${COPYTREE_SHARE} . \
+ ${_DEVDIR}/nan \
+ "! ( -name \.* -or -path *\/test\/* -or -name test )")
+ (cd ${_RE2DIR} && \
+ ${SETENV} HOME=${WRKDIR} \
+ ${LOCALBASE}/lib/node_modules/npm/node_modules/.bin/node-gyp configure \
+ --python=${PYTHON_CMD} \
+ --nodedir=${LOCALBASE} \
+ --devdir=${_DEVDIR})
+
+do-build:
+ (cd ${_RE2DIR} && \
+ ${SETENV} HOME=${WRKDIR} \
+ ${LOCALBASE}/lib/node_modules/npm/node_modules/.bin/node-gyp build \
+ --devdir=${_DEVDIR})
+
+do-install:
+ ${MKDIR} ${STAGEDIR}${WWWDIR} ${STAGEDIR}${ETCDIR}
+ ${INSTALL_DATA} ${WRKSRC}/config/kibana.yml ${STAGEDIR}${ETCDIR}/kibana.yml.sample
+ ${INSTALL_DATA} ${WRKSRC}/config/node.options ${STAGEDIR}${ETCDIR}/node.options.sample
+ (cd ${WRKSRC} && \
+ ${RM} -r config node optimize && \
+ ${COPYTREE_SHARE} . ${STAGEDIR}${WWWDIR} && \
+ ${COPYTREE_BIN} bin ${STAGEDIR}${WWWDIR})
+ ${INSTALL} -lrs ${STAGEDIR}${ETCDIR} ${STAGEDIR}${WWWDIR}/config
+ ${MKDIR} ${STAGEDIR}${WWWDIR}/node/glibc-217/bin
+ ${LN} -s ${LOCALBASE}/bin/node ${STAGEDIR}${WWWDIR}/node/glibc-217/bin/node
+ ${RM} ${STAGEDIR}${WWWDIR}/node_modules/re2/build/Release/re2.node
+ ${MKDIR} ${STAGEDIR}${WWWDIR}/node_modules/re2/build/Release
+ ${INSTALL_LIB} ${_RE2DIR}/build/Release/re2.node \
+ ${STAGEDIR}${WWWDIR}/node_modules/re2/build/Release/re2.node
+.for f in ${BINS}
+ ${RLN} ${STAGEDIR}${WWWDIR}/bin/${f} ${STAGEDIR}${PREFIX}/bin/${f}
+ ${ECHO} "bin/${f}" >> ${TMPPLIST}
+.endfor
+
+post-install:
+ ${ECHO} "@sample ${ETCDIR}/kibana.yml.sample" >> ${TMPPLIST}
+ ${ECHO} "@sample ${ETCDIR}/node.options.sample" >> ${TMPPLIST}
+ ${FIND} -s ${STAGEDIR}${WWWDIR} -not -type d | ${SORT} | \
+ ${SED} -e 's#^${STAGEDIR}${PREFIX}/##' >> ${TMPPLIST}
+ ${ECHO} "@dir(${KIBANAUSER},${KIBANAGROUP}) ${WWWDIR}/data" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/plugins" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/logs" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/src/platform/packages/private/analytics" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/src/platform/packages/private/kbn-reporting" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/src/platform/packages/shared/content-management" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/src/platform/packages/shared/kbn-management/settings" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/src/platform/packages/shared/react" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/src/platform/packages/shared/serverless" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/src/platform/packages/shared/shared-ux/card" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/src/platform/packages/shared/shared-ux/file" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/src/platform/packages/shared/shared-ux/link" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/src/platform/packages/shared/shared-ux/page" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/src/platform/packages/shared/shared-ux/prompt" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/src/platform/plugins/private" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/src/platform/plugins/shared" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/x-pack/platform/packages/private" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/x-pack/platform/packages/shared" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/x-pack/platform/plugins/private" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/x-pack/solutions/chat" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/x-pack/solutions/observability/packages" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/x-pack/solutions/search" >> ${TMPPLIST}
+ ${ECHO} "@dir ${WWWDIR}/x-pack/solutions/security/packages" >> ${TMPPLIST}
+
+.include <bsd.port.mk>
diff --git a/textproc/kibana93/distinfo b/textproc/kibana93/distinfo
new file mode 100644
index 000000000000..db6f880ae0f7
--- /dev/null
+++ b/textproc/kibana93/distinfo
@@ -0,0 +1,7 @@
+TIMESTAMP = 1773434343
+SHA256 (kibana-9.2.6-linux-x86_64.tar.gz) = c14afe8be6ff5deee49587e345d887fb5005418d8b508681b7651d05dd82b55e
+SIZE (kibana-9.2.6-linux-x86_64.tar.gz) = 369100974
+SHA256 (nodejs-nan-v2.25.0_GH0.tar.gz) = 26c710caffec40676e48af09680d7b6131103a9a7e56f7522cc2edfe70cda33d
+SIZE (nodejs-nan-v2.25.0_GH0.tar.gz) = 111978
+SHA256 (uhop-node-re2-1.23.3_GH0.tar.gz) = 0037a38f6f58247af93a1f7327cd4d9e0a13a55dc54722d8ab697b8c134865e2
+SIZE (uhop-node-re2-1.23.3_GH0.tar.gz) = 53397
diff --git a/textproc/kibana93/files/extra-node-re2-binding-gyp.patch b/textproc/kibana93/files/extra-node-re2-binding-gyp.patch
new file mode 100644
index 000000000000..1b3e7a978287
--- /dev/null
+++ b/textproc/kibana93/files/extra-node-re2-binding-gyp.patch
@@ -0,0 +1,131 @@
+--- binding.gyp.orig 2026-03-09 15:20:39.294950000 -0400
++++ binding.gyp 2026-03-09 15:23:16.005750000 -0400
+@@ -16,107 +16,6 @@
+ "lib/split.cc",
+ "lib/to_string.cc",
+ "lib/set.cc",
+- "vendor/re2/re2/bitmap256.cc",
+- "vendor/re2/re2/bitstate.cc",
+- "vendor/re2/re2/compile.cc",
+- "vendor/re2/re2/dfa.cc",
+- "vendor/re2/re2/filtered_re2.cc",
+- "vendor/re2/re2/mimics_pcre.cc",
+- "vendor/re2/re2/nfa.cc",
+- "vendor/re2/re2/onepass.cc",
+- "vendor/re2/re2/parse.cc",
+- "vendor/re2/re2/perl_groups.cc",
+- "vendor/re2/re2/prefilter.cc",
+- "vendor/re2/re2/prefilter_tree.cc",
+- "vendor/re2/re2/prog.cc",
+- "vendor/re2/re2/re2.cc",
+- "vendor/re2/re2/regexp.cc",
+- "vendor/re2/re2/set.cc",
+- "vendor/re2/re2/simplify.cc",
+- "vendor/re2/re2/tostring.cc",
+- "vendor/re2/re2/unicode_casefold.cc",
+- "vendor/re2/re2/unicode_groups.cc",
+- "vendor/re2/util/pcre.cc",
+- "vendor/re2/util/rune.cc",
+- "vendor/re2/util/strutil.cc",
+- "vendor/abseil-cpp/absl/base/internal/cycleclock.cc",
+- "vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc",
+- "vendor/abseil-cpp/absl/base/internal/raw_logging.cc",
+- "vendor/abseil-cpp/absl/base/internal/spinlock.cc",
+- "vendor/abseil-cpp/absl/base/internal/spinlock_wait.cc",
+- "vendor/abseil-cpp/absl/base/internal/strerror.cc",
+- "vendor/abseil-cpp/absl/base/internal/sysinfo.cc",
+- "vendor/abseil-cpp/absl/base/internal/thread_identity.cc",
+- "vendor/abseil-cpp/absl/base/internal/throw_delegate.cc",
+- "vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc",
+- "vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc",
+- "vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc",
+- "vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc",
+- "vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc",
+- "vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc",
+- "vendor/abseil-cpp/absl/debugging/internal/demangle.cc",
+- "vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc",
+- "vendor/abseil-cpp/absl/debugging/internal/address_is_readable.cc",
+- "vendor/abseil-cpp/absl/debugging/internal/elf_mem_image.cc",
+- "vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc",
+- "vendor/abseil-cpp/absl/debugging/internal/utf8_for_code_point.cc",
+- "vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc",
+- "vendor/abseil-cpp/absl/debugging/stacktrace.cc",
+- "vendor/abseil-cpp/absl/debugging/symbolize.cc",
+- "vendor/abseil-cpp/absl/flags/commandlineflag.cc",
+- "vendor/abseil-cpp/absl/flags/internal/commandlineflag.cc",
+- "vendor/abseil-cpp/absl/flags/internal/flag.cc",
+- "vendor/abseil-cpp/absl/flags/internal/private_handle_accessor.cc",
+- "vendor/abseil-cpp/absl/flags/internal/program_name.cc",
+- "vendor/abseil-cpp/absl/flags/marshalling.cc",
+- "vendor/abseil-cpp/absl/flags/reflection.cc",
+- "vendor/abseil-cpp/absl/flags/usage_config.cc",
+- "vendor/abseil-cpp/absl/hash/internal/city.cc",
+- "vendor/abseil-cpp/absl/hash/internal/hash.cc",
+- "vendor/abseil-cpp/absl/log/internal/globals.cc",
+- "vendor/abseil-cpp/absl/log/internal/log_format.cc",
+- "vendor/abseil-cpp/absl/log/internal/log_message.cc",
+- "vendor/abseil-cpp/absl/log/internal/log_sink_set.cc",
+- "vendor/abseil-cpp/absl/log/internal/nullguard.cc",
+- "vendor/abseil-cpp/absl/log/internal/proto.cc",
+- "vendor/abseil-cpp/absl/log/internal/structured_proto.cc",
+- "vendor/abseil-cpp/absl/log/globals.cc",
+- "vendor/abseil-cpp/absl/log/log_sink.cc",
+- "vendor/abseil-cpp/absl/numeric/int128.cc",
+- "vendor/abseil-cpp/absl/strings/ascii.cc",
+- "vendor/abseil-cpp/absl/strings/charconv.cc",
+- "vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc",
+- "vendor/abseil-cpp/absl/strings/internal/charconv_parse.cc",
+- "vendor/abseil-cpp/absl/strings/internal/memutil.cc",
+- "vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc",
+- "vendor/abseil-cpp/absl/strings/internal/str_format/bind.cc",
+- "vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc",
+- "vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc",
+- "vendor/abseil-cpp/absl/strings/internal/str_format/output.cc",
+- "vendor/abseil-cpp/absl/strings/internal/str_format/parser.cc",
+- "vendor/abseil-cpp/absl/strings/internal/utf8.cc",
+- "vendor/abseil-cpp/absl/strings/match.cc",
+- "vendor/abseil-cpp/absl/strings/numbers.cc",
+- "vendor/abseil-cpp/absl/strings/str_cat.cc",
+- "vendor/abseil-cpp/absl/strings/str_split.cc",
+- "vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc",
+- "vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc",
+- "vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc",
+- "vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc",
+- "vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc",
+- "vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc",
+- "vendor/abseil-cpp/absl/synchronization/mutex.cc",
+- "vendor/abseil-cpp/absl/time/clock.cc",
+- "vendor/abseil-cpp/absl/time/duration.cc",
+- "vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc",
+- "vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc",
+- "vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc",
+- "vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc",
+- "vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc",
+- "vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc",
+- "vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc",
+- "vendor/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc",
+- "vendor/abseil-cpp/absl/time/time.cc",
+ ],
+ "cflags": [
+ "-std=c++2a",
+@@ -125,7 +24,7 @@
+ "-Wno-sign-compare",
+ "-Wno-unused-parameter",
+ "-Wno-missing-field-initializers",
+- "-Wno-cast-function-type",
++ "-Wno-bad-function-cast",
+ "-O3",
+ "-g"
+ ],
+@@ -134,9 +33,8 @@
+ "NOMINMAX"
+ ],
+ "include_dirs": [
+- "<!(node -e \"require('nan')\")",
+- "vendor/re2",
+- "vendor/abseil-cpp",
++ "%%PREFIX%%/include",
++ "%%DEVDIR%%/nan",
+ ],
+ "xcode_settings": {
+ "MACOSX_DEPLOYMENT_TARGET": "10.15",
diff --git a/textproc/kibana93/files/kibana.in b/textproc/kibana93/files/kibana.in
new file mode 100644
index 000000000000..f62ffa8bf9d9
--- /dev/null
+++ b/textproc/kibana93/files/kibana.in
@@ -0,0 +1,83 @@
+#!/bin/sh
+
+# PROVIDE: kibana
+# REQUIRE: DAEMON
+# BEFORE: LOGIN
+# KEYWORD: shutdown
+
+. /etc/rc.subr
+
+name=kibana
+rcvar=kibana_enable
+
+load_rc_config $name
+
+: ${kibana_enable:="NO"}
+: ${kibana_config:="%%ETCDIR%%/kibana.yml"}
+: ${kibana_user:="%%KIBANAUSER%%"}
+: ${kibana_group:="%%KIBANAGROUP%%"}
+: ${kibana_log:="/var/log/kibana.log"}
+: ${kibana_syslog_output_enable:="NO"}
+: ${kibana_chdir:="%%WWWDIR%%/data"}
+
+start_precmd="kibana_start_precmd"
+reload_cmd="kibana_reload_cmd"
+extra_commands="reload"
+
+if checkyesno kibana_syslog_output_enable; then
+ if [ -n "${kibana_syslog_output_tag}" ]; then
+ kibana_syslog_output_flags="-T ${kibana_syslog_output_tag}"
+ else
+ kibana_syslog_output_flags="-T ${name}"
+ fi
+ if [ -n "${kibana_syslog_output_priority}" ]; then
+ kibana_syslog_output_flags="${kibana_syslog_output_flags} -s ${kibana_syslog_output_priority}"
+ fi
+ if [ -n "${kibana_syslog_output_facility}" ]; then
+ kibana_syslog_output_flags="${kibana_syslog_output_flags} -l ${kibana_syslog_output_facility}"
+ fi
+fi
+
+NODE="%%LOCALBASE%%/bin/node"
+
+required_files="${kibana_config}"
+_piddir="/var/run/${name}"
+pidfile="${_piddir}/${name}.pid"
+procname="${NODE}"
+
+command="/usr/sbin/daemon"
+command_args="-f ${kibana_syslog_output_flags} -p ${pidfile} -t ${name} \
+ /usr/bin/env BABEL_DISABLE_CACHE=1 NODE_ENV=production ${kibana_env} \
+ ${NODE} --no-warnings --max-http-header-size=65536 \
+ %%WWWDIR%%/src/cli/kibana/dist.js serve \
+ --config ${kibana_config} --log-file ${kibana_log} \
+ --xpack.reporting.enabled=false ${kibana_args}"
+
+kibana_start_precmd()
+{
+ if [ ! -e "${_piddir}" ]; then
+ install -d -m 0750 -o ${kibana_user} -g ${kibana_group} ${_piddir}
+ fi
+ if [ ! -f ${kibana_log} ]; then
+ install -o ${kibana_user} -g ${kibana_group} -m 640 /dev/null ${kibana_log}
+ fi
+ if [ ! -d %%WWWDIR%%/optimize ]; then
+ install -d -o ${kibana_user} -g ${kibana_group} %%WWWDIR%%/optimize
+ else
+ # We may have installed a plugin as root which will cause files in here
+ # to be owned by root:wheel. Fix with a chown.
+ chown -R ${kibana_user}:${kibana_group} %%WWWDIR%%/optimize
+ fi
+}
+
+kibana_reload_cmd()
+{
+ if [ -z "$rc_pid" ]; then
+ _run_rc_notrunning
+ return 1
+ else
+ pkill -HUP -P ${rc_pid}
+ fi
+}
+
+run_rc_command "$1"
diff --git a/textproc/kibana93/files/patch-config_kibana.yml b/textproc/kibana93/files/patch-config_kibana.yml
new file mode 100644
index 000000000000..b49a315223f4
--- /dev/null
+++ b/textproc/kibana93/files/patch-config_kibana.yml
@@ -0,0 +1,15 @@
+--- config/kibana.yml.orig 2026-02-24 03:31:41 UTC
++++ config/kibana.yml
+@@ -139,10 +139,10 @@
+
+ # =================== System: Other ===================
+ # The path where Kibana stores persistent data not saved in Elasticsearch. Defaults to data
+-#path.data: data
++path.data: %%WWWDIR%%/data
+
+ # Specifies the path where Kibana creates the process ID file.
+-#pid.file: /run/kibana/kibana.pid
++pid.file: /var/run/kibana/kibana.pid
+
+ # Set the interval in milliseconds to sample system and process performance
+ # metrics. Minimum is 100ms. Defaults to 5000ms.
diff --git a/textproc/kibana93/files/patch-config_node.options b/textproc/kibana93/files/patch-config_node.options
new file mode 100644
index 000000000000..8f689c12ae09
--- /dev/null
+++ b/textproc/kibana93/files/patch-config_node.options
@@ -0,0 +1,11 @@
+--- config/node.options.orig 2026-02-24 03:31:41 UTC
++++ config/node.options
+@@ -6,7 +6,7 @@
+ #--max-old-space-size=4096
+
+ ## do not terminate process on unhandled promise rejection
+- --unhandled-rejections=warn
++--unhandled-rejections=warn
+
+ ## restore < Node 16 default DNS lookup behavior
+ --dns-result-order=ipv4first
diff --git a/textproc/kibana93/files/patch-node__modules__kbn_setup-node-env_node__version__validator.js b/textproc/kibana93/files/patch-node__modules__kbn_setup-node-env_node__version__validator.js
new file mode 100644
index 000000000000..a1004ecffbe1
--- /dev/null
+++ b/textproc/kibana93/files/patch-node__modules__kbn_setup-node-env_node__version__validator.js
@@ -0,0 +1,16 @@
+--- node_modules/@kbn/setup-node-env/node_version_validator.js.orig 2026-02-24 03:31:48 UTC
++++ node_modules/@kbn/setup-node-env/node_version_validator.js
+@@ -21,11 +21,11 @@ if (!process.env.UNSAFE_DISABLE_NODE_VERSION_VALIDATIO
+ var currentVersion = process && process.version || null;
+ var rawRequiredVersion = pkg && pkg.engines && pkg.engines.node || null;
+ var requiredVersion = rawRequiredVersion ? 'v' + rawRequiredVersion : rawRequiredVersion;
+- var isVersionValid = !!currentVersion && !!requiredVersion && currentVersion === requiredVersion;
++ var isVersionValid = !!currentVersion && !!requiredVersion && currentVersion >= requiredVersion;
+
+ // Validates current the NodeJS version compatibility when Kibana starts.
+ if (!isVersionValid) {
+- var errorMessage = 'Kibana does not support the current Node.js version ' + currentVersion + '. Please use Node.js ' + requiredVersion + '.';
++ var errorMessage = 'Kibana does not support the current Node.js version ' + currentVersion + '. Please use Node.js >= ' + requiredVersion + '.';
+
+ // Actions to apply when validation fails: error report + exit.
+ console.error(errorMessage);
diff --git a/textproc/kibana93/files/pkg-deinstall.in b/textproc/kibana93/files/pkg-deinstall.in
new file mode 100644
index 000000000000..e921ed650bfd
--- /dev/null
+++ b/textproc/kibana93/files/pkg-deinstall.in
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+case "$2" in
+POST-DEINSTALL)
+ if [ -d %%WWWDIR%%/optimize ]; then
+ /usr/bin/find %%WWWDIR%%/optimize/ -delete
+ fi
+
+ cat <<EOMSG
+
+If %%PORTNAME%%%%PKGNAMESUFFIX%% is being deleted permanently, and you do not wish to keep any
+data that was in the cluster, then you may wish to delete the
+%%WWWDIR%% directory. This can be done with the command:
+
+ # rm -rf %%WWWDIR%%
+
+Please ignore this if %%PORTNAME%%%%PKGNAMESUFFIX%% is being upgraded.
+EOMSG
+ ;;
+esac
diff --git a/textproc/kibana93/files/pkg-message.in b/textproc/kibana93/files/pkg-message.in
new file mode 100644
index 000000000000..3c0f248d8900
--- /dev/null
+++ b/textproc/kibana93/files/pkg-message.in
@@ -0,0 +1,8 @@
+[
+{ type: install
+ message: <<EOM
+NOTICE: This port installs Kibana-specific utilities
+as symbolic links into %%BINDIR%%.
+EOM
+}
+]
diff --git a/textproc/kibana93/pkg-descr b/textproc/kibana93/pkg-descr
new file mode 100644
index 000000000000..a28cdcbb1b70
--- /dev/null
+++ b/textproc/kibana93/pkg-descr
@@ -0,0 +1,6 @@
+Kibana is an open source (Apache Licensed) browser-based analytics and search
+dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana
+strives to be easy to get started with, while also being flexible and powerful,
+just like Elasticsearch.
+
+Kibana 9.2.x is compatible with Elasticsearch 9.2.x