File nagios.spec of Package nagios

#
# spec file for package nagios (Version 3.0.6)
#
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# 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/
#

# norootforbuild


Name:           nagios
Summary:        The Nagios Network Monitor
Version:        3.0.6
Release:        1.<RELEASE2>
Url:            http://www.nagios.org/
License:        GPL v2 or later
Group:          System/Monitoring
PreReq:         %insserv_prereq
PreReq:         %fillup_prereq
PreReq:         /bin/logger
PreReq:         sed
PreReq:         grep
PreReq:         coreutils
PreReq:         pwdutils
Requires:       mailx
BuildRequires:  apache2-devel
BuildRequires:  freetype2-devel
BuildRequires:  gd-devel
BuildRequires:  iputils
BuildRequires:  libjpeg-devel
BuildRequires:  libpng-devel
BuildRequires:  mailx
BuildRequires:  openssl-devel
BuildRequires:  pcre-devel
BuildRequires:  zlib-devel
%if 0%{?suse_version} < 1010
BuildRequires:  XFree86-devel
BuildRequires:  XFree86-libs
BuildRequires:  libapr0
Requires:       cron
%else
BuildRequires:  libapr-util1-devel
BuildRequires:  xorg-x11-devel
Recommends:     cron
Recommends:     %name-www
# we enable nagios embedded perl, but if people disable it...
Recommends:     perl = %{perl_version}
%endif
%if 0%{?suse_version} > 1020
BuildRequires:  fdupes
%endif
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
%define         realname nagios
%define         nsusr nagios
%define         nsgrp nagios
%define         cmdusr wwwrun
%define         cmdgrp nagcmd
%define         nslockfile_dir /var/run/%{realname}
%define         nslockfile %nslockfile_dir/%{realname}.pid
%define         apache2_sysconfdir %(/usr/sbin/apxs2 -q SYSCONFDIR)/conf.d
# Macro that print mesages to syslog at package (un)install time
%define         nnmmsg logger -t %{realname}/rpm
Source0:        %{realname}-%{version}.tar.bz2
Source1:        rc%{name}
Source2:        %{name}-rpmlintrc
Source3:        %{name}.sysconfig
Source4:        suse.de-nagios
Source10:       %{name}-README.SuSE
Patch1:         nagios.run_async_service_check.return.patch
# PATCH-FIX-UPSTREAM Fixes CVE-2011-1523
Patch2:         nagios-3.2.1-CVE-2011-1523.patch
Patch10:        nagios-p1.pl-location.patch
Patch11:        nagios-statuswml_c.patch

%description
Nagios is a program that will monitor hosts and services on your
network. It has the ability to email or page you when a problem arises
and when a problem is resolved. Nagios is written in C and is designed
to run under Linux (and some other *NIX variants) as a background
process, intermittently running checks on various services that you
specify.

The actual service checks are performed by separate "plugin" programs
which return the status of the checks to Nagios. The plugins are
available at http://sourceforge.net/projects/nagiosplug

This package provide core programs for nagios. The web interface,
documentation, and development files are built as separate packages



Authors:
--------
    Ethan Galstad <nagios@nagios.org>

%package www
License:        GPL v2 or later
Group:          System/Monitoring
Summary:        Provides the HTML and CGI files for the Nagios web interface
Requires:       %{name} = %{version}
Requires:       gd
PreReq:         apache2 
PreReq:         coreutils 
PreReq:         pwdutils 
PreReq:         /bin/logger 
PreReq:         sed 
PreReq:         grep 
PreReq:         gawk

%description www
Nagios is a program that will monitor hosts and services on your
network. It has the ability to email or page you when a problem arises
and when a problem is resolved. Nagios is written in C and is designed
to run under Linux (and some other *NIX variants) as a background
process, intermittently running checks on various services that you
specify.

Several CGI programs are included with Nagios in order to allow you to
view the current service status, problem history, notification history,
and log file via the web. This package provides the HTML and CGI files
for the Nagios web interface. In addition, HTML documentation is
included in this package.



