File icinga2.spec of Package icinga2

#
# spec file for package icinga2
#
# Copyright (c) 2024 SUSE LLC
#
# 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/
#

Name:           icinga2
Version:        2.14.6
Release:        0
Summary:        Network monitoring application
License:        GPL-2.0-or-later
Group:          System/Monitoring
URL:            https://www.icinga.com/
Source:         https://github.com/Icinga/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz
Source1:        icinga2-rpmlintrc
# PATCH-FEATURE-OPENSUSE ecsos -- insert missing graphite tags as descriped in icingaweb2-module-graphite docs.
Patch0:         icinga2-graphite.patch
# PATCH-FIX-OPENSUSE lrupp -- fixing the syntax file for vim >= 8.x
Patch1:         icinga2-vim_syntax.patch
# PATCH-FIX-UPSTREAM https://github.com/Icinga/icinga2/pull/10278
Patch2:         icinga-pr10278.patch
PreReq:         permissions
BuildRequires:  nagios-rpm-macros
Requires:       icinga2-bin = %{version}
Requires:       icinga2-common = %{version}
Conflicts:      icinga2-common < %{version}

%description
Meta package for Icinga 2 Core, DB IDO and Web.

%package bin
Summary:        Icinga 2 binaries and libraries
Group:          System/Monitoring
BuildRequires:  bison
BuildRequires:  cmake
BuildRequires:  flex >= 2.5.35
BuildRequires:  gcc-c++
BuildRequires:  libboost_context-devel >= 1.66
BuildRequires:  libboost_coroutine-devel >= 1.66
BuildRequires:  libboost_filesystem-devel >= 1.66
BuildRequires:  libboost_iostreams-devel >= 1.66
BuildRequires:  libboost_program_options-devel >= 1.66
BuildRequires:  libboost_regex-devel >= 1.66
BuildRequires:  libboost_system-devel >= 1.66
BuildRequires:  libboost_test-devel >= 1.66
BuildRequires:  libboost_thread-devel >= 1.66
BuildRequires:  pkgconfig(libedit)
BuildRequires:  libstdc++-devel
BuildRequires:  pkgconfig(yajl)
BuildRequires:  make
BuildRequires:  pkgconfig(ncurses)
BuildRequires:  pkgconfig(openssl)
BuildRequires:  pkgconfig(libsystemd)
BuildRequires:  systemd-rpm-macros
Requires:       icinga2-bin = %{version}
Requires:       systemd
Recommends:     monitoring-plugins
Conflicts:      icinga2-libs <= 2.10.0
Provides:       monitoring_daemon
Obsoletes:      icinga2-libs <= 2.10.0

%description bin
Icinga 2 is a general-purpose network monitoring application.
This subpackage provides the binaries for Icinga 2 Core.

%package common
Summary:        Common Icinga 2 configuration
Group:          System/Monitoring
BuildRequires:  logrotate
BuildRequires:  monitoring-plugins-common
Requires:       monitoring-plugins-common
# FIXME: use proper Requires(pre/post/preun/...)
PreReq:         permissions
Requires(post): coreutils
Requires(post): shadow
Requires(pre):  coreutils
Requires(pre):  shadow
Recommends:     logrotate
Provides:       group(%{icinga_group})
Provides:       group(%{icinga_command_group})
Provides:       user(%{icinga_user})

%description common
This subpackage provides common directories, and the UID and GUID definitions
among Icinga 2 related packages.

%package doc
Summary:        Documentation for Icinga 2
Group:          Documentation/Other

%description doc
This subpackage provides documentation for Icinga 2.

%package ido-mysql
Summary:        IDO MySQL database backend for Icinga 2
Group:          System/Monitoring
BuildRequires:  libmysqlclient-devel
BuildRequires:  mysql-devel
Requires:       icinga2-bin = %{version}

%description ido-mysql
Icinga 2 IDO mysql database backend. Compatible with Icinga 1.x
IDOUtils schema >= 1.12

%package ido-pgsql
Summary:        IDO PostgreSQL database backend for Icinga 2
Group:          System/Monitoring
BuildRequires:  postgresql-devel
Requires:       icinga2-bin = %{version}

%description ido-pgsql
Icinga 2 IDO PostgreSQL database backend. Compatible with Icinga 1.x
IDOUtils schema >= 1.12

