File logstash6.spec of Package logstash6

#
# spec file for package logstash6
#
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2017 Klaus Kämpf <kkaempf@suse.de>
#
# 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 http://bugs.opensuse.org/
#


%define _binaries_in_noarch_packages_terminate_build 0
%global _binaries_in_noarch_packages_terminate_build 0
%global jruby_version 9.3.8.0
%global jruby_api_version 2.5.0
%global java_version 1.8.0

Name:           logstash6
%define srcname logstash
Version:        6.7.1
Release:        0
Summary:        A tool for managing events and logs
License:        Apache-2.0
Group:          System/Monitoring
Url:            https://github.com/elastic/logstash
Source:         %{srcname}-%{version}.tar.gz
Source1:        logstash.service
Source2:        logstash.logrotate
Source4:        logstash.init
Source5:        logstash.conf
Source6:        logstash-rpmlintrc

# Local maven repo
Patch1:         0001-maven-local.patch
# Use installed JRuby
Patch2:         0002-Use-installed-jruby.patch
# Use installed gradle
Patch3:         0003-Use-installed-gradle.patch
# Run bundler in offline mode
Patch4:         0004-run-bundler-with-local-for-offline-mode.patch
# Don't reference rubygems.org in Gemfile
Patch5:         0005-drop-rubygems.org-reference.patch
# Explicitly reference jruby.jar (gradle weirdness)
Patch6:         0006-Pick-up-jruby.jar.patch
# Use startup.options for /etc/sysconfig, set log and data in logstash.yml
Patch7:         0007-Fix-default-configs.patch
# Fix6failure if bin/logstash symlink is relative
Patch8:         0008-logstash-symlink-might-be-relative.patch
# Gradle plugins are local
Patch9:         0009-Load-local-plugins.patch
# set JRUBY_HOME (for stdlib)
Patch10:        0010-set-JRUBY_HOME.patch
# don't treat warnings as errors
Patch11:        0011-drop-Werror.patch

BuildRoot:      %{_tmppath}/%{srcname}-%{version}-build
Requires:       java-headless = %{java_version}
Requires:       jruby = %{jruby_version}
Requires:       logrotate
# to find java
Requires:       which
Requires(pre):  pwdutils

BuildRequires:  %{name}-kit = %{version}
BuildRequires:  ca-certificates-mozilla
BuildRequires:  fdupes
BuildRequires:  gradle4
# Can't run with Java 11: https://discuss.elastic.co/t/unsupported-platform-x86-64-linux/121234
BuildRequires:  java-devel = %{java_version}
BuildRequires:  jruby = %{jruby_version}
BuildRequires:  strace

# needed for brp-check-bytecode-version (jar, fastjar would do as well)
BuildRequires:  unzip

%if 0%{?suse_version} >= 1210
BuildRequires:  systemd-rpm-macros
%{?systemd_requires}
%bcond_without  systemd
%else
%bcond_with     systemd
%endif

%description
logstash is a tool for managing events and logs. You can use it to collect logs,
parse them, and store them for later use (like, for searching).

%prep
%setup -q -n %{srcname}-%{version}
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1

rm -rf /tmp/gradle*

#cp -RLf %{_datadir}/tetra/gradle* /tmp
#cp -RLf %{_datadir}/tetra/apache* /tmp
# Disable JRuby download
mkdir -p vendor
ln -s /usr/share/jruby vendor
cp -RLf %{_datadir}/tetra/bundle vendor
# disable gradle download
rm ./gradle/wrapper/gradle-wrapper.properties
# local maven
rm -rf ~/.m2
mkdir -p ~/.m2
ln -s /usr/share/tetra/m2 ~/.m2/repository

%build
# logstash-core/src/main/java/org/logstash/common/io/RecordIOWriter.java has a utf-8 dash
export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8

# JARS_SKIP=true: see https://github.com/elastic/logstash/issues/5072
export GRADLE_USER_HOME=/tmp/gradle
# OSS components only, see x-pack/README.md
export OSS=true
# build release, not snapshot
export RELEASE=1

rm -rf ~/.gem
mkdir -p  ~/.gem
ln -snf `pwd`/vendor/bundle/jruby ~/.gem
JARS_SKIP=true DEBUG=1 jrake plugin:install-default

