Add a port of ElasticSearch 7.x

This is an updated version of the submission to work with 7.5.2 and to
tweak a few things (e.g. sorting, petting portlint)

PR:		237372
Submitted by:	Miroslav Lachman
This commit is contained in:
Greg Lewis 2020-01-24 19:16:31 +00:00
parent dccc3ed0be
commit 7a593ec830
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=523980
8 changed files with 344 additions and 0 deletions

View file

@ -164,6 +164,7 @@
SUBDIR += elasticsearch5
SUBDIR += elasticsearch5-search-guard
SUBDIR += elasticsearch6
SUBDIR += elasticsearch7
SUBDIR += elixir-earmark
SUBDIR += elixir-funnel
SUBDIR += elixir-sweet_xml

View file

@ -0,0 +1,135 @@
# Created by: Tom Judge <tj@FreeBSD.org>
# $FreeBSD$
PORTNAME= elasticsearch
PORTVERSION= 7.5.2
CATEGORIES= textproc java devel
MASTER_SITES= https://artifacts.elastic.co/downloads/${PORTNAME}/
PKGNAMESUFFIX= 7
DISTNAME= ${PORTNAME}-${PORTVERSION}-no-jdk-linux-x86_64
MAINTAINER= elastic@FreeBSD.org
COMMENT= Full-text search engine for Java
LICENSE= APACHE20
BUILD_DEPENDS= jna>0:devel/jna
RUN_DEPENDS= bash>0:shells/bash \
jna>0:devel/jna
USES= cpe shebangfix
CONFLICTS= elasticsearch[56]-[0-9]*
NO_ARCH= yes
USE_JAVA= yes
NO_BUILD= yes
WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}
JAVA_VERSION= 8+
USE_RC_SUBR= ${PORTNAME}
SHEBANG_FILES= bin/elasticsearch \
bin/elasticsearch-certgen \
bin/elasticsearch-certutil \
bin/elasticsearch-cli \
bin/elasticsearch-croneval \
bin/elasticsearch-env \
bin/elasticsearch-keystore \
bin/elasticsearch-migrate \
bin/elasticsearch-node \
bin/elasticsearch-plugin \
bin/elasticsearch-saml-metadata \
bin/elasticsearch-setup-passwords \
bin/elasticsearch-shard \
bin/elasticsearch-sql-cli \
bin/elasticsearch-syskeygen \
bin/elasticsearch-users \
bin/x-pack-env \
bin/x-pack-security-env \
bin/x-pack-watcher-env
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-croneval \
elasticsearch-env \
elasticsearch-keystore \
elasticsearch-migrate \
elasticsearch-node \
elasticsearch-plugin \
elasticsearch-saml-metadata \
elasticsearch-setup-passwords \
elasticsearch-shard \
elasticsearch-sql-cli \
elasticsearch-sql-cli-${PORTVERSION}.jar \
elasticsearch-syskeygen \
elasticsearch-users \
x-pack-env \
x-pack-security-env \
x-pack-watcher-env
PORTDOCS= LICENSE.txt \
NOTICE.txt \
README.asciidoc
SIGAR_ARCH= ${ARCH:S|i386|x86|}
SEARCHUSER?= elasticsearch
SEARCHGROUP?= ${SEARCHUSER}
USERS= ${SEARCHUSER}
GROUPS= ${SEARCHGROUP}
SUB_LIST= ETCDIR=${ETCDIR} JAVA_HOME=${JAVA_HOME}
SUB_FILES= pkg-message
post-patch:
${RM} ${WRKSRC}/lib/jna-*.jar
# ML plugin not supported on FreeBSD
${RM} -rf ${WRKSRC}/modules/x-pack/x-pack-ml
do-install:
${MKDIR} ${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
.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.jar
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(elasticsearch,elasticsearch,0755) ${ETCDIR}" >> ${TMPPLIST}
.include <bsd.port.mk>

View file

@ -0,0 +1,3 @@
TIMESTAMP = 1579833580
SHA256 (elasticsearch-7.5.2-no-jdk-linux-x86_64.tar.gz) = 5e7d47e2a154400ea2f3ce25ebff621b2661a259cfab53811142f574f21397e5
SIZE (elasticsearch-7.5.2-no-jdk-linux-x86_64.tar.gz) = 141758515

View file

@ -0,0 +1,130 @@
#!/bin/sh
#
# $FreeBSD$
#
# PROVIDE: elasticsearch
# REQUIRE: NETWORKING SERVERS
# BEFORE: DAEMON
# 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 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 %%PREFIX%%/etc/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 %%PREFIX%%/etc/jvm.options"
exit 1;
fi
if [ "x${elasticsearch_props}" != "x" ]; then
echo "The elasticsearch_props variable is no longer supported please set this in %%PREFIX%%/etc/jvm.options"
exit 1;
fi
run_rc_command "$1"

View file

@ -0,0 +1,22 @@
--- config/elasticsearch.yml.orig 2018-09-26 13:30:23 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 -----------------------------------
#
@@ -86,3 +88,6 @@
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
+
+# ml is not supported on FreeBSD
+xpack.ml.enabled: false

View file

@ -0,0 +1,15 @@
--- config/jvm.options.orig 2020-01-15 04:09:47 UTC
+++ config/jvm.options
@@ -67,10 +67,10 @@
8:-XX:+PrintGCDateStamps
8:-XX:+PrintTenuringDistribution
8:-XX:+PrintGCApplicationStoppedTime
-8:-Xloggc:logs/gc.log
+8:-Xloggc:${ES_TMPDIR}/gc.log
8:-XX:+UseGCLogFileRotation
8:-XX:NumberOfGCLogFiles=32
8:-XX:GCLogFileSize=64m
# JDK 9+ GC logging
-9-:-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m
+9-:-Xlog:gc*,gc+age=trace,safepoint:file=${ES_TMPDIR}/gc.log:utctime,pid,tags:filecount=32,filesize=64m

View file

@ -0,0 +1,34 @@
[
{ 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
!!! 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 aims to be a Distributed, RESTful, Search Engine built on top of
Apache Lucene.
WWW: https://www.elastic.co/