Name: pcs Version: 0.10.5 Release: 1 License: GPLv2 and BSD-2-Clause and ASL 2.0 and MIT URL: https://github.com/ClusterLabs/pcs Summary: Pacemaker Configuration System %global version_or_commit %{version} %global pcs_source_name %{name}-%{version_or_commit} # ui_commit can be determined by hash, tag or branch %global ui_commit 0.1.2 %global ui_src_name pcs-web-ui-%{ui_commit} %global pcs_snmp_pkg_name pcs-snmp %global pyagentx_version 0.4.pcs.2 %global tornado_version 6.0.3 %global dacite_version 1.1.0 %global rubygem_tilt_version 2.0.9 # We do not use _libdir macro because upstream is not prepared for it. # Pcs does not include binaries and thus it should live in /usr/lib. Tornado # and gems include binaries and thus it should live in /usr/lib64. But the # path to tornado/gems is hardcoded in pcs sources. Modify hard links in pcs # sources is not the way since then rpmdiff complains that the same file has # different content in different architectures. %global pcs_libdir %{_prefix}/lib %global bundled_src_dir pcs/bundled %global pcsd_public_dir pcsd/public %global rubygem_cache_dir pcsd/vendor/cache %global rubygem_bundle_dir pcsd/vendor/bundle/ruby # https://fedoraproject.org/wiki/Changes/Avoid_usr_bin_python_in_RPM_Build#Python_bytecompilation # Enforce python3 because bytecompilation of tornado produced warnings: # DEPRECATION WARNING: python2 invoked with /usr/bin/python. # Use /usr/bin/python3 or /usr/bin/python2 # /usr/bin/python will be removed or switched to Python 3 in the future. %global __python %{__python3} # This package depends on automagic byte compilation # https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_2 %global _python_bytecompile_extra 1 #part after last slash is recognized as filename in look-aside repository #desired name is achived by trick with hash anchor Source0: %{url}/archive/%{version_or_commit}/%{pcs_source_name}.tar.gz Source1: pcsd-bundle-config-1 Source2: https://rubygems.org/downloads/tilt-%{rubygem_tilt_version}.gem Source3: https://github.com/ondrejmular/pyagentx/archive/v%{pyagentx_version}/pyagentx-%{pyagentx_version}.tar.gz Source4: https://github.com/tornadoweb/tornado/archive/v%{tornado_version}/tornado-%{tornado_version}.tar.gz Source5: https://github.com/konradhalas/dacite/archive/v%{dacite_version}/dacite-%{dacite_version}.tar.gz Source6: https://github.com/idevat/pcs-web-ui/archive/%{ui_commit}/%{ui_src_name}.tar.gz Source7: https://github.com/idevat/pcs-web-ui/releases/download/%{ui_commit}/pcs-web-ui-node-modules-%{ui_commit}.tar.xz # git for patches BuildRequires: git #printf from coreutils is used in makefile BuildRequires: coreutils BuildRequires: execstack # python for pcs BuildRequires: python3 >= 3.6 BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pycurl # gcc for compiling custom rubygems BuildRequires: gcc BuildRequires: gcc-c++ # ruby and gems for pcsd BuildRequires: ruby >= 2.2.0 BuildRequires: ruby-devel BuildRequires: rubygem-backports BuildRequires: rubygem-ethon BuildRequires: rubygem-ffi BuildRequires: rubygem-io-console BuildRequires: rubygem-json BuildRequires: rubygem-open4 BuildRequires: rubygem-rack BuildRequires: rubygem-rack-protection BuildRequires: rubygem-rack-test BuildRequires: rubygem-sinatra # ruby libraries for tests BuildRequires: rubygem-test-unit # for touching patch files (sanitization function) BuildRequires: diffstat # for post, preun and postun macros BuildRequires: systemd # for tests BuildRequires: python3-lxml BuildRequires: python3-pyOpenSSL BuildRequires: pacemaker-cli >= 2.0.0 BuildRequires: fence-virt BuildRequires: fence-agents-apc BuildRequires: fence-agents-scsi BuildRequires: fence-agents-ipmilan # fence-agents-ilo2 issue with dependencies # BuildRequires: fence-agents-ilo2 BuildRequires: booth-site # pcsd fonts and font management tools for creating symlinks to fonts BuildRequires: fontconfig BuildRequires: liberation-sans-fonts BuildRequires: overpass-fonts # for building web ui BuildRequires: npm # python and libraries for pcs, setuptools for pcs entrypoint Requires: python3 >= 3.6 Requires: python3-lxml Requires: python3-setuptools Requires: python3-clufter => 0.70.0 Requires: python3-pycurl # ruby and gems for pcsd Requires: ruby >= 2.2.0 Requires: rubygem-backports Requires: rubygem-ethon Requires: rubygem-ffi Requires: rubygem-json Requires: rubygem-open4 Requires: rubygem-rack Requires: rubygem-rack-protection Requires: rubygem-rack-test Requires: rubygem-sinatra # ruby and gems for pcsd-ruby Requires: rubygem-daemons Requires: rubygem-eventmachine Requires: rubygem-thin # for killall Requires: psmisc # for working with certificates (validation etc.) Requires: openssl Requires: python3-pyOpenSSL # cluster stack and related packages Suggests: pacemaker Requires: (corosync >= 2.99 if pacemaker) # pcs enables corosync encryption by default so we require libknet1-plugins-all Requires: (libknet1-plugins-all if corosync) Requires: pacemaker-cli >= 2.0.0 # for post, preun and postun macros Requires(post): systemd Requires(preun): systemd Requires(postun): systemd # pam is used for authentication inside daemon (python ctypes) # more details: https://bugzilla.redhat.com/show_bug.cgi?id=1717113 Requires: pam # pcsd fonts Requires: liberation-sans-fonts Requires: overpass-fonts Provides: bundled(tornado) = %{tornado_version} Provides: bundled(dacite) = %{dacite_version} Provides: bundled(rubygem-tilt) = %{rubygem_tilt_version} %description pcs is a corosync and pacemaker configuration tool. It permits users to easily view, modify and create pacemaker based clusters. # pcs-snmp package definition %package -n %{pcs_snmp_pkg_name} Summary: Pacemaker cluster SNMP agent License: GPLv2 and BSD-2-Clause # tar for unpacking pyagetx source tar ball BuildRequires: tar Requires: pcs = %{version}-%{release} Requires: pacemaker Requires: net-snmp Provides: bundled(pyagentx) = %{pyagentx_version} %description -n %{pcs_snmp_pkg_name} SNMP agent that provides information about pacemaker cluster to the master agent (snmpd) %prep %autosetup -p1 -S git -n %{pcs_source_name} # -- following is inspired by python-simplejon.el5 -- # Update timestamps on the files touched by a patch, to avoid non-equal # .pyc/.pyo files across the multilib peers within a build update_times(){ # update_times ... # set the access and modification times of each file_to_touch to the times # of reference_file # put all args to file_list file_list=("$@") # first argument is reference_file: so take it and remove from file_list reference_file=${file_list[0]} unset file_list[0] for fname in ${file_list[@]}; do touch -r $reference_file $fname done } update_times_patch(){ # update_times_patch # set the access and modification times of each file in patch to the times # of patch_file_name patch_file_name=$1 # diffstat # -l lists only the filenames. No histogram is generated. # -p override the logic that strips common pathnames, # simulating the patch "-p" option. (Strip the smallest prefix containing # num leading slashes from each file name found in the patch file) update_times ${patch_file_name} `diffstat -p1 -l ${patch_file_name}` } # update_times_patch %%{PATCH0} # prepare dirs/files necessary for building web ui # inside SOURCE6 is only directory %%{ui_src_name} tar -xzf %SOURCE6 -C %{pcsd_public_dir} tar -xf %SOURCE7 -C %{pcsd_public_dir}/%{ui_src_name} # prepare dirs/files necessary for building all bundles # ----------------------------------------------------- # 1) configuration for rubygems mkdir -p pcsd/.bundle cp -f %SOURCE1 pcsd/.bundle/config # 2) rubygems sources mkdir -p %{rubygem_cache_dir} cp -f %SOURCE2 %{rubygem_cache_dir} # 3) dir for python bundles mkdir -p %{bundled_src_dir} # 4) sources for pyagentx tar -xzf %SOURCE3 -C %{bundled_src_dir} mv %{bundled_src_dir}/pyagentx-%{pyagentx_version} %{bundled_src_dir}/pyagentx update_times %SOURCE3 `find %{bundled_src_dir}/pyagentx -follow` cp %{bundled_src_dir}/pyagentx/LICENSE.txt pyagentx_LICENSE.txt cp %{bundled_src_dir}/pyagentx/CONTRIBUTORS.txt pyagentx_CONTRIBUTORS.txt cp %{bundled_src_dir}/pyagentx/README.md pyagentx_README.md # 5) sources for tornado tar -xzf %SOURCE4 -C %{bundled_src_dir} mv %{bundled_src_dir}/tornado-%{tornado_version} %{bundled_src_dir}/tornado update_times %SOURCE4 `find %{bundled_src_dir}/tornado -follow` cp %{bundled_src_dir}/tornado/LICENSE tornado_LICENSE cp %{bundled_src_dir}/tornado/README.rst tornado_README.rst # 7) sources for python dacite tar -xzf %SOURCE5 -C %{bundled_src_dir} mv %{bundled_src_dir}/dacite-%{dacite_version} %{bundled_src_dir}/dacite cp %{bundled_src_dir}/dacite/LICENSE dacite_LICENSE cp %{bundled_src_dir}/dacite/README.md dacite_README.md %build %define debug_package %{nil} %install rm -rf $RPM_BUILD_ROOT pwd # build bundled rubygems (in main install it is disabled by BUILD_GEMS=false) mkdir -p %{rubygem_bundle_dir} gem install \ --force --verbose --no-document -l --no-user-install \ -i %{rubygem_bundle_dir} \ %{rubygem_cache_dir}/tilt-%{rubygem_tilt_version}.gem \ # build web ui and put it to pcsd make -C %{pcsd_public_dir}/%{ui_src_name} build mv %{pcsd_public_dir}/%{ui_src_name}/build pcsd/public/ui rm -r %{pcsd_public_dir}/%{ui_src_name} # main pcs install make install \ DESTDIR=$RPM_BUILD_ROOT \ PREFIX=%{_prefix} \ SYSTEMD_UNIT_DIR=%{_unitdir} \ LIB_DIR=%{pcs_libdir} \ PYTHON=%{__python3} \ PYTHON_SITELIB=%{python3_sitelib} \ BASH_COMPLETION_DIR=%{_datadir}/bash-completion/completions \ BUNDLE_PYAGENTX_SRC_DIR=`readlink -f %{bundled_src_dir}/pyagentx` \ BUNDLE_TORNADO_SRC_DIR=`readlink -f %{bundled_src_dir}/tornado` \ BUNDLE_DACITE_SRC_DIR=`readlink -f %{bundled_src_dir}/dacite` \ BUILD_GEMS=false \ SYSTEMCTL_OVERRIDE=true \ hdrdir="%{_includedir}" \ rubyhdrdir="%{_includedir}" \ includedir="%{_includedir}" # With this file there is "File is not stripped" problem during rpmdiff # See https://docs.engineering.redhat.com/display/HTD/rpmdiff-elf-stripping for fname in `find ${RPM_BUILD_ROOT}%{pcs_libdir}/pcs/bundled/packages/tornado/ -type f -name "*.so"`; do strip ${fname} done #after the ruby gem compilation we do not need ruby gems in the cache rm -r -v $RPM_BUILD_ROOT%{pcs_libdir}/%{rubygem_cache_dir} %check # In the building environment LC_CTYPE is set to C which causes tests to fail # due to python prints a warning about it to stderr. The following environment # variable disables the warning. # On the live system either UTF8 locale is set or the warning is emmited # which breaks pcs. That is the correct behavior since with wrong locales it # would be probably broken anyway. # The main concern here is to make the tests pass. # See https://fedoraproject.org/wiki/Changes/python3_c.utf-8_locale for details. export PYTHONCOERCECLOCALE=0 run_all_tests(){ #run pcs tests # disabled tests: # BUNDLED_LIB_LOCATION=$RPM_BUILD_ROOT%{pcs_libdir}/pcs/bundled/packages \ %{__python3} pcs_test/suite.py -v --vanilla \ --all-but \ pcs_test.tier0.daemon.app.test_app_remote.SyncConfigMutualExclusive.test_get_not_locked \ pcs_test.tier0.daemon.app.test_app_remote.SyncConfigMutualExclusive.test_post_not_locked \ test_result_python=$? #run pcsd tests and remove them pcsd_dir=$RPM_BUILD_ROOT%{pcs_libdir}/pcsd GEM_HOME=$RPM_BUILD_ROOT%{pcs_libdir}/%{rubygem_bundle_dir} ruby \ -I${pcsd_dir} \ -I${pcsd_dir}/test \ ${pcsd_dir}/test/test_all_suite.rb test_result_ruby=$? if [ $test_result_python -ne 0 ]; then return $test_result_python fi return $test_result_ruby } remove_all_tests() { pcsd_dir=$RPM_BUILD_ROOT%{pcs_libdir}/pcsd #remove pcsd tests, we do not distribute them in the rpm rm -r -v ${pcsd_dir}/test # remove javascript testing files rm -r -v ${pcsd_dir}/public/js/dev } run_all_tests remove_all_tests %posttrans # Make sure the new version of the daemon is runnning. # Also, make sure to start pcsd-ruby if it hasn't been started or even # installed before. This is done by restarting pcsd.service. %{_bindir}/systemctl daemon-reload %{_bindir}/systemctl try-restart pcsd.service %post %systemd_post pcsd.service %systemd_post pcsd-ruby.service %post -n %{pcs_snmp_pkg_name} %systemd_post pcs_snmp_agent.service %preun %systemd_preun pcsd.service %systemd_preun pcsd-ruby.service %preun -n %{pcs_snmp_pkg_name} %systemd_preun pcs_snmp_agent.service %postun %systemd_postun_with_restart pcsd.service %systemd_postun_with_restart pcsd-ruby.service %postun -n %{pcs_snmp_pkg_name} %systemd_postun_with_restart pcs_snmp_agent.service %files %doc CHANGELOG.md %doc README.md %doc tornado_README.rst %doc dacite_README.md %license tornado_LICENSE %license dacite_LICENSE %license COPYING %{python3_sitelib}/pcs %{python3_sitelib}/pcs-%{version}-py3.*.egg-info %{_sbindir}/pcs %{_sbindir}/pcsd %{pcs_libdir}/pcs/pcs_internal %{pcs_libdir}/pcsd/* %{pcs_libdir}/pcsd/.bundle/config %{pcs_libdir}/pcs/bundled/packages/tornado* %{pcs_libdir}/pcs/bundled/packages/dacite* %{_unitdir}/pcsd.service %{_unitdir}/pcsd-ruby.service %{_datadir}/bash-completion/completions/pcs %{_sharedstatedir}/pcsd %{_sysconfdir}/pam.d/pcsd %dir %{_var}/log/pcsd %config(noreplace) %{_sysconfdir}/logrotate.d/pcsd %config(noreplace) %{_sysconfdir}/sysconfig/pcsd %ghost %config(noreplace) %attr(0600,root,root) %{_sharedstatedir}/pcsd/cfgsync_ctl %ghost %config(noreplace) %attr(0600,root,root) %{_sharedstatedir}/pcsd/known-hosts %ghost %config(noreplace) %attr(0600,root,root) %{_sharedstatedir}/pcsd/pcsd.cookiesecret %ghost %config(noreplace) %attr(0600,root,root) %{_sharedstatedir}/pcsd/pcsd.crt %ghost %config(noreplace) %attr(0600,root,root) %{_sharedstatedir}/pcsd/pcsd.key %ghost %config(noreplace) %attr(0644,root,root) %{_sharedstatedir}/pcsd/pcs_settings.conf %ghost %config(noreplace) %attr(0644,root,root) %{_sharedstatedir}/pcsd/pcs_users.conf %{_mandir}/man8/pcs.* %{_mandir}/man8/pcsd.* %exclude %{pcs_libdir}/pcsd/*.debian %exclude %{pcs_libdir}/pcsd/Gemfile %exclude %{pcs_libdir}/pcsd/Gemfile.lock %exclude %{pcs_libdir}/pcsd/Makefile %exclude %{pcs_libdir}/pcsd/pcsd.conf %exclude %{pcs_libdir}/pcsd/pcsd.service %exclude %{pcs_libdir}/pcsd/pcsd-ruby.service %exclude %{pcs_libdir}/pcsd/pcsd.8 %exclude %{pcs_libdir}/pcsd/public/js/dev/* %exclude %{python3_sitelib}/pcs/bash_completion %exclude %{python3_sitelib}/pcs/pcs.8 %exclude %{python3_sitelib}/pcs/pcs %files -n %{pcs_snmp_pkg_name} %{pcs_libdir}/pcs/pcs_snmp_agent %{pcs_libdir}/pcs/bundled/packages/pyagentx* %{_unitdir}/pcs_snmp_agent.service %{_datadir}/snmp/mibs/PCMK-PCS*-MIB.txt %{_mandir}/man8/pcs_snmp_agent.* %config(noreplace) %{_sysconfdir}/sysconfig/pcs_snmp_agent %doc CHANGELOG.md %doc pyagentx_CONTRIBUTORS.txt %doc pyagentx_README.md %license COPYING %license pyagentx_LICENSE.txt %changelog * Fri Oct 30 2020 jiangxinyu - 0.10.5-1 - Upgrade the pcs package version to 0.10.5-1 * Sun Apr 26 2020 wangmian - 0.10.2-5 - Change pcs ui * Wed Apr 22 2020 houjian - 0.10.2-4 - Init the project