Hello community, here is the log from the commit of package yast2-ntp-client for openSUSE:Factory checked in at 2019-10-16 09:11:45 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/yast2-ntp-client (Old) and /work/SRC/openSUSE:Factory/.yast2-ntp-client.new.2352 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-ntp-client" Wed Oct 16 09:11:45 2019 rev:115 rq:738617 version:4.2.5 Changes: -------- --- /work/SRC/openSUSE:Factory/yast2-ntp-client/yast2-ntp-client.changes 2019-10-03 14:07:01.200476816 +0200 +++ /work/SRC/openSUSE:Factory/.yast2-ntp-client.new.2352/yast2-ntp-client.changes 2019-10-16 09:11:46.588010162 +0200 @@ -1,0 +2,6 @@ +Mon Oct 14 18:20:17 UTC 2019 - Josef Reidinger <jreidin...@suse.com> + +- switch from cron to systemd timers (jsc#SLE-9113) +- 4.2.5 + +------------------------------------------------------------------- Old: ---- yast2-ntp-client-4.2.4.tar.bz2 New: ---- yast2-ntp-client-4.2.5.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ yast2-ntp-client.spec ++++++ --- /var/tmp/diff_new_pack.8xJAvA/_old 2019-10-16 09:11:47.016009059 +0200 +++ /var/tmp/diff_new_pack.8xJAvA/_new 2019-10-16 09:11:47.020009049 +0200 @@ -17,7 +17,7 @@ Name: yast2-ntp-client -Version: 4.2.4 +Version: 4.2.5 Release: 0 Summary: YaST2 - NTP Client Configuration License: GPL-2.0-or-later @@ -28,10 +28,11 @@ BuildRequires: augeas-lenses BuildRequires: autoyast2-installation -# Needed for /etc/cron.* ownership; those directories have special permission handling -BuildRequires: cron BuildRequires: perl-XML-Writer BuildRequires: update-desktop-files +# need as it own /usr/lib/systemd and for systemd macros +BuildRequires: systemd-rpm-macros +%{?systemd_requires} # cwm/popup BuildRequires: yast2 >= 4.1.15 BuildRequires: yast2-country-data @@ -71,12 +72,32 @@ %yast_metainfo %post +%service_add_post yast-timesync.service + # upgrade old name and convert it to chrony (bsc#1079122) if [ -f /etc/cron.d/novell.ntp-synchronize ]; then mv /etc/cron.d/novell.ntp-synchronize /etc/cron.d/suse-ntp_synchronize sed -i 's:\* \* \* \* root .*:* * * * root /usr/sbin/chronyd -q \&>/dev/null:' /etc/cron.d/suse-ntp_synchronize fi +# and now update cron to systemd timer. We need to support upgrade from SLE12 and also SLE15 SP1. +# jsc#SLE-9113 +if [ -f /etc/cron.d/suse-ntp_synchronize ]; then + /usr/bin/erb timeout=$(grep -o '[[:digit:]]\+' /etc/cron.d/suse-ntp_synchronize) /usr/share/YaST2/data/yast-timesync.timer.erb > /etc/systemd/system/yast-timesync.timer + /bin/systemctl enable yast-timesync.timer + /bin/systemctl start yast-timesync.timer + rm /etc/cron.d/suse-ntp_synchronize +fi + +%pre +%service_add_pre yast-timesync.service + +%postun +%service_del_postun yast-timesync.service + +%preun +%service_del_preun yast-timesync.service + %files %{yast_clientdir} %{yast_libdir} @@ -86,8 +107,8 @@ %{yast_metainfodir} %{yast_ydatadir} %{yast_schemadir} -%ghost %{_sysconfdir}/cron.d/suse-ntp_synchronize %{yast_icondir} +%{_unitdir}/yast-timesync.service %license COPYING %doc %{yast_docdir} ++++++ yast2-ntp-client-4.2.4.tar.bz2 -> yast2-ntp-client-4.2.5.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/.rubocop.yml new/yast2-ntp-client-4.2.5/.rubocop.yml --- old/yast2-ntp-client-4.2.4/.rubocop.yml 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/.rubocop.yml 2019-10-15 15:02:57.000000000 +0200 @@ -1,6 +1,6 @@ # use the shared Yast defaults inherit_from: - /usr/share/YaST2/data/devtools/data/rubocop_yast_style.yml + /usr/share/YaST2/data/devtools/data/rubocop-0.71.0_yast_style.yml Metrics/AbcSize: Max: 129 @@ -73,7 +73,7 @@ Include: - 'src/lib/**/*.rb' # force well documented code only for new code -Style/FileName: +Naming/FileName: Include: - 'src/lib/**/*.rb' # force correct names on new code @@ -81,14 +81,22 @@ Style/Lambda: Enabled: false -Style/MethodName: +Naming/MethodName: Include: - 'src/lib/**/*.rb' # force correct names on new code -Style/VariableName: +Naming/VariableName: Include: - 'src/lib/**/*.rb' # force known variables only for new code # method_alias is safer and more predictable Style/Alias: EnforcedStyle: prefer_alias_method + +# this needs more testing if we can have frozen string literals +Style/FrozenStringLiteralComment: + Enabled: false + +Metrics/BlockLength: + Exclude: + - "test/**/*" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/Rakefile new/yast2-ntp-client-4.2.5/Rakefile --- old/yast2-ntp-client-4.2.4/Rakefile 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/Rakefile 2019-10-15 15:02:57.000000000 +0200 @@ -3,4 +3,6 @@ Yast::Tasks.configuration do |conf| # lets ignore license check for now conf.skip_license_check << /.*/ + conf.install_locations["src/systemd/*"] = + Packaging::Configuration::DESTDIR + "/usr/lib/systemd/system/" end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/package/yast2-ntp-client.changes new/yast2-ntp-client-4.2.5/package/yast2-ntp-client.changes --- old/yast2-ntp-client-4.2.4/package/yast2-ntp-client.changes 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/package/yast2-ntp-client.changes 2019-10-15 15:02:57.000000000 +0200 @@ -1,4 +1,10 @@ ------------------------------------------------------------------- +Mon Oct 14 18:20:17 UTC 2019 - Josef Reidinger <jreidin...@suse.com> + +- switch from cron to systemd timers (jsc#SLE-9113) +- 4.2.5 + +------------------------------------------------------------------- Wed Oct 2 11:42:34 UTC 2019 - Josef Reidinger <jreidin...@suse.com> - implement starting chrony-wait only if product require it diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/package/yast2-ntp-client.spec new/yast2-ntp-client-4.2.5/package/yast2-ntp-client.spec --- old/yast2-ntp-client-4.2.4/package/yast2-ntp-client.spec 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/package/yast2-ntp-client.spec 2019-10-15 15:02:57.000000000 +0200 @@ -17,7 +17,7 @@ Name: yast2-ntp-client -Version: 4.2.4 +Version: 4.2.5 Release: 0 Summary: YaST2 - NTP Client Configuration License: GPL-2.0-or-later @@ -28,10 +28,11 @@ BuildRequires: augeas-lenses BuildRequires: autoyast2-installation -# Needed for /etc/cron.* ownership; those directories have special permission handling -BuildRequires: cron BuildRequires: perl-XML-Writer BuildRequires: update-desktop-files +# need as it own /usr/lib/systemd and for systemd macros +BuildRequires: systemd-rpm-macros +%{?systemd_requires} # cwm/popup BuildRequires: yast2 >= 4.1.15 BuildRequires: yast2-country-data @@ -71,12 +72,32 @@ %yast_metainfo %post +%service_add_post yast-timesync.service + # upgrade old name and convert it to chrony (bsc#1079122) if [ -f /etc/cron.d/novell.ntp-synchronize ]; then mv /etc/cron.d/novell.ntp-synchronize /etc/cron.d/suse-ntp_synchronize sed -i 's:\* \* \* \* root .*:* * * * root /usr/sbin/chronyd -q \&>/dev/null:' /etc/cron.d/suse-ntp_synchronize fi +# and now update cron to systemd timer. We need to support upgrade from SLE12 and also SLE15 SP1. +# jsc#SLE-9113 +if [ -f /etc/cron.d/suse-ntp_synchronize ]; then + /usr/bin/erb timeout=$(grep -o '[[:digit:]]\+' /etc/cron.d/suse-ntp_synchronize) /usr/share/YaST2/data/yast-timesync.timer.erb > /etc/systemd/system/yast-timesync.timer + /bin/systemctl enable yast-timesync.timer + /bin/systemctl start yast-timesync.timer + rm /etc/cron.d/suse-ntp_synchronize +fi + +%pre +%service_add_pre yast-timesync.service + +%postun +%service_del_postun yast-timesync.service + +%preun +%service_del_preun yast-timesync.service + %files %{yast_clientdir} %{yast_libdir} @@ -86,8 +107,8 @@ %{yast_metainfodir} %{yast_ydatadir} %{yast_schemadir} -%ghost %{_sysconfdir}/cron.d/suse-ntp_synchronize %{yast_icondir} +%{_unitdir}/yast-timesync.service %license COPYING %doc %{yast_docdir} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/clients/ntp-client.rb new/yast2-ntp-client-4.2.5/src/clients/ntp-client.rb --- old/yast2-ntp-client-4.2.4/src/clients/ntp-client.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/clients/ntp-client.rb 2019-10-15 15:02:57.000000000 +0200 @@ -1,9 +1,7 @@ -# encoding: utf-8 - -# File: clients/ntp-client.ycp -# Package: Configuration of ntp-client -# Summary: Main file -# Authors: Jiri Srain <jsr...@suse.cz> +# File: clients/ntp-client.ycp +# Package: Configuration of ntp-client +# Summary: Main file +# Authors: Jiri Srain <jsr...@suse.cz> # # $Id$ # @@ -52,6 +50,7 @@ ret = NtpClientSequence() return ret if Yast::Stage.firstboot return false if ret == :abort || ret == :back || ret.nil? + true end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/clients/ntp-client_auto.rb new/yast2-ntp-client-4.2.5/src/clients/ntp-client_auto.rb --- old/yast2-ntp-client-4.2.4/src/clients/ntp-client_auto.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/clients/ntp-client_auto.rb 2019-10-15 15:02:57.000000000 +0200 @@ -1,5 +1,3 @@ -# encoding: utf-8 - require "yast" require "y2ntp_client/client/auto" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/clients/ntp-client_finish.rb new/yast2-ntp-client-4.2.5/src/clients/ntp-client_finish.rb --- old/yast2-ntp-client-4.2.4/src/clients/ntp-client_finish.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/clients/ntp-client_finish.rb 2019-10-15 15:02:57.000000000 +0200 @@ -1,5 +1,3 @@ -# encoding: utf-8 - require "y2ntp_client/client/finish" Y2NtpClient::Client::Finish.run diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/clients/ntp-client_proposal.rb new/yast2-ntp-client-4.2.5/src/clients/ntp-client_proposal.rb --- old/yast2-ntp-client-4.2.4/src/clients/ntp-client_proposal.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/clients/ntp-client_proposal.rb 2019-10-15 15:02:57.000000000 +0200 @@ -1,5 +1,3 @@ -# encoding: utf-8 - require "yast" module Yast @@ -139,9 +137,8 @@ UI.ChangeWidget(Id(:ntp_now), :Enabled, enabled) end UI.ChangeWidget(Id(:ntp_save), :Enabled, enabled) - if UI.WidgetExists(Id(:ntp_configure)) # bnc#483787 - UI.ChangeWidget(Id(:ntp_configure), :Enabled, enabled) - end + # bnc#483787 + UI.ChangeWidget(Id(:ntp_configure), :Enabled, enabled) if UI.WidgetExists(Id(:ntp_configure)) nil end @@ -204,10 +201,10 @@ nil end + # @param [Yast::Term] replace_point id of replace point which should be used # @param [Boolean] first_time when asking for first time, we check if service is running # @return should our radio button be selected - def ui_init(rp, first_time) - rp = deep_copy(rp) + def ui_init(replace_point, first_time) cont = VBox( VSpacing(0.5), HBox( @@ -272,14 +269,14 @@ ) ) - UI.ReplaceWidget(rp, cont) + UI.ReplaceWidget(replace_point, cont) UI.ChangeWidget(Id(:ntp_now), :Enabled, false) if !NetworkService.isNetworkRunning # ^ createui0 # FIXME: is it correct? move out? - ntp_used = first_time && !Stage.initial ? GetNTPEnabled() : NtpClient.ntp_selected + ntp_used = (first_time && !Stage.initial) ? GetNTPEnabled() : NtpClient.ntp_selected UI.ChangeWidget(Id(:ntp_save), :Value, ntp_used) @@ -305,7 +302,7 @@ # Writes configuration for ntp client. # @param ntp_servers [Array<String>] list of servers to configure as ntp sync sources # @param ntp_server [String] fallback server that is used if `ntp_servers` param is empty. - # @param run_service [Boolean] define if synchronize with systemd services or via cron sync + # @param run_service [Boolean] define if synchronize with systemd services or via systemd timer # @return true def WriteNtpSettings(ntp_servers, ntp_server, run_service) ntp_servers = deep_copy(ntp_servers) @@ -383,9 +380,10 @@ end # ui = UI::UserInput - def ui_handle(ui) + def ui_handle(input) redraw = false - if ui == :ntp_configure + case input + when :ntp_configure rv = AskUser() if rv == :invalid_hostname handle_invalid_hostname( @@ -395,8 +393,7 @@ # show the 'save' status after configuration UI.ChangeWidget(Id(:ntp_save), :Value, GetNTPEnabled()) end - end - if ui == :ntp_now + when :ntp_now rv = Write("ntpdate_only" => true) if rv == :invalid_hostname handle_invalid_hostname(UI.QueryWidget(Id(:ntp_address), :Value)) @@ -405,10 +402,9 @@ else Report.Error(_("Connection to selected NTP server failed.")) end - end - if ui == :accept && Stage.initial + when :accept # checking if chrony is available for installation. - if UI.QueryWidget(Id(:ntp_save), :Value) == true && + if Stage.initial && UI.QueryWidget(Id(:ntp_save), :Value) == true && !Pkg.IsAvailable(NtpClientClass::REQUIRED_PACKAGE) Report.Error(Builtins.sformat( # TRANSLATORS: Popup message. %1 is the missing package name. @@ -427,12 +423,8 @@ argmap = {} Ops.set(argmap, "ntpdate_only", false) Ops.set(argmap, "run_service", false) - if UI.QueryWidget(Id(:ntp_save), :Value) == false - Ops.set(argmap, "ntpdate_only", true) - end - if UI.QueryWidget(Id(:run_service), :Value) == true - Ops.set(argmap, "run_service", true) - end + Ops.set(argmap, "ntpdate_only", true) if UI.QueryWidget(Id(:ntp_save), :Value) == false + Ops.set(argmap, "run_service", true) if UI.QueryWidget(Id(:run_service), :Value) == true rv = Write(argmap) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/data/yast-timesync.timer.erb new/yast2-ntp-client-4.2.5/src/data/yast-timesync.timer.erb --- old/yast2-ntp-client-4.2.4/src/data/yast-timesync.timer.erb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-ntp-client-4.2.5/src/data/yast-timesync.timer.erb 2019-10-15 15:02:57.000000000 +0200 @@ -0,0 +1,7 @@ +[Timer] +# first sync after boot +OnBootSec=1min +OnUnitActiveSec=<%= timeout %>min + +[Install] +WantedBy=timers.target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/include/ntp-client/commandline.rb new/yast2-ntp-client-4.2.5/src/include/ntp-client/commandline.rb --- old/yast2-ntp-client-4.2.4/src/include/ntp-client/commandline.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/include/ntp-client/commandline.rb 2019-10-15 15:02:57.000000000 +0200 @@ -1,9 +1,7 @@ -# encoding: utf-8 - -# File: clients/ntp-client.ycp -# Package: Configuration of ntp-client -# Summary: Main file -# Authors: Jiri Srain <jsr...@suse.cz> +# File: clients/ntp-client.ycp +# Package: Configuration of ntp-client +# Summary: Main file +# Authors: Jiri Srain <jsr...@suse.cz> # # $Id$ # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/include/ntp-client/dialogs.rb new/yast2-ntp-client-4.2.5/src/include/ntp-client/dialogs.rb --- old/yast2-ntp-client-4.2.4/src/include/ntp-client/dialogs.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/include/ntp-client/dialogs.rb 2019-10-15 15:02:57.000000000 +0200 @@ -1,9 +1,7 @@ -# encoding: utf-8 - -# File: clients/ntp-client.ycp -# Package: Configuration of ntp-client -# Summary: Main file -# Authors: Jiri Srain <jsr...@suse.cz> +# File: clients/ntp-client.ycp +# Package: Configuration of ntp-client +# Summary: Main file +# Authors: Jiri Srain <jsr...@suse.cz> # # $Id$ # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/include/ntp-client/helps.rb new/yast2-ntp-client-4.2.5/src/include/ntp-client/helps.rb --- old/yast2-ntp-client-4.2.4/src/include/ntp-client/helps.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/include/ntp-client/helps.rb 2019-10-15 15:02:57.000000000 +0200 @@ -1,9 +1,7 @@ -# encoding: utf-8 - -# File: include/ntp-client/helps.ycp -# Package: Configuration of ntp-client -# Summary: Help texts of all the dialogs -# Authors: Jiri Srain <jsr...@suse.cz> +# File: include/ntp-client/helps.ycp +# Package: Configuration of ntp-client +# Summary: Help texts of all the dialogs +# Authors: Jiri Srain <jsr...@suse.cz> # # $Id$ module Yast diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/include/ntp-client/misc.rb new/yast2-ntp-client-4.2.5/src/include/ntp-client/misc.rb --- old/yast2-ntp-client-4.2.4/src/include/ntp-client/misc.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/include/ntp-client/misc.rb 2019-10-15 15:02:57.000000000 +0200 @@ -1,9 +1,7 @@ -# encoding: utf-8 - -# File: include/ntp-client/misc.ycp -# Package: Configuration of ntp-client -# Summary: Miscelanous functions for configuration of ntp-client. -# Authors: Jiri Srain <jsr...@suse.cz> +# File: include/ntp-client/misc.ycp +# Package: Configuration of ntp-client +# Summary: Miscelanous functions for configuration of ntp-client. +# Authors: Jiri Srain <jsr...@suse.cz> # # $Id$ module Yast diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/include/ntp-client/wizards.rb new/yast2-ntp-client-4.2.5/src/include/ntp-client/wizards.rb --- old/yast2-ntp-client-4.2.4/src/include/ntp-client/wizards.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/include/ntp-client/wizards.rb 2019-10-15 15:02:57.000000000 +0200 @@ -1,9 +1,7 @@ -# encoding: utf-8 - -# File: include/ntp-client/wizards.ycp -# Package: Configuration of ntp-client -# Summary: Wizards definitions -# Authors: Jiri Srain <jsr...@suse.cz> +# File: include/ntp-client/wizards.ycp +# Package: Configuration of ntp-client +# Summary: Wizards definitions +# Authors: Jiri Srain <jsr...@suse.cz> # # $Id$ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/lib/cfa/chrony_conf.rb new/yast2-ntp-client-4.2.5/src/lib/cfa/chrony_conf.rb --- old/yast2-ntp-client-4.2.4/src/lib/cfa/chrony_conf.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/lib/cfa/chrony_conf.rb 2019-10-15 15:02:57.000000000 +0200 @@ -39,14 +39,14 @@ options = default_pool_options if options == :default # if there is already pool entry, place it after, if not, try use comment existing_pools = pure_pools - if existing_pools.empty? + matcher = if existing_pools.empty? # for now first chrony have pools under comment mentioning pool.ntp.org # so try to place it below - matcher = Matcher.new { |k, v| k.start_with?("#comment") && v =~ /www\.pool\.ntp\.org/ } + Matcher.new { |k, v| k.start_with?("#comment") && v =~ /www\.pool\.ntp\.org/ } else # place after the last pool available - matcher = Matcher.new(key: existing_pools.last[:key], - value_matcher: existing_pools.last[:value]) + Matcher.new(key: existing_pools.last[:key], + value_matcher: existing_pools.last[:value]) end placer = AfterPlacer.new(matcher) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/lib/y2ntp_client/client/auto.rb new/yast2-ntp-client-4.2.5/src/lib/y2ntp_client/client/auto.rb --- old/yast2-ntp-client-4.2.4/src/lib/y2ntp_client/client/auto.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/lib/y2ntp_client/client/auto.rb 2019-10-15 15:02:57.000000000 +0200 @@ -1,5 +1,3 @@ -# encoding: utf-8 - require "yast" require "installation/auto_client" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/lib/y2ntp_client/client/finish.rb new/yast2-ntp-client-4.2.5/src/lib/y2ntp_client/client/finish.rb --- old/yast2-ntp-client-4.2.4/src/lib/y2ntp_client/client/finish.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/lib/y2ntp_client/client/finish.rb 2019-10-15 15:02:57.000000000 +0200 @@ -1,5 +1,3 @@ -# encoding: utf-8 - require "yast" require "installation/finish_client" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/lib/y2ntp_client/dialog/add_pool.rb new/yast2-ntp-client-4.2.5/src/lib/y2ntp_client/dialog/add_pool.rb --- old/yast2-ntp-client-4.2.4/src/lib/y2ntp_client/dialog/add_pool.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/lib/y2ntp_client/dialog/add_pool.rb 2019-10-15 15:02:57.000000000 +0200 @@ -51,6 +51,7 @@ def next_handler return :cancel if @pool_chooser.value.to_s.empty? + @address = @pool_chooser.value :next @@ -77,7 +78,7 @@ end def available_pools - { local: Widgets::LocalList, public: Widgets::PublicList } + { local: Widgets::LocalList, public: Widgets::PublicList } end def pool_for(type) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/lib/y2ntp_client/dialog/main.rb new/yast2-ntp-client-4.2.5/src/lib/y2ntp_client/dialog/main.rb --- old/yast2-ntp-client-4.2.4/src/lib/y2ntp_client/dialog/main.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/lib/y2ntp_client/dialog/main.rb 2019-10-15 15:02:57.000000000 +0200 @@ -56,6 +56,7 @@ def abort_button return Yast::Label.CancelButton unless installation? + nil end @@ -72,11 +73,13 @@ def back_button return "" unless installation? + nil end def next_button return Yast::Label.OKButton unless installation? + nil end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/lib/y2ntp_client/widgets/main_widgets.rb new/yast2-ntp-client-4.2.5/src/lib/y2ntp_client/widgets/main_widgets.rb --- old/yast2-ntp-client-4.2.4/src/lib/y2ntp_client/widgets/main_widgets.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/lib/y2ntp_client/widgets/main_widgets.rb 2019-10-15 15:02:57.000000000 +0200 @@ -26,10 +26,10 @@ def help # TRANSLATORS: configuration source combo box help, %{manual} is a # manual page reference, e.g. "man 8 netconfig" - _("<p>The NTP configuration may be provided by the local network over DHCP. " \ + format(_("<p>The NTP configuration may be provided by the local network over DHCP. " \ "<b>Configuration Source</b> can simply enable or disable using that configuration. " \ "In cases where there may be multiple DHCP sources, it can prioritize them: " \ - "see '%{manual}'.</p>") % { manual: "man 8 netconfig" } + "see '%{manual}'.</p>"), manual: "man 8 netconfig") end def opt @@ -44,9 +44,7 @@ ["auto", _("Dynamic")] ] current_policy = Yast::NtpClient.ntp_policy - if !["", "auto"].include?(current_policy) - items << [current_policy, current_policy] - end + items << [current_policy, current_policy] if !["", "auto"].include?(current_policy) items end @@ -114,7 +112,7 @@ end def handle - widget = value == "sync" ? SyncInterval.new : CWM::Empty.new("empty_interval") + widget = (value == "sync") ? SyncInterval.new : CWM::Empty.new("empty_interval") @replace_point.replace(widget) nil diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/lib/y2ntp_client/widgets/pool_widgets.rb new/yast2-ntp-client-4.2.5/src/lib/y2ntp_client/widgets/pool_widgets.rb --- old/yast2-ntp-client-4.2.4/src/lib/y2ntp_client/widgets/pool_widgets.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/lib/y2ntp_client/widgets/pool_widgets.rb 2019-10-15 15:02:57.000000000 +0200 @@ -395,6 +395,7 @@ def ntp_servers servers = Yast::NtpClient.GetNtpServers return servers if @country.to_s.empty? + servers.find_all { |_s, v| v["country"] == @country } end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/modules/NtpClient.rb new/yast2-ntp-client-4.2.5/src/modules/NtpClient.rb --- old/yast2-ntp-client-4.2.4/src/modules/NtpClient.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/src/modules/NtpClient.rb 2019-10-15 15:02:57.000000000 +0200 @@ -1,9 +1,7 @@ -# encoding: utf-8 - -# File: modules/NtpClient.ycp -# Package: Configuration of ntp-client -# Summary: Data for configuration of ntp-client, input and output functions. -# Authors: Jiri Srain <jsr...@suse.cz> +# File: modules/NtpClient.ycp +# Package: Configuration of ntp-client +# Summary: Data for configuration of ntp-client, input and output functions. +# Authors: Jiri Srain <jsr...@suse.cz> # # $Id$ # @@ -14,6 +12,8 @@ require "cfa/chrony_conf" require "yast2/target_file" # required to cfa work on changed scr require "ui/text_helpers" +require "erb" +require "yast2/systemctl" module Yast class NtpClientClass < Module @@ -21,7 +21,7 @@ include ::UI::TextHelpers # the default synchronization interval in minutes when running in the manual - # sync mode ("Synchronize without Daemon" option, ntp started from cron) + # sync mode ("Synchronize without Daemon" option, ntp started from systemd timer) # Note: the UI field currently uses maximum of 60 minutes DEFAULT_SYNC_INTERVAL = 5 @@ -35,8 +35,9 @@ NTP_FILE = "/etc/chrony.conf".freeze - # The cron file name for the synchronization. - CRON_FILE = "/etc/cron.d/suse-ntp_synchronize".freeze + TIMER_FILE = "yast-timesync.timer".freeze + # The file name of systemd timer for the synchronization. + TIMER_PATH = "/etc/systemd/system/#{TIMER_FILE}".freeze UNSUPPORTED_AUTOYAST_OPTIONS = [ "configure_dhcp", @@ -137,7 +138,7 @@ # CFA instance for reading/writing /etc/chrony.conf def ntp_conf - @chrony_conf ||= CFA::ChronyConf.new + @ntp_conf ||= CFA::ChronyConf.new end # Abort function @@ -148,6 +149,7 @@ def go_next return false if Abort() + Progress.NextStage if progress? true end @@ -282,15 +284,14 @@ # synchronize_time and sync_interval variables # Return updated value of synchronize_time def ReadSynchronization - crontab = SCR.Read(path(".cron"), CRON_FILE, "") - log.info("NTP Synchronization crontab entry: #{crontab}") - cron_entry = (crontab || []).fetch(0, {}).fetch("events", []).fetch(0, {}) - @synchronize_time = cron_entry["active"] == "1" + return false unless ::File.exist?(TIMER_PATH) - sync_interval_entry = cron_entry.fetch("minute", "*/#{DEFAULT_SYNC_INTERVAL}") - log.info("MINUTE #{sync_interval_entry}") + timer_content = ::File.read(TIMER_PATH) + log.info("NTP Synchronization timer entry: #{timer_content}") + @synchronize_time = Yast2::Systemctl.execute("is-active #{TIMER_FILE}").exit.zero? - @sync_interval = sync_interval_entry.tr("^[0-9]", "").to_i + interval = timer_content[/^\s*OnUnitActiveSec\s*=\s*(\d+)m/, 1] + @sync_interval = interval.to_i if interval log.info("SYNC_INTERVAL #{@sync_interval}") @synchronize_time @@ -332,9 +333,11 @@ ReadSynchronization() return false if !go_next + Progress.Title(_("Finished")) if progress? return false if Abort() + @modified = false true end @@ -364,7 +367,7 @@ check_service - update_cron_settings + update_timer_settings return false if !go_next @@ -838,19 +841,34 @@ end end - # If synchronize time has been enable it writes ntp cron entry for manual - # sync. If not it removes current cron entry if exists. - def update_cron_settings + def timer_content + erb_template = ::File.read(Directory.find_data_file("#{TIMER_FILE}.erb")) + content = ERB.new(erb_template) + timeout = @sync_interval + content.result(binding) + end + + # If synchronize time has been enable it writes systemd timer entry for manual + # sync. If not it removes current systemd timer entry if exists. + def update_timer_settings if @synchronize_time SCR.Write( path(".target.string"), - CRON_FILE, - "-*/#{@sync_interval} * * * * root /usr/sbin/chronyd -q &>/dev/null\n" + TIMER_PATH, + timer_content ) + res = Yast2::Systemctl.execute("enable #{TIMER_FILE}") + log.info "enable timer: #{res.inspect}" + res = Yast2::Systemctl.execute("start #{TIMER_FILE}") + log.info "start timer: #{res.inspect}" else + res = Yast2::Systemctl.execute("disable #{TIMER_FILE}") + log.info "disable timer: #{res.inspect}" + res = Yast2::Systemctl.execute("stop #{TIMER_FILE}") + log.info "stop timer: #{res.inspect}" SCR.Execute( path(".target.bash"), - "rm -vf #{CRON_FILE}" + "rm -vf #{TIMER_PATH}" ) end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/src/systemd/yast-timesync.service new/yast2-ntp-client-4.2.5/src/systemd/yast-timesync.service --- old/yast2-ntp-client-4.2.4/src/systemd/yast-timesync.service 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-ntp-client-4.2.5/src/systemd/yast-timesync.service 2019-10-15 15:02:57.000000000 +0200 @@ -0,0 +1,13 @@ +[Unit] +Description=One time sync configured by YaST +DefaultDependencies=no +# one time sync cannot be done if chrony server runs +Conflicts=chronyd.service +RefuseManualStart=false + +[Service] +Type=oneshot +StandardError=tty +StandardOutput=tty +RemainAfterExit=no +ExecStart=/usr/bin/systemd-cat -t yast-timesync -- /usr/sbin/chronyd -q diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/test/cfa/chrony_conf_test.rb new/yast2-ntp-client-4.2.5/test/cfa/chrony_conf_test.rb --- old/yast2-ntp-client-4.2.4/test/cfa/chrony_conf_test.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/test/cfa/chrony_conf_test.rb 2019-10-15 15:02:57.000000000 +0200 @@ -3,7 +3,7 @@ require "cfa/chrony_conf" def ntp_disk_content - path = File.expand_path("../../fixtures/cfa/chrony.conf.original", __FILE__) + path = File.expand_path("../fixtures/cfa/chrony.conf.original", __dir__) File.read(path) end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/test/ntp_client_test.rb new/yast2-ntp-client-4.2.5/test/ntp_client_test.rb --- old/yast2-ntp-client-4.2.4/test/ntp_client_test.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/test/ntp_client_test.rb 2019-10-15 15:02:57.000000000 +0200 @@ -111,7 +111,7 @@ describe "#Export" do let(:profile_name) { "autoinst.xml" } let(:ntp_conf) do - path = File.expand_path("../fixtures/cfa/chrony.conf", __FILE__) + path = File.expand_path("fixtures/cfa/chrony.conf", __dir__) text = File.read(path) file = CFA::MemoryFile.new(text) CFA::ChronyConf.new(file_handler: file) @@ -338,8 +338,8 @@ end end - it "updates cron settings" do - expect(subject).to receive(:update_cron_settings) + it "updates systemd timer settings" do + expect(subject).to receive(:update_timer_settings) subject.Write end @@ -437,23 +437,27 @@ end describe "#ReadSynchronization" do - let(:cron_job_file) { "/etc/cron.d/suse-ntp_synchronize" } - let(:cron_entry) { [] } + let(:systemd_timer_file) { "/etc/systemd/system/yast-timesync.timer" } + let(:timer_content) { "" } before do - allow(Yast::SCR).to receive(:Read) - .with(Yast::Path.new(".cron"), cron_job_file, "").and_return(cron_entry) + allow(::File).to receive(:exist?).and_call_original + allow(::File).to receive(:exist?).with("/etc/systemd/system/yast-timesync.timer") + .and_return(true) + allow(::File).to receive(:read).and_return(timer_content) end - it "reads cron file" do - expect(Yast::SCR).to receive(:Read) - .with(Yast::Path.new(".cron"), cron_job_file, "") + it "reads systemd timer" do + expect(::File).to receive(:read).and_return(timer_content) subject.ReadSynchronization end - context "when cron file does not exist" do - let(:cron_entry) { nil } + context "when systemd timer file does not exist" do + before do + allow(::File).to receive(:exist?).with("/etc/systemd/system/yast-timesync.timer") + .and_return(true) + end it "sets synchronize_time as false" do subject.ReadSynchronization @@ -468,29 +472,40 @@ end end - context "when cron file exists" do - context "when there is no cron entry" do + context "when systemd timer file exists" do + let(:timer_content) do + subject.sync_interval = 10 + subject.send(:timer_content) + end + + context "when timer is not active" do + before do + allow(Yast::SCR).to receive(:Execute).and_return("exit" => 3) + end + it "sets synchronize_time as false" do subject.ReadSynchronization expect(subject.synchronize_time).to eql(false) end - it "sets sync interval with default value" do + it "sets sync interval with value from timer" do subject.ReadSynchronization - expect(subject.sync_interval).to eql(Yast::NtpClientClass::DEFAULT_SYNC_INTERVAL) + expect(subject.sync_interval).to eql(10) end end - context "when there is cron entry" do - let(:cron_entry) { [{ "events" => [{ "active" => "1", "minute" => "*/10" }] }] } + context "when timer is active" do + before do + allow(Yast::SCR).to receive(:Execute).and_return("exit" => 0) + end - it "sets synchronize time as true if first cron entry is valid" do + it "sets synchronize time as true" do expect(subject.ReadSynchronization).to eql(true) end - it "sets sync_interval with cron minute interval" do + it "sets sync_interval with value from timer" do subject.ReadSynchronization expect(subject.sync_interval).to eql(10) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/test/test_helper.rb new/yast2-ntp-client-4.2.5/test/test_helper.rb --- old/yast2-ntp-client-4.2.4/test/test_helper.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/test/test_helper.rb 2019-10-15 15:02:57.000000000 +0200 @@ -1,4 +1,5 @@ -ENV["Y2DIR"] = File.expand_path("../../src", __FILE__) +ENV["Y2DIR"] = File.expand_path("../src", __dir__) +ENV["LC_ALL"] = "en_US.utf8" require "yast" require "yast/rspec" @@ -11,20 +12,21 @@ # https://relishapp.com/rspec/rspec-mocks/v/3-0/docs/verifying-doubles/partial-doubles # # With graceful degradation for RSpec 2 - if mocks.respond_to?(:verify_partial_doubles=) - mocks.verify_partial_doubles = true - end + mocks.verify_partial_doubles = true if mocks.respond_to?(:verify_partial_doubles=) end end # stub module to prevent its Import # Useful for modules from different yast packages, to avoid build dependencies def stub_module(name) - Yast.const_set name.to_sym, Class.new { def self.fake_method; end } + Yast.const_set(name.to_sym, Class.new { def self.fake_method; end }) end # stub classes from other modules to speed up a build stub_module("Lan") +stub_module("Language") +stub_module("Pkg") +stub_module("PackageCallbacks") if ENV["COVERAGE"] require "simplecov" @@ -32,7 +34,7 @@ add_filter "/test/" end - src_location = File.expand_path("../../src", __FILE__) + src_location = File.expand_path("../src", __dir__) # track all ruby files under src SimpleCov.track_files("#{src_location}/**/*.rb") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-4.2.4/test/y2ntp_client/widgets/main_widgets_test.rb new/yast2-ntp-client-4.2.5/test/y2ntp_client/widgets/main_widgets_test.rb --- old/yast2-ntp-client-4.2.4/test/y2ntp_client/widgets/main_widgets_test.rb 2019-10-02 14:34:59.000000000 +0200 +++ new/yast2-ntp-client-4.2.5/test/y2ntp_client/widgets/main_widgets_test.rb 2019-10-15 15:02:57.000000000 +0200 @@ -23,7 +23,7 @@ .and_return(double( pools: { "ntp.org" => {}, "us.ntp.org" => {} }, modify_pool: nil - )) + )) allow(subject).to receive(:value).and_return("ntp.org") allow(subject).to receive(:value=) allow(Y2NtpClient::Dialog::Pool).to receive(:new) @@ -39,7 +39,7 @@ .and_return(double( default_pool_options: {}, add_pool: nil - )) + )) allow(Y2NtpClient::Dialog::Pool).to receive(:new) .and_return(double(run: :next, resulting_pool: ["de.ntp.org", {}])) end