%package -n vim-icinga2
Summary:        Vim syntax highlighting for icinga2
Group:          Productivity/Text/Editors
BuildRequires:  vim
Requires:       vim

%description -n vim-icinga2
Provides Vim syntax highlighting for icinga2.

%package -n nano-icinga2
Summary:        Nano syntax highlighting for icinga2
Group:          Productivity/Text/Editors
Requires:       nano

%description -n nano-icinga2
Provides Nano syntax highlighting for icinga2.

%prep
%autosetup -p1
find . -type f -name '*.sh' -exec sed -i -e 's|\/usr\/bin\/env bash|\/bin\/bash|g' {} \;

%build
export CCACHE_BASEDIR="${CCACHE_BASEDIR:-$(pwd)}"

CMAKE_OPTS="-DCMAKE_INSTALL_PREFIX=%{_prefix} \
            -DCMAKE_INSTALL_SYSCONFDIR=%{_sysconfdir} \
            -DCMAKE_INSTALL_LOCALSTATEDIR=%{_localstatedir} \
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
            -DCMAKE_VERBOSE_MAKEFILE=ON \
            -DBoost_NO_BOOST_CMAKE=ON \
            -DICINGA2_PLUGINDIR=%{icinga2_plugindir} \
            -DICINGA2_RUNDIR=/run \
            -DICINGA2_SYSCONFIGFILE=%{_sysconfdir}/sysconfig/icinga2 \
            -DICINGA2_USER=%{icinga_user} \
            -DICINGA2_GROUP=%{icinga_group} \
            -DICINGA2_COMMAND_GROUP=%{icinga_command_group} \
            -DBASHCOMPLETION_DIR=%{_datadir}/bash-completion/completions"

CMAKE_OPTS="$CMAKE_OPTS -DICINGA2_UNITY_BUILD=ON"

CMAKE_OPTS="$CMAKE_OPTS -DICINGA2_LTO_BUILD=OFF"

CMAKE_OPTS="$CMAKE_OPTS -DINSTALL_SYSTEMD_SERVICE_AND_INITSCRIPT=OFF"
CMAKE_OPTS="$CMAKE_OPTS -DICINGA2_WITH_COMPAT=ON"
CMAKE_OPTS="$CMAKE_OPTS -DICINGA2_WITH_LIVESTATUS=ON"
CMAKE_OPTS="$CMAKE_OPTS -DICINGA2_WITH_NOTIFICATION=ON"
CMAKE_OPTS="$CMAKE_OPTS -DICINGA2_WITH_PERFDATA=ON"
CMAKE_OPTS="$CMAKE_OPTS -DICINGA2_WITH_TESTS=ON"
CMAKE_OPTS="$CMAKE_OPTS -DICINGA2_WITH_MYSQL=ON"
CMAKE_OPTS="$CMAKE_OPTS -DICINGA2_WITH_PGSQL=ON"

CMAKE_OPTS="$CMAKE_OPTS -DUSE_SYSTEMD=ON"

# FIXME: you should use the %%cmake macros
cmake $CMAKE_OPTS -DCMAKE_C_FLAGS:STRING="%{optflags} " -DCMAKE_CXX_FLAGS:STRING="%{optflags} " .

%make_build

%install
make install \
DESTDIR="$RPM_BUILD_ROOT"
install -D -m 0644 etc/initsystem/icinga2.service.limits.conf %{buildroot}/%{_unitdir}/%{name}.service.d/limits.conf