Authors:
--------
    Ethan Galstad <nagios@nagios.org>

%package devel
License:        GPL v2 or later
Group:          Development/Libraries/C and C++
Summary:        Development files for nagios
Requires:       %{name} = %{version}
Requires:       gcc

%description devel
Nagios is a program that will monitor hosts and services on your
network. It has the ability to email or page you when a problem arises
and when a problem is resolved. Nagios is written in C and is designed
to run under Linux (and some other *NIX variants) as a background
process, intermittently running checks on various services that you
specify.

This package provides include files that Nagios-related applications
may compile against.



Authors:
--------
    Ethan Galstad <nagios@nagios.org>

%prep
%setup -q -n %{realname}-%{version}
%patch1 -p1
%patch2
%patch10
%patch11
find -name ".cvsignore" | xargs rm
find -name ".gitignore" | xargs rm

%build
# if the following command fails, then apache dependencies are not met
/usr/sbin/apxs2 -q DATADIR >/dev/null
%configure \
	--prefix=%{_prefix} \
	--exec-prefix=%{_sbindir} \
	--bindir=%{_sbindir} \
	--sbindir=%{_prefix}/lib/%{realname}/cgi \
	--libexecdir=%{_prefix}/lib/%{realname}/plugins \
	--datadir=%{_datadir}/%{realname} \
	--sysconfdir=%{_sysconfdir}/%{realname} \
	--with-init-dir=%{_sysconfdir}/init.d \
	--localstatedir=/var/lib/%{realname} \
	--with-cgiurl=/%{realname}/cgi-bin \
	--with-htmurl=/%{realname} \
	--with-httpd-conf=%{apache2_sysconfdir} \
	--with-checkresult-dir=/var/spool/%{realname} \
	--with-lockfile=%{nslockfile} \
	--with-nagios-user=%{nsusr} \
	--with-nagios-group=%{nsgrp} \
	--with-command-user=%{cmdusr} \
	--with-command-grp=%{cmdgrp} \
	--with-gd-lib=%{_libdir} \
	--with-gd-inc=%{_includedir} \
	--with-template-objects \
	--with-template-extinfo \
	--with-perlcache \
	--enable-event-broker \
	--enable-embedded-perl 
#
# %bindir/p1.pl is not a good place for a perl-_module_!
#
sed -i 's#@p1pldir@#%{_prefix}/lib/nagios#g' Makefile include/locations.h sample-config/nagios.cfg
#
# fix p1.pl debug-path
#
sed -i 's#/usr/local/nagios/var/#/var/log/%{realname}/#g' p1.pl 
# make rpmlint happy: add shebang to p1.pl
echo "#!/usr/bin/perl" > p1.pl.new
cat p1.pl >> p1.pl.new
mv p1.pl.new p1.pl
#
# make daemonchk.cgi and event handlers
#
make %{?_smp_mflags} all
make %{?_smp_mflags} -C contrib
pushd contrib/eventhandlers 1>/dev/null
for f in `find . -type f` ; do
    F=`mktemp temp.XXXXXX`
    sed "s=/usr/local/nagios/var/rw/=/var/spool/%{realname}/=; \
         s=/usr/local/nagios/libexec/eventhandlers/=%{_prefix}/lib/%{realname}/plugins/eventhandlers/=; \
         s=/usr/local/nagios/libexec/=%{_prefix}/lib/%{realname}/plugins/=; \
         s=/usr/local/nagios/etc/=%{_sysconfdir}/%{realname}/=; \
         s=/usr/local/nagios/test/var=/var/log/%{realname}=" ${f} > ${F}
    mv ${F} ${f}
done
popd 1>/dev/null

