File opensearch1.spec of Package opensearch1

#
# spec file for package opensearch1
#
# Copyright (c) 2021 SUSE LLC
# Copyright (c) 2018 Samu Voutilainen
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2016 kkaempf
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#

%define javaversion 11

%if "%{_arch}" == "i586"
%global _libdir /usr/lib
%else
%global _libdir /usr/lib64
%endif

%if ! %{defined _fillupdir}
%define _fillupdir /var/adm/fillup-templates
%endif

Name:           opensearch1
# tarball is original name
%define tarname opensearch
# tarball dir is camel case
%define srcname OpenSearch
Version:        1.3.20
%define srcversion %{version}
Release:        0
Summary:        Open Source distributed and RESTful search engine
License:        Apache-2.0

Url:            https://github.com/opensearch-project/OpenSearch
Source0:        https://github.com/opensearch-project/%{srcname}/archive/refs/tags/%{srcversion}.tar.gz#/%{srcname}-%{srcversion}.tar.gz
Source1:        %{name}-kit.tar
Source2:        %{tarname}.logrotate
Source7:        %{tarname}.SuSEfirewall2

Patch1:         0001-var-run-run.patch

BuildRoot:      %{_tmppath}/%{name}-%{version}-build
BuildRequires:  git
#   >= 6.2.1 and < 7
BuildRequires:  gradle6
%ifarch x86_64
BuildRequires:  libjnidispatch
%endif

%if 0%{?suse_version} > 1010
BuildRequires:  fdupes
%endif

BuildRequires:  java-devel = %{javaversion}
BuildRequires:  java = %{javaversion}
BuildRequires:  systemd

%{?systemd_requires}

BuildArch:      noarch
Provides:       mvn(org.opensearch:core) == %{version}
Provides:       mvn(org.opensearch:dev-tools) == %{version}
Provides:       mvn(org.opensearch:distribution) == %{version}
Provides:       mvn(org.opensearch:modules) == %{version}
Provides:       mvn(org.opensearch:plugins) == %{version}
Provides:       mvn(org.opensearch:qa) == %{version}
Provides:       mvn(org.opensearch:rest-api-spec) == %{version}
Provides:       mvn(org:opensearch) == %{version}

Requires(post): %fillup_prereq

Requires:       java-headless = %{javaversion}

Requires:       logrotate
# for sysctl:
Requires:       procps
# for opensearch-plugin:
Requires:       hostname
Requires:       which
# mkdir, chown in %%pre
Requires(pre):  coreutils

%description
opensearch is an open source search and analytics engine derived from Elasticsearch 7.10.2, and is currently in an alpha state.

%prep
%setup -q -c -n src
cd %{srcname}-%{srcversion}
%patch -P1 -p1

rm -rf /tmp/gradle*
tar xf %{S:1} -C /tmp

%build
cd %{srcname}-%{srcversion}
export LANG=en_US.UTF-8
export GRADLE_OPTS="-Xmx1024m"
export GRADLE_USER_HOME=/tmp/gradle
export JAVA_HOME=%{_libdir}/jvm/java-%{javaversion}-openjdk-%{javaversion}

gradle \
  --gradle-user-home $GRADLE_USER_HOME \
  --project-cache-dir /tmp/gradle-cache \
  --continue \
  -Dbuild.snapshot=false \
  -Dfile.encoding=UTF-8 \
  --offline \
  --no-daemon \
  :distribution:archives:buildNoJdkLinuxTar

%clean
rm -rf ~/.gradle

%install
export BUILD_VCS_NUMBER=%{version}
export NO_BRP_CHECK_BYTECODE_VERSION=true
cd %{srcname}-%{srcversion}

#
# bin

install -d %{buildroot}%{_datadir}
tar -C %{buildroot}%{_datadir} -xf distribution/archives/no-jdk-linux-tar/build/distributions/%{tarname}-min-%{version}-no-jdk-linux-x64.tar.gz

mv %{buildroot}%{_datadir}/%{tarname}-%{version} %{buildroot}%{_datadir}/%{name}

# 'bundle' JDK - choose via update-alternatives
ln -sf %{_libdir}/jvm/jre %{buildroot}%{_datadir}/%{name}/jdk

