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