textproc/elasticsearch8: Add new port

Add elasticsearch8, a distributed, RESTful search and analytics engine.

For release notes since version 8.0 see
https://www.elastic.co/guide/en/elasticsearch/reference/8.5/es-release-notes.html
This commit is contained in:
Juraj Lutter 2022-11-26 10:37:44 +01:00
parent 27c280e076
commit a6b3049a93
9 changed files with 372 additions and 0 deletions

View file

@ -175,6 +175,7 @@
SUBDIR += elasticsearch-plugin-head
SUBDIR += elasticsearch6
SUBDIR += elasticsearch7
SUBDIR += elasticsearch8
SUBDIR += en-aspell
SUBDIR += en-hunspell
SUBDIR += en-mythes

View file

@ -0,0 +1,130 @@
PORTNAME= elasticsearch
PORTVERSION= 8.5.2
CATEGORIES= textproc java devel
MASTER_SITES= https://artifacts.elastic.co/downloads/${PORTNAME}/
PKGNAMESUFFIX= 8
DISTNAME= ${PORTNAME}-${PORTVERSION}-darwin-x86_64
MAINTAINER= elastic@FreeBSD.org
COMMENT= Distributed, RESTful search and analytics engine
WWW= https://www.elastic.co/
LICENSE= APACHE20
BUILD_DEPENDS= jna>0:devel/jna
RUN_DEPENDS= bash:shells/bash \
jna>0:devel/jna
USES= cpe shebangfix
USE_JAVA= yes
JAVA_VERSION= 17+
USE_RC_SUBR= ${PORTNAME}
SHEBANG_FILES= bin/elasticsearch bin/elasticsearch-certgen \
bin/elasticsearch-certutil bin/elasticsearch-cli \
bin/elasticsearch-create-enrollment-token \
bin/elasticsearch-croneval bin/elasticsearch-env \
bin/elasticsearch-env-from-file bin/elasticsearch-geoip \
bin/elasticsearch-keystore bin/elasticsearch-node \
bin/elasticsearch-plugin bin/elasticsearch-reconfigure-node \
bin/elasticsearch-reset-password \
bin/elasticsearch-saml-metadata \
bin/elasticsearch-service-tokens \
bin/elasticsearch-setup-passwords bin/elasticsearch-shard \
bin/elasticsearch-sql-cli bin/elasticsearch-syskeygen \
bin/elasticsearch-users
CONFLICTS= elasticsearch6 elasticsearch7
NO_ARCH= yes
NO_BUILD= yes
WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}
OPTIONS_DEFINE= DOCS
.include <bsd.port.options.mk>
CONFIG_FILES= elasticsearch.yml jvm.options log4j2.properties \
role_mapping.yml roles.yml
BINS= elasticsearch elasticsearch-certgen elasticsearch-certutil \
elasticsearch-cli elasticsearch-create-enrollment-token \
elasticsearch-croneval elasticsearch-env \
elasticsearch-env-from-file elasticsearch-geoip \
elasticsearch-keystore elasticsearch-node elasticsearch-plugin \
elasticsearch-reconfigure-node elasticsearch-reset-password \
elasticsearch-saml-metadata elasticsearch-service-tokens \
elasticsearch-setup-passwords elasticsearch-shard \
elasticsearch-sql-cli elasticsearch-sql-cli-${PORTVERSION}.jar \
elasticsearch-syskeygen elasticsearch-users
PORTDOCS= LICENSE.txt NOTICE.txt README.asciidoc
SIGAR_ARCH= ${ARCH:S|i386|x86|}
SEARCHUSER?= elasticsearch
SEARCHGROUP?= ${SEARCHUSER}
USERS= ${SEARCHUSER}
GROUPS= ${SEARCHGROUP}
PORTSCOUT= limit:^8
SUB_FILES= pkg-message
SUB_LIST= ETCDIR=${ETCDIR} \
JAVA_HOME=${JAVA_HOME} \
BINDIR=${PREFIX}/bin
post-patch:
${RM} ${WRKSRC}/lib/jna-*.jar
# ML plugin not supported on FreeBSD
${RM} -rf ${WRKSRC}/modules/x-pack/x-pack-ml
${RM} -rf ${WRKSRC}/jdk.app
${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' ${WRKSRC}/bin/elasticsearch-env
do-install:
${INSTALL} -d -m 0750 ${STAGEDIR}${PREFIX}/etc/elasticsearch
.for f in ${CONFIG_FILES}
${INSTALL} ${WRKSRC}/config/${f} ${STAGEDIR}${ETCDIR}/${f}.sample
.endfor
${MKDIR} ${STAGEDIR}${PREFIX}/lib/elasticsearch/bin
.for f in ${BINS}
${INSTALL_SCRIPT} ${WRKSRC}/bin/${f} ${STAGEDIR}${PREFIX}/lib/elasticsearch/bin
${RLN} ${STAGEDIR}${PREFIX}/lib/elasticsearch/bin/${f} ${STAGEDIR}${PREFIX}/bin/${f}
${ECHO_CMD} "bin/${f}" >> ${TMPPLIST}
.endfor
${MKDIR} ${STAGEDIR}${PREFIX}/lib/elasticsearch/lib
(cd ${WRKSRC}/lib && ${COPYTREE_SHARE} . ${STAGEDIR}${PREFIX}/lib/elasticsearch/lib/ "-name *\.jar")
${MKDIR} ${STAGEDIR}${PREFIX}/lib/elasticsearch/modules
(cd ${WRKSRC}/modules && ${COPYTREE_SHARE} . ${STAGEDIR}${PREFIX}/lib/elasticsearch/modules/)
${MKDIR} ${STAGEDIR}${PREFIX}/lib/elasticsearch/plugins
${MKDIR} ${STAGEDIR}${PREFIX}/libexec/elasticsearch
${INSTALL} -lrs ${STAGEDIR}${ETCDIR} ${STAGEDIR}${PREFIX}/lib/elasticsearch/config
${LN} -s ${JAVASHAREDIR}/classes/jna.jar ${STAGEDIR}${PREFIX}/lib/elasticsearch/lib/jna-0.0.0.jar
${TOUCH} ${STAGEDIR}${ETCDIR}/users.sample ${STAGEDIR}${ETCDIR}/users_roles.sample
do-install-DOCS-on:
${MKDIR} ${STAGEDIR}${DOCSDIR}
.for f in ${PORTDOCS}
${INSTALL_DATA} ${WRKSRC}/${f} ${STAGEDIR}${DOCSDIR}
.endfor
post-install:
${ECHO} "@sample ${ETCDIR}/elasticsearch.yml.sample" >> ${TMPPLIST}
${ECHO} "@sample ${ETCDIR}/jvm.options.sample" >> ${TMPPLIST}
${ECHO} "@sample ${ETCDIR}/log4j2.properties.sample" >> ${TMPPLIST}
${ECHO} "@sample ${ETCDIR}/role_mapping.yml.sample" >> ${TMPPLIST}
${ECHO} "@sample ${ETCDIR}/roles.yml.sample" >> ${TMPPLIST}
${FIND} -s ${STAGEDIR}${PREFIX}/lib/elasticsearch -not -type d | ${SORT} | \
${SED} -e 's#^${STAGEDIR}${PREFIX}/##' >> ${TMPPLIST}
${ECHO} "@dir lib/elasticsearch/plugins" >> ${TMPPLIST}
${ECHO} "@dir libexec/elasticsearch" >> ${TMPPLIST}
${ECHO} "@dir(${SEARCHUSER},${SEARCHGROUP},0755) ${ETCDIR}" >> ${TMPPLIST}
${ECHO} "@owner ${SEARCHUSER}" >> ${TMPPLIST}
${ECHO} "@group ${SEARCHGROUP}" >> ${TMPPLIST}
${ECHO} "@mode 0640" >> ${TMPPLIST}
${ECHO} "@sample ${ETCDIR}/users.sample" >> ${TMPPLIST}
${ECHO} "@sample ${ETCDIR}/users_roles.sample" >> ${TMPPLIST}
${ECHO} "@mode" >> ${TMPPLIST}
${ECHO} "@owner" >> ${TMPPLIST}
${ECHO} "@group" >> ${TMPPLIST}
.include <bsd.port.mk>

View file

@ -0,0 +1,3 @@
TIMESTAMP = 1669453811
SHA256 (elasticsearch-8.5.2-darwin-x86_64.tar.gz) = b1b74d6570bcc7f349bcc2c1554dc6271992b3626e2e4d402889eba8aae00087
SIZE (elasticsearch-8.5.2-darwin-x86_64.tar.gz) = 393454573

View file

@ -0,0 +1,128 @@
#!/bin/sh
# PROVIDE: elasticsearch
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: shutdown
#
# Add the following line to /etc/rc.conf to enable elasticsearch:
#
# elasticsearch_enable="YES"
#
# elasticsearch_user (username): Set to elasticsearch by default.
# Set it to required username.
# elasticsearch_group (group): Set to elasticsearch by default.
# Set it to required group.
# elasticsearch_config (path): Set to %%PREFIX%%/etc/elasticsearch/elasticsearch.yml by default.
# Set it to the config file location.
# elasticsearch_java_home (path): Set to %%JAVA_HOME%% by default.
# Set it to the root of the JDK to use.
#
. /etc/rc.subr
name=elasticsearch
rcvar=elasticsearch_enable
load_rc_config ${name}
: ${elasticsearch_enable:=NO}
: ${elasticsearch_user=elasticsearch}
: ${elasticsearch_group=elasticsearch}
: ${elasticsearch_config=%%PREFIX%%/etc/elasticsearch}
: ${elasticsearch_login_class=root}
: ${elasticsearch_java_home="%%JAVA_HOME%%"}
required_files="${elasticsearch_config}/elasticsearch.yml"
_pidprefix=/var/run/elasticsearch/elasticsearch
pidfile=${_pidprefix}.pid
procname=${elasticsearch_java_home}/bin/java
extra_commands="console status"
console_cmd=elasticsearch_console
start_precmd=elasticsearch_precmd
command=%%PREFIX%%/lib/elasticsearch/bin/elasticsearch
command_args="-d --pidfile=${pidfile}"
export ES_PATH_CONF=${elasticsearch_config}
export ES_JAVA_HOME=${elasticsearch_java_home}
elasticsearch_precmd()
{
/usr/bin/install -d -o ${elasticsearch_user} -g ${elasticsearch_group} -m 755 ${pidfile%/*}
/usr/bin/install -d -o ${elasticsearch_user} -g ${elasticsearch_group} -m 755 /var/db/elasticsearch
/usr/bin/install -d -o ${elasticsearch_user} -g ${elasticsearch_group} -m 755 /var/log/elasticsearch
}
elasticsearch_console()
{
command_args=""
run_rc_command "start"
}
if [ -n "$2" ]; then
profile="$2"
if [ "x${elasticsearch_profiles}" != "x" ]; then
eval elasticsearch_config="\${elasticsearch_${profile}_config:-}"
if [ "x${elasticsearch_config}" = "x" ]; then
echo "You must define a configuration (elasticsearch_${profile}_config)"
exit 1
fi
export ES_PATH_CONF=${elasticsearch_config}
required_files="${elasticsearch_config}/elasticsearch.yml"
required_files="${elasticsearch_config}/jvm.options"
eval elasticsearch_enable="\${elasticsearch_${profile}_enable:-${elasticsearch_enable}}"
pidfile="${_pidprefix}.${profile}.pid"
command_args="-d --pidfile=${pidfile}"
echo "===> elasticsearch profile: ${profile}"
else
echo "$0: extra argument ignored"
fi
else
if [ "x${elasticsearch_profiles}" != "x" -a "x$1" != "x" ]; then
for profile in ${elasticsearch_profiles}; do
eval _enable="\${elasticsearch_${profile}_enable}"
case "x${_enable:-${elasticsearch_enable}}" in
x|x[Nn][Oo]|x[Nn][Oo][Nn][Ee])
continue
;;
x[Yy][Ee][Ss])
;;
*)
if test -z "$_enable"; then
_var=elasticsearch_enable
else
_var=elasticsearch_"${profile}"_enable
fi
echo "Bad value" \
"'${_enable:-${elasticsearch_enable}}'" \
"for ${_var}. " \
"Profile ${profile} skipped."
continue
;;
esac
%%PREFIX%%/etc/rc.d/elasticsearch $1 ${profile}
retcode="$?"
if [ "0${retcode}" -ne 0 ]; then
failed="${profile} (${retcode}) ${failed:-}"
else
success="${profile} ${success:-}"
fi
done
exit 0
fi
fi
if [ "x${elasticsearch_mem_min}" != "x" ]; then
echo "The elasticsearch_mem_min variable is no longer supported please set this in ${elasticsearch_config}/jvm.options"
exit 1;
fi
if [ "x${elasticsearch_mem_max}" != "x" ]; then
echo "The elasticsearch_mem_max variable is no longer supported please set this in ${elasticsearch_config}/jvm.options"
exit 1;
fi
if [ "x${elasticsearch_props}" != "x" ]; then
echo "The elasticsearch_props variable is no longer supported please set this in ${elasticsearch_config}/jvm.options"
exit 1;
fi
run_rc_command "$1"

View file

@ -0,0 +1,26 @@
--- bin/elasticsearch-env.orig 2022-11-26 09:28:22 UTC
+++ bin/elasticsearch-env
@@ -46,12 +46,17 @@ if [ ! -z "$ES_JAVA_HOME" ]; then
"$JAVA" -cp "$ES_HOME/lib/java-version-checker/*" org.elasticsearch.tools.java_version_checker.JavaVersionChecker
else
# use the bundled JDK (default)
- if [ "$(uname -s)" = "Darwin" ]; then
- # macOS has a different structure
- JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"
- else
- JAVA="$ES_HOME/jdk/bin/java"
- fi
+ case "$(uname -s)" in
+ "Darwin")
+ JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"
+ ;;
+ "FreeBSD")
+ JAVA=%%LOCALBASE%%/bin/java
+ ;;
+ *)
+ JAVA="$ES_HOME/jdk/bin/java"
+ ;;
+ esac
JAVA_TYPE="bundled JDK"
fi

View file

@ -0,0 +1,25 @@
--- config/elasticsearch.yml.orig 2022-11-17 18:55:38 UTC
+++ config/elasticsearch.yml
@@ -31,10 +31,12 @@
# Path to directory where to store the data (separate multiple locations by comma):
#
#path.data: /path/to/data
+path.data: /var/db/elasticsearch
#
# Path to log files:
#
#path.logs: /path/to/logs
+path.logs: /var/log/elasticsearch
#
# ----------------------------------- Memory -----------------------------------
#
@@ -80,6 +82,9 @@
# Enable an unauthenticated TCP readiness endpoint on localhost
#
#readiness.port: 9399
+
+# ml is not supported on FreeBSD
+xpack.ml.enabled: false
#
# ---------------------------------- Various -----------------------------------
#

View file

@ -0,0 +1,12 @@
--- config/jvm.options.orig 2022-11-17 18:55:38 UTC
+++ config/jvm.options
@@ -69,7 +69,7 @@
-XX:HeapDumpPath=data
# specify an alternative path for JVM fatal error logs
--XX:ErrorFile=logs/hs_err_pid%p.log
+-XX:ErrorFile=${ES_TMPDIR}/hs_err_pid%p.log
## GC logging
--Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m
+-Xlog:gc*,gc+age=trace,safepoint:file=${ES_TMPDIR}/gc.log:utctime,pid,tags:filecount=32,filesize=64m

View file

@ -0,0 +1,43 @@
[
{ type: install
message: <<EOM
Please see %%ETCDIR%% for sample versions of
elasticsearch.yml and logging.yml.
ElasticSearch requires memory locking of large amounts of RAM.
You may need to set:
sysctl security.bsd.unprivileged_mlock=1
When running within a jail, it's highly advisable to set:
enforce_statfs = 1
for the jail running elasticsearch instance.
NOTICE: elasticsearch port now installs elasticsearch-specific utilities
as symbolic links into %%BINDIR%%.
!!! PLUGINS NOTICE !!!
ElasticSearch plugins should only be installed via the elasticsearch-plugin
included with this software. As we strive to provide a minimum semblance
of security, the files installed by the package are owned by root:wheel.
This is different than upstream which expects all of the files to be
owned by the user and for you to execute the elasticsearch-plugin script
as said user.
You will encounter permissions errors with configuration files and
directories created by plugins which you will have to manually correct.
This is the price we have to pay to protect ourselves in the face of
a poorly designed security model.
e.g., after installing X-Pack you will have to correct:
%%ETCDIR%%/elasticsearch.keystore file to be owned by elasticsearch:elasticsearch
%%ETCDIR%%/x-pack directory/files to be owned by elasticsearch:elasticsearch
!!! PLUGINS NOTICE !!!
EOM
}
]

View file

@ -0,0 +1,4 @@
Elasticsearch is a distributed, RESTful search and analytics engine capable of
addressing a growing number of use cases. As the heart of the Elastic Stack, it
centrally stores your data for lightning fast search, fine-tuned relevancy, and
powerful analytics that scale with ease.