gradle \
  --gradle-user-home $GRADLE_USER_HOME \
  --project-cache-dir /tmp/gradle-cache \
  --offline \
  --no-daemon \
  assemble

chmod 644 logstash-core/lib/jars/*.jar

%install
export NO_BRP_CHECK_BYTECODE_VERSION=true
export CLASSPATH=%{_javadir}

## usr
%{__install} -d -m 755 %{buildroot}/%{_sbindir}

## etc
%{__install} -d -m 755 %{buildroot}%{_sysconfdir}/%{srcname}/conf.d/
%{__install} -m 644 config/jvm.options %{buildroot}%{_sysconfdir}/%{srcname}
%{__install} -m 644 config/log4j2.properties %{buildroot}%{_sysconfdir}/%{srcname}
%{__install} -m 644 config/logstash.yml %{buildroot}%{_sysconfdir}/%{srcname}
%{__install} -m 644 config/startup.options %{buildroot}%{_sysconfdir}/%{srcname}
%{__install} -D -m 644 %{S:5} %{buildroot}%{_sysconfdir}/%{srcname}/sample.conf
%{__install} -D -m 644 %{S:2} %{buildroot}%{_sysconfdir}/logrotate.d/%{srcname}

%define logstashdir %{_datadir}/%{srcname}
## /usr/share
%{__install} -d -m 755 %{buildroot}%{logstashdir}
ln -s %{_sysconfdir}/%{srcname} %{buildroot}%{logstashdir}/config
%{__install} -m 644 Gemfile* %{buildroot}%{logstashdir}
%{__install} -d -m 755 %{buildroot}%{logstashdir}/bin
%{__install} -m 755 bin/cpdump %{buildroot}%{logstashdir}/bin
%{__install} -m 755 bin/logstash %{buildroot}%{logstashdir}/bin
%{__install} -m 755 bin/ruby %{buildroot}%{logstashdir}/bin
%{__install} -m 755 bin/logstash.lib.sh %{buildroot}%{logstashdir}/bin
%{__install} -m 755 bin/logstash-plugin %{buildroot}%{logstashdir}/bin
%{__install} -m 755 bin/system-install %{buildroot}%{logstashdir}/bin
cp -a lib %{buildroot}%{logstashdir}
cp -a modules %{buildroot}%{logstashdir}

cp -a logstash-core-plugin-api %{buildroot}%{logstashdir}

# logstash-core
%{__install} -d -m 755 %{buildroot}%{logstashdir}/logstash-core 
%{__install} -m 644 logstash-core/*gem* %{buildroot}%{logstashdir}/logstash-core 
cp -a logstash-core/lib %{buildroot}%{logstashdir}/logstash-core
cp -a logstash-core/locales %{buildroot}%{logstashdir}/logstash-core

# vendor
%{__install} -d -m 755 %{buildroot}%{logstashdir}/vendor

# drop /usr/bin/ruby autorequires
rm -rf vendor/bundle/jruby/%{jruby_api_version}/gems/xmpp4r-0.5/test
rm -rf vendor/bundle/jruby/%{jruby_api_version}/gems/xmpp4r-0.5/data

rm -rf vendor/bundle/jruby/%{jruby_api_version}/build_info
rm -rf vendor/bundle/jruby/%{jruby_api_version}/cache
rm -rf vendor/bundle/jruby/%{jruby_api_version}/doc
rm -rf vendor/bundle/jruby/%{jruby_api_version}/extensions
rm -rf vendor/bundle/jruby/%{jruby_api_version}/gems/cache
find vendor/bundle/jruby/%{jruby_api_version} -name \.autotest | xargs rm -rf
find vendor/bundle/jruby/%{jruby_api_version} -name \.document | xargs rm -rf
find vendor/bundle/jruby/%{jruby_api_version} -name \.git\* | xargs rm -rf
find vendor/bundle/jruby/%{jruby_api_version} -name \.rspec | xargs rm -rf
find vendor/bundle/jruby/%{jruby_api_version} -name \.travis | xargs rm -rf
find vendor/bundle/jruby/%{jruby_api_version} -name \.\*yml | xargs rm -rf
find vendor/bundle/jruby/%{jruby_api_version} -name \.yardopts | xargs rm -rf

cp -a vendor/bundle %{buildroot}%{logstashdir}/vendor

## var
%{__install} -d -m 755 %{buildroot}/var/log/%{srcname}/
%{__install} -d -m 755 %{buildroot}/var/lib/%{srcname}/
ln -sf /var/lib/%{srcname} %{buildroot}%{logstashdir}/data

## service (systemd or sysVinit)
%if %{with systemd}
%{__mkdir} -p %{buildroot}%{_unitdir}
%{__install} -m 444 %{S:1} %{buildroot}%{_unitdir}/%{srcname}.service
ln -sf /usr/sbin/service %{buildroot}%{_sbindir}/rc%{srcname}
%else
%{__install} -D -m 755 %{S:4} %{buildroot}%{_initrddir}/%{srcname}
%{__mkdir} -p %{buildroot}%{_sbindir}
ln -sf %{_initrddir}/%{srcname} %{buildroot}%{_sbindir}/rc%{srcname}
%endif

# /usr/bin symlinks

%{__mkdir} -p %{buildroot}%{_bindir}
ln -sf %{logstashdir}/bin/logstash %{buildroot}%{_bindir}
ln -sf %{logstashdir}/bin/logstash-plugin %{buildroot}%{_bindir}


## delete zero files from logstash
find %{buildroot} -size 0 -delete

## finds duplicate files in a given set of directories
%fdupes $RPM_BUILD_ROOT

%pre
## Register service systemd
%if %{with systemd}
%service_add_pre %{srcname}.service
%endif

## create logstash group and user
getent group logstash >/dev/null || groupadd -r logstash
getent passwd logstash >/dev/null || useradd -r -g logstash -d /var/lib/%{srcname} -s /sbin/nologin -c "service user for logstash" logstash
exit 0

%post

## Register service systemd
%if %{with systemd}
%service_add_post %{srcname}.service
%endif

cat <<EOF

================================================================================
Please create logstash pipeline config files in:
    /etc/logstash/conf.d/
Here is a sample pipeline config file: /etc/logstash/sample.conf

Maybe you also have to adjust: /etc/sysconfig/logstash
================================================================================

EOF

%preun
## Stop service (systemd or sysVinit)
%if %{with systemd}
%service_del_preun %{srcname}.service
%else
%stop_on_removal
%endif

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

## Unregister service (systemd or sysVinit)
%if %{with systemd}
%service_del_postun %{srcname}.service
%else
%insserv_cleanup
%endif

# only execute in case of package removal, not on upgrade
if [ $1 -eq 0 ] ; then

    getent passwd logstash > /dev/null
    if [ "$?" == "0" ] ; then
        userdel logstash
    fi

    getent group logstash >/dev/null
    if [ "$?" == "0" ] ; then
        groupdel logstash
    fi
fi

%files
%defattr(-,root,root)
%doc CONTRIBUTORS README.md ROADMAP.md 
%license COPYING.csv LICENSE.txt

%if %{with systemd}
%{_unitdir}/%{srcname}.service
%else
%{_initrddir}/%{srcname}
%endif

%{_sbindir}/rc%{srcname}
%{_bindir}/*
%dir %{logstashdir}
%{logstashdir}/*
%dir %{_sysconfdir}/%{srcname}/
%dir %{_sysconfdir}/%{srcname}/conf.d
%doc %{_sysconfdir}/%{srcname}/sample.conf

%config(noreplace) %{_sysconfdir}/%{srcname}/startup.options
%config(noreplace) %{_sysconfdir}/%{srcname}/%{srcname}.yml
%config(noreplace) %{_sysconfdir}/%{srcname}/jvm.options
%config(noreplace) %{_sysconfdir}/%{srcname}/log4j2.properties

%config(noreplace) %{_sysconfdir}/logrotate.d/%{srcname}

%defattr(-,logstash,logstash)
%dir /var/log/%{srcname}
%dir /var/lib/%{srcname}

%changelog
openSUSE Build Service is sponsored by