%install
mkdir -p %buildroot/var/log/%realname/archives
mkdir -p %buildroot/%_sbindir
mkdir -p %buildroot/%_sysconfdir/init.d
mkdir -p %buildroot/%apache2_sysconfdir/
mkdir -p %buildroot/%nslockfile_dir
mkdir -p %buildroot/%_sysconfdir/cron.weekly
%{__make} install install-commandmode install-config install-webconf \
    DESTDIR="%buildroot" \
    INSTALL_OPTS="" \
    COMMAND_OPTS="" \
	CGICFGDIR="%_sysconfdir/%realname" \
    INIT_OPTS="" 
%{__make} install -C contrib \
    DESTDIR="%buildroot" \
    INSTALL_OPTS=""
# install event handlers
%{__install} -d -m0755 %buildroot%_prefix/lib/%realname/plugins/eventhandlers/
%{__cp} -afpv contrib/eventhandlers/* %buildroot%_prefix/lib/%realname/plugins/eventhandlers/
# install directory for event brokers like ndoutils
%{__install} -d -m0755 %buildroot%_prefix/lib/%realname/brokers
# install headers for development package
%{__install} -d -m0755 %buildroot%_includedir/%realname/
pushd include
for file in *.h; do 
    if test "x${file}" != "xconfig.h" -a "x${file}" != "xsnprintf.h" -a "x${file}" != "xcgiutils.h" ; then 
        install -m 644 $file %buildroot%_includedir/%realname/
    fi; 
done
popd
#
# cleanup sample-conf dir for including in docdir
#
find sample-config/ -name "*.in" -exec rm {} \;
find sample-config/ -name "*.in.orig" -exec rm {} \;
sed -e 's|command_file=.*|command_file=/var/spool/%realname/nagios.cmd|g' \
    -e 's|log_file=/var/lib/nagios/nagios.log|log_file=/var/log/nagios/nagios.log|g' \
    -e 's|log_archive_path=/var/lib/nagios/archives|log_archive_path=/var/log/nagios/archives|g' \
    %buildroot/%_sysconfdir/%realname/nagios.cfg > %buildroot/%_sysconfdir/%realname/nagios.cfg.tmp
mv %buildroot/%_sysconfdir/%realname/nagios.cfg.tmp %buildroot/%_sysconfdir/%realname/nagios.cfg
#
# install SuSE specials
#
# README.SuSE file
sed -e 's@DATADIR@%_datadir/%realname@g' -e 's@SYSCONFDIR@%_sysconfdir/%realname@g' %{SOURCE10} > %_builddir/%realname-%version/README.SuSE
# init-script
install -m755 %{SOURCE1} %buildroot/%_sysconfdir/init.d/%realname
ln -sf ../../etc/init.d/%realname %buildroot/%_sbindir/rc%realname
# sysconfig script
mkdir -p %buildroot/var/adm/fillup-templates/
install -m 644 %{SOURCE3} %buildroot/var/adm/fillup-templates/sysconfig.nagios
%if 0%{?suse_version} > 1020
%fdupes -s %buildroot
%endif
# install cronjob (gzip' the logfiles)
install -m640 %{SOURCE4} %buildroot/%_sysconfdir/cron.weekly/
# important ghost files
touch %buildroot%_sysconfdir/%realname/htpasswd.users
touch %buildroot/var/lib/%realname/retention.dat
touch %buildroot/var/lib/%realname/status.dat
touch %buildroot/var/log/%realname/config.err
touch %buildroot%nslockfile

%clean
rm -rf %buildroot

%pre
# Create user and group on the system if necessary
# default group: nagios
if
    getent group %{nsgrp} >/dev/null
then
    : OK group %{nsgrp} already present
else
    groupadd -r %{nsgrp} 2>/dev/null || :
    %{nnmmsg} "Added group %{nsgrp} for package %{name}"
fi
# default group: nagcmd
if 
    getent group %{cmdgrp} >/dev/null
then
    : OK group %{cmdgrp} already present
else
    groupadd -r %{cmdgrp} 2>/dev/null || :
    %{nnmmsg} "Added group %{cmdgrp} for package %{name}"
fi
# default user: nagios
if 
    id %{nsusr} > /dev/null 2>&1 
then
    : OK user %{nsusr} already present
else
    useradd  -r -o -g %{nsgrp} -s /bin/false -c "User for Nagios" -d /var/lib/%{realname} %{nsusr} 2> /dev/null || :
    %{nnmmsg} "Added user %{nsusr} for package %{name}"
fi
# update?
if [ ${1:-0} -gt 1 ]; then
  # in the past, group www was used as cmdgrp - now we use the default: nagcmd
  if id -Gn %{nsusr} 2>/dev/null | grep -q %{cmdgrp} >/dev/null 2>&1 ; then
    : # %nsusr is already in %cmdgrp group
  else
    # Add %nsusr to %cmdgrp.
    groupmod -A %{nsusr} %{cmdgrp} 2>/dev/null
    %{nnmmsg} "Added %{nsusr} to %{cmdgrp}"
  fi
fi

%post
%{fillup_and_insserv nagios}
# Update ?
if [ ${1:-0} -gt 1 ]; then
 if [ -f %{_sysconfdir}/%{realname}/nagios.cfg ]; then
  DATE=$(date "+%Y-%m-%d-%H:%M")
  TMPFILE=$(mktemp /tmp/%{realname}-XXXXXX)
  NAGIOS_CFG=%{_sysconfdir}/%{realname}/nagios.cfg
  cp -f $NAGIOS_CFG ${NAGIOS_CFG}_${DATE}
  if ! grep -q ^lock_file=%{nslockfile} $NAGIOS_CFG ; then
        echo "- updating pid lock_file= to %{nslockfile} in $NAGIOS_CFG" >> $TMPFILE
        sed -i "s@^lock_file=.*@lock_file=%{nslockfile}@" $NAGIOS_CFG
  fi
  if grep -q ^service_reaper_frequency $NAGIOS_CFG ; then
        echo "- renaming service_reaper_frequency to check_result_reaper_frequency in $NAGIOS_CFG" >> $TMPFILE
        sed -i "s@service_reaper_frequency@check_result_reaper_frequency@" $NAGIOS_CFG
  fi
  if grep -q ^aggregate_status_updates $NAGIOS_CFG ; then
        echo "- aggregate_status_updates option has been removed from $NAGIOS_CFG" >> $TMPFILE
        sed -i "s@^aggregate_status_updates@# aggregate_status_updates@" $NAGIOS_CFG
  fi
  if grep -q ^downtime_file $NAGIOS_CFG ; then
        set -- $(grep ^downtime_file $NAGIOS_CFG | sed 's@=@ @')
        shift
        file=$(echo $*)
        if [ -n "$file" ]; then
            if [ -f "$file" ]; then
                set -- $(grep ^state_retention_file $NAGIOS_CFG | sed 's@=@ @')
                shift
                state_retention_file=$(echo $*)
                echo "- adding the content of of $file to $state_retention_file" >> $TMPFILE
                cat "$file" >> "$state_retention_file"
            fi
        fi
        echo "- removing downtime_file variable (no longer supported) in $NAGIOS_CFG" >> $TMPFILE
        sed -i "s@^downtime_file@# downtime_file@" $NAGIOS_CFG
  fi
  if grep -q ^comment_file $NAGIOS_CFG ; then
        set -- $(grep ^comment_file $NAGIOS_CFG | sed 's@=@ @')
        shift
        file=$(echo $*)
        if [ -n "$file" ]; then 
            if [ -f "$file" ]; then
                echo "- adding the content of $file to $state_retention_file" >> $TMPFILE
                cat "$file" >> "$state_retention_file"
            fi
        fi
        echo "- removing comment_file variable (no longer supported) in $NAGIOS_CFG" >> $TMPFILE
        sed -i "s@^comment_file@# comment_file@" $NAGIOS_CFG
  fi
  %{nnmmsg} $(cat $TMPFILE)
  rm $TMPFILE
 fi
else
  # First installation: create an alias for the default nagiosadmin user
  if [ -r etc/aliases ]; then
    if ! grep -q "^nagiosadmin:" etc/aliases; then
        echo -e "nagiosadmin:\troot" >> etc/aliases
	    %{nnmmsg} "Added alias for user nagiosadmin to /etc/aliases" 
        if [ -x usr/bin/newaliases ]; then
            usr/bin/newaliases &>/dev/null || true
        else
            %{nnmmsg} "Cannot execute newaliases. Please run it manually."
        fi
    fi
  fi
fi

%preun
%stop_on_removal %{realname}

%postun
if [ -f %nslockfile ]; then
    chown -v %{nsusr} %{nslockfile}
fi
%restart_on_update %{realname}
%{insserv_cleanup}

%post www
wwwusr=""
if [ -f etc/apache2/uid.conf ]; then
    # If apache is installed, and we can find the apache user, set a shell var
    wwwusr=$(awk '/^[ \t]*User[ \t]+[a-zA-Z0-9]+/ {print $2}' etc/apache2/uid.conf)
fi
if [ "z" = "z$wwwusr" ]; then # otherwise, use the default
    wwwusr=%{cmdusr}
fi
# if apache user is not in cmdgrp, add it
if id -Gn $wwwusr 2>/dev/null | grep -q %{cmdgrp} >/dev/null 2>&1 ; then
    : # $wwwusr (default: %cmdusr) is already in nagiocmd group
else
    # modify apache user, adding it to cmdgrp
    groupmod -A $wwwusr %{cmdgrp} 2>/dev/null
    %nnmmsg "User $wwwusr added to group %{cmdgrp} so sending commands to Nagios from the CGI is possible."
fi
%restart_on_update apache2

%preun www
%restart_on_update apache2

%files
%defattr(-,root,root)
%doc Changelog LICENSE README README.SuSE sample-config/
%dir %_sysconfdir/%realname
%dir %_sysconfdir/%realname/objects
%dir %attr(755,%nsusr,%nsgrp) /var/lib/%realname
%dir %attr(755,%nsusr,%nsgrp) /var/log/%realname
%dir %attr(755,%nsusr,%nsgrp) /var/log/%realname/archives
%dir %attr(755,%nsusr,%nsgrp) %nslockfile_dir
%dir %attr(2775,%nsusr,%cmdgrp) /var/spool/%realname
%attr(0755,root,root) %_sysconfdir/init.d/%realname
%attr(0644,%nsusr,%nsgrp) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/run/%realname/%realname.pid
%attr(0600,%nsusr,%nsgrp) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/lib/%realname/retention.dat
%attr(0664,%nsusr,%nsgrp) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/lib/%realname/status.dat
%ghost %config(missingok,noreplace) /var/log/%realname/config.err
%config(noreplace) %_sysconfdir/%realname/*.cfg
%config(noreplace) %_sysconfdir/%realname/objects/*.cfg
/var/adm/fillup-templates/sysconfig.nagios
%defattr(755,root,root)
%_sbindir/nagios
%_sbindir/nagiostats
%_sbindir/mini_epn
%_sbindir/new_mini_epn
%_sbindir/convertcfg
%_sbindir/rc%realname
%_sysconfdir/cron.weekly/*
%_prefix/lib/%realname/
%exclude %_prefix/lib/%realname/cgi/*

%files www
%defattr(755,root,root)
%_prefix/lib/%realname/cgi/*
%defattr(-,root,root)
%_datadir/%realname/
%config(noreplace) %{apache2_sysconfdir}/%realname.conf
%attr(0640,root,%cmdgrp) %ghost %config(missingok,noreplace) %_sysconfdir/%realname/htpasswd.users

%files devel
%defattr(-,root,root)
%dir %_includedir/%realname
%_includedir/%realname/*

%changelog
openSUSE Build Service is sponsored by