# # spec file for package cfengine # # Copyright (c) 2014 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.2~build5 Release: 0 %define srcname core-3.6.2-build5 %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: 0002-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