# handled as %%doc
rm -f %{buildroot}%{_datadir}/%{name}/README.textile
rm -f %{buildroot}%{_datadir}/%{name}/LICENSE.txt
rm -f %{buildroot}%{_datadir}/%{name}/NOTICE.txt

rm -f %{buildroot}%{_datadir}/%{name}/bin/*.exe
rm -f %{buildroot}%{_datadir}/%{name}/bin/*.bat

#
# var

%{__install} -d -m 755 %{buildroot}%{_localstatedir}/log/%{name}
rmdir %{buildroot}%{_datadir}/%{name}/logs
# ln -sf %{_localstatedir}/log/%{name} %{buildroot}%{_datadir}/%{name}/logs
%{__install} -d -m 755 %{buildroot}%{_localstatedir}/lib/%{name}
%{__install} -d -m 755 %{buildroot}%{_localstatedir}/lib/%{name}/data
%{__install} -d -m 755 %{buildroot}%{_localstatedir}/lib/%{name}/work
%{__install} -d -m 755 %{buildroot}%{_rundir}/%{name}

#
# /usr/share
%{__install} -d %{buildroot}%{_datadir}/%{name}

#
# tmpfiles.d
%{__install} -d -m 755 %{buildroot}%{_tmpfilesdir}
%{__install} -m 644 distribution/packages/src/common/systemd/%{tarname}.conf %{buildroot}%{_tmpfilesdir}/%{name}.conf

#
# sbin
%{__install} -d %{buildroot}%{_sbindir}

ln -sf %{_datadir}/%{name}/bin/%{tarname} %{buildroot}%{_sbindir}/%{name}
ln -sf %{_datadir}/%{name}/bin/%{tarname}-cli %{buildroot}%{_sbindir}/%{name}-cli
ln -sf %{_datadir}/%{name}/bin/%{tarname}-env %{buildroot}%{_sbindir}/%{name}-env
ln -sf %{_datadir}/%{name}/bin/%{tarname}-env-from-file %{buildroot}%{_sbindir}/%{name}-env-from-file
ln -sf %{_datadir}/%{name}/bin/%{tarname}-keystore %{buildroot}%{_sbindir}/%{name}-keystore
ln -sf %{_datadir}/%{name}/bin/%{tarname}-node %{buildroot}%{_sbindir}/%{name}-node
ln -sf %{_datadir}/%{name}/bin/%{tarname}-plugin %{buildroot}%{_sbindir}/%{name}-plugin
ln -sf %{_datadir}/%{name}/bin/%{tarname}-shard %{buildroot}%{_sbindir}/%{name}-shard

#
# init scripts / systemd

sed -i 's/${path.conf}/\%{_sysconfdir}\/%{name}/g' distribution/packages/src/common/systemd/%{tarname}.service
sed -i 's/${path.env}/\%{_sysconfdir}\/sysconfig\/%{name}/g' distribution/packages/src/common/systemd/%{tarname}.service
%{__install} -D -m 644 distribution/packages/src/common/systemd/%{tarname}.service %{buildroot}%{_unitdir}/%{name}.service
%{__install} -D -m 644 distribution/packages/src/common/systemd/sysctl/%{tarname}.conf %{buildroot}%{_sysconfdir}/sysctl.d/%{name}.conf
%{__install} -D -m 755 distribution/packages/src/common/systemd/systemd-entrypoint %{buildroot}%{_datadir}/%{name}/bin

# rc%%{name}
ln -sf %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name}

#
# logrotate

%{__install} -D -m 644 %{S:2} %{buildroot}%{_sysconfdir}/logrotate.d/%{name}

%if 0%{suse_version} < 1500
# only for pre-firewalld distributions
#
# SuSEfirewall2
%{__install} -D -m 644 %{S:7} %{buildroot}%{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/%{name}
%endif

#
# /etc/opensearch
%{__install} -d -m 775 %{buildroot}%{_sysconfdir}/%{name}

sed -i 's/\#path.data: \/path\/to\/data/path.data: \%{_localstatedir}\/lib\/%{name}\/data/g' %{buildroot}%{_datadir}/%{name}/config/%{tarname}.yml
sed -i 's/\#path.logs: \/path\/to\/logs/path.logs: \%{_localstatedir}\/log\/%{name}/g' %{buildroot}%{_datadir}/%{name}/config/%{tarname}.yml
%{__install} -m 644 %{buildroot}%{_datadir}/%{name}/config/%{tarname}.yml %{buildroot}%{_sysconfdir}/%{name}
sed -i 's/logs\/gc.log/\%{_localstatedir}\/log\/%{name}\/gc.log/g' %{buildroot}%{_datadir}/%{name}/config/jvm.options
%{__install} -m 644 %{buildroot}%{_datadir}/%{name}/config/jvm.options %{buildroot}%{_sysconfdir}/%{name}
%{__install} -m 644 %{buildroot}%{_datadir}/%{name}/config/log4j2.properties %{buildroot}%{_sysconfdir}/%{name}
rm -rf %{buildroot}%{_datadir}/%{name}/config
%{__install} -d -m 755 %{buildroot}%{_sysconfdir}/%{name}/scripts
# ln -sf %{_sysconfdir}/%{name} %{buildroot}%{_datadir}/%{name}/config

#
# sysconfig template
%{__install} -d -m 755 %{buildroot}%{_fillupdir}
sed -i 's/${path.conf}/\%{_sysconfdir}\/%{name}/g' distribution/packages/src/common/env/%{tarname}
%{__install} -m 644 distribution/packages/src/common/env/%{tarname} %{buildroot}%{_fillupdir}/sysconfig.%{name}

%if 0%{?suse_version} > 1010
%fdupes %{buildroot}%{_datadir}/%{name}
%endif

%pre
%service_add_pre %{name}.service

## create %%{tarname} group and user
getent group %{tarname} >/dev/null || groupadd -r %{tarname}
getent passwd %{tarname} >/dev/null || useradd -r -g %{tarname} -d %{_localstatedir}/lib/%{name} -s /sbin/nologin -c "service user for opensearch 1.x" %{tarname}
exit 0

%post
%{fillup_and_insserv -n -y %{name}}
%service_add_post %{name}.service

# rpm is kinda stupid ...
# Create our dirs immediatly, after a manual package install.
# After a reboot systemd/aaa_base will take care.
systemd-tmpfiles --create %{_tmpfilesdir}/%{name}.conf

%preun
%service_del_preun %{name}.service

%postun
## no auto restart on update
export DISABLE_RESTART_ON_UPDATE=1

%service_del_postun %{name}.service

# only execute in case of package removal, not on upgrade
if [ $1 -eq 0 ] ; then
  getent passwd %{name} > /dev/null
  if [ "$?" == "0" ] ; then
    userdel %{name}
  fi

  getent group %{name} >/dev/null
  if [ "$?" == "0" ] ; then
    groupdel %{name}
  fi
fi

%files
%defattr(-,root,root)

%doc %{srcname}-%{srcversion}/LICENSE.txt
%doc %{srcname}-%{srcversion}/NOTICE.txt

%dir %{_datadir}/%{name}

%attr(775,root,opensearch) %dir %{_sysconfdir}/%{name}
%dir %{_sysconfdir}/%{name}/scripts
%config(noreplace) %attr(644,root,%{name}) %{_sysconfdir}/%{name}/*

%dir %{_fillupdir}
%{_fillupdir}/sysconfig.%{name}

%config %{_sysconfdir}/sysctl.d/%{name}.conf
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
%if 0%{suse_version} < 1500
%config %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/%{name}
%endif

%dir %{_datadir}/%{name}
%{_datadir}/%{name}/*

%{_unitdir}/%{name}.service
%{_tmpfilesdir}/%{name}.conf

%{_sbindir}/rc%{name}
%{_sbindir}/%{name}*

%dir %attr(755,%{name},%{name}) %{_localstatedir}/lib/%{name}
%dir %attr(755,%{name},%{name}) %{_localstatedir}/log/%{name}
%dir %attr(755,%{name},%{name}) %{_datadir}/%{name}/plugins
%ghost %dir %attr(755,%{name},%{name}) %{_rundir}/%{name}

%changelog
openSUSE Build Service is sponsored by