commit 8b70c047201775aa32c7fb95aa262ab3b7af3ff5 Author: MSVSphere Packaging Team Date: Fri Oct 25 17:34:59 2024 +0300 import pcs-0.12.0~a1-3.el10 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..38785f3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +SOURCES/backports-3.25.0.gem +SOURCES/base64-0.2.0.gem +SOURCES/childprocess-5.0.0.gem +SOURCES/dacite-1.8.1.tar.gz +SOURCES/ethon-0.16.0.gem +SOURCES/ffi-1.16.3.gem +SOURCES/mustermann-3.0.0.gem +SOURCES/nio4r-2.7.3.gem +SOURCES/pcs-0.12.0a1.tar.gz +SOURCES/pcs-web-ui-0.1.20.tar.gz +SOURCES/pcs-web-ui-node-modules-0.1.20.tar.xz +SOURCES/puma-6.4.2.gem +SOURCES/pyagentx-0.4.pcs.2.tar.gz +SOURCES/pycurl-7.45.3.tar.gz +SOURCES/rack-3.0.11.gem +SOURCES/rack-protection-4.0.0.gem +SOURCES/rack-session-2.0.0.gem +SOURCES/rack-test-2.1.0.gem +SOURCES/rackup-2.1.0.gem +SOURCES/ruby2_keywords-0.0.5.gem +SOURCES/sinatra-4.0.0.gem +SOURCES/tilt-2.3.0.gem +SOURCES/tornado-6.4.0.tar.gz +SOURCES/webrick-1.8.1.gem diff --git a/.pcs.metadata b/.pcs.metadata new file mode 100644 index 0000000..702a9a2 --- /dev/null +++ b/.pcs.metadata @@ -0,0 +1,24 @@ +7bfaf5b42c0992bbc5055d7bd4013f0ca4731775 SOURCES/backports-3.25.0.gem +ea3a591bdfa93655d8eec9d7bdd7fb87ecb5616a SOURCES/base64-0.2.0.gem +8f910640f84d085707138aa70d6eedb7df10ca73 SOURCES/childprocess-5.0.0.gem +07b26abbf7ff0dcba5c7f9e814ff7eebafefb058 SOURCES/dacite-1.8.1.tar.gz +5b56a68268708c474bef04550639ded3add5e946 SOURCES/ethon-0.16.0.gem +10e4cf0e11ef4581ec4ad5fe2cdf3c78b6077d39 SOURCES/ffi-1.16.3.gem +e892678aaf02ccb27f3a6cd58482cda00aea6ce8 SOURCES/mustermann-3.0.0.gem +632c455f6e27a5f568e9d24761b8a4246cfcc603 SOURCES/nio4r-2.7.3.gem +85dccd75ffe486aff1c3c5ce4448b3da7bae6919 SOURCES/pcs-0.12.0a1.tar.gz +c75288254b282cb8aed7307fd18dbdd8dda9252d SOURCES/pcs-web-ui-0.1.20.tar.gz +1dbe81ac08cfe60da25cc8650292cdc7c33cdb89 SOURCES/pcs-web-ui-node-modules-0.1.20.tar.xz +623cb3ebec75de449cad3c9f50d5d370edf9e2f9 SOURCES/puma-6.4.2.gem +3176b2f2b332c2b6bf79fe882e83feecf3d3f011 SOURCES/pyagentx-0.4.pcs.2.tar.gz +d36e54b3d6d36460dae0c7a2b9971d72d16d8225 SOURCES/pycurl-7.45.3.tar.gz +a156440aaee17f60b83f2f681ec60fce2329a480 SOURCES/rack-3.0.11.gem +f91158b296882aa5b3798ff6c24f01cdf233ef48 SOURCES/rack-protection-4.0.0.gem +9e7935696af0b64cc5f5ce2dfeabdb7e0d3a84f0 SOURCES/rack-session-2.0.0.gem +ae09ea83748b55875edc3708fffba90db180cb8e SOURCES/rack-test-2.1.0.gem +657a2dc63695e1bf9eb5feae4d9d65a7c6b900ad SOURCES/rackup-2.1.0.gem +d017b9e4d1978e0b3ccc3e2a31493809e4693cd3 SOURCES/ruby2_keywords-0.0.5.gem +28c671c6d061475ed2bfd3e6a4a17970a0a12d8a SOURCES/sinatra-4.0.0.gem +4a38a9a55887b2882182a2c5771e592efe514e5e SOURCES/tilt-2.3.0.gem +ee95560139af1bb8d0d49d4acf0518deb04877d2 SOURCES/tornado-6.4.0.tar.gz +0696afa9cc0b56f541aacb7483aecdb385a5bd37 SOURCES/webrick-1.8.1.gem diff --git a/SOURCES/do-not-support-cluster-setup-with-udp-u-transport.patch b/SOURCES/do-not-support-cluster-setup-with-udp-u-transport.patch new file mode 100644 index 0000000..465b297 --- /dev/null +++ b/SOURCES/do-not-support-cluster-setup-with-udp-u-transport.patch @@ -0,0 +1,38 @@ +From 7bfa2ad4f4f5f59fd501b0cec23cdc489f90a09e Mon Sep 17 00:00:00 2001 +From: Michal Pospisil +Date: Thu, 23 May 2024 17:22:12 +0200 +Subject: [PATCH] do not support cluster setup with udp(u) transport in RHEL10 + +--- + pcs/pcs.8.in | 2 ++ + pcs/usage.py | 1 + + 2 files changed, 3 insertions(+) + +diff --git a/pcs/pcs.8.in b/pcs/pcs.8.in +index 0bc1a4e5..4dea3582 100644 +--- a/pcs/pcs.8.in ++++ b/pcs/pcs.8.in +@@ -479,6 +479,8 @@ By default, encryption is enabled with cipher=aes256 and hash=sha256. To disable + + Transports udp and udpu: + .br ++WARNING: These transports are not supported in RHEL 10. ++.br + These transports are limited to one address per node. They do not support traffic encryption nor compression. + .br + Transport options are: ip_version, netmtu +diff --git a/pcs/usage.py b/pcs/usage.py +index 26204c59..31eba549 100644 +--- a/pcs/usage.py ++++ b/pcs/usage.py +@@ -1496,6 +1496,7 @@ Commands: + hash=sha256. To disable encryption, set cipher=none and hash=none. + + Transports udp and udpu: ++ WARNING: These transports are not supported in RHEL 10. + These transports are limited to one address per node. They do not + support traffic encryption nor compression. + Transport options are: +-- +2.45.1 + diff --git a/SOURCES/fix-tests-for-missing-webui.patch b/SOURCES/fix-tests-for-missing-webui.patch new file mode 100644 index 0000000..d88f9ea --- /dev/null +++ b/SOURCES/fix-tests-for-missing-webui.patch @@ -0,0 +1,444 @@ +From 525b102bd053a6653dff663845c98683fa78bbab Mon Sep 17 00:00:00 2001 +From: Ivan Devat +Date: Mon, 24 Jun 2024 17:19:58 +0200 +Subject: [PATCH] fix tests for missing webui + +--- + pcs_test/Makefile.am | 1 + + pcs_test/smoke.sh.in | 23 ++++++-- + pcs_test/tier0/daemon/app/fixtures_app.py | 53 +++---------------- + .../tier0/daemon/app/fixtures_app_webui.py | 28 ++++++++++ + pcs_test/tier0/daemon/app/test_app_gui.py | 37 ++++++++++--- + pcs_test/tier0/daemon/app/test_app_spa.py | 26 +++++++-- + pcs_test/tier0/daemon/test_env.py | 6 ++- + pcs_test/tier0/daemon/test_session.py | 25 ++++++--- + pcs_test/tools/misc.py | 9 ++++ + 9 files changed, 138 insertions(+), 70 deletions(-) + create mode 100644 pcs_test/tier0/daemon/app/fixtures_app_webui.py + +diff --git a/pcs_test/Makefile.am b/pcs_test/Makefile.am +index 4e71fcda..6c5932b3 100644 +--- a/pcs_test/Makefile.am ++++ b/pcs_test/Makefile.am +@@ -134,6 +134,7 @@ EXTRA_DIST = \ + tier0/common/test_tools.py \ + tier0/common/test_tools_xml_fromstring.py \ + tier0/daemon/app/fixtures_app.py \ ++ tier0/daemon/app/fixtures_app_webui.py \ + tier0/daemon/app/__init__.py \ + tier0/daemon/app/test_api_v0.py \ + tier0/daemon/app/test_api_v1.py \ +diff --git a/pcs_test/smoke.sh.in b/pcs_test/smoke.sh.in +index a4b3ac71..37eac345 100755 +--- a/pcs_test/smoke.sh.in ++++ b/pcs_test/smoke.sh.in +@@ -66,10 +66,25 @@ cat < ${pcsd_settings_conf_path} + EOF + cat ${pcsd_settings_conf_path} + pcs cluster start --all --wait +-curl --insecure --data "username=${cluster_user}&password=${cluster_user_password}" --cookie-jar ${cookie_file} https://localhost:2224/ui/login +-curl --insecure --cookie ${cookie_file} --header "X-Requested-With: XMLHttpRequest" --data "hidden[hidden_input]=&config[stonith-enabled]=false" https://localhost:2224/managec/${cluster_name}/update_cluster_settings > "${output_file}" +-cat "${output_file}"; echo "" +-[ "$(cat ${output_file})" = "Update Successful" ] ++ ++webui_http_code_response=$( ++ curl --insecure --silent --output /dev/null --write-out "%{http_code}" \ ++ https://localhost:2224/ui/ ++) ++if [ "$webui_http_code_response" = "200" ]; then ++ # Webui backend check ++ curl --insecure --data "username=${cluster_user}&password=${cluster_user_password}" --cookie-jar ${cookie_file} https://localhost:2224/ui/login ++ curl --insecure --cookie ${cookie_file} --header "X-Requested-With: XMLHttpRequest" --data "hidden[hidden_input]=&config[stonith-enabled]=false" https://localhost:2224/managec/${cluster_name}/update_cluster_settings > "${output_file}" ++ cat "${output_file}"; echo "" ++ [ "$(cat ${output_file})" = "Update Successful" ] ++elif [ "$webui_http_code_response" = "401" ]; then ++ curl --insecure https://localhost:2224/ui/ > "${output_file}" ++ cat "${output_file}"; echo "" ++ [ "$(cat "${output_file}")" = '{"notauthorized":"true"}' ] ++else ++ echo "Unexpected response from https://localhost:2224/ui/ - http code: '${webui_http_code_response}'" ++ exit 1 ++fi + + # Sanity check of API V1 + curl -kb "token=${token}" https://localhost:2224/api/v1/resource-agent-get-agents-list/v1 --data '{}' > "${output_file}" +diff --git a/pcs_test/tier0/daemon/app/fixtures_app.py b/pcs_test/tier0/daemon/app/fixtures_app.py +index 3c0d6a4f..56acf473 100644 +--- a/pcs_test/tier0/daemon/app/fixtures_app.py ++++ b/pcs_test/tier0/daemon/app/fixtures_app.py +@@ -1,16 +1,11 @@ + from pprint import pformat + from urllib.parse import urlencode + +-from tornado.httputil import ( +- HTTPHeaders, +- parse_cookie, +-) ++from tornado.httputil import HTTPHeaders + from tornado.testing import AsyncHTTPTestCase + from tornado.web import Application + + from pcs.daemon import ruby_pcsd +-from pcs.daemon.app.webui import session +-from pcs.daemon.app.webui.auth import PCSD_SESSION + + USER = "user" + GROUPS = ["group1", "group2"] +@@ -56,6 +51,13 @@ class AppTest(AsyncHTTPTestCase): + def fetch(self, path, raise_error=False, **kwargs): + if "follow_redirects" not in kwargs: + kwargs["follow_redirects"] = False ++ ++ if "is_ajax" in kwargs: ++ if "headers" not in kwargs: ++ kwargs["headers"] = {} ++ kwargs["headers"]["X-Requested-With"] = "XMLHttpRequest" ++ del kwargs["is_ajax"] ++ + response = super().fetch(path, raise_error=raise_error, **kwargs) + # "Strict-Transport-Security" header is expected in every response + self.assertTrue( +@@ -91,45 +93,6 @@ class AppTest(AsyncHTTPTestCase): + self.assert_headers_contains(response.headers, self.wrapper.headers) + self.assertEqual(response.body, self.wrapper.body) + +- +-class AppUiTestMixin(AppTest): +- def setUp(self): +- self.session_storage = session.Storage(lifetime_seconds=10) +- super().setUp() +- +- def assert_session_in_response(self, response, sid=None): +- self.assertTrue("Set-Cookie" in response.headers) +- cookie = parse_cookie(response.headers["Set-Cookie"]) +- self.assertTrue(PCSD_SESSION, cookie) +- if sid: +- self.assertEqual(cookie[PCSD_SESSION], sid) +- return cookie[PCSD_SESSION] +- +- def fetch(self, path, raise_error=False, **kwargs): +- if "sid" in kwargs: +- if "headers" not in kwargs: +- kwargs["headers"] = {} +- kwargs["headers"]["Cookie"] = f"{PCSD_SESSION}={kwargs['sid']}" +- del kwargs["sid"] +- +- if "is_ajax" in kwargs: +- if "headers" not in kwargs: +- kwargs["headers"] = {} +- kwargs["headers"]["X-Requested-With"] = "XMLHttpRequest" +- del kwargs["is_ajax"] +- +- if "follow_redirects" not in kwargs: +- kwargs["follow_redirects"] = False +- +- return super().fetch(path, raise_error=raise_error, **kwargs) +- +- def create_login_session(self): +- return self.session_storage.login(USER) +- +- def assert_success_response(self, response, expected_body): +- self.assertEqual(response.code, 200) +- self.assertEqual(response.body.decode(), expected_body) +- + def assert_unauth_ajax(self, response): + self.assertEqual(response.code, 401) + self.assertEqual(response.body, b'{"notauthorized":"true"}') +diff --git a/pcs_test/tier0/daemon/app/fixtures_app_webui.py b/pcs_test/tier0/daemon/app/fixtures_app_webui.py +new file mode 100644 +index 00000000..e38ca3e7 +--- /dev/null ++++ b/pcs_test/tier0/daemon/app/fixtures_app_webui.py +@@ -0,0 +1,28 @@ ++try: ++ from pcs.daemon.app import webui ++except ImportError: ++ # You need to skip tests in tests that uses AppTest in the case webui ++ # is not there. ++ webui = None ++ ++from pcs_test.tier0.daemon.app import fixtures_app ++ ++ ++class AppTest(fixtures_app.AppTest): ++ def setUp(self): ++ self.session_storage = webui.session.Storage(lifetime_seconds=10) ++ super().setUp() ++ ++ def fetch(self, path, raise_error=False, **kwargs): ++ if "sid" in kwargs: ++ if "headers" not in kwargs: ++ kwargs["headers"] = {} ++ kwargs["headers"][ ++ "Cookie" ++ ] = f"{webui.auth.PCSD_SESSION}={kwargs['sid']}" ++ del kwargs["sid"] ++ ++ return super().fetch(path, raise_error=raise_error, **kwargs) ++ ++ def create_login_session(self): ++ return self.session_storage.login(fixtures_app.USER) +diff --git a/pcs_test/tier0/daemon/app/test_app_gui.py b/pcs_test/tier0/daemon/app/test_app_gui.py +index b3446fdb..2317eea5 100644 +--- a/pcs_test/tier0/daemon/app/test_app_gui.py ++++ b/pcs_test/tier0/daemon/app/test_app_gui.py +@@ -1,14 +1,24 @@ + import logging + from unittest import mock + ++from tornado.httputil import parse_cookie ++ + from pcs.daemon import ruby_pcsd + from pcs.daemon.app import sinatra_ui + from pcs.daemon.app.auth import UnixSocketAuthProvider +-from pcs.daemon.app.webui import sinatra_ui as sinatra_ui_webui ++ ++try: ++ from pcs.daemon.app import webui ++except ImportError: ++ webui = None + from pcs.lib.auth.provider import AuthProvider + from pcs.lib.auth.types import AuthUser + +-from pcs_test.tier0.daemon.app import fixtures_app ++from pcs_test.tier0.daemon.app import ( ++ fixtures_app, ++ fixtures_app_webui, ++) ++from pcs_test.tools.misc import skip_unless_webui_installed + + # Don't write errors to test output. + logging.getLogger("tornado.access").setLevel(logging.CRITICAL) +@@ -33,21 +43,28 @@ def patch_get_unix_socket_user(user): + auth_provider = AuthProvider(logging.getLogger("test logger")) + + +-class AppTest(fixtures_app.AppUiTestMixin): ++@skip_unless_webui_installed() ++@patch_login_user() ++class SinatraAjaxProtectedSession(fixtures_app_webui.AppTest): + def setUp(self): + self.wrapper = fixtures_app.RubyPcsdWrapper(ruby_pcsd.SINATRA) + super().setUp() + +- +-@patch_login_user() +-class SinatraAjaxProtectedSession(AppTest): + def get_routes(self): +- return sinatra_ui_webui.get_routes( ++ return webui.sinatra_ui.get_routes( + self.session_storage, + auth_provider, + self.wrapper, + ) + ++ def assert_session_in_response(self, response, sid=None): ++ self.assertTrue("Set-Cookie" in response.headers) ++ cookie = parse_cookie(response.headers["Set-Cookie"]) ++ self.assertTrue(webui.auth.PCSD_SESSION, cookie) ++ if sid: ++ self.assertEqual(cookie[webui.auth.PCSD_SESSION], sid) ++ return cookie[webui.auth.PCSD_SESSION] ++ + def test_deal_without_authentication(self): + self.assert_unauth_ajax(self.get("/some-ajax", is_ajax=True)) + +@@ -63,7 +80,11 @@ class SinatraAjaxProtectedSession(AppTest): + + + @patch_login_user() +-class SinatraAjaxProtectedUnixSocket(AppTest): ++class SinatraAjaxProtectedUnixSocket(fixtures_app.AppTest): ++ def setUp(self): ++ self.wrapper = fixtures_app.RubyPcsdWrapper(ruby_pcsd.SINATRA) ++ super().setUp() ++ + def get_routes(self): + return sinatra_ui.get_routes(auth_provider, self.wrapper) + +diff --git a/pcs_test/tier0/daemon/app/test_app_spa.py b/pcs_test/tier0/daemon/app/test_app_spa.py +index 89a5ab0e..6acf3c7d 100644 +--- a/pcs_test/tier0/daemon/app/test_app_spa.py ++++ b/pcs_test/tier0/daemon/app/test_app_spa.py +@@ -2,12 +2,22 @@ import logging + import os + from unittest import mock + +-from pcs.daemon.app import webui ++try: ++ from pcs.daemon.app import webui ++except ImportError: ++ webui = None ++ + from pcs.lib.auth.provider import AuthProvider + from pcs.lib.auth.types import AuthUser + +-from pcs_test.tier0.daemon.app import fixtures_app +-from pcs_test.tools.misc import get_tmp_dir ++from pcs_test.tier0.daemon.app import ( ++ fixtures_app, ++ fixtures_app_webui, ++) ++from pcs_test.tools.misc import ( ++ get_tmp_dir, ++ skip_unless_webui_installed, ++) + + LOGIN_BODY = {"username": fixtures_app.USER, "password": fixtures_app.PASSWORD} + PREFIX = "/ui/" +@@ -16,7 +26,7 @@ PREFIX = "/ui/" + logging.getLogger("tornado.access").setLevel(logging.CRITICAL) + + +-class AppTest(fixtures_app.AppUiTestMixin): ++class AppTest(fixtures_app_webui.AppTest): + def setUp(self): + self.public_dir = get_tmp_dir("tier0_daemon_app_spa") + self.spa_dir_path = os.path.join(self.public_dir.name, "ui") +@@ -41,7 +51,12 @@ class AppTest(fixtures_app.AppUiTestMixin): + auth_provider=AuthProvider(logging.Logger("test logger")), + ) + ++ def assert_success_response(self, response, expected_body): ++ self.assertEqual(response.code, 200) ++ self.assertEqual(response.body.decode(), expected_body) ++ + ++@skip_unless_webui_installed() + class Static(AppTest): + def test_index(self): + self.assert_success_response( +@@ -50,6 +65,7 @@ class Static(AppTest): + ) + + ++@skip_unless_webui_installed() + class Fallback(AppTest): + def setUp(self): + super().setUp() +@@ -65,6 +81,7 @@ class Fallback(AppTest): + ) + + ++@skip_unless_webui_installed() + class Login(AppTest): + def setUp(self): + super().setUp() +@@ -94,6 +111,7 @@ class Login(AppTest): + ) + + ++@skip_unless_webui_installed() + class Logout(AppTest): + def test_can_logout(self): + session1 = self.create_login_session() +diff --git a/pcs_test/tier0/daemon/test_env.py b/pcs_test/tier0/daemon/test_env.py +index 40f0c402..0eff3660 100644 +--- a/pcs_test/tier0/daemon/test_env.py ++++ b/pcs_test/tier0/daemon/test_env.py +@@ -8,7 +8,10 @@ from unittest import ( + from pcs import settings + from pcs.daemon import env + +-from pcs_test.tools.misc import create_setup_patch_mixin ++from pcs_test.tools.misc import ( ++ create_setup_patch_mixin, ++ skip_unless_webui_installed, ++) + + + def webui_fallback(public_dir): +@@ -177,6 +180,7 @@ class Prepare(TestCase, create_setup_patch_mixin(env)): + {env.PCSD_DEBUG: "false"} + ) + ++ @skip_unless_webui_installed() + def test_errors_on_missing_paths(self): + self.path_exists.return_value = False + self.assert_environ_produces_modified_pcsd_env( +diff --git a/pcs_test/tier0/daemon/test_session.py b/pcs_test/tier0/daemon/test_session.py +index a893c01d..e8eff4cd 100644 +--- a/pcs_test/tier0/daemon/test_session.py ++++ b/pcs_test/tier0/daemon/test_session.py +@@ -1,23 +1,31 @@ + from contextlib import contextmanager + from unittest import TestCase + +-from pcs.daemon.app.webui import session +-from pcs.daemon.app.webui.session import Session ++try: ++ from pcs.daemon.app import webui ++except ImportError: ++ webui = None + +-from pcs_test.tools.misc import create_setup_patch_mixin ++from pcs_test.tools.misc import ( ++ create_setup_patch_mixin, ++ skip_unless_webui_installed, ++) + + SID = "abc" + USER = "user" + GROUPS = ["group1", "group2"] + + +-PatchSessionMixin = create_setup_patch_mixin(session) ++# If webui is None, the tests in this file using these mixins are skipped, ++# passing a dummy object instead to make this executable ++PatchSessionMixin = create_setup_patch_mixin(webui) if webui else object + + ++@skip_unless_webui_installed() + class SessionTest(TestCase, PatchSessionMixin): + def setUp(self): +- self.now = self.setup_patch("now", return_value=0) +- self.session = Session(SID, USER) ++ self.now = self.setup_patch("session.now", return_value=0) ++ self.session = webui.session.Session(SID, USER) + + def test_session_grows_older(self): + self.now.return_value = 10.1 +@@ -42,10 +50,11 @@ class SessionTest(TestCase, PatchSessionMixin): + session1.sid + + ++@skip_unless_webui_installed() + class StorageTest(TestCase, PatchSessionMixin): + def setUp(self): +- self.now = self.setup_patch("now", return_value=0) +- self.storage = session.Storage(lifetime_seconds=10) ++ self.now = self.setup_patch("session.now", return_value=0) ++ self.storage = webui.session.Storage(lifetime_seconds=10) + + def test_does_not_accept_foreign_sid(self): + self.assertIsNone(self.storage.get("unknown_sid")) +diff --git a/pcs_test/tools/misc.py b/pcs_test/tools/misc.py +index 28e03411..7a048a4d 100644 +--- a/pcs_test/tools/misc.py ++++ b/pcs_test/tools/misc.py +@@ -15,6 +15,11 @@ from pcs.cli.common.parse_args import InputModifiers + from pcs.common import str_tools + from pcs.lib.external import CommandRunner + ++try: ++ from pcs.daemon.app import webui ++except ImportError: ++ webui = None # type: ignore ++ + from pcs_test import TEST_ROOT + from pcs_test import settings as tests_settings + from pcs_test.tools.custom_mock import MockLibraryReportProcessor +@@ -292,6 +297,10 @@ def skip_unless_booth_resource_agent_installed(): + ) + + ++def skip_unless_webui_installed(): ++ return skipUnless(webui, "test requires webui which is not installed") ++ ++ + def create_patcher(target_prefix_or_module): + """ + Return function for patching tests with preconfigured target prefix +-- +2.45.2 + diff --git a/SPECS/pcs.spec b/SPECS/pcs.spec new file mode 100644 index 0000000..1fd3be1 --- /dev/null +++ b/SPECS/pcs.spec @@ -0,0 +1,1144 @@ +Name: pcs +Version: 0.12.0~a1 +Release: 3%{?dist} +# https://docs.fedoraproject.org/en-US/packaging-guidelines/LicensingGuidelines/ +# https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#Good_Licenses +# GPL-2.0-only: pcs +# Apache-2.0: tornado +# MIT: backports, childprocess, dacite, ethon, mustermann, rack, +# rack-protection, rack-session, rack-test, rackup, sinatra, tilt +# MIT and (BSD-2-Clause or GPL-2.0-or-later): nio4r +# BSD-2-Clause or Ruby: base64, ruby2_keywords, webrick +# BSD-3-Clause: puma +# BSD-3-Clause and MIT: ffi +# curl OR LGPL-2.1-or-later: python-pycurl +License: GPL-2.0-only AND Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause OR Ruby) AND (BSD-2-Clause OR GPL-2.0-or-later) AND (curl OR LGPL-2.1-or-later) +URL: https://github.com/ClusterLabs/pcs +Group: System Environment/Base +Summary: Pacemaker/Corosync Configuration System +# Building only for architectures with pacemaker and corosync available +ExclusiveArch: x86_64 s390x ppc64le aarch64 + +# Remove a tilde used by RPM to get the correct upstream version +%global clean_version %(echo %{version} | sed 's/~//') +# When specifying a commit, use its long hash +%global version_or_commit %{clean_version} +# %%global version_or_commit 5b7d498915e0cc876b29fe9ebd709c061ac754db +%global pcs_source_name %{name}-%{version_or_commit} + +# ui_commit can be determined by hash, tag or branch +%global ui_commit 0.1.20 +%global ui_modules_version 0.1.20 +%global ui_src_name pcs-web-ui-%{ui_commit} + +%global dacite_version 1.8.1 +%global pyagentx_version 0.4.pcs.2 +%global tornado_version 6.4.0 + +%global pycurl_version 7.45.3 +# During its initialization, PycURL checks that the actual libcurl version +# is not lower than the one used when PycURL was built. +# Yes, that should be handled by library versioning (which would then get +# automatically reflected by rpm). +# For now, we have to reflect that dependency. +%global libcurl_sed '/^#define LIBCURL_VERSION "/!d;s/"[^"]*$//;s/.*"//;q' +%global curlver_h /usr/include/curl/curlver.h +%global libcurl_ver %(sed %{libcurl_sed} %{curlver_h} 2>/dev/null || echo 0) + +%global version_rubygem_backports 3.25.0 +%global version_rubygem_base64 0.2.0 +%global version_rubygem_childprocess 5.0.0 +%global version_rubygem_ethon 0.16.0 +%global version_rubygem_ffi 1.16.3 +%global version_rubygem_mustermann 3.0.0 +%global version_rubygem_nio4r 2.7.3 +%global version_rubygem_puma 6.4.2 +%global version_rubygem_rack 3.0.11 +%global version_rubygem_rack_protection 4.0.0 +%global version_rubygem_rack_session 2.0.0 +%global version_rubygem_rack_test 2.1.0 +%global version_rubygem_rackup 2.1.0 +%global version_rubygem_ruby2_keywords 0.0.5 +%global version_rubygem_sinatra 4.0.0 +%global version_rubygem_tilt 2.3.0 +%global version_rubygem_webrick 1.8.1 + +%global required_pacemaker_version 2.1.0 + +%global pcs_bundled_dir pcs_bundled +%global pcsd_public_dir pcsd/public + +%global rubygem_bundle_dir pcsd/vendor/bundle +%global rubygem_cache_dir %{rubygem_bundle_dir}/cache + +%global ui_build_dir_standalone build_standalone +%global ui_build_dir_cockpit build_cockpit +%global ui_cockpit_dest ha-cluster +%global ui_appstream_metainfo org.clusterlabs.cockpit_pcs_web_ui.metainfo.xml + +%global pkg_pcs_snmp pcs-snmp +%global pkg_cockpit_ha_cluster cockpit-ha-cluster + +# prepend v for folder in GitHub link when using tagged tarball +%if "%{clean_version}" == "%{version_or_commit}" + %global v_prefix v +%endif + +# part after the last slash is recognized as filename in look-aside cache +Source0: %{url}/archive/%{?v_prefix}%{version_or_commit}/%{pcs_source_name}.tar.gz + +Source21: https://github.com/konradhalas/dacite/archive/v%{dacite_version}/dacite-%{dacite_version}.tar.gz +Source22: https://github.com/ondrejmular/pyagentx/archive/v%{pyagentx_version}/pyagentx-%{pyagentx_version}.tar.gz +Source23: https://pypi.python.org/packages/source/p/pycurl/pycurl-%{pycurl_version}.tar.gz +Source24: https://github.com/tornadoweb/tornado/archive/v%{tornado_version}/tornado-%{tornado_version}.tar.gz + +Source61: https://rubygems.org/downloads/backports-%{version_rubygem_backports}.gem +Source62: https://rubygems.org/downloads/base64-%{version_rubygem_base64}.gem +Source63: https://rubygems.org/downloads/childprocess-%{version_rubygem_childprocess}.gem +Source64: https://rubygems.org/downloads/ethon-%{version_rubygem_ethon}.gem +Source65: https://rubygems.org/downloads/ffi-%{version_rubygem_ffi}.gem +Source66: https://rubygems.org/downloads/mustermann-%{version_rubygem_mustermann}.gem +Source67: https://rubygems.org/downloads/nio4r-%{version_rubygem_nio4r}.gem +Source68: https://rubygems.org/downloads/puma-%{version_rubygem_puma}.gem +Source69: https://rubygems.org/downloads/rack-%{version_rubygem_rack}.gem +Source70: https://rubygems.org/downloads/rack-protection-%{version_rubygem_rack_protection}.gem +Source71: https://rubygems.org/downloads/rack-session-%{version_rubygem_rack_session}.gem +Source72: https://rubygems.org/downloads/rack-test-%{version_rubygem_rack_test}.gem +Source73: https://rubygems.org/downloads/rackup-%{version_rubygem_rackup}.gem +Source74: https://rubygems.org/downloads/ruby2_keywords-%{version_rubygem_ruby2_keywords}.gem +Source75: https://rubygems.org/downloads/sinatra-%{version_rubygem_sinatra}.gem +Source76: https://rubygems.org/downloads/tilt-%{version_rubygem_tilt}.gem +Source77: https://rubygems.org/downloads/webrick-%{version_rubygem_webrick}.gem + +Source100: https://github.com/ClusterLabs/pcs-web-ui/archive/%{ui_commit}/%{ui_src_name}.tar.gz +Source101: https://github.com/ClusterLabs/pcs-web-ui/releases/download/%{ui_commit}/pcs-web-ui-node-modules-%{ui_modules_version}.tar.xz + + +# pcs patches: <= 200 +# Patch1: name.patch +Patch1: do-not-support-cluster-setup-with-udp-u-transport.patch +Patch2: fix-tests-for-missing-webui.patch + +# ui patches: >200 +# Patch201: name-web-ui.patch + + +# git for patches +BuildRequires: git-core +# for building pcs tarballs +BuildRequires: autoconf +BuildRequires: automake +BuildRequires: make +# printf from coreutils is used in makefile, head is used in spec +BuildRequires: coreutils +# python for pcs +BuildRequires: python3 >= 3.12 +BuildRequires: python3-cryptography +BuildRequires: python3-dateutil >= 2.7.0 +BuildRequires: python3-devel +BuildRequires: python3-lxml +BuildRequires: python3-pip +BuildRequires: python3-pyparsing +# pcs build backend is setuptools +BuildRequires: python3-setuptools +# for building bundled python packages +BuildRequires: python3-wheel +# gcc for compiling custom rubygems and python extensions +BuildRequires: gcc +BuildRequires: gcc-c++ +# dependencies for pycurl +BuildRequires: libcurl-devel +BuildRequires: openssl-devel +# ruby and gems for pcsd +BuildRequires: ruby >= 2.5.0 +BuildRequires: ruby-devel +BuildRequires: rubygems +BuildRequires: rubygem-bundler +BuildRequires: rubygem-json +BuildRequires: rubygem-rexml +# ruby libraries for tests +BuildRequires: rubygem-test-unit +# for touching patch files (sanitization function) +BuildRequires: diffstat +# for post, preun and postun macros +BuildRequires: systemd +# pam is used for authentication inside daemon (python ctypes) +# needed for tier0 tests during build +BuildRequires: pam +# for working with qdevice certificates (certutil) - used in configure.ac +BuildRequires: nss-tools + +# cluster stack packages for pkg-config +# corosync has different package names on distributions but all provide +# corosync-devel +# corosync and pacemaker need versions and it's not working in virtual provides +BuildRequires: corosync-devel >= 3.0 +BuildRequires: pacemaker-libs-devel >= %{required_pacemaker_version} +BuildRequires: pkgconfig(booth) +BuildRequires: pkgconfig(corosync-qdevice) +BuildRequires: pkgconfig(sbd) + +# for validating cockpit-ha-cluster metainfo +BuildRequires: libappstream-glib + + +# python and libraries for pcs, setuptools for pcs entrypoint +Requires: python3 >= 3.12 +Requires: python3-cryptography +Requires: python3-dateutil >= 2.7.0 +Requires: python3-lxml +Requires: python3-pyparsing +Requires: python3-setuptools +# ruby and gems for pcsd +Requires: ruby >= 3.3.0 +Requires: rubygems +Requires: rubygem-json +Requires: rubygem-rexml +# for pycurl +Requires: libcurl%{?_isa} >= %{libcurl_ver} +# for killall +Requires: psmisc +# cluster stack and related packages +Requires: pcmk-cluster-manager >= %{required_pacemaker_version} +Suggests: pacemaker +Requires: (corosync >= 3.0 if pacemaker) +# pcs enables corosync encryption by default so we require libknet1-plugins-all +Requires: (libknet1-plugins-all if corosync) +Requires: pacemaker-cli >= %{required_pacemaker_version} +# 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 +# needs logrotate for /etc/logrotate.d/pcsd +Requires: logrotate +# for working with qdevice certificates (certutil) +Requires: nss-tools + + +Provides: bundled(dacite) = %{dacite_version} +Provides: bundled(pycurl) = %{pycurl_version} +Provides: bundled(tornado) = %{tornado_version} + +Provides: bundled(backports) = %{version_rubygem_backports} +Provides: bundled(base64) = %{version_rubygem_base64} +Provides: bundled(childprocess) = %{version_rubygem_childprocess} +Provides: bundled(ethon) = %{version_rubygem_ethon} +Provides: bundled(ffi) = %{version_rubygem_ffi} +Provides: bundled(mustermann) = %{version_rubygem_mustermann} +Provides: bundled(nio4r) = %{version_rubygem_nio4r} +Provides: bundled(puma) = %{version_rubygem_puma} +Provides: bundled(rack) = %{version_rubygem_rack} +Provides: bundled(rack_protection) = %{version_rubygem_rack_protection} +Provides: bundled(rack_session) = %{version_rubygem_rack_session} +Provides: bundled(rack_test) = %{version_rubygem_rack_test} +Provides: bundled(rackup) = %{version_rubygem_rackup} +Provides: bundled(ruby2_keywords) = %{version_rubygem_ruby2_keywords} +Provides: bundled(sinatra) = %{version_rubygem_sinatra} +Provides: bundled(tilt) = %{version_rubygem_tilt} +Provides: bundled(webrick) = %{version_rubygem_webrick} + + +# pcs-snmp subpackage definition +%package -n %{pkg_pcs_snmp} +Group: System Environment/Base +Summary: Pacemaker cluster SNMP agent +# https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#Good_Licenses +# GPL-2.0-only: pcs +# BSD-2-Clause: pyagentx +License: GPL-2.0-only AND BSD-2-Clause +URL: https://github.com/ClusterLabs/pcs + +# tar for unpacking pyagentx source tarball +BuildRequires: tar + +Requires: pcs = %{version}-%{release} +Requires: pacemaker +Requires: net-snmp + +Provides: bundled(pyagentx) = %{pyagentx_version} + +# cockpit-ha-cluster subpackage definition +%package -n %{pkg_cockpit_ha_cluster} +Group: System Environment/Base +Summary: Cockpit application for managing Pacemaker based clusters +License: GPL-2.0-only AND CC0-1.0 +URL: https://github.com/ClusterLabs/pcs-web-ui +BuildArch: noarch + +BuildRequires: make +BuildRequires: nodejs-npm + +Requires: pcs = %{version}-%{release} +Requires: cockpit-bridge + + +%description +pcs is a corosync and pacemaker configuration tool. It permits users to +easily view, modify and create pacemaker based clusters. + +%description -n %{pkg_pcs_snmp} +SNMP agent that provides information about pacemaker cluster to the master agent +(snmpd). + +%description -n %{pkg_cockpit_ha_cluster} +Cockpit application for managing Pacemaker based clusters. Uses +Pacemaker/Corosync Configuration System (pcs) in the background. + + +%prep +# -- 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 + # some files could be deleted by a patch therefore we test file for + # existance before touch to avoid exit with error: No such file or + # directory + # diffstat cannot create list of files without deleted files + test -e $fname && 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}` +} + +# documentation for setup/autosetup/autopatch: +# * http://ftp.rpm.org/max-rpm/s1-rpm-inside-macros.html +# * https://rpm-software-management.github.io/rpm/manual/autosetup.html +# patch web-ui sources +%autosetup -D -T -b 100 -a 101 -S git -n %{ui_src_name} -N +%autopatch -p1 -m 201 +# update_times_patch %%{PATCH201} + +# patch pcs sources +%autosetup -S git -n %{pcs_source_name} -N +%autopatch -p1 -M 200 +# update_times_patch %%{PATCH1} +update_times_patch %{PATCH1} +update_times_patch %{PATCH2} + +# generate .tarball-version if building from an untagged commit, not a released version +# autogen uses git-version-gen which uses .tarball-version for generating version number +%if "%{clean_version}" != "%{version_or_commit}" + echo "%{clean_version}+$(echo "%{version_or_commit}" | head -c 8)" > %{_builddir}/%{pcs_source_name}/.tarball-version +%endif + +# prepare dirs/files necessary for building python bundles +# ----------------------------------------------------- +# 1) rubygems sources + +mkdir -p %{rubygem_cache_dir} +cp -f %SOURCE61 %{rubygem_cache_dir} +cp -f %SOURCE62 %{rubygem_cache_dir} +cp -f %SOURCE63 %{rubygem_cache_dir} +cp -f %SOURCE64 %{rubygem_cache_dir} +cp -f %SOURCE65 %{rubygem_cache_dir} +cp -f %SOURCE66 %{rubygem_cache_dir} +cp -f %SOURCE67 %{rubygem_cache_dir} +cp -f %SOURCE68 %{rubygem_cache_dir} +cp -f %SOURCE69 %{rubygem_cache_dir} +cp -f %SOURCE70 %{rubygem_cache_dir} +cp -f %SOURCE71 %{rubygem_cache_dir} +cp -f %SOURCE72 %{rubygem_cache_dir} +cp -f %SOURCE73 %{rubygem_cache_dir} +cp -f %SOURCE74 %{rubygem_cache_dir} +cp -f %SOURCE75 %{rubygem_cache_dir} +cp -f %SOURCE76 %{rubygem_cache_dir} +cp -f %SOURCE77 %{rubygem_cache_dir} + + +# 2) prepare python bundles +mkdir -p %{pcs_bundled_dir}/src +cp -f %SOURCE21 rpm/ +cp -f %SOURCE22 rpm/ +cp -f %SOURCE23 rpm/ +cp -f %SOURCE24 rpm/ + + +%build +%define debug_package %{nil} + +./autogen.sh +%{configure} --enable-local-build --enable-use-local-cache-only \ + --enable-individual-bundling --enable-booth-enable-authfile-unset \ + --with-pcsd-default-cipherlist='PROFILE=SYSTEM' \ + PYTHON=%{__python3} ruby_CFLAGS="%{optflags}" ruby_LIBS="%{build_ldflags}" +make all + +# build pcs-web-ui +export BUILD_USE_CURRENT_NODE_MODULES=true + +## standalone +export BUILD_DIR=%{_builddir}/%{ui_src_name}/%{ui_build_dir_standalone} +make -C %{_builddir}/%{ui_src_name} build + +## cockpit +export BUILD_DIR=%{_builddir}/%{ui_src_name}/%{ui_build_dir_cockpit} +export BUILD_FOR_COCKPIT=true +make -C %{_builddir}/%{ui_src_name} build + + +%install +rm -rf $RPM_BUILD_ROOT +pwd + + +%make_install +# RHEL-7716 - fix rubygem permissions - remove write access for owner's group +# and other users +chmod --recursive g-w,o-w ${RPM_BUILD_ROOT}%{_libdir}/%{rubygem_bundle_dir} + +# install standalone pcs-web-ui +cp -r %{_builddir}/%{ui_src_name}/%{ui_build_dir_standalone} \ + ${RPM_BUILD_ROOT}%{_libdir}/%{pcsd_public_dir}/ui + +# install cockpit pcs-web-ui +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/cockpit/%{ui_cockpit_dest} +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/metainfo +cp -r %{_builddir}/%{ui_src_name}/%{ui_build_dir_cockpit}/* \ + ${RPM_BUILD_ROOT}%{_datadir}/cockpit/%{ui_cockpit_dest} + +cp -r %{_builddir}/%{ui_src_name}/packages/app/%{ui_appstream_metainfo} \ + ${RPM_BUILD_ROOT}%{_datadir}/metainfo/ + +# prepare license files +mv %{rubygem_bundle_dir}/gems/backports-%{version_rubygem_backports}/LICENSE.txt backports_LICENSE.txt +mv %{rubygem_bundle_dir}/gems/base64-%{version_rubygem_base64}/LICENSE.txt base64_LICENSE.txt +mv %{rubygem_bundle_dir}/gems/childprocess-%{version_rubygem_childprocess}/LICENSE childprocess_LICENSE +mv %{rubygem_bundle_dir}/gems/ethon-%{version_rubygem_ethon}/LICENSE ethon_LICENSE +mv %{rubygem_bundle_dir}/gems/ffi-%{version_rubygem_ffi}/COPYING ffi_COPYING +mv %{rubygem_bundle_dir}/gems/ffi-%{version_rubygem_ffi}/LICENSE ffi_LICENSE +mv %{rubygem_bundle_dir}/gems/ffi-%{version_rubygem_ffi}/LICENSE.SPECS ffi_LICENSE.SPECS +mv %{rubygem_bundle_dir}/gems/mustermann-%{version_rubygem_mustermann}/LICENSE mustermann_LICENSE +mv %{rubygem_bundle_dir}/gems/nio4r-%{version_rubygem_nio4r}/license.md nio4r_license.md +mv %{rubygem_bundle_dir}/gems/nio4r-%{version_rubygem_nio4r}/ext/libev/LICENSE nio4r_libev_LICENSE +mv %{rubygem_bundle_dir}/gems/puma-%{version_rubygem_puma}/LICENSE puma_LICENSE +mv %{rubygem_bundle_dir}/gems/rack-%{version_rubygem_rack}/MIT-LICENSE rack_MIT-LICENSE +mv %{rubygem_bundle_dir}/gems/rack-protection-%{version_rubygem_rack_protection}/License rack-protection_License +mv %{rubygem_bundle_dir}/gems/rack-session-%{version_rubygem_rack_session}/license.md rack-session_license.md +mv %{rubygem_bundle_dir}/gems/rack-test-%{version_rubygem_rack_test}/MIT-LICENSE.txt rack-test_MIT-LICENSE.txt +mv %{rubygem_bundle_dir}/gems/rackup-%{version_rubygem_rackup}/license.md rackup_license.md +mv %{rubygem_bundle_dir}/gems/ruby2_keywords-%{version_rubygem_ruby2_keywords}/LICENSE ruby2_keywords_LICENSE +mv %{rubygem_bundle_dir}/gems/sinatra-%{version_rubygem_sinatra}/LICENSE sinatra_LICENSE +mv %{rubygem_bundle_dir}/gems/tilt-%{version_rubygem_tilt}/COPYING tilt_COPYING +mv %{rubygem_bundle_dir}/gems/webrick-%{version_rubygem_webrick}/LICENSE.txt webrick_LICENSE.txt + +cp %{pcs_bundled_dir}/src/dacite-*/LICENSE dacite_LICENSE +cp %{pcs_bundled_dir}/src/dacite-*/README.md dacite_README.md + +cp %{pcs_bundled_dir}/src/pyagentx-*/LICENSE.txt pyagentx_LICENSE.txt +cp %{pcs_bundled_dir}/src/pyagentx-*/CONTRIBUTORS.txt pyagentx_CONTRIBUTORS.txt +cp %{pcs_bundled_dir}/src/pyagentx-*/README.md pyagentx_README.md + +cp %{pcs_bundled_dir}/src/pycurl-*/COPYING-LGPL pycurl_COPYING-LGPL +cp %{pcs_bundled_dir}/src/pycurl-*/COPYING-MIT pycurl_COPYING-MIT +cp %{pcs_bundled_dir}/src/pycurl-*/README.rst pycurl_README.rst + +cp %{pcs_bundled_dir}/src/tornado-*/LICENSE tornado_LICENSE +cp %{pcs_bundled_dir}/src/tornado-*/README.rst tornado_README.rst + +# We are not building debug package for pcs but we need to add MiniDebuginfo +# to the bundled shared libraries from rubygem extensions in order to satisfy +# rpminspect's binary stripping checker. +# Therefore we call find-debuginfo from debugedit manually in order to strip +# binaries and add MiniDebugInfo with .gnu_debugdata section +find-debuginfo -j2 -m -i -S debugsourcefiles.list +# find-debuginfo generated some files into /usr/lib/debug and +# /usr/src/debug/ that we don't want in the package +rm -rf $RPM_BUILD_ROOT%{_libdir}/debug +rm -rf $RPM_BUILD_ROOT/usr/lib/debug +rm -rf $RPM_BUILD_ROOT%{_prefix}/src/debug + +# We can remove files required for gem compilation +rm -rf $RPM_BUILD_ROOT%{_libdir}/%{rubygem_bundle_dir}/gems/ffi-%{version_rubygem_ffi}/ext +rm -rf $RPM_BUILD_ROOT%{_libdir}/%{rubygem_bundle_dir}/gems/nio4r-%{version_rubygem_nio4r}/ext +rm -rf $RPM_BUILD_ROOT%{_libdir}/%{rubygem_bundle_dir}/gems/puma-%{version_rubygem_puma}/ext + +# Sinatra contains example applications which are unnecessary (discovered by brp_mangle_shebangs) +rm -rf $RPM_BUILD_ROOT%{_libdir}/%{rubygem_bundle_dir}/gems/sinatra-%{version_rubygem_sinatra}/examples + +# Puma contains an unnecessary rc init script (discovered by brp_mangle_shebangs) +rm -rf $RPM_BUILD_ROOT%{_libdir}/%{rubygem_bundle_dir}/gems/puma-%{version_rubygem_puma}/docs/jungle/rc.d + +%check +# Run validation of cockpit metainfo +appstream-util validate-relax --nonet ${RPM_BUILD_ROOT}%{_datadir}/metainfo/%{ui_appstream_metainfo} + +# 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: + # + # pcs_test.tier0.daemon.app.test_app_remote.SyncConfigMutualExclusive + # disabled due to race conditions on slower machines + %{__python3} pcs_test/suite --tier0 -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 + GEM_HOME=$RPM_BUILD_ROOT%{_libdir}/%{rubygem_bundle_dir} ruby \ + -I$RPM_BUILD_ROOT%{_libdir}/pcsd \ + -Ipcsd/test \ + pcsd/test/test_all_suite.rb + test_result_ruby=$? + + if [ $test_result_python -ne 0 ]; then + return $test_result_python + fi + return $test_result_ruby +} + +run_all_tests + +%posttrans +# Make sure the new version of the daemon is running. +# 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 %{pkg_pcs_snmp} +%systemd_post pcs_snmp_agent.service + +%preun +%systemd_preun pcsd.service +%systemd_preun pcsd-ruby.service + +%preun -n %{pkg_pcs_snmp} +%systemd_preun pcs_snmp_agent.service + +%postun +%systemd_postun_with_restart pcsd.service +%systemd_postun_with_restart pcsd-ruby.service + +%postun -n %{pkg_pcs_snmp} +%systemd_postun_with_restart pcs_snmp_agent.service + + +%files +%doc CHANGELOG.md +%doc README.md +%doc dacite_README.md +%doc tornado_README.rst +%doc pycurl_README.rst +%license COPYING +# python dependency licenses +%license dacite_LICENSE +%license tornado_LICENSE +%license pycurl_COPYING-LGPL +%license pycurl_COPYING-MIT +# rubygem licenses +%license backports_LICENSE.txt +%license base64_LICENSE.txt +%license childprocess_LICENSE +%license ethon_LICENSE +%license ffi_COPYING +%license ffi_LICENSE +%license ffi_LICENSE.SPECS +%license mustermann_LICENSE +%license nio4r_license.md +%license nio4r_libev_LICENSE +%license puma_LICENSE +%license rack_MIT-LICENSE +%license rack-protection_License +%license rack-session_license.md +%license rack-test_MIT-LICENSE.txt +%license rackup_license.md +%license ruby2_keywords_LICENSE +%license sinatra_LICENSE +%license tilt_COPYING +%license webrick_LICENSE.txt +%{python3_sitelib}/* +%{_sbindir}/pcs +%{_sbindir}/pcsd +%{_libdir}/pcs/* +%{_libdir}/pkgconfig/pcs.pc +%{_libdir}/pcsd/* +%{_unitdir}/pcsd.service +%{_unitdir}/pcsd-ruby.service +%{_datadir}/bash-completion/completions/pcs +%{_sharedstatedir}/pcsd +%config(noreplace) %{_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 %{_libdir}/pcs/pcs_snmp_agent +%exclude %{_libdir}/pcs/%{pcs_bundled_dir}/packages/pyagentx* +%exclude %{_datadir}/cockpit +%exclude %{_datadir}/metainfo/%{ui_appstream_metainfo} + +%files -n %{pkg_pcs_snmp} +%{_libdir}/pcs/pcs_snmp_agent +%{_libdir}/pcs/%{pcs_bundled_dir}/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 + +%files -n %{pkg_cockpit_ha_cluster} +%{_datadir}/cockpit/%{ui_cockpit_dest} +%{_datadir}/metainfo/%{ui_appstream_metainfo} + + +%changelog +* Fri Oct 25 2024 MSVSphere Packaging Team - 0.12.0~a1-3 +- Rebuilt for MSVSphere 10 + +* Wed Jul 10 2024 Michal Pospíšil - 0.12.0~a1-3 +- Since 0.12.0~a1-1, pcs-web-ui is no longer a standalone application running on port 2224. It is now accessible through RHEL web console after installing the HA Cluster Management add-on (cockpit and cockpit-ha-cluster packages, pcsd must be running) +- Updated pcs-web-ui to 0.1.20 + Resolves: RHEL-34783 + +* Mon Jun 24 2024 Troy Dawson - 0.12.0~a1-2 +- Bump release for June 2024 mass rebuild + +* Fri Jun 21 2024 Michal Pospíšil - 0.12.0a1-1 +- Rebased to the latest sources (see CHANGELOG.md) + Resolves: RHEL-29739, RHEL-34783, RHEL-38480, RHEL-38484, RHEL-38486 +- Fixed grammatical error in pcs-web-ui + Resolves: RHEL-38496 + +* Thu May 23 2024 Michal Pospíšil - 0.11.7-5 +- Rebased to the latest sources (see CHANGELOG.md) + Resolves: RHEL-34783, RHEL-34792, RHEL-35428, RHEL-35670, RHEL-36612, RHEL-38478, RHEL-38479, RHEL-38481, RHEL-38487, RHEL-38489, RHEL-38491 +- Updated pcs-web-ui to 0.1.19 + Resolves: RHEL-38493, RHEL-38494, RHEL-38495, RHEL-38496 +- “Added” the Cockpit application cockpit-ha-cluster as a web interface for HA cluster management (this was already present because of package sync from Fedora 40) + Resolves: RHEL-23048 +- Updated bundled rubygems: backports, childprocess, nio4r, puma, rack, rack-protection, sinatra +- Bundled new rubygems: base64, rack-session, rackup, webrick + +* Wed Apr 10 2024 Michal Pospíšil - 0.11.7-4 +- Bundled Python dependencies: dacite, pyagentx, pycurl, tornado + Resolves: RHEL-26339 +- Bundled rubygems: backports, childprocess, ethon, ffi, mustermann, nio4r, puma, rack, rack-protection, rack-test, ruby2_keywords, sinatra, tilt +- Converted pcs and pcs-snmp to be architecture dependent, cockpit-ha-cluster remains noarch + +* Mon Feb 5 2024 Michal Pospisil - 0.11.7-3 +- Fixed a bug preventing the Cockpit Application from being installed from Cockpit + +* Thu Jan 25 2024 Fedora Release Engineering - 0.11.7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Mon Jan 8 2024 Michal Pospisil - 0.11.7-1 +- Rebased to the latest upstream sources (see CHANGELOG.md) +- Updated pcs-web-ui to 0.1.18 +- TLS cipher setting in pcsd now follows system-wide crypto policies by default +- Added cockpit-ha-cluster subpackage that adds pcs-web-ui as a Cockpit application + +* Thu Jul 20 2023 Fedora Release Engineering - 0.11.6-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Wed Jun 28 2023 Python Maint - 0.11.6-2 +- Rebuilt for Python 3.12 + +* Wed Jun 21 2023 Michal Pospisil - 0.11.6-1 +- Rebased to the latest upstream sources (see CHANGELOG.md) +- Updated pcs-web-ui +- Removed dependency fedora-logos - favicon is now correctly provided by pcs-web-ui +- Resolves: rhbz#2109852 rhbz#2170648 + +* Wed Apr 12 2023 Michal Pospisil - 0.11.5-2 +- Fix displaying differences between configuration checkpoints in “pcs config checkpoint diff” command +- Fix “pcs stonith update-scsi-devices” command which was broken since Pacemaker-2.1.5-rc1 +- Fixed loading of cluster status in the web interface when fencing levels are configured +- Fixed a vulnerability in pcs-web-ui-node-modules +- Swapped BuildRequires: npm for BuildRequires: nodejs-npm in Fedora 37 because of NodeJS packaging change +- Removed BuildRequires: rubygem-io-console +- Removed dependency rubygem-eventmachine + +* Thu Feb 16 2023 Michal Pospisil - 0.11.5-1 +- Rebased to the latest upstream sources (see CHANGELOG.md) +- Fixed broken filtering in create resource/fence device wizards in the web interface +- Converted package to noarch +- Added creation of .tarball-version file needed by autotools when building from untagged commits and fixed Source0 link to the tarball on GitHub +- Modified build options of pcs for booth authfile fix for all Fedora versions +- Added BuildRequires: pam for tier0 tests during build +- Added BuildRequires: nodejs-npm for NodeJS packaging change since Fedora 38 +- Removed bundled rubygem thin and its associated BuildRequires: rubygems, rubygem-bundler, rubygem-daemons, gcc, gcc-c++ +- Added dependency rubygem-puma - replacement for rubygem thin +- Added dependency nss-tools - for working with qdevice certificates +- Added dependency fedora-logos - for the web interface favicon +- Removed dependencies: rubygem-daemons, rubygem(webrick) +- Resolves: rhbz#2166266 + +* Thu Jan 19 2023 Fedora Release Engineering - 0.11.4-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Wed Jan 04 2023 Mamoru TASAKA - 0.11.4-2 +- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_3.2 +- Workaround for dnf dependency resolution confusion between nodejs16 vs nodejs +- Workaround for find-debuginfo.sh failure wrt ruby3.2 gem install change + +* Mon Dec 12 2022 Michal Pospisil - 0.11.4-1 +- Rebased to latest upstream sources (see CHANGELOG.md) +- Updated pcs-web-ui +- Added dependency rubygem-childprocess +- Removed dependency rubygem-open4 + +* Mon Dec 12 2022 Mamoru TASAKA - 0.11.3-5 +- Backport upstream patch for rubygem-json 2.6.3 error message format change + +* Wed Sep 07 2022 Miroslav Lisik - 0.11.3-4 +- Fixed ruby socket permissions +- Resolves: rhbz#2123389 + +* Fri Jul 22 2022 Fedora Release Engineering - 0.11.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Tue Jul 19 2022 Zbigniew Jędrzejewski-Szmek - 0.11.3-2 +- Rebuilt for pyparsing-3.0.9 + +* Tue Jun 28 2022 Miroslav Lisik - 0.11.3-1 +- Rebased to latest upstream sources (see CHANGELOG.md) +- Updated pcs-web-ui +- Resolves: rhbz#2068452 + +* Tue Jun 14 2022 Python Maint - 0.11.2-3 +- Rebuilt for Python 3.11 + +* Thu Jun 09 2022 Miroslav Lisik - 0.11.2-2 +- Python 3.11 related fixes +- Resolves: rhbz#bz2093935 + +* Fri Feb 04 2022 Miroslav Lisik - 0.11.2-1 +- Rebased to latest upstream sources (see CHANGELOG.md) +- Updated pcs-web-ui +- Removed old web gui + +* Thu Jan 27 2022 Vít Ondruch - 0.10.11-3 +- Rebuilt for https://fedoraproject.org/wiki/Changes/Ruby_3.1 + +* Thu Jan 20 2022 Fedora Release Engineering - 0.10.11-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Tue Oct 05 2021 Miroslav Lisik - 0.10.11-1 +- Rebased to latest upstream sources (see CHANGELOG.md) +- Updated pcs-web-ui +- Stop bundling rubygems daemons eventmachine mustermann rack rack-protection ruby2_keywords sinatra tilt + +* Mon Aug 16 2021 Miroslav Lisik - 0.10.9-1 +- Rebased to latest upstream sources (see CHANGELOG.md) +- Updated pcs-web-ui +- Bundle rubygem-sinatra, rubygem-thin and their dependencies because they were orphaned +- Resolves: rhbz#1983359 + +* Thu Jul 22 2021 Fedora Release Engineering - 0.10.8-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Jun 04 2021 Python Maint - 0.10.8-3 +- Rebuilt for Python 3.10 + +* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 0.10.8-2 +- Rebuilt for updated systemd-rpm-macros + See https://pagure.io/fesco/issue/2583. + +* Thu Feb 04 2021 Miroslav Lisik - 0.10.8-1 +- Rebased to latest upstream sources (see CHANGELOG.md) +- Updated pcs-web-ui +- Updated bundled python dependency: dacite +- Changed BuildRequires from git to git-core +- Added conditional (Build)Requires: rubygem(rexml) +- Added conditional Requires: rubygem(webrick) + +* Tue Jan 26 2021 Fedora Release Engineering - 0.10.7-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Thu Jan 7 2021 Vít Ondruch - 0.10.7-3 +- Rebuilt for https://fedoraproject.org/wiki/Changes/Ruby_3.0 + +* Thu Nov 26 2020 Ondrej Mular - 0.10.7-2 +- Python 3.10 related fix + +* Wed Sep 30 2020 Miroslav Lisik - 0.10.7-1 +- Rebased to latest upstream sources (see CHANGELOG.md) +- Added dependency on python packages pyparsing and dateutil +- Fixed virtual bundle provides for ember, handelbars, jquery and jquery-ui +- Removed dependency on python3-clufter + +* Tue Jul 28 2020 Fedora Release Engineering - 0.10.6-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Jul 21 2020 Miroslav Lisik - 0.10.6-1 +- Rebased to latest upstream sources (see CHANGELOG.md) +- Updated pcs-web-ui +- Stopped bundling tornado (use distribution package instead) +- Stopped bundling rubygem-tilt (use distribution package instead) +- Removed rubygem bundling +- Removed unneeded BuildRequires: execstack, gcc, gcc-c++ +- Excluded some tests for tornado daemon + +* Tue Jul 21 2020 Tom Stellard - 0.10.5-8 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + +* Wed Jul 15 2020 Ondrej Mular - 0.10.5-7 +- Use fixed upstream version of dacite with Python 3.9 support +- Split upstream tests in gating into tiers + +* Fri Jul 03 2020 Ondrej Mular - 0.10.5-6 +- Use patched version of dacite compatible with Python 3.9 +- Resolves: rhbz#1838327 + +* Tue May 26 2020 Miro Hrončok - 0.10.5-5 +- Rebuilt for Python 3.9 + +* Thu May 07 2020 Ondrej Mular - 0.10.5-4 +- Rebased to latest upstream sources (see CHANGELOG.md) +- Run only tier0 tests in check section + +* Fri Apr 03 2020 Ondrej Mular - 0.10.5-3 +- Enable gating + +* Fri Mar 27 2020 Ondrej Mular - 0.10.5-2 +- Remove usage of deprecated module xml.etree.cElementTree +- Resolves: rhbz#1817695 + +* Wed Mar 18 2020 Miroslav Lisik - 0.10.5-1 +- Rebased to latest upstream sources (see CHANGELOG.md) + +* Wed Jan 29 2020 Fedora Release Engineering - 0.10.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Nov 28 2019 Miroslav Lisik - 0.10.4-1 +- Rebased to latest upstream sources (see CHANGELOG.md) + +* Thu Oct 03 2019 Miro Hrončok - 0.10.3-2 +- Rebuilt for Python 3.8.0rc1 (#1748018) + +* Fri Aug 23 2019 Ondrej Mular - 0.10.3-1 +- Rebased to latest upstream sources (see CHANGELOG.md) + +* Mon Aug 19 2019 Miro Hrončok - 0.10.2-3 +- Rebuilt for Python 3.8 + +* Fri Jul 26 2019 Fedora Release Engineering - 0.10.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Fri Jun 14 2019 Ondrej Mular - 0.10.2-1 +- Rebased to latest upstream sources (see CHANGELOG.md) +- Added pam as required package +- An alternative webUI rebased to latest upstream sources +- Improved configuration files permissions in rpm + +* Tue Mar 19 2019 Tomas Jelinek - 0.10.1-4 +- Removed unused dependency rubygem-multi_json +- Removed files needed only for building rubygems from the package + +* Mon Feb 04 2019 Ivan Devát - 0.10.1-3 +- Corrected gem install flags + +* Fri Feb 01 2019 Fedora Release Engineering - 0.10.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Wed Jan 09 2019 Ivan Devát - 0.10.1-1 +- Rebased to latest upstream sources (see CHANGELOG.md) + +* Tue Oct 09 2018 Ondrej Mular - 0.10.0.alpha.6-1 +- Rebased to latest upstream sources (see CHANGELOG.md) +- Resolves: rhbz#1618911 + +* Fri Aug 31 2018 Ivan Devát - 0.10.0.alpha.2-3 +- Started bundling rubygem-tilt (rubygem-tilt is orphaned in fedora due to rubygem-prawn dependency) +- Enabled passing tests + +* Sat Aug 25 2018 Ivan Devát - 0.10.0.alpha.2-2 +- Fixed error with missing rubygem location during pcsd start +- Resolves: rhbz#1618911 + +* Thu Aug 02 2018 Ivan Devát - 0.10.0.alpha.2-1 +- Rebased to latest upstream sources (see CHANGELOG.md) + +* Wed Jul 25 2018 Ivan Devát - 0.9.164-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Fri Jul 13 2018 Fedora Release Engineering - 0.9.164-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Jun 19 2018 Miro Hrončok - 0.9.164-2 +- Rebuilt for Python 3.7 + +* Mon Apr 09 2018 Ondrej Mular - 0.9.164-1 +- Rebased to latest upstream sources (see CHANGELOG.md) +- Fixed: CVE-2018-1086, CVE-2018-1079 + +* Mon Feb 26 2018 Ivan Devát - 0.9.163-2 +- Fixed crash when adding a node to a cluster + +* Tue Feb 20 2018 Ivan Devát - 0.9.163-1 +- Rebased to latest upstream sources (see CHANGELOG.md) +- Adapted for Rack 2 and Sinatra 2 + +* Fri Feb 09 2018 Igor Gnatenko - 0.9.160-5 +- Escape macros in %%changelog + +* Thu Feb 08 2018 Fedora Release Engineering - 0.9.160-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Jan 20 2018 Björn Esser - 0.9.160-3 +- Rebuilt for switch to libxcrypt + +* Fri Jan 05 2018 Mamoru TASAKA - 0.9.160-2 +- F-28: rebuild for ruby25 +- Workaround for gem install option + +* Wed Oct 18 2017 Ondrej Mular - 0.9.160-1 +- Rebased to latest upstream sources (see CHANGELOG.md) +- All pcs tests are temporarily disabled because of issues in pacemaker. + +* Thu Sep 14 2017 Ondrej Mular - 0.9.159-4 +- Bundle rubygem-rack-protection which is being updated to 2.0.0 in Fedora. +- Removed setuptools patch. +- Disabled debuginfo subpackage. + +* Thu Aug 03 2017 Fedora Release Engineering - 0.9.159-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 0.9.159-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed Jul 12 2017 Ondrej Mular - 0.9.159-1 +- Rebased to latest upstream sources (see CHANGELOG.md) + +* Tue May 23 2017 Tomas Jelinek - 0.9.156-3 +- Fixed python locales issue preventing build-time tests to pass +- Bundle rubygem-tilt which is being retired from Fedora + +* Thu Mar 23 2017 Tomas Jelinek - 0.9.156-2 +- Fixed Cross-site scripting (XSS) vulnerability in web UI CVE-2017-2661 +- Re-added support for clufter as it is now available for Python 3 + +* Wed Feb 22 2017 Tomas Jelinek - 0.9.156-1 +- Rebased to latest upstream sources (see CHANGELOG.md) + +* Sat Feb 11 2017 Fedora Release Engineering - 0.9.155-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Jan 12 2017 Vít Ondruch - 0.9.155-2 +- Rebuilt for https://fedoraproject.org/wiki/Changes/Ruby_2.4 + +* Wed Jan 04 2017 Adam Williamson - 0.9.155-1 +- Latest release 0.9.155 +- Fix tests with Python 3.6 and lxml 3.7 +- Package the license as license, not doc +- Use -f param for rm when wiping test directories as they are nested now + +* Mon Dec 19 2016 Miro Hrončok +- Rebuild for Python 3.6 + +* Tue Oct 18 2016 Tomas Jelinek - 0.9.154-2 +- Fixed upgrading from pcs-0.9.150 + +* Thu Sep 22 2016 Tomas Jelinek - 0.9.154-1 +- Re-synced to upstream sources +- Spec file cleanup and fixes + +* Tue Jul 19 2016 Fedora Release Engineering - 0.9.150-2 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Mon Apr 11 2016 Tomas Jelinek - 0.9.150-1 +- Re-synced to upstream sources +- Make pcs depend on python3 +- Spec file cleanup + +* Tue Feb 23 2016 Tomas Jelinek - 0.9.149-2 +- Fixed rubygems issues which prevented pcsd from starting +- Added missing python-lxml dependency + +* Thu Feb 18 2016 Tomas Jelinek - 0.9.149-1 +- Re-synced to upstream sources +- Security fix for CVE-2016-0720, CVE-2016-0721 +- Fixed rubygems issues which prevented pcsd from starting +- Rubygems built with RELRO +- Spec file cleanup +- Fixed multilib .pyc/.pyo issue + +* Thu Feb 04 2016 Fedora Release Engineering - 0.9.144-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Tue Jan 12 2016 Vít Ondruch - 0.9.144-2 +- Rebuilt for https://fedoraproject.org/wiki/Changes/Ruby_2.3 + +* Fri Sep 18 2015 Tomas Jelinek - 0.9.144-1 +- Re-synced to upstream sources + +* Tue Jun 23 2015 Tomas Jelinek - 0.9.141-2 +- Added requirement for psmisc for killall + +* Tue Jun 23 2015 Tomas Jelinek - 0.9.141-1 +- Re-synced to upstream sources + +* Thu Jun 18 2015 Fedora Release Engineering - 0.9.140-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri Jun 05 2015 Tomas Jelinek - 0.9.140-1 +- Re-synced to upstream sources + +* Fri May 22 2015 Tomas Jelinek - 0.9.139-4 +- Fix for CVE-2015-1848, CVE-2015-3983 (sessions not signed) + +* Thu Mar 26 2015 Tomas Jelinek - 0.9.139-3 +- Add BuildRequires: systemd (rhbz#1206253) + +* Fri Feb 27 2015 Tomas Jelinek - 0.9.139-2 +- Reflect clufter inclusion (rhbz#1180723) + +* Thu Feb 19 2015 Tomas Jelinek - 0.9.139-1 +- Re-synced to upstream sources + +* Sat Jan 17 2015 Mamoru TASAKA - 0.9.115-5 +- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_2.2 + +* Sun Aug 17 2014 Fedora Release Engineering - 0.9.115-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Fri Jun 06 2014 Fedora Release Engineering - 0.9.115-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue May 06 2014 Tomas Jelinek - 0.9.115-2 +- Rebuild to fix ruby dependencies + +* Mon Apr 21 2014 Chris Feist - 0.9.115-1 +- Re-synced to upstream sources + +* Fri Dec 13 2013 Chris Feist - 0.9.102-1 +- Re-synced to upstream sources + +* Wed Jun 19 2013 Chris Feist - 0.9.48-1 +- Rebuild with upstream sources + +* Thu Jun 13 2013 Chris Feist - 0.9.44-5 +- Added fixes for building rpam with ruby-2.0.0 + +* Mon Jun 03 2013 Chris Feist - 0.9.44-4 +- Rebuild with upstream sources + +* Tue May 07 2013 Chris Feist - 0.9.41-2 +- Resynced to upstream sources + +* Fri Apr 19 2013 Chris Feist - 0.9.39-1 +- Fixed gem building +- Re-synced to upstream sources + +* Mon Mar 25 2013 Chris Feist - 0.9.36-4 +- Don't try to build gems at all + +* Mon Mar 25 2013 Chris Feist - 0.9.36-3 +- Removed all gems from build, will need to find pam package in the future + +* Mon Mar 25 2013 Chris Feist - 0.9.36-2 +- Removed duplicate libraries already present in fedora + +* Mon Mar 18 2013 Chris Feist - 0.9.36-1 +- Resynced to latest upstream + +* Mon Mar 11 2013 Chris Feist - 0.9.33-1 +- Resynched to latest upstream +- pcsd has been moved to /usr/lib to fix /usr/local packaging issues + +* Thu Feb 21 2013 Chris Feist - 0.9.32-1 +- Resynced to latest version of pcs/pcsd + +* Mon Nov 05 2012 Chris Feist - 0.9.27-3 +- Build on all archs + +* Thu Oct 25 2012 Chris Feist - 0.9.27-2 +- Resync to latest version of pcs +- Added pcsd daemon + +* Mon Oct 08 2012 Chris Feist - 0.9.26-1 +- Resync to latest version of pcs + +* Thu Sep 20 2012 Chris Feist - 0.9.24-1 +- Resync to latest version of pcs + +* Thu Sep 20 2012 Chris Feist - 0.9.23-1 +- Resync to latest version of pcs + +* Wed Sep 12 2012 Chris Feist - 0.9.22-1 +- Resync to latest version of pcs + +* Thu Sep 06 2012 Chris Feist - 0.9.19-1 +- Resync to latest version of pcs + +* Tue Aug 07 2012 Chris Feist - 0.9.12-1 +- Resync to latest version of pcs + +* Fri Jul 20 2012 Fedora Release Engineering - 0.9.3.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Thu May 24 2012 Chris Feist - 0.9.4-1 +- Resync to latest version of pcs +- Move cluster creation options to cluster sub command. + +* Mon May 07 2012 Chris Feist - 0.9.3.1-1 +- Resync to latest version of pcs which includes fixes to work with F17. + +* Mon Mar 19 2012 Chris Feist - 0.9.2.4-1 +- Resynced to latest version of pcs + +* Mon Jan 23 2012 Chris Feist - 0.9.1-1 +- Updated BuildRequires and %%doc section for fedora + +* Fri Jan 20 2012 Chris Feist - 0.9.0-2 +- Updated spec file for fedora specific changes + +* Mon Jan 16 2012 Chris Feist - 0.9.0-1 +- Initial Build