openSUSE Commits
Threads by month
- ----- 2025 -----
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
December 2017
- 1 participants
- 1511 discussions
Hello community,
here is the log from the commit of package yast2-inetd for openSUSE:Factory checked in at 2017-12-01 17:17:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-inetd (Old)
and /work/SRC/openSUSE:Factory/.yast2-inetd.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-inetd"
Fri Dec 1 17:17:34 2017 rev:42 rq:546636 version:4.0.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-inetd/yast2-inetd.changes 2016-06-11 00:00:29.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.yast2-inetd.new/yast2-inetd.changes 2017-12-01 17:17:35.442867098 +0100
@@ -1,0 +2,7 @@
+Thu Nov 30 08:46:47 UTC 2017 - lslezak(a)suse.cz
+
+- Fixed build failure caused by a jemalloc warning printed on
+ the STDERR (bsc#1068883)
+- 4.0.0
+
+-------------------------------------------------------------------
Old:
----
yast2-inetd-3.1.13.tar.bz2
New:
----
yast2-inetd-4.0.0.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ yast2-inetd.spec ++++++
--- /var/tmp/diff_new_pack.hDvd1e/_old 2017-12-01 17:17:36.250838050 +0100
+++ /var/tmp/diff_new_pack.hDvd1e/_new 2017-12-01 17:17:36.254837907 +0100
@@ -1,7 +1,7 @@
#
# spec file for package yast2-inetd
#
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: yast2-inetd
-Version: 3.1.13
+Version: 4.0.0
Release: 0
Url: https://github.com/yast/yast-inetd
++++++ yast2-inetd-3.1.13.tar.bz2 -> yast2-inetd-4.0.0.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-inetd-3.1.13/.travis.yml new/yast2-inetd-4.0.0/.travis.yml
--- old/yast2-inetd-3.1.13/.travis.yml 2016-06-07 14:16:41.075729131 +0200
+++ new/yast2-inetd-4.0.0/.travis.yml 2017-11-30 10:37:18.000000000 +0100
@@ -1,16 +1,11 @@
-language: cpp
-compiler:
- - gcc
+sudo: required
+language: bash
+services:
+ - docker
+
before_install:
- # disable rvm, use system Ruby
- - rvm reset
- - wget https://raw.githubusercontent.com/yast/yast-devtools/master/travis-tools/tr…
- - sh ./travis_setup.sh -p "rake yast2-devtools yast2-testsuite yast2 yast2-users" -g "rspec:3.3.0 yast-rake gettext"
+ - docker build -t yast-inetd-image .
script:
- - rake check:syntax
- - rake check:pot
- - make -f Makefile.cvs
- - make
- - sudo make install
- - make check
-
+ # the "yast-travis-ruby" script is included in the base yastdevel/ruby image
+ # see https://github.com/yast/docker-yast-ruby/blob/master/yast-travis-ruby
+ - docker run -it -e TRAVIS=1 -e TRAVIS_JOB_ID="$TRAVIS_JOB_ID" yast-inetd-image yast-travis-ruby
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-inetd-3.1.13/.yardopts new/yast2-inetd-4.0.0/.yardopts
--- old/yast2-inetd-3.1.13/.yardopts 1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-inetd-4.0.0/.yardopts 2017-11-30 10:37:18.000000000 +0100
@@ -0,0 +1,3 @@
+# generate the output to different directory to not
+# overwrite the existing documentation there
+-o doc/autodoc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-inetd-3.1.13/CONTRIBUTING.md new/yast2-inetd-4.0.0/CONTRIBUTING.md
--- old/yast2-inetd-3.1.13/CONTRIBUTING.md 2016-06-07 14:16:41.087729131 +0200
+++ new/yast2-inetd-4.0.0/CONTRIBUTING.md 2017-11-30 10:37:18.000000000 +0100
@@ -3,7 +3,7 @@
YaST is an open source project and as such it welcomes all kinds of
contributions. If you decide to contribute, please follow these guidelines to
-ensure the process is effective and pleasant both for you and YaST maintainers.
+ensure the process is effective and pleasant both for you and the YaST maintainers.
There are two main forms of contribution: reporting bugs and performing code
changes.
@@ -17,13 +17,11 @@
registration](https://secure-www.novell.com/selfreg/jsp/createSimpleAccount…
if you don't have an account yet.)
-If you find a problem, please report it either using
-[Bugzilla](https://bugzilla.suse.com/) or GitHub issues. We can't guarantee
-that every bug will be fixed, but we'll try.
-
When creating a bug report, please follow our [bug reporting
guidelines](http://en.opensuse.org/openSUSE:Report_a_YaST_bug).
+We can't guarantee that every bug will be fixed, but we'll try.
+
Code Changes
------------
@@ -44,15 +42,22 @@
to the [Ruby style
guide](https://github.com/SUSE/style-guides/blob/master/Ruby.md).
- 4. Make sure your change didn't break anything by building the RPM package
+ 4. Update the package version (in `packages/*.spec`, usually by
+ `rake version:bump`) and add a new entry to the `package/*.changes` file
+ (by `osc vc package`).
+ For bigger changes or changes which need longer discussion it is advised to
+ add this as a separate last commit so it can be easily updated when another
+ change is merged in the meantime.
+
+ 5. Make sure your change didn't break anything by building the RPM package
(`rake osc:build`). The build process includes running the full testsuite.
- 5. Publish the branch and create a pull request.
+ 6. Publish the branch and create a pull request.
- 6. YaST developers will review your change and possibly point out issues.
+ 7. YaST developers will review your change and possibly point out issues.
Adapt the code under their guidance until they are all resolved.
- 7. Finally, the pull request will get merged or rejected.
+ 8. Finally, the pull request will get merged or rejected.
See also [GitHub's guide on
contributing](https://help.github.com/articles/fork-a-repo).
@@ -60,9 +65,6 @@
If you want to do multiple unrelated changes, use separate branches and pull
requests.
-Do not change the `VERSION` and `*.changes` files as this could lead to
-conflicts.
-
### Commits
Each commit in the pull request should do only one thing, which is clearly
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-inetd-3.1.13/Dockerfile new/yast2-inetd-4.0.0/Dockerfile
--- old/yast2-inetd-3.1.13/Dockerfile 1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-inetd-4.0.0/Dockerfile 2017-11-30 10:37:18.000000000 +0100
@@ -0,0 +1,3 @@
+FROM yastdevel/ruby
+COPY . /usr/src/app
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-inetd-3.1.13/package/yast2-inetd.changes new/yast2-inetd-4.0.0/package/yast2-inetd.changes
--- old/yast2-inetd-3.1.13/package/yast2-inetd.changes 2016-06-07 14:16:41.107729131 +0200
+++ new/yast2-inetd-4.0.0/package/yast2-inetd.changes 2017-11-30 10:37:18.000000000 +0100
@@ -1,4 +1,11 @@
-------------------------------------------------------------------
+Thu Nov 30 08:46:47 UTC 2017 - lslezak(a)suse.cz
+
+- Fixed build failure caused by a jemalloc warning printed on
+ the STDERR (bsc#1068883)
+- 4.0.0
+
+-------------------------------------------------------------------
Tue Jun 7 11:27:35 UTC 2016 - igonzalezsosa(a)suse.com
- Stop generating autodocs (fate#320356)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-inetd-3.1.13/package/yast2-inetd.spec new/yast2-inetd-4.0.0/package/yast2-inetd.spec
--- old/yast2-inetd-3.1.13/package/yast2-inetd.spec 2016-06-07 14:16:41.107729131 +0200
+++ new/yast2-inetd-4.0.0/package/yast2-inetd.spec 2017-11-30 10:37:18.000000000 +0100
@@ -17,7 +17,7 @@
Name: yast2-inetd
-Version: 3.1.13
+Version: 4.0.0
Release: 0
Url: https://github.com/yast/yast-inetd
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-inetd-3.1.13/testsuite/run/runtest-ag.sh new/yast2-inetd-4.0.0/testsuite/run/runtest-ag.sh
--- old/yast2-inetd-3.1.13/testsuite/run/runtest-ag.sh 2016-06-07 14:16:41.151729131 +0200
+++ new/yast2-inetd-4.0.0/testsuite/run/runtest-ag.sh 2017-11-30 10:37:18.000000000 +0100
@@ -14,6 +14,8 @@
shopt -s expand_aliases
alias kick-nonerror-lines="grep -v -e ' <[0-2]> '"
alias kick-empty-lines="grep -v '^$'"
+# workaround for a jemalloc issue (bsc#1068883)
+alias kick-jemalloc-warning="grep -v '^<main>: warning: pthread_create failed for timer: '"
alias strip-constant-part="sed 's/^....-..-.. ..:..:.. [^)]*) //g'"
alias mask-line-numbers="sed 's/^\([^ ]* [^)]*):\)[[:digit:]]*/\1XXX/'"
@@ -45,6 +47,7 @@
Y2DIR="$AGDIR" $Y -l - 2>&1 >"$OUT_TMP" "$YCP" '("'"$IN.test"'")' testsuite \
| kick-nonerror-lines \
| kick-empty-lines \
+ | kick-jemalloc-warning \
| strip-constant-part \
| mask-line-numbers \
> "$ERR_TMP"
1
0
Hello community,
here is the log from the commit of package yast2-apparmor for openSUSE:Factory checked in at 2017-12-01 17:17:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-apparmor (Old)
and /work/SRC/openSUSE:Factory/.yast2-apparmor.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-apparmor"
Fri Dec 1 17:17:29 2017 rev:65 rq:546427 version:4.0.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-apparmor/yast2-apparmor.changes 2017-11-01 11:08:37.415997177 +0100
+++ /work/SRC/openSUSE:Factory/.yast2-apparmor.new/yast2-apparmor.changes 2017-12-01 17:17:29.451082510 +0100
@@ -1,0 +2,5 @@
+Wed Nov 22 12:09:45 CST 2017 - rgoldwyn(a)suse.com
+
+- fix textdomain to apparmor (bsc#1065569)
+- 4.0.2
+-------------------------------------------------------------------
Old:
----
yast2-apparmor-4.0.1.tar.bz2
New:
----
yast2-apparmor-4.0.2.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ yast2-apparmor.spec ++++++
--- /var/tmp/diff_new_pack.WaPBxI/_old 2017-12-01 17:17:30.259053462 +0100
+++ /var/tmp/diff_new_pack.WaPBxI/_new 2017-12-01 17:17:30.259053462 +0100
@@ -17,7 +17,7 @@
Name: yast2-apparmor
-Version: 4.0.1
+Version: 4.0.2
Release: 0
Summary: YaST2 - Plugins for AppArmor Profile Management
License: GPL-2.0
++++++ yast2-apparmor-4.0.1.tar.bz2 -> yast2-apparmor-4.0.2.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-apparmor-4.0.1/package/yast2-apparmor.changes new/yast2-apparmor-4.0.2/package/yast2-apparmor.changes
--- old/yast2-apparmor-4.0.1/package/yast2-apparmor.changes 2017-10-30 11:08:23.084642962 +0100
+++ new/yast2-apparmor-4.0.2/package/yast2-apparmor.changes 2017-11-29 14:40:09.000000000 +0100
@@ -1,4 +1,9 @@
-------------------------------------------------------------------
+Wed Nov 22 12:09:45 CST 2017 - rgoldwyn(a)suse.com
+
+- fix textdomain to apparmor (bsc#1065569)
+- 4.0.2
+-------------------------------------------------------------------
Wed Oct 18 11:11:36 CDT 2017 - rgoldwyn(a)suse.com
- Remove more perl dependencies (boo#1062656)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-apparmor-4.0.1/package/yast2-apparmor.spec new/yast2-apparmor-4.0.2/package/yast2-apparmor.spec
--- old/yast2-apparmor-4.0.1/package/yast2-apparmor.spec 2017-10-30 11:08:23.084642962 +0100
+++ new/yast2-apparmor-4.0.2/package/yast2-apparmor.spec 2017-11-29 14:40:09.000000000 +0100
@@ -17,7 +17,7 @@
Name: yast2-apparmor
-Version: 4.0.1
+Version: 4.0.2
Release: 0
Summary: YaST2 - Plugins for AppArmor Profile Management
Url: https://github.com/yast/yast-apparmor
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-apparmor-4.0.1/src/clients/apparmor.rb new/yast2-apparmor-4.0.2/src/clients/apparmor.rb
--- old/yast2-apparmor-4.0.1/src/clients/apparmor.rb 2017-10-30 11:08:23.108642962 +0100
+++ new/yast2-apparmor-4.0.2/src/clients/apparmor.rb 2017-11-29 14:40:09.000000000 +0100
@@ -25,7 +25,7 @@
class ApparmorClient < Client
def main
Yast.import "UI"
- textdomain "yast2-apparmor"
+ textdomain "apparmor"
Yast.import "Wizard"
Yast.import "Label"
Yast.import "Popup"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-apparmor-4.0.1/src/include/apparmor/aa-config.rb new/yast2-apparmor-4.0.2/src/include/apparmor/aa-config.rb
--- old/yast2-apparmor-4.0.1/src/include/apparmor/aa-config.rb 2017-10-30 11:08:23.112642962 +0100
+++ new/yast2-apparmor-4.0.2/src/include/apparmor/aa-config.rb 2017-11-29 14:40:09.000000000 +0100
@@ -28,7 +28,7 @@
Yast.include include_target, "apparmor/config_complain.rb"
Yast.include include_target, "apparmor/helps.rb"
Yast.include include_target, "apparmor/apparmor_ycp_utils.rb"
- textdomain "yast2-apparmor"
+ textdomain "apparmor"
Yast.import "Label"
Yast.import "Popup"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-apparmor-4.0.1/src/include/apparmor/apparmor_profile_check.rb new/yast2-apparmor-4.0.2/src/include/apparmor/apparmor_profile_check.rb
--- old/yast2-apparmor-4.0.1/src/include/apparmor/apparmor_profile_check.rb 2017-10-30 11:08:23.112642962 +0100
+++ new/yast2-apparmor-4.0.2/src/include/apparmor/apparmor_profile_check.rb 2017-11-29 14:40:09.000000000 +0100
@@ -26,7 +26,7 @@
def initialize_apparmor_apparmor_profile_check(include_target)
Yast.import "Popup"
- textdomain "yast2-apparmor"
+ textdomain "apparmor"
end
def checkProfileSyntax
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-apparmor-4.0.1/src/include/apparmor/apparmor_ycp_utils.rb new/yast2-apparmor-4.0.2/src/include/apparmor/apparmor_ycp_utils.rb
--- old/yast2-apparmor-4.0.1/src/include/apparmor/apparmor_ycp_utils.rb 2017-10-30 11:08:23.112642962 +0100
+++ new/yast2-apparmor-4.0.2/src/include/apparmor/apparmor_ycp_utils.rb 2017-11-29 14:40:09.000000000 +0100
@@ -29,7 +29,7 @@
Yast.import "Label"
Yast.import "Popup"
Yast.import "AppArmorDialogs"
- textdomain "yast2-apparmor"
+ textdomain "apparmor"
@CMDS = {}
Ops.set(@CMDS, "CMD_ALLOW", _("&Allow"))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-apparmor-4.0.1/src/include/apparmor/capabilities.rb new/yast2-apparmor-4.0.2/src/include/apparmor/capabilities.rb
--- old/yast2-apparmor-4.0.1/src/include/apparmor/capabilities.rb 2017-10-30 11:08:23.112642962 +0100
+++ new/yast2-apparmor-4.0.2/src/include/apparmor/capabilities.rb 2017-11-29 14:40:09.000000000 +0100
@@ -27,7 +27,7 @@
module Yast
module ApparmorCapabilitiesInclude
def initialize_apparmor_capabilities(include_target)
- textdomain "yast2-apparmor"
+ textdomain "apparmor"
@capdefs = {
"chown" => {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-apparmor-4.0.1/src/include/apparmor/config_complain.rb new/yast2-apparmor-4.0.2/src/include/apparmor/config_complain.rb
--- old/yast2-apparmor-4.0.1/src/include/apparmor/config_complain.rb 2017-10-30 11:08:23.124642962 +0100
+++ new/yast2-apparmor-4.0.2/src/include/apparmor/config_complain.rb 2017-11-29 14:40:09.000000000 +0100
@@ -25,7 +25,7 @@
module ApparmorConfigComplainInclude
def initialize_apparmor_config_complain(include_target)
Yast.import "UI"
- textdomain "yast2-apparmor"
+ textdomain "apparmor"
Yast.import "Label"
Yast.import "Popup"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-apparmor-4.0.1/src/include/apparmor/helps.rb new/yast2-apparmor-4.0.2/src/include/apparmor/helps.rb
--- old/yast2-apparmor-4.0.1/src/include/apparmor/helps.rb 2017-10-30 11:08:23.124642962 +0100
+++ new/yast2-apparmor-4.0.2/src/include/apparmor/helps.rb 2017-11-29 14:40:09.000000000 +0100
@@ -24,7 +24,7 @@
module Yast
module ApparmorHelpsInclude
def initialize_apparmor_helps(include_target)
- textdomain "yast2-apparmor"
+ textdomain "apparmor"
# START Help Section
#**********************************************************
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-apparmor-4.0.1/src/include/apparmor/profile_dialogs.rb new/yast2-apparmor-4.0.2/src/include/apparmor/profile_dialogs.rb
--- old/yast2-apparmor-4.0.1/src/include/apparmor/profile_dialogs.rb 2017-10-30 11:08:23.128642962 +0100
+++ new/yast2-apparmor-4.0.2/src/include/apparmor/profile_dialogs.rb 2017-11-29 14:40:09.000000000 +0100
@@ -30,7 +30,7 @@
Yast.import "Label"
Yast.import "Map"
Yast.include include_target, "apparmor/capabilities.rb"
- textdomain "yast2-apparmor"
+ textdomain "apparmor"
# Globalz
@timeout_millisec = 20 * 1000
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-apparmor-4.0.1/src/modules/AppArmorDialogs.rb new/yast2-apparmor-4.0.2/src/modules/AppArmorDialogs.rb
--- old/yast2-apparmor-4.0.1/src/modules/AppArmorDialogs.rb 2017-10-30 11:08:23.128642962 +0100
+++ new/yast2-apparmor-4.0.2/src/modules/AppArmorDialogs.rb 2017-11-29 14:40:09.000000000 +0100
@@ -26,7 +26,7 @@
module Yast
class AppArmorDialogsClass < Module
def main
- textdomain "yast2-apparmor"
+ textdomain "apparmor"
@busy_dialog = nil
end
1
0
Hello community,
here is the log from the commit of package yast2-users for openSUSE:Factory checked in at 2017-12-01 17:17:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-users (Old)
and /work/SRC/openSUSE:Factory/.yast2-users.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-users"
Fri Dec 1 17:17:21 2017 rev:206 rq:546386 version:4.0.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-users/yast2-users.changes 2017-11-10 14:43:45.413673144 +0100
+++ /work/SRC/openSUSE:Factory/.yast2-users.new/yast2-users.changes 2017-12-01 17:17:23.207306981 +0100
@@ -1,0 +2,7 @@
+Tue Nov 28 08:14:48 UTC 2017 - knut.anderssen(a)suse.com
+
+- AutoYaST: Write and export SSH authorized keys also for root user
+ (bsc#1066342).
+- 4.0.1
+
+-------------------------------------------------------------------
Old:
----
yast2-users-4.0.0.tar.bz2
New:
----
yast2-users-4.0.1.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ yast2-users.spec ++++++
--- /var/tmp/diff_new_pack.8a39vm/_old 2017-12-01 17:17:23.943280521 +0100
+++ /var/tmp/diff_new_pack.8a39vm/_new 2017-12-01 17:17:23.951280234 +0100
@@ -17,7 +17,7 @@
Name: yast2-users
-Version: 4.0.0
+Version: 4.0.1
Release: 0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
++++++ yast2-users-4.0.0.tar.bz2 -> yast2-users-4.0.1.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-users-4.0.0/package/yast2-users.changes new/yast2-users-4.0.1/package/yast2-users.changes
--- old/yast2-users-4.0.0/package/yast2-users.changes 2017-11-09 09:13:15.525434386 +0100
+++ new/yast2-users-4.0.1/package/yast2-users.changes 2017-11-29 10:33:52.779339725 +0100
@@ -1,4 +1,11 @@
-------------------------------------------------------------------
+Tue Nov 28 08:14:48 UTC 2017 - knut.anderssen(a)suse.com
+
+- AutoYaST: Write and export SSH authorized keys also for root user
+ (bsc#1066342).
+- 4.0.1
+
+-------------------------------------------------------------------
Wed Nov 8 12:16:47 UTC 2017 - jsrain(a)suse.cz
- Remove the support for encrypting home directory (fate#323541)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-users-4.0.0/package/yast2-users.spec new/yast2-users-4.0.1/package/yast2-users.spec
--- old/yast2-users-4.0.0/package/yast2-users.spec 2017-11-09 09:13:15.525434386 +0100
+++ new/yast2-users-4.0.1/package/yast2-users.spec 2017-11-29 10:33:52.779339725 +0100
@@ -17,7 +17,7 @@
Name: yast2-users
-Version: 4.0.0
+Version: 4.0.1
Release: 0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-users-4.0.0/src/modules/Users.pm new/yast2-users-4.0.1/src/modules/Users.pm
--- old/yast2-users-4.0.0/src/modules/Users.pm 2017-11-09 09:13:15.545434386 +0100
+++ new/yast2-users-4.0.1/src/modules/Users.pm 2017-11-29 10:33:52.791339725 +0100
@@ -4032,6 +4032,12 @@
SSHAuthorizedKeys->write_keys($user{"homeDirectory"});
}
}
+
+ # Write root authorized keys(bsc#1066342)
+ my %root_user = %{$modified_users{"system"}{"root"}};
+ if ($root_user{"modified"} eq "imported") {
+ SSHAuthorizedKeys->write_keys($root_user{"homeDirectory"});
+ }
}
##------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-users-4.0.0/src/modules/UsersPasswd.pm new/yast2-users-4.0.1/src/modules/UsersPasswd.pm
--- old/yast2-users-4.0.0/src/modules/UsersPasswd.pm 2017-11-09 09:13:15.545434386 +0100
+++ new/yast2-users-4.0.1/src/modules/UsersPasswd.pm 2017-11-29 10:33:52.799339725 +0100
@@ -305,6 +305,10 @@
foreach my $user (values %{$users{"local"}}) {
SSHAuthorizedKeys->read_keys($user->{"homeDirectory"});
}
+
+ # Read authorized keys also from root's home (bsc#1066342)
+ my %root_user = %{$users{"system"}{"root"}};
+ SSHAuthorizedKeys->read_keys($root_user{"homeDirectory"});
}
# actually read /etc/passwd and save into internal structure
1
0
Hello community,
here is the log from the commit of package yast2-core for openSUSE:Factory checked in at 2017-12-01 17:17:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-core (Old)
and /work/SRC/openSUSE:Factory/.yast2-core.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-core"
Fri Dec 1 17:17:08 2017 rev:181 rq:546249 version:4.0.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-core/yast2-core.changes 2017-10-13 14:05:23.672441162 +0200
+++ /work/SRC/openSUSE:Factory/.yast2-core.new/yast2-core.changes 2017-12-01 17:17:11.971710913 +0100
@@ -1,0 +2,8 @@
+Tue Nov 28 15:08:32 UTC 2017 - jreidinger(a)suse.com
+
+- add jemalloc dependency for y2base which is used only in old
+ testsuite and that workarounds problem with dynamic dlopening
+ of jemalloc in ruby (bsc#1068883)
+- 4.0.1
+
+-------------------------------------------------------------------
Old:
----
yast2-core-4.0.0.tar.bz2
New:
----
yast2-core-4.0.1.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ yast2-core.spec ++++++
--- /var/tmp/diff_new_pack.BOAAWa/_old 2017-12-01 17:17:13.043672374 +0100
+++ /var/tmp/diff_new_pack.BOAAWa/_new 2017-12-01 17:17:13.059671799 +0100
@@ -27,7 +27,7 @@
%bcond_with werror
Name: yast2-core
-Version: 4.0.0
+Version: 4.0.1
Release: 0
Url: https://github.com/yast/yast-core
@@ -45,6 +45,8 @@
# we have a parser
BuildRequires: bison
BuildRequires: flex
+# workaround for error when jemalloc is dlopened in ruby in old testsuite (bsc#1068883)
+BuildRequires: jemalloc-devel
# incompatible change, parser.h -> parser.hh
BuildRequires: automake >= 1.12
# needed for all yast packages
++++++ yast2-core-4.0.0.tar.bz2 -> yast2-core-4.0.1.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-4.0.0/Dockerfile new/yast2-core-4.0.1/Dockerfile
--- old/yast2-core-4.0.0/Dockerfile 2017-10-11 14:32:02.487751197 +0200
+++ new/yast2-core-4.0.1/Dockerfile 2017-11-28 16:31:12.133344968 +0100
@@ -4,4 +4,5 @@
# Remove the preinstalled yast2-core, it interferes with the built one
# when running the tests... (huh??)
RUN zypper --non-interactive rm yast2-core
+RUN zypper --non-interactive in jemalloc-devel
COPY . /usr/src/app
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-4.0.0/base/src/Makefile.am new/yast2-core-4.0.1/base/src/Makefile.am
--- old/yast2-core-4.0.0/base/src/Makefile.am 2017-10-11 14:32:02.535751197 +0200
+++ new/yast2-core-4.0.1/base/src/Makefile.am 2017-11-28 16:31:12.177344968 +0100
@@ -24,8 +24,10 @@
y2base_LDADD = ${Y2UTIL_LIBS}
+# -ljemalloc: workaround for error when jemalloc is dlopened in ruby in old testsuite (bsc#1068883)
y2base_LDFLAGS = \
-Xlinker --whole-archive \
+ -ljemalloc \
$(PERL_LDFLAGS) \
$(YAST2CORE) \
-Xlinker --no-whole-archive
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-4.0.0/package/yast2-core.changes new/yast2-core-4.0.1/package/yast2-core.changes
--- old/yast2-core-4.0.0/package/yast2-core.changes 2017-10-11 14:32:02.663751197 +0200
+++ new/yast2-core-4.0.1/package/yast2-core.changes 2017-11-28 16:31:12.321344968 +0100
@@ -1,4 +1,12 @@
-------------------------------------------------------------------
+Tue Nov 28 15:08:32 UTC 2017 - jreidinger(a)suse.com
+
+- add jemalloc dependency for y2base which is used only in old
+ testsuite and that workarounds problem with dynamic dlopening
+ of jemalloc in ruby (bsc#1068883)
+- 4.0.1
+
+-------------------------------------------------------------------
Tue Oct 10 08:34:19 UTC 2017 - mvidner(a)suse.com
- Fixed newly uncovered warnings: Wterminate, Wint-in-bool-context,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-4.0.0/package/yast2-core.spec new/yast2-core-4.0.1/package/yast2-core.spec
--- old/yast2-core-4.0.0/package/yast2-core.spec 2017-10-11 14:32:02.663751197 +0200
+++ new/yast2-core-4.0.1/package/yast2-core.spec 2017-11-28 16:31:12.321344968 +0100
@@ -26,7 +26,7 @@
%bcond_with werror
Name: yast2-core
-Version: 4.0.0
+Version: 4.0.1
Release: 0
Url: https://github.com/yast/yast-core
@@ -44,6 +44,8 @@
# we have a parser
BuildRequires: bison
BuildRequires: flex
+# workaround for error when jemalloc is dlopened in ruby in old testsuite (bsc#1068883)
+BuildRequires: jemalloc-devel
# incompatible change, parser.h -> parser.hh
BuildRequires: automake >= 1.12
# needed for all yast packages
1
0
Hello community,
here is the log from the commit of package yast2-registration for openSUSE:Factory checked in at 2017-12-01 17:17:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-registration (Old)
and /work/SRC/openSUSE:Factory/.yast2-registration.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-registration"
Fri Dec 1 17:17:03 2017 rev:6 rq:546197 version:4.0.13
Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-registration/yast2-registration.changes 2017-10-28 14:19:50.519593561 +0200
+++ /work/SRC/openSUSE:Factory/.yast2-registration.new/yast2-registration.changes 2017-12-01 17:17:05.159955802 +0100
@@ -1,0 +2,18 @@
+Wed Nov 22 09:52:16 UTC 2017 - lslezak(a)suse.cz
+
+- AutoYaST fixes (bsc#1065438):
+ - fixed addon registration order
+ - automatically register the dependant addons
+- Preselect also the recommended beta addons, display them by
+ default even when the beta filter is active
+ (related to bsc#1056413)
+- 4.0.13
+
+-------------------------------------------------------------------
+Wed Nov 8 14:36:05 CET 2017 - schubi(a)suse.de
+
+- Changed warning text if user has skipped registration.
+ (bnc#1055023)
+- 4.0.12
+
+-------------------------------------------------------------------
Old:
----
yast2-registration-4.0.10.tar.bz2
New:
----
yast2-registration-4.0.13.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ yast2-registration.spec ++++++
--- /var/tmp/diff_new_pack.xW129p/_old 2017-12-01 17:17:05.943927618 +0100
+++ /var/tmp/diff_new_pack.xW129p/_new 2017-12-01 17:17:05.947927474 +0100
@@ -17,7 +17,7 @@
Name: yast2-registration
-Version: 4.0.10
+Version: 4.0.13
Release: 0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
++++++ yast2-registration-4.0.10.tar.bz2 -> yast2-registration-4.0.13.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-registration-4.0.10/devel/dump_ay_addons.rb new/yast2-registration-4.0.13/devel/dump_ay_addons.rb
--- old/yast2-registration-4.0.10/devel/dump_ay_addons.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-registration-4.0.13/devel/dump_ay_addons.rb 2017-11-28 11:39:05.401523664 +0100
@@ -0,0 +1,48 @@
+#! /usr/bin/ruby
+
+# This is a simple generator for creating the addons list displayed at
+# https://github.com/yast/yast-registration/wiki/Available-SCC-Extensions-for…
+# from the /var/log/YaST2/registration_addons.yml file.
+
+require "yast"
+require "registration/addon"
+require "registration/addon_sorter"
+
+require_relative "yaml_workaround"
+
+INDENT_WIDTH = 4
+
+# convert addon data to an XML document snippet
+def dump_addon(a)
+ prefix = " " * INDENT_WIDTH
+
+ ret = prefix + "<!-- #{a.name} -->\n"
+
+ ret += prefix + "<!-- Depends on: #{a.depends_on.name} -->\n" if a.depends_on
+
+ ret += prefix + "<name>#{a.identifier}</name>\n" +
+ prefix + "<version>#{a.version}</version>\n" +
+ prefix + "<arch>#{a.arch}</arch>\n"
+
+ ret += prefix + "<reg_code>REG_CODE_REQUIRED</reg_code>\n" unless a.free
+
+ ret
+end
+
+if ARGV[0]
+ addons = YAML.load_file(ARGV[0])
+ # sort the addons
+ addons.sort!(&::Registration::ADDON_SORTER)
+
+ puts "<addons config:type=\"list\">"
+ puts addons.map { |a| dump_addon(a) }.join("\n")
+ puts "</addons>"
+else
+ puts "This is a simple generator for AutoYaST addons configuration."
+ puts
+ puts "Usage: dump_ay_addons <file_path>"
+ puts
+ puts " <file_path> is the addons dump file, originally stored at"
+ puts " /var/log/YaST2/registration_addons.yml"
+ exit 1
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-registration-4.0.10/devel/dump_reader.rb new/yast2-registration-4.0.13/devel/dump_reader.rb
--- old/yast2-registration-4.0.10/devel/dump_reader.rb 2017-10-27 15:02:16.818291893 +0200
+++ new/yast2-registration-4.0.13/devel/dump_reader.rb 2017-11-28 11:39:05.401523664 +0100
@@ -6,28 +6,7 @@
require "yast"
require "registration/addon"
-# Monkey Patch to workaround issue in ruby 2.4 Psych (bsc#1048526)
-# when fixed or if suseconnect is changed then remove
-# (copied from test/spec_helper.rb)
-module SUSE
- module Connect
- module Remote
- class Product
- alias_method :initialize_orig, :initialize
- def initialize(arg = {})
- initialize_orig(arg)
- end
- end
-
- class Service
- alias_method :initialize_orig, :initialize
- def initialize(arg = { "product" => {} })
- initialize_orig(arg)
- end
- end
- end
- end
-end
+require_relative "yaml_workaround"
INDENT_WIDTH = 2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-registration-4.0.10/devel/yaml_workaround.rb new/yast2-registration-4.0.13/devel/yaml_workaround.rb
--- old/yast2-registration-4.0.10/devel/yaml_workaround.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-registration-4.0.13/devel/yaml_workaround.rb 2017-11-28 11:39:05.401523664 +0100
@@ -0,0 +1,22 @@
+# Monkey Patch to workaround issue in ruby 2.4 Psych (bsc#1048526)
+# when fixed or if suseconnect is changed then remove
+# (copied from test/spec_helper.rb)
+module SUSE
+ module Connect
+ module Remote
+ class Product
+ alias_method :initialize_orig, :initialize
+ def initialize(arg = {})
+ initialize_orig(arg)
+ end
+ end
+
+ class Service
+ alias_method :initialize_orig, :initialize
+ def initialize(arg = { "product" => {} })
+ initialize_orig(arg)
+ end
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-registration-4.0.10/package/yast2-registration.changes new/yast2-registration-4.0.13/package/yast2-registration.changes
--- old/yast2-registration-4.0.10/package/yast2-registration.changes 2017-10-27 15:02:16.818291893 +0200
+++ new/yast2-registration-4.0.13/package/yast2-registration.changes 2017-11-28 11:39:05.401523664 +0100
@@ -1,4 +1,22 @@
-------------------------------------------------------------------
+Wed Nov 22 09:52:16 UTC 2017 - lslezak(a)suse.cz
+
+- AutoYaST fixes (bsc#1065438):
+ - fixed addon registration order
+ - automatically register the dependant addons
+- Preselect also the recommended beta addons, display them by
+ default even when the beta filter is active
+ (related to bsc#1056413)
+- 4.0.13
+
+-------------------------------------------------------------------
+Wed Nov 8 14:36:05 CET 2017 - schubi(a)suse.de
+
+- Changed warning text if user has skipped registration.
+ (bnc#1055023)
+- 4.0.12
+
+-------------------------------------------------------------------
Fri Oct 27 12:44:58 UTC 2017 - lslezak(a)suse.cz
- Do not preselect the default addons when some addon is already
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-registration-4.0.10/package/yast2-registration.spec new/yast2-registration-4.0.13/package/yast2-registration.spec
--- old/yast2-registration-4.0.10/package/yast2-registration.spec 2017-10-27 15:02:16.818291893 +0200
+++ new/yast2-registration-4.0.13/package/yast2-registration.spec 2017-11-28 11:39:05.401523664 +0100
@@ -17,7 +17,7 @@
Name: yast2-registration
-Version: 4.0.10
+Version: 4.0.13
Release: 0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-registration-4.0.10/src/clients/scc_auto.rb new/yast2-registration-4.0.13/src/clients/scc_auto.rb
--- old/yast2-registration-4.0.10/src/clients/scc_auto.rb 2017-10-27 15:02:16.818291893 +0200
+++ new/yast2-registration-4.0.13/src/clients/scc_auto.rb 2017-11-28 11:39:05.401523664 +0100
@@ -30,6 +30,7 @@
require "registration/storage"
require "registration/sw_mgmt"
+require "registration/autoyast_addons"
require "registration/registration"
require "registration/registration_ui"
require "registration/helpers"
@@ -308,29 +309,18 @@
# register the addons specified in the profile
def register_addons
- # register addons
- @config.addons.each do |addon|
- product_service = register_addon(addon)
+ # set the option for installing the updates for addons
+ options = Registration::Storage::InstallationOptions.instance
+ options.install_updates = @config.install_updates
+
+ ay_addons_handler = Registration::AutoyastAddons.new(@config.addons, registration)
+ ay_addons_handler.select
+ ay_addons_handler.register
- ::Registration::Storage::Cache.instance.addon_services << product_service
-
- registration_ui.disable_update_repos(product_service) if !(a)config.install_updates
- end
-
- # install the new products
+ # select the new products to install
::Registration::SwMgmt.select_addon_products
end
- def register_addon(addon)
- Popup.Feedback(
- _(CONTACTING_MESSAGE),
- # %s is name of given product
- _("Registering %s ...") % addon["name"]
- ) do
- registration.register_product(addon)
- end
- end
-
# was the system already registered?
# @return [Boolean] true if the system was alreay registered
def old_system_registered?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-registration-4.0.10/src/lib/registration/addon.rb new/yast2-registration-4.0.13/src/lib/registration/addon.rb
--- old/yast2-registration-4.0.10/src/lib/registration/addon.rb 2017-10-27 15:02:16.822291893 +0200
+++ new/yast2-registration-4.0.13/src/lib/registration/addon.rb 2017-11-28 11:39:05.401523664 +0100
@@ -44,6 +44,8 @@
def reset!
@cached_addons = nil
@registered = nil
+ @selected = nil
+ @auto_selected = nil
end
# list of registered add-ons
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-registration-4.0.10/src/lib/registration/autoyast_addons.rb new/yast2-registration-4.0.13/src/lib/registration/autoyast_addons.rb
--- old/yast2-registration-4.0.10/src/lib/registration/autoyast_addons.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-registration-4.0.13/src/lib/registration/autoyast_addons.rb 2017-11-28 11:39:05.405523664 +0100
@@ -0,0 +1,127 @@
+# ------------------------------------------------------------------------------
+# Copyright (c) 2017 SUSE LLC
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of version 2 of the GNU General Public License as published by the
+# Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+# ------------------------------------------------------------------------------
+#
+
+require "yast"
+
+module Registration
+ # This class handles the AutoYaST addons
+ class AutoyastAddons
+ include Yast::I18n
+
+ attr_accessor :requested_addons, :selected_addons
+
+ Yast.import "Report"
+
+ # Constructor
+ # @param requested_addons [Array<Hash<String,String>>] the addons configuration
+ # from the AutoYaST profile
+ # @param registration [Registration::Registration] the Registration object to use
+ # for registering the addons
+ def initialize(requested_addons, registration)
+ textdomain "registration"
+
+ self.requested_addons = requested_addons
+ self.registration = registration
+ end
+
+ # read the available addons from the server, sort the addons from the profile
+ # according to the dependencies
+ def select
+ # ask the server for all available addons (with UI feedback)
+ all_addons = registration_ui.get_available_addons
+
+ # remove the addons marked as not available
+ rejected = all_addons.reject! { |a| a.available? == false }
+ log.info("Not available addons: #{rejected.map(&:label).inspect}") if rejected
+
+ # select the requested addons from the available addons
+ self.selected_addons = select_addons(all_addons)
+ end
+
+ # register the selected addons, the #select method must be called before
+ def register
+ regcodes = collect_reg_codes
+ registration_ui.register_addons(selected_addons, regcodes)
+ end
+
+ private
+
+ attr_writer :selected_addons
+ attr_accessor :registration
+
+ # select the requested addons
+ # @param all_addons [Array<Registration::Addon>] all addons available on the server
+ def select_addons(all_addons)
+ # select the requested addons from the AY profile
+ requested_addons.each do |addon|
+ server_addon = all_addons.find do |a|
+ a.identifier == addon["name"] && a.version == addon["version"] &&
+ a.arch == addon["arch"]
+ end
+
+ if server_addon
+ # mark it as selected
+ server_addon.selected
+ else
+ # otherwise report an error
+ report_missing_addon(addon)
+ end
+ end
+
+ ordered_addons
+ end
+
+ # report error about a missing addon
+ # @param addon [Hash]
+ def report_missing_addon(addon)
+ log.error("Unavailable addon: #{addon.inspect}")
+ Yast::Report.Error(
+ # TRANSLATORS: %s is an addon name (including version and arch)
+ # from the AutoYast XML installation profile
+ _("Addon '%s'\nis not available for registration.") % \
+ "#{addon["name"]}-#{addon["version"]}-#{addon["arch"]}"
+ )
+ end
+
+ # Order the addons according to thier dependencies, the result is sorted
+ # in the registration order. The result also includes the dependant addons
+ # (even not specified in the profile).
+ # @return [Array<Registration::Addon>]
+ def ordered_addons
+ # include also the automatically selected dependent modules/extensions
+ ret = Addon.registration_order(Addon.selected + Addon.auto_selected)
+
+ log.info("Addons to register: #{ret.map(&:label).inspect}")
+
+ ret
+ end
+
+ # collect the registration codes specified in the profile
+ # @return [Hash<String,String>] mapping "product identifier" => "reg code"
+ def collect_reg_codes
+ ret = {}
+
+ requested_addons.each do |a|
+ ret[a["name"]] = a["reg_code"] if a["reg_code"]
+ end
+
+ log.info("Found reg codes for addons: #{ret.keys.inspect}")
+
+ ret
+ end
+
+ def registration_ui
+ @registration_ui ||= RegistrationUI.new(registration)
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-registration-4.0.10/src/lib/registration/ui/addon_selection_base_dialog.rb new/yast2-registration-4.0.13/src/lib/registration/ui/addon_selection_base_dialog.rb
--- old/yast2-registration-4.0.10/src/lib/registration/ui/addon_selection_base_dialog.rb 2017-10-27 15:02:16.826291893 +0200
+++ new/yast2-registration-4.0.13/src/lib/registration/ui/addon_selection_base_dialog.rb 2017-11-28 11:39:05.409523664 +0100
@@ -41,11 +41,10 @@
self.class.filter_beta = FILTER_BETAS_INITIALLY if self.class.filter_beta.nil?
+ preselect_recommended
filter_beta_releases(self.class.filter_beta)
@old_selection = Addon.selected.dup
-
- preselect_recommended
end
# reimplement this in a subclass
@@ -69,8 +68,9 @@
def filter_beta_releases(enable)
self.class.filter_beta = enable
if enable
- @addons, available_addons = @all_addons.partition(&:registered?)
- @addons.concat(available_addons.reject(&:beta_release?))
+ @addons = @all_addons.select do |a|
+ a.registered? || a.selected? || !a.beta_release?
+ end
else
@addons = @all_addons
end
@@ -323,9 +323,9 @@
def preselect_recommended
# something is already selected/registered, keep the user selection unchanged
- return if !Addon.selected.empty? || !Addon.registered.empty? || @addons.nil?
+ return if !Addon.selected.empty? || !Addon.registered.empty?
- @addons.each do |a|
+ @all_addons.each do |a|
next unless a.recommended
log.info("Preselecting a default addon: #{a.friendly_name}")
a.selected
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-registration-4.0.10/src/lib/registration/ui/base_system_registration_dialog.rb new/yast2-registration-4.0.13/src/lib/registration/ui/base_system_registration_dialog.rb
--- old/yast2-registration-4.0.10/src/lib/registration/ui/base_system_registration_dialog.rb 2017-10-27 15:02:16.826291893 +0200
+++ new/yast2-registration-4.0.13/src/lib/registration/ui/base_system_registration_dialog.rb 2017-11-28 11:39:05.409523664 +0100
@@ -359,10 +359,16 @@
# @return [Boolean] true when skipping has been confirmed
def show_skipping_warning
# Popup question: confirm skipping the registration
- warning = _("If you do not register your system we will not be able\n" \
- "to grant you access to the update repositories.\n\n" \
- "You can register after the installation or visit our\n" \
- "Customer Center for online registration.")
+ # TRANSLATORS:
+ # %{media_name} is the media name (e.g. SLE-15-Packages),
+ # %{download_url} is an URL link (e.g. https://download.suse.com)
+ warning = _("Without registration, update channels will not be\n" \
+ "configured. This disables updates and security fixes.\n\n" \
+ "A full system can be installed using the\n" \
+ "%{media_name} media from %{download_url}.\n" \
+ "Without these media only a minimum system is available\n" \
+ "in this installation.") %
+ { media_name: "SLE-15-Packages", download_url: "https://download.suse.com" }
Yast::Popup.Warning(warning)
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-registration-4.0.10/test/addon_selection_dialog_test.rb new/yast2-registration-4.0.13/test/addon_selection_dialog_test.rb
--- old/yast2-registration-4.0.10/test/addon_selection_dialog_test.rb 2017-10-27 15:02:16.830291893 +0200
+++ new/yast2-registration-4.0.13/test/addon_selection_dialog_test.rb 2017-11-28 11:39:05.413523664 +0100
@@ -206,6 +206,16 @@
allow(subject).to receive(:RichText).and_call_original
dialog.run
end
+
+ it "displays recommended beta add-ons" do
+ allow(addon).to receive(:beta_release?).and_return(true)
+ allow(addon).to receive(:registered?).and_return(false)
+ allow(addon).to receive(:recommended).and_return(true)
+ allow(Registration::Addon).to receive(:find_all).and_return([addon])
+ expect(subject).to receive(:RichText).with(Yast::Term.new(:id, :items), /#{addon.name}/)
+ allow(subject).to receive(:RichText).and_call_original
+ dialog.run
+ end
end
context "when there is no beta versions to filter" do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-registration-4.0.10/test/autoyast_addons_spec.rb new/yast2-registration-4.0.13/test/autoyast_addons_spec.rb
--- old/yast2-registration-4.0.10/test/autoyast_addons_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-registration-4.0.13/test/autoyast_addons_spec.rb 2017-11-28 11:39:05.413523664 +0100
@@ -0,0 +1,99 @@
+#! /usr/bin/env rspec
+
+require_relative "spec_helper"
+require "yaml"
+
+describe Registration::AutoyastAddons do
+ let(:registration) { double("registration") }
+ let(:unsorted_addons) do
+ [
+ # deliberately in a wrong registration order, the "sle-module-basesystem"
+ # module needs to be registered first
+ { "name" => "sle-module-desktop-applications", "version" => "15", "arch" => "x86_64" },
+ { "name" => "sle-module-basesystem", "version" => "15", "arch" => "x86_64" }
+ ]
+ end
+
+ # it depends on the "sle-module-basesystem" which is not listed here
+ let(:incomplete_addons) do
+ ["name" => "sle-module-desktop-applications", "version" => "15",
+ "arch" => "x86_64"]
+ end
+
+ # the basesystem module does not need a reg. key in reality
+ # but let's use it in this test for the simplicity
+ let(:addons_with_reg_key) do
+ ["name" => "sle-module-basesystem", "version" => "15", "arch" => "x86_64",
+ "reg_code" => "abcd42"]
+ end
+
+ # some dummy non-existing addon to test error handling
+ let(:missing_addons) do
+ ["name" => "non-existing-module", "version" => "42", "arch" => "x86_64"]
+ end
+
+ # the addons to register in the expcted correct order
+ let(:expected_registration_order) { ["sle-module-basesystem", "sle-module-desktop-applications"] }
+
+ before do
+ addons = load_yaml_fixture("sle15_addons.yaml")
+ allow(Registration::Addon).to receive(:find_all).and_return(addons)
+ allow(registration).to receive(:get_addon_list).and_return(addons)
+ end
+
+ after do
+ Registration::Addon.reset!
+ end
+
+ describe "#select" do
+ it "sorts the addons according to their dependencies" do
+ ayaddons = Registration::AutoyastAddons.new(unsorted_addons, registration)
+ ayaddons.select
+
+ expect(ayaddons.selected_addons.map(&:identifier)).to eq(expected_registration_order)
+ end
+
+ it "automatically selects the dependent addons" do
+ ayaddons = Registration::AutoyastAddons.new(incomplete_addons, registration)
+ ayaddons.select
+
+ expect(ayaddons.selected_addons.map(&:identifier)).to eq(expected_registration_order)
+ end
+
+ it "reports error for not available addons" do
+ expect(Yast::Report).to receive(:Error).with(/is not available for registration/)
+
+ ayaddons = Registration::AutoyastAddons.new(missing_addons, registration)
+ ayaddons.select
+ end
+ end
+
+ describe "#register" do
+ it "registers the selected addons" do
+ expect(registration).to receive(:register_product).with(
+ "name" => "sle-module-basesystem", "reg_code" => nil, "arch" => "x86_64",
+ "version" => "15"
+ ).ordered
+ expect(registration).to receive(:register_product).with(
+ "name" => "sle-module-desktop-applications", "reg_code" => nil,
+ "arch" => "x86_64", "version" => "15"
+ ).ordered
+
+ ayaddons = Registration::AutoyastAddons.new(unsorted_addons, registration)
+ ayaddons.select
+ ayaddons.register
+ end
+
+ it "registers the selected addon using the provided reg. key" do
+ expect(registration).to receive(:register_product).with(
+ "name" => "sle-module-basesystem", "reg_code" => "abcd42", "arch" => "x86_64",
+ "version" => "15"
+ )
+
+ ayaddons = Registration::AutoyastAddons.new(addons_with_reg_key, registration)
+ ayaddons.select
+ ayaddons.register
+ end
+ end
+
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-registration-4.0.10/test/base_system_registration_dialog_test.rb new/yast2-registration-4.0.13/test/base_system_registration_dialog_test.rb
--- old/yast2-registration-4.0.10/test/base_system_registration_dialog_test.rb 2017-10-27 15:02:16.830291893 +0200
+++ new/yast2-registration-4.0.13/test/base_system_registration_dialog_test.rb 2017-11-28 11:39:05.413523664 +0100
@@ -156,7 +156,7 @@
context "when user skips registration" do
it "does not try to register the system and close the dialog" do
allow(Yast::UI).to receive(:UserInput).and_return(:skip_registration, :next)
- expect(Yast::Popup).to receive(:Warning).with(/If you do not register/)
+ expect(Yast::Popup).to receive(:Warning).with(/Without registration/)
.and_return(true)
expect(subject.run).to eq(:skip)
end
1
0
Hello community,
here is the log from the commit of package gstreamer-plugins-vaapi for openSUSE:Factory checked in at 2017-12-01 15:54:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-vaapi (Old)
and /work/SRC/openSUSE:Factory/.gstreamer-plugins-vaapi.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gstreamer-plugins-vaapi"
Fri Dec 1 15:54:33 2017 rev:20 rq:547079 version:1.12.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/gstreamer-plugins-vaapi/gstreamer-plugins-vaapi.changes 2017-11-17 11:00:47.606988734 +0100
+++ /work/SRC/openSUSE:Factory/.gstreamer-plugins-vaapi.new/gstreamer-plugins-vaapi.changes 2017-12-01 15:55:02.776996730 +0100
@@ -1,0 +2,6 @@
+Fri Dec 1 09:03:13 UTC 2017 - zaitor(a)opensuse.org
+
+- Add sed hack to lower needed version of autotools to that we have
+ in Leap 42.x.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gstreamer-plugins-vaapi.spec ++++++
--- /var/tmp/diff_new_pack.FUkpj3/_old 2017-12-01 15:55:03.380974995 +0100
+++ /var/tmp/diff_new_pack.FUkpj3/_new 2017-12-01 15:55:03.388974707 +0100
@@ -90,6 +90,8 @@
%prep
%setup -q -n gstreamer-vaapi-%{version}
+# Hack to lower min version of automake to what we ship in Leap 42.x
+sed -i "s:Wno-portability 1.14 no-dist:Wno-portability 1.13.4 no-dist:g" configure.ac
%patch0 -p1
%build
1
0
Hello community,
here is the log from the commit of package booth for openSUSE:Factory checked in at 2017-12-01 15:54:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/booth (Old)
and /work/SRC/openSUSE:Factory/.booth.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "booth"
Fri Dec 1 15:54:31 2017 rev:43 rq:547071 version:1.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/booth/booth.changes 2017-06-23 09:18:58.593248682 +0200
+++ /work/SRC/openSUSE:Factory/.booth.new/booth.changes 2017-12-01 15:55:01.741034009 +0100
@@ -1,0 +2,12 @@
+Fri Dec 1 10:50:28 UTC 2017 - ckowalczyk(a)suse.com
+
+- Tickets: added manual tickets, which allow handling 2-site setup
+ (fate#322100)
+- Debug mode: fixed the interaction with resource agents (bsc#1046790)
+- Patch file bug-1045067_booth-fix-booth-grant-cmd.patch has been removed
+ after the code being merged to upstream:
+ * Clinet commands: fixed local IP addresses for booth grant, list,
+ and peers commands (bsc#1045067)
+- Upstream version cs: d4cb8cbdaf87e46f636c3d06730b902b79bdcb9c
+
+-------------------------------------------------------------------
Old:
----
booth-1.0+20170619.766d618.tar.bz2
bug-1045067_booth-fix-booth-grant-cmd.patch
New:
----
booth-1.0+20171123.d4cb8cb.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ booth.spec ++++++
--- /var/tmp/diff_new_pack.7fmU46/_old 2017-12-01 15:55:02.425009396 +0100
+++ /var/tmp/diff_new_pack.7fmU46/_new 2017-12-01 15:55:02.429009252 +0100
@@ -21,7 +21,7 @@
%bcond_with glue
# local commit:
-%global commit 1.0+20170619.766d618
+%global commit 1.0+20171123.d4cb8cb
%global uname hacluster
%global gname haclient
@@ -39,7 +39,6 @@
Url: https://github.com/ClusterLabs/booth
Source: %{name}-%{commit}.tar.bz2
Source1: %{name}-rpmlintrc
-Patch1: bug-1045067_booth-fix-booth-grant-cmd.patch
BuildRequires: asciidoc
BuildRequires: autoconf
BuildRequires: automake
@@ -78,7 +77,6 @@
%prep
%setup -q -n %{name}-%{commit}
-%patch1 -p1
%build
autoreconf -fvi
++++++ booth-1.0+20170619.766d618.tar.bz2 -> booth-1.0+20171123.d4cb8cb.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/.git_info new/booth-1.0+20171123.d4cb8cb/.git_info
--- old/booth-1.0+20170619.766d618/.git_info 2017-06-22 10:32:51.935559567 +0200
+++ new/booth-1.0+20171123.d4cb8cb/.git_info 2017-12-01 10:44:10.863914778 +0100
@@ -1 +1 @@
-v1.0-114-g766d618
+v1.0-131-gd4cb8cb
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/README-testing new/booth-1.0+20171123.d4cb8cb/README-testing
--- old/booth-1.0+20170619.766d618/README-testing 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/README-testing 2017-11-23 14:07:59.000000000 +0100
@@ -16,9 +16,9 @@
emulation functions.
There are some restrictions on how booth.conf is formatted.
-There could be several tickets defined, but only the first ticket
-is used for testing. This ticket must have expire and timeout
-parameters configured.
+There may be several tickets defined and all of them will be
+tested, one after another (they will be tested separately).
+The tickets must have expire and timeout parameters configured.
Example booth.conf:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/docs/boothd.8.txt new/booth-1.0+20171123.d4cb8cb/docs/boothd.8.txt
--- old/booth-1.0+20170619.766d618/docs/boothd.8.txt 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/docs/boothd.8.txt 2017-11-23 14:07:59.000000000 +0100
@@ -74,6 +74,9 @@
'immediate grant': Don't wait for unreachable sites to
relinquish the ticket. See the 'Booth ticket management'
section below for more details.
+ For manual tickets this option allows to grant a ticket
+ which is currently granted. See the 'Manual tickets' section
+ below for more details.
+
This option may be DANGEROUS. It makes booth grant the ticket
even though it cannot ascertain that unreachable sites don't
@@ -97,12 +100,11 @@
Report version information.
*-S*::
- 'systemd' mode: don't fork. This is like '-D' but without the debug output.
+ 'systemd' mode: don't fork.
+ Disables daemonizing, the process will remain in the foreground.
*-D*::
- Debug output/don't daemonize.
- Increases the debug output level; booth daemon remains
- in the foreground.
+ Increases the debug output level.
*-l* 'lockfile'::
Use another lock file. By default, the lock file name is
@@ -367,6 +369,14 @@
Note that there can be no guarantee on whether an attribute value
is up to date, i.e. if it actually reflects the current state.
+*'mode'*::
+ Specifies if the ticket is manual or automatic.
++
+By default all tickets are automatic (that is, they are fully
+controlled by Raft algorithm). Assign the strings "manual" or
+"MANUAL" to define the ticket as manually controlled.
+
+
One example of a booth configuration file:
-----------------------
@@ -517,6 +527,49 @@
'systemctl' requires the configuration name, even for the default
name 'booth'.
+-----------------------
+
+
+MANUAL TICKETS
+-----------------------
+Manual tickets allow users to create and manage tickets which are
+subsequently handled by booth without using the Raft algorithm.
+Granting and revoking manual tickets is fully controlled
+by the administrator. It is possible to define a number of manual and
+normal tickets in one GEO cluster.
+
+Automatic ticket management provided by Raft algorithm isn't applied
+to manually controlled tickets. In particular, there is no elections,
+automatic failover procedures, and term expiration.
+
+However, 'booth' controls if a ticket is currently being granted to
+any site and warns the user approprietly.
+
+Tickets which were manually granted to a site, will remain there until
+they are manually revoked. Even if a site becomes offline, the ticket
+will not be moved to another site. This behavior allows administrators
+to make sure that some services will remain in a particular site and
+will not be moved to another site, possibly located in a different
+geographical location.
+
+Also, configuring only manual tickets in a GEO cluster, allows to have
+just two sites in a cluster, without a need of having an arbitrator.
+This is possible because there is no automatic elections and no voting
+performed for manual tickets.
+
+Manual tickets are defined in a configuration files by adding a 'mode'
+ticket parameter and setting it to 'manual' or 'MANUAL':
+
+ticket="manual-ticket"
+ [...]
+ mode = manual
+ [...]
+
+Manual tickets can be granted and revoked by using normal 'grant' and
+'revoke' commands, with the usual flags and parameters. The only
+difference is that specyfiyng '-F' flag during 'grant' command, forced
+a site to become a leader of the specified ticket, even if the ticket
+is granted to another site.
EXIT STATUS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/src/Makefile.am new/booth-1.0+20171123.d4cb8cb/src/Makefile.am
--- old/booth-1.0+20170619.766d618/src/Makefile.am 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/src/Makefile.am 2017-11-23 14:07:59.000000000 +0100
@@ -8,10 +8,10 @@
sbin_PROGRAMS = boothd
boothd_SOURCES = config.c main.c raft.c ticket.c transport.c \
- pacemaker.c handler.c request.c attr.c
+ pacemaker.c handler.c request.c attr.c manual.c
noinst_HEADERS = booth.h pacemaker.h \
- config.h log.h raft.h ticket.h transport.h handler.h request.h attr.h
+ config.h log.h raft.h ticket.h transport.h handler.h request.h attr.h manual.h
if BUILD_TIMER_C
boothd_SOURCES += timer.c
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/src/booth.h new/booth-1.0+20171123.d4cb8cb/src/booth.h
--- old/booth-1.0+20170619.766d618/src/booth.h 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/src/booth.h 2017-11-23 14:07:59.000000000 +0100
@@ -295,7 +295,8 @@
int tcp_fd;
int udp_fd;
- /* 0-based, used for indexing into per-ticket weights */
+ /* 0-based, used for indexing into per-ticket weights.
+ * -1 for no_leader. */
int index;
uint64_t bitmask;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/src/config.c new/booth-1.0+20171123.d4cb8cb/src/config.c
--- old/booth-1.0+20170619.766d618/src/config.c 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/src/config.c 2017-11-23 14:07:59.000000000 +0100
@@ -259,6 +259,7 @@
tk->term_duration = def->term_duration;
tk->retries = def->retries;
memcpy(tk->weight, def->weight, sizeof(tk->weight));
+ tk->mode = def->mode;
if (tkp)
*tkp = tk;
@@ -331,6 +332,15 @@
return i;
}
+/* returns TICKET_MODE_AUTO if failed to parse the ticket mode. */
+static ticket_mode_e retrieve_ticket_mode(const char *input)
+{
+ if (strcasecmp(input, "manual") == 0) {
+ return TICKET_MODE_MANUAL;
+ }
+
+ return TICKET_MODE_AUTO;
+}
/* scan val for time; time is [0-9]+(ms)?, i.e. either in seconds
* or milliseconds
@@ -546,6 +556,7 @@
defaults.timeout = DEFAULT_TICKET_TIMEOUT;
defaults.retries = DEFAULT_RETRIES;
defaults.acquire_after = 0;
+ defaults.mode = TICKET_MODE_AUTO;
error = "";
@@ -808,6 +819,11 @@
continue;
}
+ if (strcmp(key, "mode") == 0) {
+ current_tk->mode = retrieve_ticket_mode(val);
+ continue;
+ }
+
if (strcmp(key, "weights") == 0) {
if (parse_weights(val, current_tk->weight) < 0)
goto err;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/src/config.h new/booth-1.0+20171123.d4cb8cb/src/config.h
--- old/booth-1.0+20170619.766d618/src/config.h 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/src/config.h 2017-11-23 14:07:59.000000000 +0100
@@ -57,6 +57,11 @@
GRANT_MANUAL,
} grant_type_e;
+typedef enum {
+ TICKET_MODE_AUTO = 1,
+ TICKET_MODE_MANUAL,
+} ticket_mode_e;
+
struct toktab {
const char *str;
int val;
@@ -107,6 +112,15 @@
/** Node weights. */
int weight[MAX_NODES];
+
+ /* Mode operation of the ticket.
+ * Set to MANUAL to make sure that the ticket will be manipulated
+ * only by manual commands of the administrator. In such a case
+ * automatic elections will be disabled.
+ * Manual tickets do not have to be renewed every some time.
+ * The leader will continue to send heartbeat messages to other sites.
+ */
+ ticket_mode_e mode;
/** @} */
@@ -129,6 +143,27 @@
/** Is the ticket granted? */
int is_granted;
+
+ /** Which site considered itself a leader.
+ * For manual tickets it is possible, that
+ * more than one site will act as a leader.
+ * This array is used for tracking that situation
+ * and notifying the user about the issue.
+ *
+ * Possible values for every site:
+ * 0: the site does not claim to be the leader
+ * 1: the site considers itself a leader and
+ * is sending or used to send heartbeat messages
+ *
+ * The site will be marked as '1' until this site
+ * receives revoke confirmation.
+ *
+ * If more than one site has '1', the geo cluster is
+ * considered to have multiple leadership and proper
+ * warning are generated.
+ */
+ int sites_where_granted[MAX_NODES];
+
/** Timestamp of leadership expiration */
timetype term_expires;
/** End of election period */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/src/main.c new/booth-1.0+20171123.d4cb8cb/src/main.c
--- old/booth-1.0+20170619.766d618/src/main.c 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/src/main.c 2017-11-23 14:07:59.000000000 +0100
@@ -93,6 +93,7 @@
static const struct booth_site _no_leader = {
.addr_string = "none",
.site_id = NO_ONE,
+ .index = -1,
};
struct booth_site *const no_leader = (struct booth_site*) &_no_leader;
@@ -942,6 +943,8 @@
" -s <site> Connect/grant to a different site\n"
" -F Try to grant the ticket immediately\n"
" even if not all sites are reachable\n"
+ " For manual tickets:\n"
+ " grant a manual ticket even if it has been already granted\n"
" -w Wait forever for the outcome of the request\n"
" -C Wait until the ticket is committed to the CIB (grant only)\n"
" -h Print this help\n"
@@ -1116,12 +1119,14 @@
strcat(cp, BOOTH_DEFAULT_CONF_EXT);
}
break;
+
case 'D':
debug_level++;
- enable_stderr = 1;
- /* Fall through */
+ break;
+
case 'S':
daemonize = 0;
+ enable_stderr = 1;
break;
case 'l':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/src/manual.c new/booth-1.0+20171123.d4cb8cb/src/manual.c
--- old/booth-1.0+20170619.766d618/src/manual.c 1970-01-01 01:00:00.000000000 +0100
+++ new/booth-1.0+20171123.d4cb8cb/src/manual.c 2017-11-23 14:07:59.000000000 +0100
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2017 Chris Kowalczyk <ckowalczyk(a)suse.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "manual.h"
+
+#include "transport.h"
+#include "ticket.h"
+#include "config.h"
+#include "log.h"
+#include "request.h"
+
+/* For manual tickets, manual_selection function is an equivalent
+ * of new_election function used for assigning automatic tickets.
+ * The workflow here is much simplier, as no voting is performed,
+ * and the current node doesn't have to wait for any responses
+ * from other sites.
+ */
+int manual_selection(struct ticket_config *tk,
+ struct booth_site *preference, int update_term, cmd_reason_t reason)
+{
+ if (local->type != SITE)
+ return 0;
+
+ tk_log_debug("starting manual selection (caused by %s %s)",
+ state_to_string(reason),
+ reason == OR_AGAIN ? state_to_string(tk->election_reason) : "" );
+
+ // Manual selection is done without any delay, the leader is assigned
+ set_leader(tk, local);
+ set_state(tk, ST_LEADER);
+
+ // Manual tickets never expire, we don't specify expiration time
+
+ // Make sure that election_end field is empty
+ time_reset(&tk->election_end);
+
+ // Make sure that delay commit is empty, as manual tickets don't
+ // wait for any kind of confirmation from other nodes
+ time_reset(&tk->delay_commit);
+
+ save_committed_tkt(tk);
+
+ // Inform others about the new leader
+ ticket_broadcast(tk, OP_HEARTBEAT, OP_ACK, RLT_SUCCESS, 0);
+ tk->ticket_updated = 0;
+
+ return 0;
+}
+
+/* This function is called for manual tickets that were
+ * revoked from another site, which this site doesn't
+ * consider as a leader.
+ */
+int process_REVOKE_for_manual_ticket (
+ struct ticket_config *tk,
+ struct booth_site *sender,
+ struct boothc_ticket_msg *msg)
+{
+ int rv;
+
+ // For manual tickets, we may end up having two leaders.
+ // If one of them is revoked, it will send information
+ // to all members of the GEO cluster.
+
+ // We may find ourselves here if this particular site
+ // has not been following the leader which had been revoked
+ // (and which had sent this message).
+
+ // We send the ACK, to satisfy the requestor.
+ rv = send_msg(OP_ACK, tk, sender, msg);
+
+ // Mark this ticket as not granted to the sender anymore.
+ mark_ticket_as_revoked(tk, sender);
+
+ if (tk->state == ST_LEADER) {
+ tk_log_warn("%s wants to revoke ticket, "
+ "but this site is itself a leader",
+ site_string(sender));
+
+ // Because another leader is presumably stepping down,
+ // let's notify other sites that now we are the only leader.
+ ticket_broadcast(tk, OP_HEARTBEAT, OP_ACK, RLT_SUCCESS, 0);
+ } else {
+ tk_log_warn("%s wants to revoke ticket, "
+ "but this site is not following it",
+ site_string(sender));
+ }
+
+ return rv;
+}
+
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/src/manual.h new/booth-1.0+20171123.d4cb8cb/src/manual.h
--- old/booth-1.0+20170619.766d618/src/manual.h 1970-01-01 01:00:00.000000000 +0100
+++ new/booth-1.0+20171123.d4cb8cb/src/manual.h 2017-11-23 14:07:59.000000000 +0100
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2017 Chris Kowalczyk <ckowalczyk(a)suse.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef _MANUAL_H
+#define _MANUAL_H
+
+#include "booth.h"
+
+struct ticket_config;
+
+int manual_selection(struct ticket_config *tk,
+ struct booth_site *new_leader, int update_term, cmd_reason_t reason);
+
+int process_REVOKE_for_manual_ticket (
+ struct ticket_config *tk,
+ struct booth_site *sender,
+ struct boothc_ticket_msg *msg);
+
+
+#endif /* _MANUAL_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/src/pacemaker.c new/booth-1.0+20171123.d4cb8cb/src/pacemaker.c
--- old/booth-1.0+20170619.766d618/src/pacemaker.c 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/src/pacemaker.c 2017-11-23 14:07:59.000000000 +0100
@@ -513,7 +513,7 @@
if (tk->is_granted) {
log_warn("%s: granted here, assume it belonged to us",
tk->name);
- tk->leader = local;
+ set_leader(tk, local);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/src/raft.c new/booth-1.0+20171123.d4cb8cb/src/raft.c
--- old/booth-1.0+20170619.766d618/src/raft.c 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/src/raft.c 2017-11-23 14:07:59.000000000 +0100
@@ -30,7 +30,7 @@
#include "ticket.h"
#include "request.h"
#include "log.h"
-
+#include "manual.h"
inline static void clear_election(struct ticket_config *tk)
@@ -370,6 +370,8 @@
tk_log_warn("different leader %s wants to update "
"our ticket, sending reject",
site_string(leader));
+
+ mark_ticket_as_granted(tk, sender);
return send_reject(sender, tk, RLT_TERM_OUTDATED, msg);
}
@@ -399,10 +401,18 @@
/* assume that our ack got lost */
rv = send_msg(OP_ACK, tk, sender, msg);
} else if (tk->leader != sender) {
- tk_log_error("%s wants to revoke ticket, "
- "but it is not granted there (ignoring)",
- site_string(sender));
- return -1;
+ if (!is_manual(tk)) {
+ tk_log_error("%s wants to revoke ticket, "
+ "but it is not granted there (ignoring)",
+ site_string(sender));
+ return -1;
+ } else {
+ rv = process_REVOKE_for_manual_ticket(tk, sender, msg);
+
+ // Ticket data stored in this site is not modified. This means
+ // that this site will still follow another leader (the one which
+ // has not been revoked) or be a leader itself.
+ }
} else if (tk->state != ST_FOLLOWER) {
tk_log_error("unexpected ticket revoke from %s "
"(in state %s) (ignoring)",
@@ -413,8 +423,7 @@
tk_log_info("%s revokes ticket",
site_string(tk->leader));
save_committed_tkt(tk);
- reset_ticket(tk);
- set_leader(tk, no_leader);
+ reset_ticket_and_set_no_leader(tk);
ticket_write(tk);
rv = send_msg(OP_ACK, tk, sender, msg);
}
@@ -959,6 +968,8 @@
tk_log_warn("unexpected message %s, from %s",
state_to_string(cmd),
site_string(sender));
+ mark_ticket_as_granted(tk, sender);
+
if (ticket_seems_ok(tk))
send_reject(sender, tk, RLT_TERM_STILL_VALID, msg);
rv = -EINVAL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/src/ticket.c new/booth-1.0+20171123.d4cb8cb/src/ticket.c
--- old/booth-1.0+20170619.766d618/src/ticket.c 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/src/ticket.c 2017-11-23 14:07:59.000000000 +0100
@@ -40,6 +40,7 @@
#include "raft.h"
#include "handler.h"
#include "request.h"
+#include "manual.h"
#define TK_LINE 256
@@ -182,15 +183,27 @@
static void ext_prog_failed(struct ticket_config *tk,
int start_election)
{
- /* Give it to somebody else.
- * Just send a VOTE_FOR message, so the
- * others can start elections. */
- if (leader_and_valid(tk)) {
- save_committed_tkt(tk);
- reset_ticket(tk);
- ticket_write(tk);
- if (start_election) {
- ticket_broadcast(tk, OP_VOTE_FOR, OP_REQ_VOTE, RLT_SUCCESS, OR_LOCAL_FAIL);
+ if (!is_manual(tk)) {
+ /* Give it to somebody else.
+ * Just send a VOTE_FOR message, so the
+ * others can start elections. */
+ if (leader_and_valid(tk)) {
+ save_committed_tkt(tk);
+ reset_ticket(tk);
+ ticket_write(tk);
+ if (start_election) {
+ ticket_broadcast(tk, OP_VOTE_FOR, OP_REQ_VOTE, RLT_SUCCESS, OR_LOCAL_FAIL);
+ }
+ }
+ } else {
+ /* There is not much we can do now because
+ * the manual ticket cannot be relocated.
+ * Just warn the user. */
+ if (tk->leader == local) {
+ save_committed_tkt(tk);
+ reset_ticket(tk);
+ ticket_write(tk);
+ log_error("external test failed on the specified machine, cannot acquire a manual ticket");
}
}
}
@@ -299,7 +312,12 @@
return RLT_EXT_FAILED;
}
- rv = new_election(tk, local, 1, reason);
+ if (is_manual(tk)) {
+ rv = manual_selection(tk, local, 1, reason);
+ } else {
+ rv = new_election(tk, local, 1, reason);
+ }
+
return rv ? RLT_SYNC_FAIL : 0;
}
@@ -314,8 +332,18 @@
if (tk->leader == local)
return RLT_SUCCESS;
- if (is_owned(tk))
- return RLT_OVERGRANT;
+ if (is_owned(tk)) {
+ if (is_manual(tk) && (options & OPT_IMMEDIATE)) {
+ /* -F flag has been used while granting a manual ticket.
+ * The ticket will be granted and may end up being granted
+ * on multiple sites */
+ tk_log_warn("manual ticket forced to be granted! be aware that "
+ "you may end up having two sites holding the same manual "
+ "ticket! revoke the ticket from the unnecessary site!");
+ } else {
+ return RLT_OVERGRANT;
+ }
+ }
set_future_time(&tk->delay_commit, tk->term_duration + tk->acquire_after);
@@ -340,8 +368,7 @@
tk_log_info("revoking ticket");
save_committed_tkt(tk);
- reset_ticket(tk);
- set_leader(tk, no_leader);
+ reset_ticket_and_set_no_leader(tk);
ticket_write(tk);
ticket_broadcast(tk, OP_REVOKE, OP_ACK, RLT_SUCCESS, OR_ADMIN);
}
@@ -367,20 +394,32 @@
char timeout_str[64];
char pending_str[64];
char *data, *cp;
- int i, alloc;
+ int i, alloc, site_index;
time_t ts;
+ int multiple_grant_warning_length = 0;
*pdata = NULL;
*len = 0;
- alloc = booth_conf->ticket_count * (BOOTH_NAME_LEN * 2 + 128);
+ alloc = booth_conf->ticket_count * (BOOTH_NAME_LEN * 2 + 128 + 16);
+
+ foreach_ticket(i, tk) {
+ multiple_grant_warning_length = number_sites_marked_as_granted(tk);
+
+ if (multiple_grant_warning_length > 1) {
+ // 164: 55 + 45 + 2*number_of_multiple_sites + some margin
+ alloc += 164 + BOOTH_NAME_LEN * (1+multiple_grant_warning_length);
+ }
+ }
+
data = malloc(alloc);
if (!data)
return -ENOMEM;
cp = data;
foreach_ticket(i, tk) {
- if (is_time_set(&tk->term_expires)) {
+ if ((!is_manual(tk)) && is_time_set(&tk->term_expires)) {
+ /* Manual tickets doesn't have term_expires defined */
ts = wall_ts(&tk->term_expires);
strftime(timeout_str, sizeof(timeout_str), "%F %T",
localtime(&ts));
@@ -407,19 +446,55 @@
if (is_owned(tk)) {
cp += snprintf(cp,
alloc - (cp - data),
- ", expires: %s%s\n",
+ ", expires: %s%s",
timeout_str,
pending_str);
- } else {
- cp += snprintf(cp, alloc - (cp - data), "\n");
}
+ if (is_manual(tk)) {
+ cp += snprintf(cp,
+ alloc - (cp - data),
+ " [manual mode]");
+ }
+
+ cp += snprintf(cp, alloc - (cp - data), "\n");
+
if (alloc - (cp - data) <= 0) {
free(data);
return -ENOMEM;
}
}
+ foreach_ticket(i, tk) {
+ multiple_grant_warning_length = number_sites_marked_as_granted(tk);
+
+ if (multiple_grant_warning_length > 1) {
+ cp += snprintf(cp,
+ alloc - (cp - data),
+ "\nWARNING: The ticket %s is granted to multiple sites: ", // ~55 characters
+ tk->name);
+
+ for(site_index=0; site_index<booth_conf->site_count; ++site_index) {
+ if (tk->sites_where_granted[site_index] > 0) {
+ cp += snprintf(cp,
+ alloc - (cp - data),
+ "%s",
+ site_string(&(booth_conf->site[site_index])));
+
+ if (--multiple_grant_warning_length > 0) {
+ cp += snprintf(cp,
+ alloc - (cp - data),
+ ", ");
+ }
+ }
+ }
+
+ cp += snprintf(cp,
+ alloc - (cp - data),
+ ". Revoke the ticket from the faulty sites.\n"); // ~45 characters
+ }
+ }
+
*pdata = data;
*len = cp - data;
@@ -455,12 +530,20 @@
tk->voted_for = NULL;
}
+void reset_ticket_and_set_no_leader(struct ticket_config *tk)
+{
+ mark_ticket_as_revoked_from_leader(tk);
+ reset_ticket(tk);
+
+ tk->leader = no_leader;
+ tk_log_debug("ticket leader set to no_leader");
+}
static void log_reacquire_reason(struct ticket_config *tk)
{
int valid;
const char *where_granted = "\0";
- char buff[64];
+ char buff[75];
valid = is_time_set(&tk->term_expires) && !is_past(&tk->term_expires);
@@ -606,9 +689,12 @@
goto reply_now;
}
- if ((cmd == CMD_GRANT) && is_owned(tk)) {
+ /* Perform the initial check before granting
+ * an already granted non-manual ticket */
+ if ((!is_manual(tk) && (cmd == CMD_GRANT) && is_owned(tk))) {
log_warn("client wants to grant an (already granted!) ticket %s",
msg->ticket.id);
+
rv = RLT_OVERGRANT;
goto reply_now;
}
@@ -726,12 +812,15 @@
if (tk->ticket_updated >= 2)
return 0;
- if (tk->ticket_updated < 1) {
- tk->ticket_updated = 1;
- get_time(&now);
- copy_time(&now, &tk->last_renewal);
- set_future_time(&tk->term_expires, tk->term_duration);
- rv = ticket_broadcast(tk, OP_UPDATE, OP_ACK, RLT_SUCCESS, 0);
+ /* for manual tickets, we don't set time expiration */
+ if (!is_manual(tk)) {
+ if (tk->ticket_updated < 1) {
+ tk->ticket_updated = 1;
+ get_time(&now);
+ copy_time(&now, &tk->last_renewal);
+ set_future_time(&tk->term_expires, tk->term_duration);
+ rv = ticket_broadcast(tk, OP_UPDATE, OP_ACK, RLT_SUCCESS, 0);
+ }
}
if (tk->ticket_updated < 2) {
@@ -907,6 +996,7 @@
tk->lost_leader = tk->leader;
save_committed_tkt(tk);
+ mark_ticket_as_revoked_from_leader(tk);
reset_ticket(tk);
set_state(tk, ST_FOLLOWER);
if (local->type == SITE) {
@@ -938,21 +1028,39 @@
break;
case ST_FOLLOWER:
- /* leader/ticket lost? and we didn't vote yet */
- tk_log_debug("leader: %s, voted_for: %s",
- site_string(tk->leader),
- site_string(tk->voted_for));
- if (!tk->leader) {
- if (!tk->voted_for || !tk->in_election) {
- disown_ticket(tk);
- if (!new_election(tk, NULL, 1, OR_AGAIN)) {
+ if (!is_manual(tk)) {
+ /* leader/ticket lost? and we didn't vote yet */
+ tk_log_debug("leader: %s, voted_for: %s",
+ site_string(tk->leader),
+ site_string(tk->voted_for));
+ if (!tk->leader) {
+ if (!tk->voted_for || !tk->in_election) {
+ disown_ticket(tk);
+ if (!new_election(tk, NULL, 1, OR_AGAIN)) {
+ ticket_activate_timeout(tk);
+ }
+ } else {
+ /* we should restart elections in case nothing
+ * happens in the meantime */
+ tk->in_election = 0;
ticket_activate_timeout(tk);
}
+ }
+ } else {
+ /* for manual tickets, also try to acquire ticket on grant
+ * in the Follower state (because we may end up having
+ * two Leaders) */
+ if (has_extprog_exited(tk)) {
+ rv = acquire_ticket(tk, OR_ADMIN);
+ if (rv != 0) { /* external program failed */
+ tk->outcome = rv;
+ foreach_tkt_req(tk, notify_client);
+ }
} else {
- /* we should restart elections in case nothing
- * happens in the meantime */
- tk->in_election = 0;
- ticket_activate_timeout(tk);
+ /* Otherwise, just send ACKs if needed */
+ if (tk->acks_expected) {
+ handle_resends(tk);
+ }
}
}
break;
@@ -1010,9 +1118,11 @@
}
/* Has an owner, has an expiry date, and expiry date in the past?
- * Losing the ticket must happen in _every_ state.
+ * For automatic tickets, losing the ticket must happen
+ * in _every_ state.
*/
- if (is_owned(tk) && is_time_set(&tk->term_expires)
+ if ((!is_manual(tk)) &&
+ is_owned(tk) && is_time_set(&tk->term_expires)
&& is_past(&tk->term_expires)) {
ticket_lost(tk);
goto out;
@@ -1159,56 +1269,72 @@
{
timetype near_future, tv, next_vote;
- /* At least every hour, perhaps sooner (default) */
- ticket_next_cron_in(tk, 3600*TIME_RES);
set_future_time(&near_future, 10);
- switch (tk->state) {
- case ST_LEADER:
- assert(tk->leader == local);
-
- get_next_election_time(tk, &next_vote);
+ if (!is_manual(tk)) {
+ /* At least every hour, perhaps sooner (default) */
+ tk_log_debug("ticket will be woken up after up to one hour");
+ ticket_next_cron_in(tk, 3600*TIME_RES);
+
+ switch (tk->state) {
+ case ST_LEADER:
+ assert(tk->leader == local);
+
+ get_next_election_time(tk, &next_vote);
+
+ /* If timestamp is in the past, wakeup in
+ * near future */
+ if (!is_time_set(&next_vote)) {
+ tk_log_debug("next ts unset, wakeup soon");
+ ticket_next_cron_at(tk, &near_future);
+ } else if (is_past(&next_vote)) {
+ int tdiff = time_left(&next_vote);
+ tk_log_debug("next ts in the past " intfmt(tdiff));
+ ticket_next_cron_at(tk, &near_future);
+ } else {
+ ticket_next_cron_at(tk, &next_vote);
+ }
+ break;
- /* If timestamp is in the past, wakeup in
- * near future */
- if (!is_time_set(&next_vote)) {
- tk_log_debug("next ts unset, wakeup soon");
- ticket_next_cron_at(tk, &near_future);
- } else if (is_past(&next_vote)) {
- int tdiff = time_left(&next_vote);
- tk_log_debug("next ts in the past " intfmt(tdiff));
- ticket_next_cron_at(tk, &near_future);
- } else {
- ticket_next_cron_at(tk, &next_vote);
- }
- break;
+ case ST_CANDIDATE:
+ assert(is_time_set(&tk->election_end));
+ ticket_next_cron_at(tk, &tk->election_end);
+ break;
- case ST_CANDIDATE:
- assert(is_time_set(&tk->election_end));
- ticket_next_cron_at(tk, &tk->election_end);
- break;
+ case ST_INIT:
+ case ST_FOLLOWER:
+ /* If there is (or should be) some owner, check on it later on.
+ * If no one is interested - don't care. */
+ if (is_owned(tk)) {
+ interval_add(&tk->term_expires, tk->acquire_after, &tv);
+ ticket_next_cron_at(tk, &tv);
+ }
+ break;
- case ST_INIT:
- case ST_FOLLOWER:
- /* If there is (or should be) some owner, check on it later on.
- * If no one is interested - don't care. */
- if (is_owned(tk)) {
- interval_add(&tk->term_expires, tk->acquire_after, &tv);
- ticket_next_cron_at(tk, &tv);
+ default:
+ tk_log_error("unknown ticket state: %d", tk->state);
}
- break;
- default:
- tk_log_error("unknown ticket state: %d", tk->state);
- }
-
- if (tk->next_state) {
- /* we need to do something soon here */
- if (!tk->acks_expected) {
- ticket_next_cron_at(tk, &near_future);
- } else {
- ticket_activate_timeout(tk);
+ if (tk->next_state) {
+ /* we need to do something soon here */
+ if (!tk->acks_expected) {
+ ticket_next_cron_at(tk, &near_future);
+ } else {
+ ticket_activate_timeout(tk);
+ }
}
+ } else {
+ /* At least six minutes, to make sure that multi-leader situations
+ * will be solved promptly.
+ */
+ tk_log_debug("manual ticket will be woken up after up to six minutes");
+ ticket_next_cron_in(tk, 60*TIME_RES);
+
+ /* For manual tickets, no earlier timeout could be set in a similar
+ * way as it is done in a switch above for automatic tickets.
+ * The reason is that term's timeout is INF and no Raft-based elections
+ * are performed.
+ */
}
if (ANYDEBUG) {
@@ -1229,6 +1355,24 @@
}
+int is_manual(struct ticket_config *tk)
+{
+ return (tk->mode == TICKET_MODE_MANUAL) ? 1 : 0;
+}
+
+int number_sites_marked_as_granted(struct ticket_config *tk)
+{
+ int i, result = 0;
+
+ for(i=0; i<booth_conf->site_count; ++i) {
+ result += tk->sites_where_granted[i];
+ }
+
+ return result;
+}
+
+
+
/* Given a state (in host byte order), return a human-readable (char*).
* An array is used so that multiple states can be printed in a single printf(). */
char *state_to_string(uint32_t state_ho)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/src/ticket.h new/booth-1.0+20171123.d4cb8cb/src/ticket.h
--- old/booth-1.0+20170619.766d618/src/ticket.h 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/src/ticket.h 2017-11-23 14:07:59.000000000 +0100
@@ -39,8 +39,36 @@
#define foreach_node(i_,n_) for(i_=0; (n_=booth_conf->site+i_, i_<booth_conf->site_count); i_++)
#define set_leader(tk, who) do { \
+ if (who == NULL) { \
+ mark_ticket_as_revoked_from_leader(tk); \
+ } \
+ \
tk->leader = who; \
tk_log_debug("ticket leader set to %s", ticket_leader_string(tk)); \
+ \
+ if (tk->leader) { \
+ mark_ticket_as_granted(tk, tk->leader); \
+ } \
+} while(0)
+
+#define mark_ticket_as_granted(tk, who) do { \
+ if (is_manual(tk) && (who->index > -1)) { \
+ tk->sites_where_granted[who->index] = 1; \
+ tk_log_debug("manual ticket marked as granted to %s", ticket_leader_string(tk)); \
+ } \
+} while(0)
+
+#define mark_ticket_as_revoked(tk, who) do { \
+ if (is_manual(tk) && who && (who->index > -1)) { \
+ tk->sites_where_granted[who->index] = 0; \
+ tk_log_debug("manual ticket marked as revoked from %s", site_string(who)); \
+ } \
+} while(0)
+
+#define mark_ticket_as_revoked_from_leader(tk) do { \
+ if (tk->leader) { \
+ mark_ticket_as_revoked(tk, tk->leader); \
+ } \
} while(0)
#define set_state(tk, newst) do { \
@@ -69,6 +97,7 @@
int ticket_recv(void *buf, struct booth_site *source);
void reset_ticket(struct ticket_config *tk);
+void reset_ticket_and_set_no_leader(struct ticket_config *tk);
void update_ticket_state(struct ticket_config *tk, struct booth_site *sender);
int setup_ticket(void);
int check_max_len_valid(const char *s, int max);
@@ -103,6 +132,9 @@
void add_random_delay(struct ticket_config *tk);
void schedule_election(struct ticket_config *tk, cmd_reason_t reason);
+int is_manual(struct ticket_config *tk);
+int number_sites_marked_as_granted(struct ticket_config *tk);
+
int check_attr_prereq(struct ticket_config *tk, grant_type_e grant_type);
static inline void ticket_next_cron_at(struct ticket_config *tk, timetype *when)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/src/transport.c new/booth-1.0+20171123.d4cb8cb/src/transport.c
--- old/booth-1.0+20170619.766d618/src/transport.c 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/src/transport.c 2017-11-23 14:07:59.000000000 +0100
@@ -237,16 +237,38 @@
BOOTH_IPADDR_LEN);
}
- /* First try with exact addresses, then optionally with subnet matching. */
+ /* Try to find the exact address or the address with subnet matching.
+ * The function find_address will be called for each address received
+ * from NLMSG_DATA above.
+ * The exact match will be prefered. If no exact match is found,
+ * the function find_address will try to return another, most similar
+ * address (with the longest possible number of same bytes). */
if (ifa->ifa_prefixlen > address_bits_matched) {
find_address(ipaddr,
ifa->ifa_family, ifa->ifa_prefixlen,
fuzzy_allowed, &me, &address_bits_matched);
+
if (me) {
log_debug("found myself at %s (%d bits matched)",
site_string(me), address_bits_matched);
}
}
+ /* If the previous NLMSG_DATA calls have already allowed us
+ * to find an address with address_bits_matched matching bits,
+ * then no other better non-exact address can bo found.
+ * But we can still try to find an exact match, so let us
+ * call the function find_address with disabled searching of
+ * similar addresses (fuzzy_allowed == 0) */
+ else if (ifa->ifa_prefixlen == address_bits_matched) {
+ find_address(ipaddr,
+ ifa->ifa_family, ifa->ifa_prefixlen,
+ 0 /* fuzzy_allowed */, &me, &address_bits_matched);
+
+ if (me) {
+ log_debug("found myself at %s (exact match)",
+ site_string(me));
+ }
+ }
}
h = NLMSG_NEXT(h, status);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/test/boothrunner.py new/booth-1.0+20171123.d4cb8cb/test/boothrunner.py
--- old/booth-1.0+20170619.766d618/test/boothrunner.py 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/test/boothrunner.py 2017-11-23 14:07:59.000000000 +0100
@@ -31,6 +31,9 @@
def set_debug(self):
self.args += [ '-D' ]
+ def set_foreground(self):
+ self.args += [ '-S' ]
+
def all_args(self):
return [ self.boothd_path ] + self.args + self.final_args
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/test/live_test.sh new/booth-1.0+20171123.d4cb8cb/test/live_test.sh
--- old/booth-1.0+20170619.766d618/test/live_test.sh 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/test/live_test.sh 2017-11-23 14:07:59.000000000 +0100
@@ -287,7 +287,7 @@
local h rc=0
local tmpf
for h in $sites $arbitrators; do
- rsync -q -e "ssh $SSH_OPTS" $cnf root@$h:$run_cnf
+ rsync -q -e "ssh $SSH_OPTS" $1 root@$h:$run_cnf
rc=$((rc|$?))
if [ -n "$authfile" ]; then
tmpf=`mktemp`
@@ -398,6 +398,13 @@
/^ticket.*'$tkt'/ {n=1}
' $cnf
}
+get_mode() {
+ awk '
+n && /^[[:space:]]*mode/ {print $NF; exit}
+n && (/^$/ || /^ticket.*/) {exit}
+/^ticket.*'$tkt'/ {n=1}
+' $cnf
+}
set_site_attr() {
local site
@@ -440,7 +447,7 @@
}
n && (/^$/ || /^ticket.*/) {exit}
/^ticket.*'$tkt'/ {n=1}
-' $cnf
+' $1
}
wait_exp() {
sleep $T_expire
@@ -588,17 +595,25 @@
check_booth_consistency() {
local tlist tlist_validate rc rc_lead maxdiff
tlist=`forall_withname booth list 2>/dev/null | grep $tkt`
- tlist_validate=`echo "$tlist" |
- sed 's/[^:]*: //;s/commit:.*//;s/NONE/none/'`
- maxdiff=`echo "$tlist" | max_booth_time_diff`
- test "$maxdiff" -eq 0
- rc=$?
+
+ # Check time consistency
+ ticket_times=$(echo "$tlist" | booth_list_fld 3)
+ if [[ $ticket_times == *"INF"* ]]; then
+ rc=0
+ else
+ maxdiff=`echo "$tlist" | max_booth_time_diff`
+ test "$maxdiff" -eq 0
+ rc=$?
+ fi
+
+ # Check leader consistency
echo "$tlist" | booth_leader_consistency
rc_lead=$?
if [ $rc_lead -ne 0 ]; then
echo "$tlist" | booth_leader_consistency_2
rc_lead=$(($rc_lead + $?)) # rc_lead=2 if the prev test failed
fi
+
rc=$(($rc | $rc_lead<<1))
test $rc -eq 0 && return
cat<<EOF | logmsg
@@ -668,7 +683,7 @@
TEST=$1
start_time=`date`
start_ts=`date +%s`
- echo -n "Testing: $1... "
+ echo -n "Testing: $1 (ticket: $tkt)... "
can_run_test $1 || return 0
echo "==================================================" | logmsg
echo "starting booth test $1 ..." | logmsg
@@ -706,7 +721,7 @@
esac
end_time=`date`
end_ts=`date +%s`
- echo "finished booth test $1 ($usrmsg)" | logmsg
+ echo "finished booth test $1 ($tkt): $usrmsg" | logmsg
echo "==================================================" | logmsg
is_function recover_$1 && recover_$1
reset_netem_env
@@ -1202,13 +1217,6 @@
: ${port:=9929}
site_cnt=`echo $internal_sites | wc -w`
arbitrator_cnt=`echo $internal_arbitrators | wc -w`
-tkt=`get_tkt < $cnf`
-eval `get_tkt_settings`
-
-MIN_TIMEOUT=`awk -v tm=$T_timeout 'BEGIN{
- if (tm >= 2) print tm;
- else print 2*tm;
- }'`
if [ "$1" = "__netem__" ]; then
shift 1
@@ -1222,15 +1230,6 @@
usage 1
}
-[ -z "$T_expire" ] && {
- echo set $tkt expire time in $cnf
- usage 1
-}
-
-if [ -z "$T_renewal_freq" ]; then
- T_renewal_freq=$((T_expire/2))
-fi
-
exec 2>$logf
BASH_XTRACEFD=2
PS4='+ `date +"%T"`: '
@@ -1244,22 +1243,8 @@
authfile=`get_value authfile < $cnf`
run_site 1 'test -f '"$authfile"' || booth-keygen '"$authfile"
-sync_conf || exit
-reboot_test
-all_booth_status || {
- start_booth
- all_booth_status || {
- echo "some booth servers couldn't be started"
- exit 1
- }
-}
-revoke_ticket
-
-ABSPATH=`get_prog_abspath`
-
-dump_conf | logmsg
-
TESTS="$@"
+MANUAL_TESTS="$@"
: ${TESTS:="grant longgrant grant_noarb grant_elsewhere
grant_site_lost grant_site_reappear revoke
@@ -1268,9 +1253,99 @@
failover split_leader split_follower split_edge
external_prog_failed attr_prereq_ok attr_prereq_fail"}
+: ${MANUAL_TESTS:="grant longgrant grant_noarb grant_elsewhere
+grant_site_lost
+restart_granted reload_granted
+split_leader split_follower split_edge
+ "}
+
+#get total number od lines in the file
+conf_file_size=$(grep -c $ $cnf)
+
+#get line numbers for all tickets
+ticket_line_numbers=$(grep -n ticket $cnf | cut -d: -f1)
+read -a TICKET_LINES<<< $ticket_line_numbers
+
+#save the part of config located before ticket definitions
+sed -n "1,$((${TICKET_LINES[0]}-1))p" $cnf > ${cnf}_main.config
+
+#create a separate file for every ticket data
+number_of_tickets=0
+for i in $(seq 0 1 $((${#TICKET_LINES[@]}-1))); do
+ ticket_line_start=${TICKET_LINES[i]}
+ ticket_line_end=$((${TICKET_LINES[i+1]}-1))
+ if [ ${ticket_line_end} -lt 0 ]; then
+ # for the last ticket
+ ticket_line_end=${conf_file_size}
+ fi
+ sed -n "${ticket_line_start},${ticket_line_end}p" $cnf > ${cnf}_${number_of_tickets}.ticket
+ number_of_tickets=$((number_of_tickets+1))
+done
+
+
master_rc=0 # updated in runtest
-for t in $TESTS; do
- runtest $t
+
+for i in `seq 0 $(($number_of_tickets-1))`
+do
+ cat ${cnf}_main.config > booth_${i}.conf
+ cat ${cnf}_${i}.ticket >> booth_${i}.conf
+
+ tkt=`get_tkt < booth_${i}.conf`
+
+ if [ -z "$tkt" ]; then
+ echo "Skipping empty ticket.."
+ continue
+ fi
+
+ sync_conf booth_${i}.conf || exit
+ reboot_test
+ all_booth_status || {
+ start_booth
+ all_booth_status || {
+ echo "some booth servers couldn't be started"
+ exit 1
+ }
+ }
+
+ ABSPATH=`get_prog_abspath`
+
+ dump_conf | logmsg
+
+
+ eval `get_tkt_settings booth_${i}.conf`
+
+ MIN_TIMEOUT=`awk -v tm=$T_timeout 'BEGIN{
+ if (tm >= 2) print tm;
+ else print 2*tm;
+ }'`
+
+ [ -z "$T_expire" ] && {
+ echo set $tkt expire time in $cnf
+ usage 1
+ }
+
+ if [ -z "$T_renewal_freq" ]; then
+ T_renewal_freq=$((T_expire/2))
+ fi
+
+ revoke_ticket
+
+ T_mode=`get_mode`
+ T_mode_lowercase=$(echo "$T_mode" | tr '[:upper:]' '[:lower:]')
+
+ if [[ $T_mode_lowercase == *"manual"* ]]; then
+ echo "Running tests for manual tickets.."
+
+ for t in $MANUAL_TESTS; do
+ runtest $t
+ done
+ else
+ echo "Running tests for automatic Raft tickets.."
+
+ for t in $TESTS; do
+ runtest $t
+ done
+ fi
done
exit $master_rc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/test/serverenv.py new/booth-1.0+20171123.d4cb8cb/test/serverenv.py
--- old/booth-1.0+20170619.766d618/test/serverenv.py 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/test/serverenv.py 2017-11-23 14:07:59.000000000 +0100
@@ -33,7 +33,7 @@
def run_booth(self, expected_exitcode, expected_daemon,
config_text=None, config_file=None, lock_file=True,
- args=[], debug=False):
+ args=[], debug=False, foreground=False):
'''
Runs boothd. Defaults to using a temporary lock file and the
standard config file path. There are four possible types of
@@ -42,7 +42,7 @@
- boothd exits non-zero without launching a daemon (setup phase failed,
e.g. due to invalid configuration file)
- boothd exits zero after launching a daemon (successful operation)
- - boothd does not exit (running in foreground / debug mode)
+ - boothd does not exit (running in foreground mode)
- boothd does not exit (setup phase hangs, e.g. while attempting
to connect to peer during ticket_catchup())
@@ -61,13 +61,15 @@
an integer, or False if booth is not expected to terminate
within the timeout
expected_daemon
- True iff a daemon is expected to be launched (this includes
- running the server in debug / foreground mode via -D; even
- though in this case the server's not technically not a daemon,
+ True iff a daemon is expected to be launched (this means
+ running the server in foreground mode via -S;
+ even though in this case the server's not technically not a daemon,
we still want to treat it like one by checking the lockfile
before and after we kill it)
debug
True means pass the -D parameter
+ foreground
+ True means pass the -S parameter
Returns a (pid, return_code, stdout, stderr, runner) tuple,
where return_code/stdout/stderr are None iff pid is still running.
@@ -97,6 +99,9 @@
if debug:
runner.set_debug()
+ if foreground:
+ runner.set_foreground()
+
runner.show_args()
(pid, return_code, stdout, stderr) = runner.run()
self.check_return_code(pid, return_code, expected_exitcode)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20170619.766d618/test/servertests.py new/booth-1.0+20171123.d4cb8cb/test/servertests.py
--- old/booth-1.0+20170619.766d618/test/servertests.py 2017-06-19 12:23:29.000000000 +0200
+++ new/booth-1.0+20171123.d4cb8cb/test/servertests.py 2017-11-23 14:07:59.000000000 +0100
@@ -86,6 +86,16 @@
def test_debug_mode(self):
(pid, ret, stdout, stderr, runner) = \
self.run_booth(config_text=self.working_config, debug=True,
+ expected_exitcode=0, expected_daemon=True)
+
+ def test_foreground_mode(self):
+ (pid, ret, stdout, stderr, runner) = \
+ self.run_booth(config_text=self.working_config, foreground=True,
+ expected_exitcode=None, expected_daemon=True)
+
+ def test_debug_and_foreground_mode(self):
+ (pid, ret, stdout, stderr, runner) = \
+ self.run_booth(config_text=self.working_config, debug=True, foreground=True,
expected_exitcode=None, expected_daemon=True)
def test_missing_transport(self):
1
0
Hello community,
here is the log from the commit of package monitoring-plugins-zypper for openSUSE:Factory checked in at 2017-12-01 15:54:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/monitoring-plugins-zypper (Old)
and /work/SRC/openSUSE:Factory/.monitoring-plugins-zypper.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "monitoring-plugins-zypper"
Fri Dec 1 15:54:28 2017 rev:11 rq:547050 version:1.93
Changes:
--------
--- /work/SRC/openSUSE:Factory/monitoring-plugins-zypper/monitoring-plugins-zypper.changes 2017-07-02 13:38:17.662078833 +0200
+++ /work/SRC/openSUSE:Factory/.monitoring-plugins-zypper.new/monitoring-plugins-zypper.changes 2017-12-01 15:55:00.429081219 +0100
@@ -1,0 +2,17 @@
+Fri Nov 24 11:05:40 CET 2017 - ro(a)suse.de
+
+- move restart stuff from post to postun where it belongs
+- use proper macros for systemd restart
+
+-------------------------------------------------------------------
+Tue Oct 10 09:14:23 UTC 2017 - lars(a)linux-schulserver.de
+
+- update to 1.93
+ + remove unsupported openSUSE 42.1 and SLE-10-SP4
+
+-------------------------------------------------------------------
+Tue Jul 25 18:02:13 CEST 2017 - ro(a)suse.de
+
+- use systemctl for try-restart call for apparmor in postinstall
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ monitoring-plugins-zypper.spec ++++++
--- /var/tmp/diff_new_pack.w8HlAg/_old 2017-12-01 15:55:01.201053440 +0100
+++ /var/tmp/diff_new_pack.w8HlAg/_new 2017-12-01 15:55:01.201053440 +0100
@@ -26,7 +26,7 @@
Summary: Check for software updates via zypper
License: BSD-3-Clause
Group: System/Monitoring
-Version: 1.92
+Version: 1.93
Release: 0
Url: http://en.opensuse.org/Monitoring-plugins-zypper
Source0: check_zypper.pl
@@ -111,8 +111,12 @@
%clean
rm -rf %buildroot
-%post
-%{_sysconfdir}/init.d/boot.apparmor try-restart || echo "restarting boot.apparmor failed" >&2
+%postun
+%if %{with_systemd}
+%service_del_postun apparmor.service
+%else
+%{restart_on_update boot.apparmor}
+%endif
%files
%defattr(-,root,root)
++++++ check_zypper.pl ++++++
--- /var/tmp/diff_new_pack.w8HlAg/_old 2017-12-01 15:55:01.285050417 +0100
+++ /var/tmp/diff_new_pack.w8HlAg/_new 2017-12-01 15:55:01.289050273 +0100
@@ -51,7 +51,7 @@
# constants
$PROGNAME = "check_zypper";
-$VERSION = '1.92';
+$VERSION = '1.93';
$DEBUG = 0;
# variables
@@ -93,8 +93,8 @@
0 => 'OK',
);
our %supported_release = (
- 'openSUSE' => [ '42.1', '42.2', '42.3' ],
- 'SLE' => [ '10.4', '11.4', '12.2', '12.3' ],
+ 'openSUSE' => [ '42.2', '42.3' ],
+ 'SLE' => [ '11.4', '12.2', '12.3' ],
'Tumbleweed' => ['2017*'],
);
$opt_w = 'recommended,optional,unsupported,local_package';
1
0
Hello community,
here is the log from the commit of package Photini for openSUSE:Factory checked in at 2017-12-01 15:54:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/Photini (Old)
and /work/SRC/openSUSE:Factory/.Photini.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "Photini"
Fri Dec 1 15:54:26 2017 rev:6 rq:547045 version:2017.12.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/Photini/Photini.changes 2017-10-05 12:02:51.158264577 +0200
+++ /work/SRC/openSUSE:Factory/.Photini.new/Photini.changes 2017-12-01 15:54:47.505546274 +0100
@@ -1,0 +2,10 @@
+Fri Dec 1 10:29:26 UTC 2017 - aloisio(a)gmx.com
+
+- Update to 2017.12.0
+ * Add 'rating' to descriptive tab.
+ * Don't try to upload files over 1 GByte to Flickr.
+ * Fix bug with thembnails of portrait format images.
+
+- Spec cleanup
+
+-------------------------------------------------------------------
Old:
----
Photini-2017.10.0.tar.gz
New:
----
Photini-2017.12.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ Photini.spec ++++++
--- /var/tmp/diff_new_pack.7QUoaE/_old 2017-12-01 15:54:57.737178088 +0100
+++ /var/tmp/diff_new_pack.7QUoaE/_new 2017-12-01 15:54:57.737178088 +0100
@@ -17,12 +17,12 @@
Name: Photini
-Version: 2017.10.0
+Version: 2017.12.0
Release: 0
Summary: Digital photograph metadata (EXIF, IPTC, XMP) editing application
License: GPL-3.0+
Group: Productivity/Graphics/Other
-Url: https://github.com/jim-easterbrook/Photini
+URL: https://github.com/jim-easterbrook/Photini
Source0: https://github.com/jim-easterbrook/Photini/archive/%{version}.tar.gz#/%{nam…
BuildRequires: ImageMagick
BuildRequires: fdupes
@@ -38,7 +38,6 @@
Requires: python3-sip
Requires: python3-six >= 1.5
Requires: typelib(GExiv2)
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildArch: noarch
%description
@@ -73,8 +72,8 @@
%fdupes -s %{buildroot}
%files
-%defattr(-,root,root)
-%doc CHANGELOG.txt LICENSE.txt README.rst
+%doc CHANGELOG.txt README.rst
+%license LICENSE.txt
%{_bindir}/photini
%{python3_sitelib}/%{name}-%{version}-py%{py3_ver}.egg-info
%{python3_sitelib}/photini
++++++ Photini-2017.10.0.tar.gz -> Photini-2017.12.0.tar.gz ++++++
++++ 7499 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package pam_ssh for openSUSE:Factory checked in at 2017-12-01 15:54:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pam_ssh (Old)
and /work/SRC/openSUSE:Factory/.pam_ssh.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pam_ssh"
Fri Dec 1 15:54:24 2017 rev:30 rq:547009 version:2.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/pam_ssh/pam_ssh.changes 2015-06-11 09:10:39.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.pam_ssh.new/pam_ssh.changes 2017-12-01 15:54:40.537797009 +0100
@@ -1,0 +2,14 @@
+Fri Dec 1 10:02:21 UTC 2017 - dimstar(a)opensuse.org
+
+- Explicitly call autoreconf: an implicit call requires the same
+ version automake/autoconf to be present that was used to
+ originally bootstrap the tarball (version 1.13).
+
+-------------------------------------------------------------------
+Thu Nov 30 14:52:54 UTC 2017 - vcizek(a)suse.com
+
+- Add support for building with OpenSSL 1.1 (bsc#1066988)
+ * partly based on https://github.com/openssh/openssh-portable/pull/48
+ * add pam_ssh-openssl11.patch
+
+-------------------------------------------------------------------
New:
----
pam_ssh-openssl11.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ pam_ssh.spec ++++++
--- /var/tmp/diff_new_pack.lUCmH5/_old 2017-12-01 15:54:41.081777434 +0100
+++ /var/tmp/diff_new_pack.lUCmH5/_new 2017-12-01 15:54:41.081777434 +0100
@@ -1,7 +1,7 @@
#
# spec file for package pam_ssh
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -27,6 +27,7 @@
Source1: http://sourceforge.net/projects/pam-ssh/files/pam_ssh/%{version}/%{name}-%{…
Source2: baselibs.conf
Source3: %{name}.keyring
+Patch1: pam_ssh-openssl11.patch
BuildRequires: libtool
BuildRequires: openssh
BuildRequires: openssl-devel
@@ -42,8 +43,13 @@
%prep
%setup -q
+if pkg-config --atleast-version=1.1 openssl; then
+%patch1 -p1
+fi
%build
+# Needed for patch1, but does not hurt in non-patched cases
+autoreconf -fiv
export CFLAGS="%{optflags} -fno-strict-aliasing"
%configure --libdir=/%{_lib}
make %{?_smp_mflags}
++++++ pam_ssh-openssl11.patch ++++++
++++ 1277 lines (skipped)
1
0