cfengine/cfengine.spec

479 lines
13 KiB
RPMSpec
Raw Normal View History

#
# spec file for package cfengine
#
# Copyright (c) 2015 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/
#
%if 0%{?suse_version} >= 1210
%define have_systemd 1
%else
%define have_systemd 0
%endif
# set to 1 to enable adapter, leave 0 for minimal cfengine
%define with_mysql 0
%define with_postgresql 0
%define with_libvirt 0
Name: cfengine
Version: 3.6.4
- Update to 3.6.1 New features: - Introduced Solaris and AIX support into the 3.6 series, with many associated build and bug fixes. Changes: - Short-circuit evaluation of classes promises if class is already set (Redmine #5241) - fix to assume all non-specified return codes are failed in commands promises (Redmine #5986) - cf-serverd logs reconfiguration message to NOTICE (was INFO) so that it's always logged in syslog Bug fixes: - File monitoring has been completely rewritten (changes attribute in files promise), which eliminates many bugs, particularly regarding files that are deleted. Upgrading will keep all monitoring data, but downgrading again will reinitialize the DB, so all files will be reported as if they were new. (Redmine #2917) - $(this.promiser) expands in files promises for 'transformer', 'edit_template', 'copy_from.source', 'file_select.exec_program', 'classes' and 'action' bodies (Redmine #1554, #1496, #3530, #1563) - 'body changes' notifies about disappeared files in file monitoring (Redmine #2917) - Set not-kept classes when files or commands promise should be repaired, but is warn-only (Redmine #2359) - Fixed CFEngine template producing a zero-sized file (Redmine #6088) - Add 0-9 A-Z _ to allowed context of module protocol (Redmine #6063) - Extend ps command column width on Solaris and filter on zone rather than adding it to the ps output. - Fixed strftime() function on Solaris when called with certain specifiers. OBS-URL: https://build.opensuse.org/package/show/systemsmanagement/cfengine?expand=0&rev=101
2014-07-29 11:09:25 +02:00
Release: 0
%define srcname core-%{version}
%define libname libpromises
%define libsoname %{libname}3
# Yes, its not FHS conformant but in sync with cfengine documentation
# reported upstream as https://cfengine.com/dev/issues/1896
%define basedir /var/%{name}
%define workdir %{basedir}
# This is the place where workdir should be
#define basedir /var/lib/%{name}
#define workdir %{basedir}/work
Summary: CFEngine automates large-scale IT computing infrastructure
License: GPL-3.0
Group: Productivity/Networking/System
Url: http://www.cfengine.org/
Source: %{srcname}.tar.gz
Source1: %{name}.SuSEfirewall2
# wtf? SLE_11 does not honor rpmlintrc
%if 0%{?suse_version} <= 1130
BuildRequires: -post-build-checks
%endif
%if %have_systemd
Source7: cf-execd.service
Source8: cf-monitord.service
Source9: cf-serverd.service
%else
Source7: cf-monitord
Source8: cf-execd
Source9: cf-serverd
%endif
Source10: %{name}.cron
Source11: %{name}-rpmlintrc
# docs
Source101: http://www.cfengine.org/manuals/cf3-Reference.pdf
Source102: http://www.cfengine.org/manuals/cf3-conceptguide.pdf
Source103: http://www.cfengine.org/manuals/cf3-glossary.pdf
Source104: http://www.cfengine.org/manuals/cf3-quickstart.pdf
Source105: http://www.cfengine.org/manuals/cf3-solutions.pdf
Source106: http://www.cfengine.org/manuals/cf3-tutorial.pdf
Source107: http://www.verticalsysadmin.com/cfengine/primer.pdf
# SLE 11 or RHEL5 autoconf does not support AM_SUBST_NOTMAKE, kkaempf@suse.de
Patch2: remove-am_subst_notmake.patch
# PATCH-FIX-UPSTREAM add 'suse' class for consistency with other vendor classes
# PATCH-FEATURE-UPSTREAM better /etc/SuSE-release parsing, upstream #5423
# kkaempf@suse.de
Patch5: 0001-Simplify-and-fix-parsing-of-etc-SuSE-release-fixes-i.patch
# PATCH-FIX-SUSE
# set cfengine's notion of bindir to /usr/sbin instead of /var/cfengine/bin
# kkaempf@suse.de
Patch6: 0001-Set-sys.bindir-to-usr-sbin-expect-cf-components-ther.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: bison
BuildRequires: db-devel
BuildRequires: flex
BuildRequires: libtool
BuildRequires: libxml2-devel
BuildRequires: lmdb-devel
BuildRequires: pam-devel
#
# Disable mysql for SLE_11:
#
# configure: error: MySQL client library exports symbols clashing with
# OpenSSL. Get the update from distribution provider, recompile MySQL
# library or disable MySQL connector. See
# http://bugs.mysql.com/bug.php?id=65055 for details.
#
%if %with_mysql
%if 0%{?suse_version} != 1110 && 0%{?rhel_version} == 0
BuildRequires: mysql-devel
%endif
%endif
BuildRequires: libacl-devel
%if %with_libvirt
BuildRequires: libvirt-devel
%endif
BuildRequires: openssl-devel
BuildRequires: pcre-devel
%if %with_postgresql
BuildRequires: postgresql-devel
%endif
%if !%have_systemd
# no systemd -> use cron
%if 0%{?centos_version} || 0%{?rhel_version}
Requires: vixie-cron
%else
Requires: cron
%endif
%endif
%if 0%{?suse_version}
PreReq: %install_info_prereq
BuildRequires: texlive
%endif
%if %have_systemd
BuildRequires: systemd
%{?systemd_requires}
%endif
%if 0%{?suse_version} > 01020
BuildRequires: fdupes
%endif
Requires: %{libsoname} = %{version}
%description
CFEngine is the core of a configuration management system: ensuring
the availability, security and compliance of mission-critical
applications and services. Based on popular and flexible open source
configuration management software, CFEngine configuration management
products are highly scalable through decentralized, autonomous agents
that can continuously monitor, self-repair, and update the IT
infrastructure of a global multi-site enterprise - with negligible
impact on system resources or performance.
%package -n %{libsoname}
Summary: Shared library of cfengine
Group: System/Libraries
Provides: %{libname}1 = %{version}
Obsoletes: %{libname}1 < %{version}
%if 0%{?suse_version} == 1010
Requires: glibc
%endif
%description -n %{libsoname}
This package contains the shared libpromises (cfengine) library.
%package -n %{libname}-devel
Summary: Development package for libpromises
Group: Development/Libraries/C and C++
Provides: %{name}-devel = %{version}
Obsoletes: %{name}-devel < %{version}
Requires: %{libsoname} = %{version}
Requires: glibc-devel
%description -n %{libname}-devel
A high-speed character set detection library
This package contains the files needed to compile programs that use the
libpromises library.
%package doc
Summary: CFEngine automates large-scale IT computing infrastructure - documentation
Group: Documentation/Other
%if 0%{?rhel_version} || 0%{?centos_version}
BuildRequires: tetex
BuildRequires: tetex-dvips
BuildRequires: tetex-latex
BuildRequires: texinfo
%endif
%description doc
Full documentation for cfengine
%package examples
Summary: CFEngine example promises
Group: Documentation/Other
%description examples
Lots of examples promises for CFEngine.
%prep
%setup -q -n %{srcname}
%if 0%{?suse_version} > 0 && 0%{?suse_version} <= 1110
%patch2 -p1
%endif
%if 0%{?rhel_version} >= 500 && 0%{?rhel_version} < 600
%patch2 -p1
%endif
%patch5 -p1
%patch6 -p1
##### rpmlint
#### wrong-file-end-of-line-encoding
#### incorrect-fsf-address
### http://www.fsf.org/about/contact/
find ./examples -type f -name "*.cf" -exec perl -p -i -e 's|\r\n|\n|,s|^# Foundation.*|# Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA|' {} \;
### install extra docs
%{__install} -d docs
cp -a $RPM_SOURCE_DIR/*pdf docs/
%build
autoreconf -fi -I m4
# /usr/include/sys for acl.h
CC=gcc CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" \
%configure \
--disable-static \
--enable-fhs \
--datadir=/var \
--with-workdir=%{workdir} \
%if %with_postgresql
--with-postgresql \
%endif
%if %with_mysql
%if 0%{?suse_version} != 1110 && 0%{?rhel_version} == 0 && 0%{?fedora_version} != 20
--with-mysql \
%endif
%endif
--without-qdbm \
--without-tokyocabinet \
--with-lmdb \
--with-pthreads \
--with-openssl \
--with-pcre \
%if %with_libvirt
--with-libvirt \
%endif
--with-libacl \
--with-libxml2 \
%if 0%{?suse_version} >= 1110
--docdir=%{_docdir}/%{name}
%else if 0%{?rhel_version} >= 600
--docdir=%{_docdir}/%{name}-%{version}
%endif
# SLE 10 and RHEL5 don't recognize --docdir
%{__make} %{?_smp_mflags}
# --datadir=/var/lib/%%{name}/inputs \
%install
chmod -x ChangeLog
%if 0%{?rhel_version} || 0%{?centos_version} || 0%{?fedora_version}
[ -d %{buildroot} ] && [ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
%endif
%{__make} "DESTDIR=%{buildroot}" install
%if 0%{?suse_version} >= 1110 || 0%{?rhel_version} >= 600
# will appear in cfengine-examples
rm -rf %{buildroot}/%{_docdir}/%{name}/examples
%endif
%{__install} -d %{buildroot}/{usr/sbin,%{workdir}/{bin,inputs,reports}}
# create dirs needed for better organizing dirs and files
%{__install} -d %{buildroot}/%{basedir}/{backup,failsafe,config,plugins}
#%%{__install} -d %{buildroot}/%%{basedir}/config/{development,production}
%if %have_systemd
# systemd: install sample cron file in docdir
%if 0%{?suse_version}
%{__install} -D -m0644 %{S:10} %{buildroot}/%{_docdir}/%{name}
%else
%{__install} -D -m0644 %{S:10} %{buildroot}/%{_docdir}/%{name}-%{version}
%endif
%else
# no systemd -> use cron
# install cron file
%{__install} -D -m0644 %{S:10} %{buildroot}/%{_sysconfdir}/cron.d/%{name}
%endif
%if %have_systemd
# install systemd scripts
%{__install} -D -m 0644 %{S:7} %{buildroot}/%_unitdir/cf-execd.service
%{__install} -D -m 0644 %{S:8} %{buildroot}/%_unitdir/cf-monitord.service
%{__install} -D -m 0644 %{S:9} %{buildroot}/%_unitdir/cf-serverd.service
%else
# install init scripts
%{__install} -d %{buildroot}/etc/init.d
%{__install} -m 0755 %{S:7} %{S:8} %{S:9} %{buildroot}/etc/init.d/
%{__ln_s} -f ../../etc/init.d/cf-monitord %{buildroot}/%{_sbindir}/rccf-monitord
%{__ln_s} -f ../../etc/init.d/cf-execd %{buildroot}/%{_sbindir}/rccf-execd
%{__ln_s} -f ../../etc/init.d/cf-serverd %{buildroot}/%{_sbindir}/rccf-serverd
# sed @workdir@ in initscripts/cron.d
sed -i\
-e "s,@workdir@,%{workdir},g"\
-e "s,@basedir@,%{basedir},g" \
%{buildroot}/etc/init.d/cf-* %{buildroot}/etc/cron.d/%{name}
%endif
# create symlinks for sbin_PROGRAMS
# because: cf-promises needs to be installed in /var/cfengine/work/bin for pre-validation of full configuration
for i in cf-agent cf-execd cf-key cf-monitord cf-promises cf-runagent cf-serverd cf-upgrade; do
%{__ln_s} -f ../../..%{_sbindir}/${i} %{buildroot}%{workdir}/bin/${i}
done
rm -rf %{buildroot}/%{_libdir}/%{name}/libpromises.la
# will appear in %%docdir
rm -rf %{buildroot}/%{_datadir}/%{name}/ChangeLog
rm -rf %{buildroot}/%{_datadir}/%{name}/README
# create man pages, see https://cfengine.com/dev/issues/2989
%{__install} -d %{buildroot}/%{_mandir}/man8
for i in cf-agent cf-execd cf-key cf-monitord cf-promises cf-runagent cf-serverd
do
LD_LIBRARY_PATH=%{buildroot}%{_libdir}/%{name} %{buildroot}%{_sbindir}/$i -M > %{buildroot}%{_mandir}/man8/$i.8
gzip %{buildroot}%{_mandir}/man8/$i.8
done
%if 0%{?suse_version} > 1010
install -D -m 644 %{S:1} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/cfengine
%endif
%if 0%{?suse_version} > 01020
%fdupes %{buildroot}/usr/share/cfengine
%endif
# systemd
%if %have_systemd
####################################################################
# Systemd
####################################################################
%pre
%service_add_pre cf-execd.service cf-monitord.service cf-serverd.service
%post
%service_add_post cf-execd.service cf-monitord.service cf-serverd.service
%if 0%{?suse_version} > 1010
%install_info --name=%{name} --info-dir=%{_infodir} %{_infodir}/cf3-reference.info.gz
%endif
/sbin/ldconfig
if [ $1 -lt 2 ]; then
# first install, generate key pair
cf-key
fi
%preun
%service_del_preun cf-execd.service cf-monitord.service cf-serverd.service
%postun
%service_del_postun cf-execd.service cf-monitord.service cf-serverd.service
%if 0%{?suse_version} > 1010
%install_info_delete --name=%{name} --info-dir=%{_infodir} %{_infodir}/cf3-reference.info.gz
%endif
if [ $1 -eq 0 ]; then
# clean up inputs cache dir on removal
rm -rf %{basedir}/inputs/*
fi
/sbin/ldconfig
%else # !systemd
####################################################################
# Non-systemd
####################################################################
%preun
%if 0%{?suse_version}
%stop_on_removal cf-monitord
%stop_on_removal cf-execd
%stop_on_removal cf-serverd
%else
/etc/init.d/cf-execd stop
/etc/init.d/cf-monitord stop
/etc/init.d/cf-serverd stop
%endif
%post
%if 0%{?suse_version} > 1010
%install_info --name=%{name} --info-dir=%{_infodir} %{_infodir}/cf3-reference.info.gz
%endif
/sbin/ldconfig
%postun
%if 0%{?suse_version} > 1010
%install_info_delete --name=%{name} --info-dir=%{_infodir} %{_infodir}/cf3-reference.info.gz
%insserv_cleanup
for i in execd monitord serverd; do
%restart_on_update cf-${i}
done
%else
# Update ?
if [ ${1:-0} -eq 1 ]; then
for i in execd monitord serverd; do
/etc/init.d/cf-${i} restart
done
else
:
fi
%endif
/sbin/ldconfig
%endif # !systemd
%post -n %{libsoname} -p /sbin/ldconfig
%postun -n %{libsoname} -p /sbin/ldconfig
%files
%defattr(-,root,root)
%doc ChangeLog LICENSE README.md
%{_sbindir}/cf-agent
%{_sbindir}/cf-execd
%{_sbindir}/cf-key
%{_sbindir}/cf-monitord
%{_sbindir}/cf-promises
%{_sbindir}/cf-serverd
%{_sbindir}/cf-upgrade
%{_sbindir}/cf-runagent
%{_sbindir}/rpmvercmp
%if %have_systemd
%_unitdir/cf-execd.service
%_unitdir/cf-monitord.service
%_unitdir/cf-serverd.service
%else
%config %attr(0755,root,root) /etc/init.d/*
%{_sbindir}/rccf-execd
%{_sbindir}/rccf-monitord
%{_sbindir}/rccf-serverd
%endif
%if 0%{?suse_version} > 1010
%config %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/cfengine
%endif
%{_mandir}/man8/*
%dir %{basedir}
%dir %{workdir}
%{workdir}/*
%if !%have_systemd
%config(noreplace) /etc/cron.d/%{name}
%endif
%files -n %{libsoname}
%defattr(-,root,root)
%dir %{_libdir}/%{name}
%{_libdir}/%{name}/%{libname}.so.*
%files -n %{libname}-devel
%defattr(-,root,root)
%{_libdir}/%{name}/%{libname}.so
%files doc
%defattr(-,root,root)
%doc docs/*.pdf
%files examples
%defattr(-,root,root)
%doc examples/*cf
%changelog