poissonsearch-oss/poissonsearch-oss.spec
2024-03-25 17:14:29 +08:00

591 lines
17 KiB
Ruby

# Disable brp-java-repack-jars, so jars will not be decompressed and repackaged
%define __jar_repack 0
# Generate digests, 8 means algorithm of sha256
# This is different from rpm sig algorithm
# Requires rpm version 4.12 + to generate but b/c run on older versions
%define _source_filedigest_algorithm 8
%define _binary_filedigest_algorithm 8
# User Define Variables
%define product_name poissonsearch
%define product_dir %{_datadir}/%{product_name}
%define config_dir %{_sysconfdir}/%{product_name}
%define data_dir %{_sharedstatedir}/%{product_name}
%define log_dir %{_localstatedir}/log/%{product_name}
%define pid_dir %{_localstatedir}/run/%{product_name}
%define build_arch x86_64
Name: poissonsearch-oss
Version: 1.0.0
%define package_version 1.0.0
Release: 1
License: ASL 2.0
Summary: Distributed RESTful search engine built for the cloud
URL: https://gitee.com/openeuler/poissonsearch-oss
Source0: https://gitee.com/openEuler/poissonsearch-oss/archive/refs/tags/%{package_version}.tar.gz
Group: Application/Internet
ExclusiveArch: %{build_arch}
BuildArch: %{build_arch}
BuildRequires: java-17-openjdk-devel,java-11-openjdk-devel,tar,gzip,rpmdevtools,dos2unix
Requires: java-11-openjdk-headless
Provides: elasticsearch-oss = 7.10.2-1
%description
poissonsearch-oss is a distributed RESTful search engine built for the cloud, forked from elasticsearch-oss 7.10.2.
%prep
tar -xzf %{_sourcedir}/%{package_version}.tar.gz -C %{_builddir}
%build
# need to add java home and runtime java home
export JAVA_HOME=/etc/alternatives/java_sdk_17
export RUNTIME_JAVA_HOME=$JAVA_HOME
cd %{name}-%{package_version}
dos2unix gradlew
./gradlew buildOssNoJdkRpm --no-daemon --warning-mode none -Dorg.gradle.java.home=/etc/alternatives/java_sdk_17
cd ..
mv %{name}-%{package_version}/distribution/packages/oss-no-jdk-rpm/build/distributions/%{name}-7.10.2-no-jdk-x86_64.rpm ./%{name}-%{version}-%{_architecture}.rpm
rpm2cpio %{name}-%{version}-%{_architecture}.rpm | cpio -divm
# dos2unix for all scripts
find etc -type f -print0 | xargs -0 dos2unix
find usr/lib -type f -print0 | xargs -0 dos2unix
find usr/share/poissonsearch/bin -type f -print0 | xargs -0 dos2unix
%install
# Create necessary directories
mkdir -p %{buildroot}%{pid_dir}
cp -a usr etc var %{buildroot}
%check
cd %{name}-%{package_version}
export JAVA_HOME=/etc/alternatives/java_sdk_11
export RUNTIME_JAVA_HOME=$JAVA_HOME
# need to build with java 17 in openEuler, jdk 11 will be recognized as jre in gradle 7.5.1 for some reason
# for 20.03, gralde daemon got killed for no reason, disable test until fix this issue
#./gradlew test --warning-mode none --no-daemon -Dorg.gradle.java.home=/etc/alternatives/java_sdk_17 > test.report
%pre -p /bin/bash
#!/bin/bash
RPM_ARCH=x86_64
RPM_OS=linux
RPM_PACKAGE_NAME=poissonsearch-oss
RPM_PACKAGE_VERSION=7.10.2
RPM_PACKAGE_RELEASE=1
#
# This script is executed in the pre-installation phase
#
# On Debian,
# $1=install : indicates an new install
# $1=upgrade : indicates an upgrade
#
# On RedHat,
# $1=1 : indicates an new install
# $1=2 : indicates an upgrade
err_exit() {
echo "$@" >&2
exit 1
}
# source the default env file
if [ -f "/etc/sysconfig/poissonsearch" ]; then
. "/etc/sysconfig/poissonsearch"
fi
export ES_PATH_CONF=${ES_PATH_CONF:-/etc/poissonsearch}
case "$1" in
# Debian ####################################################
install|upgrade)
# Create poissonsearch group if not existing
if ! getent group poissonsearch > /dev/null 2>&1 ; then
echo -n "Creating poissonsearch group..."
addgroup --quiet --system poissonsearch
echo " OK"
fi
# Create poissonsearch user if not existing
if ! id poissonsearch > /dev/null 2>&1 ; then
echo -n "Creating poissonsearch user..."
adduser --quiet \
--system \
--no-create-home \
--home /nonexistent \
--ingroup poissonsearch \
--disabled-password \
--shell /bin/false \
poissonsearch
echo " OK"
fi
;;
abort-deconfigure|abort-upgrade|abort-remove)
;;
# RedHat ####################################################
1|2)
# Create poissonsearch group if not existing
if ! getent group poissonsearch > /dev/null 2>&1 ; then
echo -n "Creating poissonsearch group..."
groupadd -r poissonsearch
echo " OK"
fi
# Create poissonsearch user if not existing
if ! id poissonsearch > /dev/null 2>&1 ; then
echo -n "Creating poissonsearch user..."
useradd --system \
--no-create-home \
--home-dir /nonexistent \
--gid poissonsearch \
--shell /sbin/nologin \
--comment "poissonsearch user" \
poissonsearch
echo " OK"
fi
;;
*)
err_exit "pre install script called with unknown argument \`$1'"
;;
esac
%post -p /bin/sh
RPM_ARCH=x86_64
RPM_OS=linux
RPM_PACKAGE_NAME=poissonsearch-oss
RPM_PACKAGE_VERSION=7.10.2
RPM_PACKAGE_RELEASE=1
#
# This script is executed in the post-installation phase
#
# On Debian,
# $1=configure : is set to 'configure' and if $2 is set, it is an upgrade
#
# On RedHat,
# $1=0 : indicates a removal
# $1=1 : indicates an upgrade
# source the default env file
if [ -f "/etc/sysconfig/poissonsearch" ]; then
. "/etc/sysconfig/poissonsearch"
fi
export ES_PATH_CONF=${ES_PATH_CONF:-/etc/poissonsearch}
IS_UPGRADE=false
case "$1" in
# Debian ####################################################
configure)
# If $1=configure and $2 is set, this is an upgrade
if [ -n $2 ]; then
IS_UPGRADE=true
fi
PACKAGE=deb
;;
abort-upgrade|abort-remove|abort-deconfigure)
PACKAGE=deb
;;
# RedHat ####################################################
1)
# If $1=1 this is an install
IS_UPGRADE=false
PACKAGE=rpm
;;
2)
# If $1=1 this is an upgrade
IS_UPGRADE=true
PACKAGE=rpm
;;
*)
echo "post install script called with unknown argument \`$1'" >&2
exit 1
;;
esac
# to pick up /usr/lib/sysctl.d/poissonsearch.conf
if command -v systemctl > /dev/null; then
systemctl restart systemd-sysctl.service || true
fi
if [ "x$IS_UPGRADE" != "xtrue" ]; then
if command -v systemctl >/dev/null; then
echo "### NOT starting on installation, please execute the following statements to configure poissonsearch service to start automatically using systemd"
echo " sudo systemctl daemon-reload"
echo " sudo systemctl enable poissonsearch.service"
echo "### You can start poissonsearch service by executing"
echo " sudo systemctl start poissonsearch.service"
elif command -v chkconfig >/dev/null; then
echo "### NOT starting on installation, please execute the following statements to configure poissonsearch service to start automatically using chkconfig"
echo " sudo chkconfig --add poissonsearch"
echo "### You can start poissonsearch service by executing"
echo " sudo service poissonsearch start"
elif command -v update-rc.d >/dev/null; then
echo "### NOT starting on installation, please execute the following statements to configure poissonsearch service to start automatically using chkconfig"
echo " sudo update-rc.d poissonsearch defaults 95 10"
echo "### You can start poissonsearch service by executing"
echo " sudo /etc/init.d/poissonsearch start"
fi
elif [ "$RESTART_ON_UPGRADE" = "true" ]; then
echo -n "Restarting poissonsearch service..."
if command -v systemctl >/dev/null; then
systemctl daemon-reload
systemctl restart poissonsearch.service || true
elif [ -x /etc/init.d/poissonsearch ]; then
if command -v invoke-rc.d >/dev/null; then
invoke-rc.d poissonsearch stop || true
invoke-rc.d poissonsearch start || true
else
/etc/init.d/poissonsearch restart || true
fi
# older suse linux distributions do not ship with systemd
# but do not have an /etc/init.d/ directory
# this tries to start the poissonsearch service on these
# as well without failing this script
elif [ -x /etc/rc.d/init.d/poissonsearch ] ; then
/etc/rc.d/init.d/poissonsearch restart || true
fi
echo " OK"
fi
# the equivalent code for rpm is in posttrans
if [ "$PACKAGE" = "deb" ]; then
if [ ! -f "${ES_PATH_CONF}"/elasticsearch.keystore ]; then
/usr/share/poissonsearch/bin/elasticsearch-keystore create
chown root:poissonsearch "${ES_PATH_CONF}"/elasticsearch.keystore
chmod 660 "${ES_PATH_CONF}"/elasticsearch.keystore
md5sum "${ES_PATH_CONF}"/elasticsearch.keystore > "${ES_PATH_CONF}"/.elasticsearch.keystore.initial_md5sum
else
if /usr/share/poissonsearch/bin/elasticsearch-keystore has-passwd --silent ; then
echo "### Warning: unable to upgrade encrypted keystore" 1>&2
echo " Please run elasticsearch-keystore upgrade and enter password" 1>&2
else
/usr/share/poissonsearch/bin/elasticsearch-keystore upgrade
fi
fi
fi
%posttrans -p /bin/sh
RPM_ARCH=x86_64
RPM_OS=linux
RPM_PACKAGE_NAME=poissonsearch-oss
RPM_PACKAGE_VERSION=7.10.2
RPM_PACKAGE_RELEASE=1
# source the default env file
if [ -f "/etc/sysconfig/poissonsearch" ]; then
. "/etc/sysconfig/poissonsearch"
fi
export ES_PATH_CONF=${ES_PATH_CONF:-/etc/poissonsearch}
if [ ! -f "${ES_PATH_CONF}"/elasticsearch.keystore ]; then
/usr/share/poissonsearch/bin/elasticsearch-keystore create
chown root:poissonsearch "${ES_PATH_CONF}"/elasticsearch.keystore
chmod 660 "${ES_PATH_CONF}"/elasticsearch.keystore
md5sum "${ES_PATH_CONF}"/elasticsearch.keystore > "${ES_PATH_CONF}"/.elasticsearch.keystore.initial_md5sum
else
if /usr/share/poissonsearch/bin/elasticsearch-keystore has-passwd --silent ; then
echo "### Warning: unable to upgrade encrypted keystore" 1>&2
echo " Please run elasticsearch-keystore upgrade and enter password" 1>&2
else
/usr/share/poissonsearch/bin/elasticsearch-keystore upgrade
fi
fi
%preun -p /bin/sh
RPM_ARCH=x86_64
RPM_OS=linux
RPM_PACKAGE_NAME=poissonsearch-oss
RPM_PACKAGE_VERSION=7.10.2
RPM_PACKAGE_RELEASE=1
#
# This script is executed in the pre-remove phase
#
# On Debian,
# $1=remove : indicates a removal
# $1=upgrade : indicates an upgrade
#
# On RedHat,
# $1=0 : indicates a removal
# $1=1 : indicates an upgrade
# source the default env file
if [ -f "/etc/sysconfig/poissonsearch" ]; then
. "/etc/sysconfig/poissonsearch"
fi
export ES_PATH_CONF=${ES_PATH_CONF:-/etc/poissonsearch}
STOP_REQUIRED=false
REMOVE_SERVICE=false
case "$1" in
# Debian ####################################################
remove)
STOP_REQUIRED=true
REMOVE_SERVICE=true
;;
upgrade)
if [ "$RESTART_ON_UPGRADE" = "true" ]; then
STOP_REQUIRED=true
fi
;;
deconfigure|failed-upgrade)
;;
# RedHat ####################################################
0)
STOP_REQUIRED=true
REMOVE_SERVICE=true
;;
1)
# Dont do anything on upgrade, because the preun script in redhat gets executed after the postinst (madness!)
;;
*)
echo "pre remove script called with unknown argument \`$1'" >&2
exit 1
;;
esac
# Stops the service
if [ "$STOP_REQUIRED" = "true" ]; then
echo -n "Stopping poissonsearch service..."
if command -v systemctl >/dev/null; then
systemctl --no-reload stop poissonsearch.service
elif [ -x /etc/init.d/poissonsearch ]; then
if command -v invoke-rc.d >/dev/null; then
invoke-rc.d poissonsearch stop
else
/etc/init.d/poissonsearch stop
fi
# older suse linux distributions do not ship with systemd
# but do not have an /etc/init.d/ directory
# this tries to start the poissonsearch service on these
# as well without failing this script
elif [ -x /etc/rc.d/init.d/poissonsearch ] ; then
/etc/rc.d/init.d/poissonsearch stop
fi
echo " OK"
fi
if [ -f "${ES_PATH_CONF}"/elasticsearch.keystore ]; then
if md5sum --status -c "${ES_PATH_CONF}"/.elasticsearch.keystore.initial_md5sum; then
rm "${ES_PATH_CONF}"/elasticsearch.keystore "${ES_PATH_CONF}"/.elasticsearch.keystore.initial_md5sum
fi
fi
if [ "$REMOVE_SERVICE" = "true" ]; then
if command -v systemctl >/dev/null; then
systemctl disable poissonsearch.service > /dev/null 2>&1 || true
fi
if command -v chkconfig >/dev/null; then
chkconfig --del poissonsearch 2> /dev/null || true
fi
if command -v update-rc.d >/dev/null; then
update-rc.d poissonsearch remove >/dev/null || true
fi
fi
# Built for packages-7.10.2 (rpm)
%postun -p /bin/sh
RPM_ARCH=x86_64
RPM_OS=linux
RPM_PACKAGE_NAME=poissonsearch-oss
RPM_PACKAGE_VERSION=7.10.2
RPM_PACKAGE_RELEASE=1
#
# This script is executed in the post-removal phase
#
# On Debian,
# $1=remove : indicates a removal
# $1=purge : indicates an upgrade
#
# On RedHat,
# $1=0 : indicates a removal
# $1=1 : indicates an upgrade
# source the default env file
if [ -f "/etc/sysconfig/poissonsearch" ]; then
. "/etc/sysconfig/poissonsearch"
fi
export ES_PATH_CONF=${ES_PATH_CONF:-/etc/poissonsearch}
REMOVE_DIRS=false
REMOVE_JVM_OPTIONS_DIRECTORY=false
REMOVE_USER_AND_GROUP=false
case "$1" in
# Debian ####################################################
remove)
REMOVE_DIRS=true
;;
purge)
REMOVE_DIRS=true
REMOVE_JVM_OPTIONS_DIRECTORY=true
REMOVE_USER_AND_GROUP=true
;;
failed-upgrade|abort-install|abort-upgrade|disappear|upgrade|disappear)
;;
# RedHat ####################################################
0)
REMOVE_DIRS=true
REMOVE_USER_AND_GROUP=true
;;
1)
# If $1=1 this is an upgrade
IS_UPGRADE=true
;;
*)
echo "post remove script called with unknown argument \`$1'" >&2
exit 1
;;
esac
if [ "$REMOVE_DIRS" = "true" ]; then
if [ -d /var/log/poissonsearch ]; then
echo -n "Deleting log directory..."
rm -rf /var/log/poissonsearch
echo " OK"
fi
if [ -d /usr/share/poissonsearch/plugins ]; then
echo -n "Deleting plugins directory..."
rm -rf /usr/share/poissonsearch/plugins
echo " OK"
fi
# plugins may have contained bin files
if [ -d /usr/share/poissonsearch/bin ]; then
echo -n "Deleting plugin bin directories..."
rm -rf /usr/share/poissonsearch/bin
echo " OK"
fi
if [ -d /var/run/poissonsearch ]; then
echo -n "Deleting PID directory..."
rm -rf /var/run/poissonsearch
echo " OK"
fi
# Delete the data directory if and only if empty
if [ -d /var/lib/poissonsearch ]; then
rmdir --ignore-fail-on-non-empty /var/lib/poissonsearch
fi
# delete the jvm.options.d directory if and only if empty
if [ -d "${ES_PATH_CONF}/jvm.options.d" ]; then
rmdir --ignore-fail-on-non-empty "${ES_PATH_CONF}/jvm.options.d"
fi
# delete the jvm.options.d directory if we are purging
if [ "$REMOVE_JVM_OPTIONS_DIRECTORY" = "true" ]; then
if [ -d "${ES_PATH_CONF}/jvm.options.d" ]; then
echo -n "Deleting jvm.options.d directory..."
rm -rf "${ES_PATH_CONF}/jvm.options.d"
echo " OK"
fi
fi
# delete the conf directory if and only if empty
if [ -d "${ES_PATH_CONF}" ]; then
rmdir --ignore-fail-on-non-empty "${ES_PATH_CONF}"
fi
fi
if [ "$REMOVE_USER_AND_GROUP" = "true" ]; then
if id poissonsearch > /dev/null 2>&1 ; then
userdel poissonsearch
fi
if getent group poissonsearch > /dev/null 2>&1 ; then
groupdel poissonsearch
fi
fi
%files
# Permissions
%defattr(-, %{product_name}, %{product_name})
# Root dirs/docs/licenses
# /usr/share/poissonsearch
%dir %{product_dir}
%doc %{product_dir}/NOTICE.txt
%doc %{product_dir}/README.asciidoc
%license %{product_dir}/LICENSE.txt
# Config dirs/files
# /etc/poissonsearch
%dir %{config_dir}
%{config_dir}/jvm.options.d
%config(noreplace) %{config_dir}/elasticsearch.yml
%config(noreplace) %{config_dir}/jvm.options
%config(noreplace) %{config_dir}/log4j2.properties
# Service files
# /etc/init.d/poissonsearch
%attr(0644, root, root) %{_sysconfdir}/init.d/%{product_name}
%attr(0644, root, root) %config(noreplace) %{_sysconfdir}/sysconfig/%{product_name}
# /usr/lib/
%attr(0644, root, root) %{_prefix}/lib/systemd/system/%{product_name}.service
%attr(0644, root, root) %config(noreplace) %{_prefix}/lib/sysctl.d/%{product_name}.conf
%attr(0644, root, root) %config(noreplace) %{_prefix}/lib/tmpfiles.d/%{product_name}.conf
# Main dirs
%{product_dir}/bin
%{product_dir}/lib
%{product_dir}/modules
%{product_dir}/plugins
%{log_dir}
%{pid_dir}
%dir %{data_dir}
%changelog
* Tue Mar 19 2024 Zhang An <zhangan9@huawei.com> - 1.0.0-1
- Initial package (HEAD -> master)
* Fri Mar 22 2024 Zhang An <zhangan9@huawei.com> - 1.0.0-1
- 1.0.0 package release (HEAD -> master)