Rebased to latest upstream sources

This commit is contained in:
Ivan Devat 2018-02-14 16:54:25 +01:00
parent f9e106aac4
commit 47f1518c67
4 changed files with 313 additions and 58 deletions

3
.gitignore vendored
View File

@ -45,3 +45,6 @@
/pcs-0.9.159.tar.gz
/rack-protection-1.5.3.gem
/pcs-0.9.160.tar.gz
/pcs-0.9.163.tar.gz
/pyagentx-0.4.pcs.2.tar.gz
/sinatra-contrib-2.0.0.gem

View File

@ -1,18 +1,23 @@
From ba42a3a6f9d11e9d156971fc3297119d77fb6340 Mon Sep 17 00:00:00 2001
From: Ondrej Mular <omular@redhat.com>
Date: Wed, 18 Oct 2017 12:11:51 +0200
From f9f4b3cb4566c854263044ab3fc3f9968dd5758d Mon Sep 17 00:00:00 2001
From: Ivan Devat <idevat@redhat.com>
Date: Mon, 19 Feb 2018 17:54:35 +0100
Subject: [PATCH] fedfix
Gems for fedora was adapted.
Codebase was adapted for sinatra 2 and rack 2.
---
pcs/pcs | 2 +-
pcs/test/suite.py | 2 +-
pcsd/Makefile | 30 +++---------------------------
pcsd/pcsd.rb | 1 +
pcsd/pcsd.service-runner | 3 ++-
5 files changed, 8 insertions(+), 30 deletions(-)
pcs/pcs | 2 +-
pcs/test/suite.py | 2 +-
pcsd/Makefile | 39 ++++++++-------------------------------
pcsd/pcsd.rb | 18 +++++-------------
pcsd/pcsd.service-runner | 3 ++-
pcsd/session.rb | 25 ++++++++++++-------------
pcsd/ssl.rb | 1 -
pcsd/test/test_session.rb | 37 +++++++++++++++++++------------------
8 files changed, 48 insertions(+), 79 deletions(-)
diff --git a/pcs/pcs b/pcs/pcs
index 4585fd57..d35933e4 100755
index 736f9cd..3dff69a 100755
--- a/pcs/pcs
+++ b/pcs/pcs
@@ -1,4 +1,4 @@
@ -22,7 +27,7 @@ index 4585fd57..d35933e4 100755
from __future__ import absolute_import
import os.path
diff --git a/pcs/test/suite.py b/pcs/test/suite.py
index cce2d006..68972555 100755
index 809596b..98c5a26 100755
--- a/pcs/test/suite.py
+++ b/pcs/test/suite.py
@@ -1,4 +1,4 @@
@ -32,10 +37,10 @@ index cce2d006..68972555 100755
absolute_import,
division,
diff --git a/pcsd/Makefile b/pcsd/Makefile
index d452ac06..ff60370f 100644
index d452ac0..c83bd95 100644
--- a/pcsd/Makefile
+++ b/pcsd/Makefile
@@ -1,36 +1,12 @@
@@ -1,36 +1,13 @@
-FFI_VERSION="1.9.18"
-FFI_C_DIR=vendor/bundle/ruby/gems/ffi-${FFI_VERSION}/ext/ffi_c
-
@ -53,6 +58,10 @@ index d452ac06..ff60370f 100644
-# RHEL6 needs special rpam-ruby19 gem to work with 1.8.7
-# also bundler is not available on RHEL6 in rpm
-build_gems_rhel6:
+# Comment from specfile from distgit 9b7a65231 Mamoru TASAKA:
+# So it seems that with rubygems 2.7.3 --install-dir option always
+# needs --no-user-install???
+# tld;dr; added flag --no-user-install, details in the commit
+build_gems:
mkdir -p vendor/bundle/ruby
- gem install --verbose --no-rdoc --no-ri -l -i vendor/bundle/ruby \
@ -62,30 +71,58 @@ index d452ac06..ff60370f 100644
- vendor/cache/json-2.0.3.gem \
- vendor/cache/multi_json-1.12.1.gem \
- vendor/cache/open4-1.3.4.gem \
+ gem install --force --verbose --no-rdoc --no-ri -l -i vendor/bundle/ruby \
+ gem install --force --verbose --no-rdoc --no-ri -l --no-user-install -i vendor/bundle/ruby \
vendor/cache/orderedhash-0.0.6.gem \
vendor/cache/rack-1.6.4.gem \
vendor/cache/rack-protection-1.5.3.gem \
- vendor/cache/rack-1.6.4.gem \
- vendor/cache/rack-protection-1.5.3.gem \
- vendor/cache/rack-test-0.6.3.gem \
- vendor/cache/rpam-ruby19-feist-1.2.1.1.gem \
+ vendor/cache/rpam-ruby19-1.2.1.gem \
vendor/cache/sinatra-1.4.8.gem \
vendor/cache/sinatra-contrib-1.4.7.gem \
- vendor/cache/sinatra-1.4.8.gem \
- vendor/cache/sinatra-contrib-1.4.7.gem \
- vendor/cache/tilt-2.0.6.gem \
+ vendor/cache/rpam-ruby19-1.2.1.gem \
+ vendor/cache/sinatra-contrib-2.0.0.gem \
-- '--with-ldflags="-Wl,-z,now -Wl,-z,relro"'
get_gems:
diff --git a/pcsd/pcsd.rb b/pcsd/pcsd.rb
index ad0370c1..bde1230b 100644
index 01f2f5c..1d51b5e 100644
--- a/pcsd/pcsd.rb
+++ b/pcsd/pcsd.rb
@@ -1,3 +1,4 @@
+gem 'sinatra', '= 1.4.8'
require 'sinatra'
require 'sinatra/reloader' if development?
require 'sinatra/cookies'
@@ -83,6 +83,11 @@ before do
$session_storage = env[:__session_storage]
$session_storage_env = env
end
+ begin
+ $session_storage.drop_expired(request)
+ rescue => e
+ $logger.warn("Exception while removing expired sessions: #{e}")
+ end
# urls which are accesible for everybody including not logged in users
always_accessible = [
@@ -156,19 +161,6 @@ $thread_cfgsync = Thread.new {
end
}
-$thread_session_expired = Thread.new {
- while true
- sleep(60 * 5)
- begin
- if $session_storage
- $session_storage.drop_expired($session_storage_env)
- end
- rescue => e
- $logger.warn("Exception while removing expired sessions: #{e}")
- end
- end
-}
-
helpers do
def is_ajax?
return request.env['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'
diff --git a/pcsd/pcsd.service-runner b/pcsd/pcsd.service-runner
index 883d2908..712913ea 100644
index 883d290..712913e 100644
--- a/pcsd/pcsd.service-runner
+++ b/pcsd/pcsd.service-runner
@@ -3,8 +3,9 @@
@ -99,6 +136,179 @@ index 883d2908..712913ea 100644
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
# change current directory (ruby -C)
diff --git a/pcsd/session.rb b/pcsd/session.rb
index 8b09ed8..f42bf73 100644
--- a/pcsd/session.rb
+++ b/pcsd/session.rb
@@ -1,4 +1,3 @@
-gem 'rack', '< 2.0.0'
require 'rack/session/pool'
class SessionPoolLifetime < Rack::Session::Pool
@@ -14,14 +13,14 @@ class SessionPoolLifetime < Rack::Session::Pool
super
end
- def get_session(env, sid)
- with_lock(env) do
+ def find_session(req, sid)
+ with_lock(req) do
now = Time.now()
# delete the session if expired
if @default_options[:expire_after] and sid and @pool_timestamp[sid] and
@pool_timestamp[sid] < (now - @default_options[:expire_after])
then
- delete_session(sid)
+ remove_session(sid)
end
# create new session if nonexistent
unless sid and session = @pool[sid]
@@ -34,8 +33,8 @@ class SessionPoolLifetime < Rack::Session::Pool
end
end
- def set_session(env, session_id, new_session, options)
- with_lock(env) do
+ def write_session(req, session_id, new_session, options)
+ with_lock(req) do
@pool.store session_id, new_session
# bump session's access time
@pool_timestamp[session_id] = Time.now()
@@ -43,30 +42,30 @@ class SessionPoolLifetime < Rack::Session::Pool
end
end
- def destroy_session(env, session_id, options)
- with_lock(env) do
- delete_session(session_id)
+ def delete_session(req, session_id, options)
+ with_lock(req) do
+ remove_session(session_id)
generate_sid unless options[:drop]
end
end
- def drop_expired(env)
+ def drop_expired(req)
return unless lifetime = @default_options[:expire_after]
- with_lock(env) {
+ with_lock(req) {
threshold = Time.now() - lifetime
sid_to_delete = []
@pool_timestamp.each { |sid, timestamp|
sid_to_delete << sid if timestamp < threshold
}
sid_to_delete.each { |sid|
- delete_session(sid)
+ remove_session(sid)
}
}
end
private
- def delete_session(sid)
+ def remove_session(sid)
@pool.delete(sid)
@pool_timestamp.delete(sid)
end
diff --git a/pcsd/ssl.rb b/pcsd/ssl.rb
index eaf2cbf..2668c95 100644
--- a/pcsd/ssl.rb
+++ b/pcsd/ssl.rb
@@ -2,7 +2,6 @@ require 'rubygems'
require 'webrick'
require 'webrick/https'
require 'openssl'
-gem 'rack', '< 2.0.0'
require 'rack'
require 'socket'
diff --git a/pcsd/test/test_session.rb b/pcsd/test/test_session.rb
index e72bf01..c212b1a 100644
--- a/pcsd/test/test_session.rb
+++ b/pcsd/test/test_session.rb
@@ -2,18 +2,19 @@ require 'test/unit'
require 'pcsd_test_utils.rb'
require 'session.rb'
+require 'sinatra'
class TestSessionPool < Test::Unit::TestCase
def setup()
- @env = {
+ @request = Sinatra::Request.new({
'rack.multithread' => true,
- }
+ })
end
def fixture_get_pool(lifetime)
pool = SessionPoolLifetime.new(nil, {:expire_after => lifetime,})
- (1..3).each { |i| pool.set_session(@env, "sid#{i}", {'value' => i}, {}) }
+ (1..3).each { |i| pool.write_session(@request, "sid#{i}", {'value' => i}, {}) }
return pool
end
@@ -23,14 +24,14 @@ class TestSessionPool < Test::Unit::TestCase
# touch sessions each second
lifetime.times {
sleep(1)
- assert_equal({'value' => 1}, pool.get_session(@env, 'sid1')[1])
- assert_equal({'value' => 3}, pool.get_session(@env, 'sid3')[1])
+ assert_equal({'value' => 1}, pool.find_session(@request, 'sid1')[1])
+ assert_equal({'value' => 3}, pool.find_session(@request, 'sid3')[1])
}
# after @lifetime passes the unused session gets removed on access
sleep(1)
- assert_equal({'value' => 1}, pool.get_session(@env, 'sid1')[1])
- assert_equal({'value' => 3}, pool.get_session(@env, 'sid3')[1])
- assert_equal({}, pool.get_session(@env, 'sid2')[1])
+ assert_equal({'value' => 1}, pool.find_session(@request, 'sid1')[1])
+ assert_equal({'value' => 3}, pool.find_session(@request, 'sid3')[1])
+ assert_equal({}, pool.find_session(@request, 'sid2')[1])
end
def test_drop_expired_explicit()
@@ -39,12 +40,12 @@ class TestSessionPool < Test::Unit::TestCase
# touch sessions each second (otherwise they will be removed on access)
lifetime.times {
sleep(1)
- pool.get_session(@env, 'sid2')
- pool.set_session(@env, 'sid3', {'value' => 33}, {})
+ pool.find_session(@request, 'sid2')
+ pool.write_session(@request, 'sid3', {'value' => 33}, {})
}
sleep(1)
- pool.drop_expired(@env)
+ pool.drop_expired(@request)
assert_equal(
{
'sid2' => {'value' => 2,},
@@ -57,14 +58,14 @@ class TestSessionPool < Test::Unit::TestCase
def test_no_lifetime()
pool = fixture_get_pool(nil)
sleep(1)
- assert_equal({'value' => 1}, pool.get_session(@env, 'sid1')[1])
- assert_equal({'value' => 2}, pool.get_session(@env, 'sid2')[1])
- assert_equal({'value' => 3}, pool.get_session(@env, 'sid3')[1])
+ assert_equal({'value' => 1}, pool.find_session(@request, 'sid1')[1])
+ assert_equal({'value' => 2}, pool.find_session(@request, 'sid2')[1])
+ assert_equal({'value' => 3}, pool.find_session(@request, 'sid3')[1])
sleep(1)
- pool.drop_expired(@env)
- assert_equal({'value' => 1}, pool.get_session(@env, 'sid1')[1])
- assert_equal({'value' => 2}, pool.get_session(@env, 'sid2')[1])
- assert_equal({'value' => 3}, pool.get_session(@env, 'sid3')[1])
+ pool.drop_expired(@request)
+ assert_equal({'value' => 1}, pool.find_session(@request, 'sid1')[1])
+ assert_equal({'value' => 2}, pool.find_session(@request, 'sid2')[1])
+ assert_equal({'value' => 3}, pool.find_session(@request, 'sid3')[1])
end
end
--
2.13.6
1.8.3.1

View File

@ -1,22 +1,27 @@
Name: pcs
Version: 0.9.160
Release: 5%{?dist}
Version: 0.9.163
Release: 1%{?dist}
License: GPLv2
URL: https://github.com/ClusterLabs/pcs
Group: System Environment/Base
Summary: Pacemaker Configuration System
%global pcs_snmp_pkg_name pcs-snmp
%global pyagentx_version 0.4.pcs.2
%global bundled_lib_dir pcs/bundled
%global pyagentx_dir %{bundled_lib_dir}/pyagentx
#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}.tar.gz#/%{name}-%{version}.tar.gz
Source1: pcsd-bundle-config-1
Source11: https://rubygems.org/downloads/orderedhash-0.0.6.gem
Source12: https://rubygems.org/downloads/rack-1.6.4.gem
Source13: https://rubygems.org/downloads/rpam-ruby19-1.2.1.gem
Source14: https://rubygems.org/downloads/sinatra-1.4.8.gem
Source15: https://rubygems.org/downloads/sinatra-contrib-1.4.7.gem
Source16: https://rubygems.org/downloads/rack-protection-1.5.3.gem
Source12: https://rubygems.org/downloads/rpam-ruby19-1.2.1.gem
Source13: https://rubygems.org/downloads/sinatra-contrib-2.0.0.gem
Source41: https://github.com/ondrejmular/pyagentx/archive/v%{pyagentx_version}.tar.gz#/pyagentx-%{pyagentx_version}.tar.gz
Patch0: fedfix.patch
@ -44,7 +49,10 @@ BuildRequires: rubygem-io-console
BuildRequires: rubygem-json
BuildRequires: rubygem-multi_json
BuildRequires: rubygem-open4
BuildRequires: rubygem-rack
BuildRequires: rubygem-rack-protection
BuildRequires: rubygem-rack-test
BuildRequires: rubygem-sinatra
BuildRequires: rubygem-tilt
# ruby libraries for tests
BuildRequires: rubygem-test-unit
@ -81,7 +89,10 @@ Requires: rubygem-ffi
Requires: rubygem-json
Requires: rubygem-multi_json
Requires: rubygem-open4
Requires: rubygem-rack
Requires: rubygem-rack-protection
Requires: rubygem-rack-test
Requires: rubygem-sinatra
Requires: rubygem-tilt
# pcsd fonts
Requires: liberation-sans-fonts
@ -101,21 +112,32 @@ Requires(preun): systemd
Requires(postun): systemd
Provides: bundled(rubygem-orderedhash) = 0.0.6
# fedora provides version 2.0.1 which is not compatible with pcsd currently
Provides: bundled(rubygem-rack) = 1.6.4
Provides: bundled(rubygem-rpam-ruby19) = 1.2.1
# fedora provides a patched verison of sinatra which works with rack 2.0.1 but
# doesn't work with rack 1.6.4
Provides: bundled(rubygem-sinatra) = 1.4.8
Provides: bundled(rubygem-sinatra-contrib) = 1.4.7
Provides: bundled(rubygem-tilt) = 2.0.6
# fedora provides version 2.0.0 which is not compatible with pcsd currently
Provides: bundled(rubygem-rack-protection) = 1.5.3
Provides: bundled(rubygem-sinatra-contrib) = 2.0.0
%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}
Group: System Environment/Base
Summary: Pacemaker cluster SNMP agent
License: GPLv2, BSD 2-clause
URL: https://github.com/ClusterLabs/pcs
# 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)
%define PCS_PREFIX /usr
%prep
%setup -q
@ -144,15 +166,15 @@ mkdir -p pcsd/vendor/cache
cp -f %SOURCE11 pcsd/vendor/cache
cp -f %SOURCE12 pcsd/vendor/cache
cp -f %SOURCE13 pcsd/vendor/cache
cp -f %SOURCE14 pcsd/vendor/cache
cp -f %SOURCE15 pcsd/vendor/cache
cp -f %SOURCE16 pcsd/vendor/cache
#ruby gems copied
# So it seems that with rubygems 2.7.3 --install-dir option always
# needs --no-user-install???
sed -i pcsd/Makefile \
-e '\@gem install@s| -l -i | --no-user-install -i |'
mkdir -p %{bundled_lib_dir}
tar -xzf %SOURCE41 -C %{bundled_lib_dir}
mv %{bundled_lib_dir}/pyagentx-%{pyagentx_version} %{pyagentx_dir}
cp %{pyagentx_dir}/LICENSE.txt pyagentx_LICENSE.txt
cp %{pyagentx_dir}/CONTRIBUTORS.txt pyagentx_CONTRIBUTORS.txt
cp %{pyagentx_dir}/README.md pyagentx_README.md
%build
%define debug_package %{nil}
@ -166,7 +188,9 @@ make install \
PYTHON=%{__python3} \
PYTHON_SITELIB=%{python3_sitelib} \
SYSTEMCTL_OVERRIDE=true \
BASH_COMPLETION_DIR=$RPM_BUILD_ROOT/usr/share/bash-completion/completions
BASH_COMPLETION_DIR=$RPM_BUILD_ROOT/usr/share/bash-completion/completions \
PYAGENTX_DIR=`readlink -f %{pyagentx_dir}` \
SYSTEMCTL_OVERRIDE=true
make install_pcsd \
DESTDIR=$RPM_BUILD_ROOT \
PREFIX=%{PCS_PREFIX} \
@ -259,6 +283,9 @@ end
%post
%systemd_post pcsd.service
%post -n %{pcs_snmp_pkg_name}
%systemd_post pcs_snmp_agent.service
%preun
%systemd_preun pcsd.service
@ -278,8 +305,8 @@ end
/usr/share/bash-completion/completions/pcs
/var/lib/pcsd
/etc/pam.d/pcsd
/etc/logrotate.d/pcsd
%dir /var/log/pcsd
%config(noreplace) /etc/logrotate.d/pcsd
%config(noreplace) /etc/sysconfig/pcsd
%ghost %config(noreplace) /var/lib/pcsd/cfgsync_ctl
%ghost %config(noreplace) /var/lib/pcsd/pcsd.cookiesecret
@ -298,7 +325,25 @@ end
%exclude %{python3_sitelib}/pcs/pcs.8
%exclude %{python3_sitelib}/pcs/pcs
%files -n %{pcs_snmp_pkg_name}
/usr/lib/pcs/pcs_snmp_agent
/usr/lib/pcs/bundled/packages/pyagentx*
/usr/lib/systemd/system/pcs_snmp_agent.service
/usr/share/snmp/mibs/PCMK-PCS*-MIB.txt
%{_mandir}/man8/pcs_snmp_agent.*
%config(noreplace) /etc/sysconfig/pcs_snmp_agent
%dir /var/log/pcs
%doc COPYING
%doc CHANGELOG.md
%doc pyagentx_LICENSE.txt
%doc pyagentx_CONTRIBUTORS.txt
%doc pyagentx_README.md
%changelog
* Tue Feb 20 2018 Ivan Devát <idevat@redhat.com> - 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 <ignatenkobrain@fedoraproject.org> - 0.9.160-5
- Escape macros in %%changelog

View File

@ -1,9 +1,6 @@
SHA512 (pcs-0.9.160.tar.gz) = 522a7f97fcd8cb65dcbbebf893bd8a83be3a1778ed0352d6be2e637ebd0c5159cff9ef7d8d33c89f9d2d9a0fae1ea53b17bca8703f9d31d48a51603e52cb8b1f
SHA512 (pcs-0.9.163.tar.gz) = 6f3f5b4f7135f598c4448a6d36b366557c109550bbb672081da39c450a1c70a5e749729682c51aa485076a35db3ee5517b09606780463743e16eaf11ca777b7e
SHA512 (pcsd-bundle-config-1) = f2a2df2dab39c2012cc6a91517716dde8f5a48788d1069c4addf619bc4dc45a98fd48f0f7964b5400e43e84fe96f942a550d2762553fea97e63dc7ad9b8be823
SHA512 (orderedhash-0.0.6.gem) = b2dae648187437ea7d9d9be47b9ff8d0e1a96bc2ff9e50117033d5bd4cf09cfff3c0740c99c322910138cac90f33b425705ee7a30be84aa193e6afd9f576f64a
SHA512 (rack-1.6.4.gem) = 304a6ae21bfd38008fd7d147f82c44397f3a1d2e689bd01de689aedc6ea0e8784605207fd314bc796974edc5dfcab81636664ea2becb0489302999f99501d41a
SHA512 (rpam-ruby19-1.2.1.gem) = b403964295e96a6247289518ff46e59bbae6c78bcfb647e12b7dbb247698642b4a1ee04492521b782fb3c594c2ede8143c765819fecde087e2ec850e3aea3503
SHA512 (sinatra-1.4.8.gem) = e56a5a6d7ceb0be4bc537feb6ada2956f1fd64b452dee347b259837aa02041dfa53d9808531cdd0a02a91093ba92f7c505c39f0dd990dfbc6e872681f40bc5e9
SHA512 (sinatra-contrib-1.4.7.gem) = dbb4deaed6844a70352e4fbe0f7b71d000acd525a3f6a20c2dc66d3ddc87b93a3b9c33ac315a0a5f4e30b82631c14196fefc9b6fe29c0aee29ea6db4d000361c
SHA512 (tilt-2.0.6.gem) = 173245f5edd8cf2d31edccd36d375530448e58da1fd744bdf471818ee9b306317f52ecfb9aa8c39ec7746ea3900e600ebfc5f96dfa66724d3e8a4386bd9da260
SHA512 (rack-protection-1.5.3.gem) = 9f94f9f25197c3f8227f5c9c9fd2e896e35bfc08d4a20f4dded9c42772f348d16dceda6916429833b498b29c4dbba4dbb31b1a3cf90de597fb6df2de145d655a
SHA512 (sinatra-contrib-2.0.0.gem) = 2e9c1fccfee050af8ef93ce0fe92504930ee41db3ff5aec3c2260ab49f334474386787057011adcb6cfa7de62f9e24ea228944d25bdf8af316b0b7614008ce03
SHA512 (pyagentx-0.4.pcs.2.tar.gz) = d4194fec9a3e5fefe3793d49b7fec1feafef294c7e613a06046c2993daeefc5cb39d7c5b2b402ff83e49b2d976953f862264288c758c0be09d997b5323cc558a