rm -f $RPM_BUILD_ROOT%{_sysconfdir}/icinga2/features-enabled/*.conf

ln -sf %{_sbindir}/service $RPM_BUILD_ROOT/usr/sbin/rcicinga2
mkdir -p "$RPM_BUILD_ROOT%{_fillupdir}"
mv "$RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/icinga2" "$RPM_BUILD_ROOT%{_fillupdir}/sysconfig.icinga2"

install -D -m 0644 tools/syntax/vim/syntax/icinga2.vim $RPM_BUILD_ROOT/usr/share/vim/site/syntax/icinga2.vim
install -D -m 0644 tools/syntax/vim/ftdetect/icinga2.vim $RPM_BUILD_ROOT/usr/share/vim/site/ftdetect/icinga2.vim

install -D -m 0644 tools/syntax/nano/icinga2.nanorc $RPM_BUILD_ROOT/usr/share/nano/icinga2.nanorc

%check
export CTEST_OUTPUT_ON_FAILURE=1
%make_build test

%pre
%service_add_pre %{name}.service

%verifyscript

%{_bindir}/chkstat -n --warn --system -e /run/icinga2/cmd 1>&2

%post

if [ -x %{_bindir}/chkstat ]; then
%{_bindir}/chkstat -n --set --system /run/icinga2/cmd
fi

%fillup_only  %{name}
%service_add_post %{name}.service

if [ ${1:-0} -eq 1 ]
then
  # initial installation, enable default features
  for feature in checker notification mainlog; do
    ln -sf ../features-available/${feature}.conf %{_sysconfdir}/icinga2/features-enabled/${feature}.conf
  done
fi

exit 0

%preun
%service_del_preun %{name}.service

%postun
%service_del_postun %{name}.service
if [ "$1" = "0" ]; then
rm -rf %{_sysconfdir}/icinga2/features-enabled
fi

exit 0

%pre common
getent group %{icinga_group} >/dev/null || %{_sbindir}/groupadd -r %{icinga_group}
getent group %{icinga_command_group} >/dev/null || %{_sbindir}/groupadd -r %{icinga_command_group}
getent passwd %{icinga_user} >/dev/null || %{_sbindir}/useradd -c "icinga" -s /sbin/nologin -r -d %{_localstatedir}/spool/icinga2 -G %{icinga_command_group} -g %{icinga_group} %{icinga_user}

%verifyscript common

%{_bindir}/chkstat -n --warn --system -e /run/icinga2/cmd 1>&2

%post common

if [ -x %{_bindir}/chkstat ]; then
%{_bindir}/chkstat -n --set --system /run/icinga2/cmd
fi

%post ido-mysql
if [ ${1:-0} -eq 1 ] && [ -e %{_sysconfdir}/icinga2/features-enabled/ido-mysql.conf ]
then
ln -sf ../features-available/ido-mysql.conf %{_sysconfdir}/icinga2/features-enabled/ido-mysql.conf
fi

exit 0

%postun ido-mysql
if [ "$1" = "0" ]; then
rm -f %{_sysconfdir}/icinga2/features-enabled/ido-mysql.conf
fi

exit 0

%post ido-pgsql
if [ ${1:-0} -eq 1 ] && [ -e %{_sysconfdir}/icinga2/features-enabled/ido-pgsql.conf ]
then
ln -sf ../features-available/ido-pgsql.conf %{_sysconfdir}/icinga2/features-enabled/ido-pgsql.conf
fi

exit 0

%postun ido-pgsql
if [ "$1" = "0" ]; then
rm -f %{_sysconfdir}/icinga2/features-enabled/ido-pgsql.conf
fi

exit 0

%files
%license COPYING

%config(noreplace) %{_sysconfdir}/logrotate.d/icinga2
%dir %{_unitdir}/%{name}.service.d
%attr(644,root,root) %{_unitdir}/%{name}.service
%{_unitdir}/%{name}.service.d/limits.conf
%{_sbindir}/rc%{name}
%{_fillupdir}/sysconfig.%{name}

%{_sbindir}/%{name}

%dir %{_prefix}/lib/icinga2
%{_prefix}/lib/icinga2/prepare-dirs
%{_prefix}/lib/icinga2/safe-reload

%attr(0750,%{icinga_user},%{icinga_group}) %dir %{_sysconfdir}/icinga2
%attr(0750,%{icinga_user},%{icinga_group}) %dir %{_sysconfdir}/icinga2/conf.d
%attr(0750,%{icinga_user},%{icinga_group}) %dir %{_sysconfdir}/icinga2/features-available
%exclude %{_sysconfdir}/icinga2/features-available/ido-*.conf
%attr(0750,%{icinga_user},%{icinga_group}) %dir %{_sysconfdir}/icinga2/features-enabled
%attr(0750,%{icinga_user},%{icinga_group}) %dir %{_sysconfdir}/icinga2/scripts
%attr(0750,%{icinga_user},%{icinga_group}) %dir %{_sysconfdir}/icinga2/zones.d
%config(noreplace) %attr(0640,%{icinga_user},%{icinga_group}) %{_sysconfdir}/icinga2/icinga2.conf
%config(noreplace) %attr(0640,%{icinga_user},%{icinga_group}) %{_sysconfdir}/icinga2/constants.conf
%config(noreplace) %attr(0640,%{icinga_user},%{icinga_group}) %{_sysconfdir}/icinga2/zones.conf
%config(noreplace) %attr(0640,%{icinga_user},%{icinga_group}) %{_sysconfdir}/icinga2/conf.d/*.conf
%config(noreplace) %attr(0640,%{icinga_user},%{icinga_group}) %{_sysconfdir}/icinga2/features-available/*.conf
%config(noreplace) %attr(0640,%{icinga_user},%{icinga_group}) %{_sysconfdir}/icinga2/zones.d/*
%config(noreplace) %attr(-,%{icinga_user},%{icinga_group}) %{_sysconfdir}/icinga2/scripts/*

%attr(0750,%{icinga_user},%{icinga_command_group}) %{_localstatedir}/cache/icinga2
%attr(0750,%{icinga_user},%{icinga_command_group}) %dir %{_localstatedir}/log/icinga2
%attr(0750,%{icinga_user},%{icinga_group}) %dir %{_localstatedir}/log/icinga2/crash
%attr(0750,%{icinga_user},%{icinga_command_group}) %dir %{_localstatedir}/log/icinga2/compat
%attr(0750,%{icinga_user},%{icinga_command_group}) %dir %{_localstatedir}/log/icinga2/compat/archives
%attr(0750,%{icinga_user},%{icinga_group}) %{_localstatedir}/lib/icinga2
%attr(0750,%{icinga_user},%{icinga_command_group}) %ghost %dir /run/icinga2
%attr(2750,%{icinga_user},%{icinga_command_group}) %ghost /run/icinga2/cmd
%attr(0750,%{icinga_user},%{icinga_group}) %dir %{_localstatedir}/spool/icinga2
%attr(0770,%{icinga_user},%{icinga_group}) %dir %{_localstatedir}/spool/icinga2/perfdata
%attr(0750,%{icinga_user},%{icinga_group}) %dir %{_localstatedir}/spool/icinga2/tmp

%files bin
%license COPYING
%doc README.md NEWS AUTHORS CHANGELOG.md
%dir %{_libdir}/icinga2
%dir %{_libdir}/icinga2/sbin
%{_libdir}/icinga2/sbin/icinga2
%{icinga2_plugindir}/check_nscp_api
%{_datadir}/icinga2
%exclude %{_datadir}/icinga2/include
%{_mandir}/man8/icinga2.8%{?ext_man}

%files common
%license COPYING
%doc README.md NEWS AUTHORS CHANGELOG.md tools/syntax
%{_datadir}/bash-completion/completions/icinga2
%attr(0750,%{icinga_user},%{icinga_group}) %dir %{_datadir}/icinga2/include
%attr(-,%{icinga_user},%{icinga_group}) %{_datadir}/icinga2/include/*

%files doc
%{_datadir}/doc/icinga2
%docdir %{_datadir}/doc/icinga2

%files ido-mysql
%license COPYING
%doc README.md NEWS AUTHORS CHANGELOG.md
%config(noreplace) %attr(0640,%{icinga_user},%{icinga_group}) %{_sysconfdir}/icinga2/features-available/ido-mysql.conf
%{_libdir}/icinga2/libmysql_shim*
%{_datadir}/icinga2-ido-mysql

%files ido-pgsql
%license COPYING
%doc README.md NEWS AUTHORS CHANGELOG.md
%config(noreplace) %attr(0640,%{icinga_user},%{icinga_group}) %{_sysconfdir}/icinga2/features-available/ido-pgsql.conf
%{_libdir}/icinga2/libpgsql_shim*
%{_datadir}/icinga2-ido-pgsql

%files -n vim-icinga2
%{_datadir}/vim/site/syntax/icinga2.vim
%{_datadir}/vim/site/ftdetect/icinga2.vim

%files -n nano-icinga2
%dir %{_datadir}/nano
%{_datadir}/nano/icinga2.nanorc

%changelog
openSUSE Build Service is sponsored by