Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package rubygem-d-installer for
openSUSE:Factory checked in at 2022-12-23 10:21:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-d-installer (Old)
and /work/SRC/openSUSE:Factory/.rubygem-d-installer.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-d-installer"
Fri Dec 23 10:21:29 2022 rev:2 rq:1044303 version:0.6.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-d-installer/rubygem-d-installer.changes
2022-12-07 17:36:53.517172191 +0100
+++
/work/SRC/openSUSE:Factory/.rubygem-d-installer.new.1563/rubygem-d-installer.changes
2022-12-23 10:21:38.511528438 +0100
@@ -1,0 +2,30 @@
+Thu Dec 15 13:15:10 UTC 2022 - Imobach Gonzalez Sosa <[email protected]>
+
+- Implement the ImportGpgKey libzypp callback
+ (gh#yast/d-installer#371)
+- Version 0.6.2
+
+-------------------------------------------------------------------
+Wed Dec 14 22:38:24 UTC 2022 - Imobach Gonzalez Sosa <[email protected]>
+
+- Implement AcceptUnsignedFile and MediaChange libzypp callbacks
+ (gh#yast/d-installer#369).
+
+-------------------------------------------------------------------
+Wed Dec 14 15:29:12 UTC 2022 - Imobach Gonzalez Sosa <[email protected]>
+
+- Switch the SELinux policy for ALP to "enforcing"
+ (gh#yast/d-installer#360).
+- Fix generic questions handling (gh#yast/d-installer#362)
+- Version 0.6.1
+
+-------------------------------------------------------------------
+Wed Dec 14 13:25:22 UTC 2022 - Ancor Gonzalez Sosa <[email protected]>
+
+- Removed previous temporary setting "olaf_luks2_password" and all
+ the code supporting it.
+- Added new temporary setting "tpm_luks_open" to try to configure
+ TPM-based unlocking of the LUKS devices during the first system
+ boot (gh#yast/d-installer#363).
+
+-------------------------------------------------------------------
Old:
----
d-installer-0.6.gem
New:
----
d-installer-0.6.2.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-d-installer.spec ++++++
--- /var/tmp/diff_new_pack.I0RFIC/_old 2022-12-23 10:21:39.051531524 +0100
+++ /var/tmp/diff_new_pack.I0RFIC/_new 2022-12-23 10:21:39.055531547 +0100
@@ -1,7 +1,7 @@
#
# spec file for package rubygem-d-installer
#
-# Copyright (c) 2022 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -12,7 +12,7 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
@@ -24,7 +24,7 @@
#
Name: rubygem-d-installer
-Version: 0.6
+Version: 0.6.2
Release: 0
%define mod_name d-installer
%define mod_full_name %{mod_name}-%{version}
@@ -44,11 +44,11 @@
Requires: yast2 >= 4.5.20
# /MANUAL
BuildRoot: %{_tmppath}/%{name}-%{version}-build
-BuildRequires: ruby-macros >= 5
BuildRequires: %{ruby >= 2.5.0}
BuildRequires: %{rubygem gem2rpm}
+BuildRequires: ruby-macros >= 5
BuildRequires: update-alternatives
-Url: https://github.com/yast/d-installer
+URL: https://github.com/yast/d-installer
Source: %{mod_full_name}.gem
Source1: gem2rpm.yml
Summary: D-Installer Service
@@ -75,7 +75,6 @@
install -D -m 0644
%{buildroot}%{gem_base}/gems/%{mod_full_name}/etc/d-installer.yaml
%{buildroot}%{_sysconfdir}/d-installer.yaml
# /MANUAL
-
%gem_packages
%changelog
++++++ d-installer-0.6.gem -> d-installer-0.6.2.gem ++++++
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/etc/d-installer.yaml new/etc/d-installer.yaml
--- old/etc/d-installer.yaml 2022-12-05 16:56:00.000000000 +0100
+++ new/etc/d-installer.yaml 2022-12-22 16:38:27.000000000 +0100
@@ -161,10 +161,13 @@
optional_patterns: null # no optional pattern shared
mandatory_packages:
- device-mapper # Apparently needed if devices at /dev/mapper are used
at boot (eg. FDE)
+ - fde-tools # Needed for FDE with TPM, hardcoded here temporarily
+ - libtss2-tcti-device0 # Same than fde-tools
optional_packages: null
base_product: ALP
security:
+ tpm_luks_open: true
lsm: selinux
available_lsms:
# apparmor:
@@ -173,7 +176,7 @@
selinux:
patterns:
- alp_selinux
- policy: permissive
+ policy: enforcing
none:
patterns: null
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/dbus/clients/question.rb
new/lib/dinstaller/dbus/clients/question.rb
--- old/lib/dinstaller/dbus/clients/question.rb 2022-12-05 16:56:00.000000000
+0100
+++ new/lib/dinstaller/dbus/clients/question.rb 2022-12-22 16:38:27.000000000
+0100
@@ -28,6 +28,9 @@
# Its interface is a subset of {DInstaller::Question}
# so it can be used in the block of {DInstaller::CanAskQuestion#ask}.
class Question < Base
+ LUKS_ACTIVATION_IFACE =
"org.opensuse.DInstaller.Question.LuksActivation1"
+ private_constant :LUKS_ACTIVATION_IFACE
+
# @return [::DBus::ProxyObject]
attr_reader :dbus_object
@@ -38,7 +41,9 @@
@dbus_object = service[object_path]
@dbus_iface = @dbus_object["org.opensuse.DInstaller.Question1"]
# one D-Bus client for all kinds of questions
- @luks_iface =
@dbus_object["org.opensuse.DInstaller.Question.LuksActivation1"]
+ return unless @dbus_object.has_iface?(LUKS_ACTIVATION_IFACE)
+
+ @luks_iface = @dbus_object[LUKS_ACTIVATION_IFACE]
end
# @return [String]
@@ -58,8 +63,10 @@
@dbus_iface["Answer"].to_sym
end
- # @return [String]
+ # @return [String,nil] Password or nil if there is no LUKS interface
def password
+ return nil unless @luks_iface
+
@luks_iface["Password"]
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/dbus/clients/questions_manager.rb
new/lib/dinstaller/dbus/clients/questions_manager.rb
--- old/lib/dinstaller/dbus/clients/questions_manager.rb 2022-12-05
16:56:00.000000000 +0100
+++ new/lib/dinstaller/dbus/clients/questions_manager.rb 2022-12-22
16:38:27.000000000 +0100
@@ -21,6 +21,7 @@
require "dinstaller/dbus/clients/base"
require "dinstaller/dbus/clients/question"
+require "dinstaller/luks_activation_question"
module DInstaller
module DBus
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/dbus/software_service.rb
new/lib/dinstaller/dbus/software_service.rb
--- old/lib/dinstaller/dbus/software_service.rb 2022-12-05 16:56:00.000000000
+0100
+++ new/lib/dinstaller/dbus/software_service.rb 2022-12-22 16:38:27.000000000
+0100
@@ -43,7 +43,7 @@
def initialize(config, logger = nil)
@logger = logger || Logger.new($stdout)
@bus = ::DBus::SystemBus.instance
- @backend = DInstaller::Software.new(config, logger)
+ @backend = DInstaller::Software::Manager.new(config, logger)
@backend.on_progress_change { dispatch }
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/dbus/storage/proposal.rb
new/lib/dinstaller/dbus/storage/proposal.rb
--- old/lib/dinstaller/dbus/storage/proposal.rb 2022-12-05 16:56:00.000000000
+0100
+++ new/lib/dinstaller/dbus/storage/proposal.rb 2022-12-22 16:38:27.000000000
+0100
@@ -144,6 +144,8 @@
#
# @param dbus_settings [DInstaller::Storage::ProposalSettings]
def calculate(dbus_settings)
+ logger.info("Calculating storage proposal from D-Bus settings:
#{dbus_settings}")
+
backend.calculate(to_proposal_settings(dbus_settings))
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/lib/dinstaller/dbus/y2dir/software/modules/PackageCallbacks.rb
new/lib/dinstaller/dbus/y2dir/software/modules/PackageCallbacks.rb
--- old/lib/dinstaller/dbus/y2dir/software/modules/PackageCallbacks.rb
1970-01-01 01:00:00.000000000 +0100
+++ new/lib/dinstaller/dbus/y2dir/software/modules/PackageCallbacks.rb
2022-12-22 16:38:27.000000000 +0100
@@ -0,0 +1,52 @@
+# Copyright (c) [2022] SUSE LLC
+#
+# All Rights Reserved.
+#
+# 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.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+require "yast"
+require "logger"
+require "dinstaller/software/callbacks"
+require "dinstaller/dbus/clients/questions_manager"
+
+# :nodoc:
+module Yast
+ # Replacement for the Yast::PackageCallbacks module.
+ class PackageCallbacksClass < Module
+ def main
+ puts "Loading mocked module #{__FILE__}"
+ end
+
+ # @see
https://github.com/yast/yast-yast2/blob/19180445ab935a25edd4ae0243aa7a3bcd09c9de/library/packages/src/modules/PackageCallbacks.rb#L183
+ def InitPackageCallbacks(logger = ::Logger.new($stdout))
+ DInstaller::Software::Callbacks::Signature.new(
+ questions_manager, logger
+ ).setup
+
+ DInstaller::Software::Callbacks::Media.new(
+ questions_manager, logger
+ ).setup
+ end
+
+ def questions_manager
+ @questions_manager ||= DInstaller::DBus::Clients::QuestionsManager.new
+ end
+ end
+
+ PackageCallbacks = PackageCallbacksClass.new
+ PackageCallbacks.main
+end
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/manager.rb
new/lib/dinstaller/manager.rb
--- old/lib/dinstaller/manager.rb 2022-12-05 16:56:00.000000000 +0100
+++ new/lib/dinstaller/manager.rb 2022-12-22 16:38:27.000000000 +0100
@@ -86,7 +86,7 @@
def install_phase
installation_phase.install
- start_progress(9)
+ start_progress(8)
progress.step("Reading software repositories") do
software.probe
@@ -107,7 +107,6 @@
progress.step("Writing Network Configuration") { network.install }
progress.step("Saving Language Settings") { language.finish }
progress.step("Writing repositories information") { software.finish }
- progress.step("Copying logs") { copy_logs }
progress.step("Finishing storage configuration") { storage.finish }
end
@@ -191,10 +190,5 @@
# @return [ServiceStatusRecorder]
attr_reader :service_status_recorder
-
- # Copy the logs to the target system
- def copy_logs
- Yast::WFM.CallFunction("copy_logs_finish", ["Write"])
- end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/package_callbacks.rb
new/lib/dinstaller/package_callbacks.rb
--- old/lib/dinstaller/package_callbacks.rb 2022-12-05 16:56:00.000000000
+0100
+++ new/lib/dinstaller/package_callbacks.rb 1970-01-01 01:00:00.000000000
+0100
@@ -1,69 +0,0 @@
-# frozen_string_literal: true
-
-# Copyright (c) [2021] SUSE LLC
-#
-# All Rights Reserved.
-#
-# 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.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, contact SUSE LLC.
-#
-# To contact SUSE LLC about this file by physical or electronic mail, you may
-# find current contact information at www.suse.com.
-
-require "yast"
-
-Yast.import "Pkg"
-
-# YaST specific code lives under this namespace
-module DInstaller
- # This class represents the installer status
- class PackageCallbacks
- class << self
- def setup(pkg_count, progress)
- new(pkg_count, progress).setup
- end
- end
-
- def initialize(pkg_count, progress)
- @total = pkg_count
- @installed = 0
- @progress = progress
- end
-
- def setup
- Yast::Pkg.CallbackDonePackage(
- fun_ref(method(:package_installed), "string (integer, string)")
- )
- end
-
- private
-
- # @return [DInstaller::Progress]
- attr_reader :progress
-
- def fun_ref(method, signature)
- Yast::FunRef.new(method, signature)
- end
-
- # TODO: error handling
- def package_installed(_error, _reason)
- @installed += 1
- progress.step(msg)
-
- ""
- end
-
- def msg
- "Installing packages (#{@total - @installed} remains)"
- end
- end
-end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/software/callbacks/media.rb
new/lib/dinstaller/software/callbacks/media.rb
--- old/lib/dinstaller/software/callbacks/media.rb 1970-01-01
01:00:00.000000000 +0100
+++ new/lib/dinstaller/software/callbacks/media.rb 2022-12-22
16:38:27.000000000 +0100
@@ -0,0 +1,81 @@
+# frozen_string_literal: true
+
+# Copyright (c) [2021] SUSE LLC
+#
+# All Rights Reserved.
+#
+# 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.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+require "yast"
+require "dinstaller/can_ask_question"
+require "dinstaller/question"
+
+Yast.import "Pkg"
+
+module DInstaller
+ module Software
+ module Callbacks
+ # Callbacks related to media handling
+ class Media
+ include CanAskQuestion
+
+ # @param questions_manager [DBus::Clients::QuestionsManager]
+ # @param logger [Logger]
+ def initialize(questions_manager, logger)
+ @questions_manager = questions_manager
+ @logger = logger
+ end
+
+ # Register the callbacks
+ def setup
+ Yast::Pkg.CallbackMediaChange(
+ Yast::FunRef.new(
+ method(:media_change),
+ "string (string, string, string, string, integer, string,
integer, string, " \
+ "boolean, list <string>, integer)"
+ )
+ )
+ end
+
+ # Media change callback
+ #
+ # @return [String]
+ # @see
https://github.com/yast/yast-yast2/blob/19180445ab935a25edd4ae0243aa7a3bcd09c9de/library/packages/src/modules/PackageCallbacks.rb#L620
+ # rubocop:disable Metrics/ParameterLists
+ def media_change(_error_code, error, _url, _product, _current,
_current_label, _wanted,
+ _wanted_label, _double_sided, _devices, _current_device)
+ question = DInstaller::Question.new(
+ error, options: [:Retry, :Skip], default_option: :Retry
+ )
+ ask(question) do |q|
+ logger.info "#{q.text}: #{q.answer}"
+
+ (q.answer == :Retry) ? "" : "S"
+ end
+ end
+ # rubocop:enable Metrics/ParameterLists
+
+ private
+
+ # @return [DBus::Clients::QuestionsManager]
+ attr_reader :questions_manager
+
+ # @return [Logger]
+ attr_reader :logger
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/software/callbacks/progress.rb
new/lib/dinstaller/software/callbacks/progress.rb
--- old/lib/dinstaller/software/callbacks/progress.rb 1970-01-01
01:00:00.000000000 +0100
+++ new/lib/dinstaller/software/callbacks/progress.rb 2022-12-22
16:38:27.000000000 +0100
@@ -0,0 +1,72 @@
+# frozen_string_literal: true
+
+# Copyright (c) [2021] SUSE LLC
+#
+# All Rights Reserved.
+#
+# 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.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+require "yast"
+
+Yast.import "Pkg"
+
+module DInstaller
+ module Software
+ module Callbacks
+ # This class represents the installer status
+ class Progress
+ class << self
+ def setup(pkg_count, progress)
+ new(pkg_count, progress).setup
+ end
+ end
+
+ def initialize(pkg_count, progress)
+ @total = pkg_count
+ @installed = 0
+ @progress = progress
+ end
+
+ def setup
+ Yast::Pkg.CallbackDonePackage(
+ fun_ref(method(:package_installed), "string (integer, string)")
+ )
+ end
+
+ private
+
+ # @return [DInstaller::Progress]
+ attr_reader :progress
+
+ def fun_ref(method, signature)
+ Yast::FunRef.new(method, signature)
+ end
+
+ # TODO: error handling
+ def package_installed(_error, _reason)
+ @installed += 1
+ progress.step(msg)
+
+ ""
+ end
+
+ def msg
+ "Installing packages (#{@total - @installed} remains)"
+ end
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/software/callbacks/signature.rb
new/lib/dinstaller/software/callbacks/signature.rb
--- old/lib/dinstaller/software/callbacks/signature.rb 1970-01-01
01:00:00.000000000 +0100
+++ new/lib/dinstaller/software/callbacks/signature.rb 2022-12-22
16:38:27.000000000 +0100
@@ -0,0 +1,113 @@
+# frozen_string_literal: true
+
+# Copyright (c) [2022] SUSE LLC
+#
+# All Rights Reserved.
+#
+# 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.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+require "yast"
+require "dinstaller/can_ask_question"
+require "dinstaller/question"
+
+Yast.import "Pkg"
+
+module DInstaller
+ module Software
+ module Callbacks
+ # Callbacks related to signatures handling
+ class Signature
+ include CanAskQuestion
+
+ # @param questions_manager [DBus::Clients::QuestionsManager]
+ # @param logger [Logger]
+ def initialize(questions_manager, logger)
+ @questions_manager = questions_manager
+ @logger = logger
+ end
+
+ # Register the callbacks
+ def setup
+ Yast::Pkg.CallbackAcceptUnsignedFile(
+ Yast::FunRef.new(method(:accept_unsigned_file), "boolean (string,
integer)")
+ )
+ Yast::Pkg.CallbackImportGpgKey(
+ Yast::FunRef.new(method(:import_gpg_key), "boolean (map <string,
any>, integer)")
+ )
+ end
+
+ # Callback to handle unsigned files
+ #
+ # @param filename [String] File name
+ # @param repo_id [Integer] Repository ID. It might be -1 if there is
not an associated repo.
+ def accept_unsigned_file(filename, repo_id)
+ repo = Yast::Pkg.SourceGeneralData(repo_id)
+ source = if repo
+ format(
+ "The file %{filename} from repository %{repo_name}
(%{repo_url})",
+ filename: filename, repo_name: repo["name"], repo_url:
repo["url"]
+ )
+ else
+ format("The file %{filename}", filename: filename)
+ end
+
+ message = format(
+ "%{source} is not digitally signed. The origin and integrity of
the file cannot be " \
+ "verified. Use it anyway?", source: source
+ )
+
+ question = DInstaller::Question.new(
+ message, options: [:Yes, :No], default_option: :No
+ )
+ ask(question) do |q|
+ logger.info "#{q.text} #{q.answer}"
+ q.answer == :Yes
+ end
+ end
+
+ # Callback to handle signature verification failures
+ #
+ # @param key [Hash] GPG key data (id, name, fingerprint, etc.)
+ # @param _repo_id [Integer] Repository ID
+ def import_gpg_key(key, _repo_id)
+ fingerprint = key["fingerprint"].scan(/.{4}/).join(" ")
+ message = format(
+ "The key %{id} (%{name}) with fingerprint %{fingerprint} is
unknown. " \
+ "Do you want to trust this key?",
+ id: key["id"], name: key["name"], fingerprint: fingerprint
+ )
+
+ question = DInstaller::Question.new(
+ message, options: [:Trust, :Skip], default_option: :Skip
+ )
+
+ ask(question) do |q|
+ logger.info "#{q.text} #{q.answer}"
+ q.answer == :Trust
+ end
+ end
+
+ private
+
+ # @return [DBus::Clients::QuestionsManager]
+ attr_reader :questions_manager
+
+ # @return [Logger]
+ attr_reader :logger
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/software/callbacks.rb
new/lib/dinstaller/software/callbacks.rb
--- old/lib/dinstaller/software/callbacks.rb 1970-01-01 01:00:00.000000000
+0100
+++ new/lib/dinstaller/software/callbacks.rb 2022-12-22 16:38:27.000000000
+0100
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+# Copyright (c) [2022] SUSE LLC
+#
+# All Rights Reserved.
+#
+# 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.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+module DInstaller
+ module Software
+ # Namespace for software callbacks
+ module Callbacks
+ end
+ end
+end
+
+require "dinstaller/software/callbacks/media"
+require "dinstaller/software/callbacks/progress"
+require "dinstaller/software/callbacks/signature"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/software/manager.rb
new/lib/dinstaller/software/manager.rb
--- old/lib/dinstaller/software/manager.rb 1970-01-01 01:00:00.000000000
+0100
+++ new/lib/dinstaller/software/manager.rb 2022-12-22 16:38:27.000000000
+0100
@@ -0,0 +1,262 @@
+# frozen_string_literal: true
+
+# Copyright (c) [2021] SUSE LLC
+#
+# All Rights Reserved.
+#
+# 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.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+require "yast"
+require "fileutils"
+require "dinstaller/config"
+require "dinstaller/with_progress"
+require "y2packager/product"
+require "yast2/arch_filter"
+require "dinstaller/software/callbacks"
+
+Yast.import "Package"
+Yast.import "Packages"
+Yast.import "PackageCallbacks"
+Yast.import "Pkg"
+Yast.import "Stage"
+
+module DInstaller
+ module Software
+ # This class is responsible for software handling
+ class Manager
+ include WithProgress
+
+ GPG_KEYS_GLOB = "/usr/lib/rpm/gnupg/keys/gpg-*"
+ private_constant :GPG_KEYS_GLOB
+
+ attr_reader :product
+
+ DEFAULT_LANGUAGES = ["en_US"].freeze
+ private_constant :DEFAULT_LANGUAGES
+
+ attr_accessor :languages
+
+ # FIXME: what about defining a Product class?
+ # @return [Array<Array<String,Hash>>] An array containing the product ID
and
+ # additional information in a hash
+ attr_reader :products
+
+ def initialize(config, logger)
+ @config = config
+ @logger = logger
+ @languages = DEFAULT_LANGUAGES
+ @products = @config.products
+ if @config.multi_product?
+ @product = nil
+ else
+ @product = @products.keys.first # use the available product as
default
+ @config.pick_product(@product)
+ end
+ end
+
+ def select_product(name)
+ return if name == @product
+ raise ArgumentError unless @products[name]
+
+ @config.pick_product(name)
+ @product = name
+ end
+
+ def probe
+ logger.info "Probing software"
+
+ store_original_repos
+ Yast::Pkg.SetSolverFlags("ignoreAlreadyRecommended" => false,
"onlyRequires" => true)
+
+ # as we use liveDVD with normal like ENV, lets temporary switch to
normal to use its repos
+ Yast::Stage.Set("normal")
+
+ start_progress(3)
+ Yast::PackageCallbacks.InitPackageCallbacks(logger)
+ progress.step("Initialize target repositories") {
initialize_target_repos }
+ progress.step("Initialize sources") { add_base_repo }
+ progress.step("Making the initial proposal") do
+ proposal = Yast::Packages.Proposal(force_reset = true, reinit =
false, _simple = true)
+ logger.info "proposal #{proposal["raw_proposal"]}"
+ end
+
+ Yast::Stage.Set("initial")
+ end
+
+ def initialize_target_repos
+ Yast::Pkg.TargetInitialize("/")
+ import_gpg_keys
+ end
+
+ def propose
+ Yast::Pkg.TargetFinish # ensure that previous target is closed
+ Yast::Pkg.TargetInitialize(Yast::Installation.destdir)
+ Yast::Pkg.TargetLoad
+ Yast::Pkg.SetAdditionalLocales(languages)
+ select_base_product(@config.data["software"]["base_product"])
+
+ add_resolvables
+ proposal = Yast::Packages.Proposal(force_reset = false, reinit =
false, _simple = true)
+ logger.info "proposal #{proposal["raw_proposal"]}"
+
+ solve_dependencies
+
+ # do not return proposal hash, so intentional nil here
+ nil
+ end
+
+ def install
+ start_progress(count_packages)
+ Callbacks::Progress.setup(count_packages, progress)
+
+ # TODO: error handling
+ commit_result = Yast::Pkg.Commit({})
+
+ if commit_result.nil? || commit_result.empty?
+ logger.error("Commit failed")
+ raise Yast::Pkg.LastError
+ end
+
+ logger.info "Commit result #{commit_result}"
+ rescue DInstaller::WithProgress::NotFinishedProgress => e
+ logger.error "There is an unfinished progress: #{e.inspect}"
+ finish_progress
+ end
+
+ # Writes the repositories information to the installed system
+ def finish
+ start_progress(2)
+ progress.step("Writing repositories to the target system") do
+ Yast::Pkg.SourceSaveAll
+ Yast::Pkg.TargetFinish
+ Yast::Pkg.SourceCacheCopyTo(Yast::Installation.destdir)
+ end
+ progress.step("Restoring original repositories") {
restore_original_repos }
+ end
+
+ # Determine whether the given tag is provided by the selected packages
+ #
+ # @param tag [String] Tag to search for (package names,
requires/provides, or file
+ # names)
+ # @return [Boolean] true if it is provided; false otherwise
+ def provision_selected?(tag)
+ Yast::Pkg.IsSelected(tag) || Yast::Pkg.IsProvided(tag)
+ end
+
+ # Determines whether a package is installed
+ #
+ # @param name [String] Package name
+ # @return [Boolean] true if it is installed; false otherwise
+ def package_installed?(name)
+ Yast::Package.Installed(name, target: :system)
+ end
+
+ private
+
+ # adds resolvables from yaml config for given product
+ def add_resolvables
+ mandatory_patterns = @config.data["software"]["mandatory_patterns"] ||
[]
+ Yast::PackagesProposal.SetResolvables("d-installer", :pattern,
mandatory_patterns)
+
+ optional_patterns = @config.data["software"]["optional_patterns"] || []
+ Yast::PackagesProposal.SetResolvables("d-installer", :pattern,
optional_patterns,
+ optional: true)
+
+ mandatory_packages = @config.data["software"]["mandatory_packages"] ||
[]
+ Yast::PackagesProposal.SetResolvables("d-installer", :package,
mandatory_packages)
+
+ optional_packages = @config.data["software"]["optional_packages"] || []
+ Yast::PackagesProposal.SetResolvables("d-installer", :package,
optional_packages,
+ optional: true)
+ end
+
+ # call solver to satisfy dependency or log error
+ def solve_dependencies
+ res = Yast::Pkg.PkgSolve(unused = true)
+ logger.info "solver run #{res.inspect}"
+
+ return if res
+
+ logger.error "Solver failed: #{Yast::Pkg.LastError}"
+ logger.error "Details: #{Yast::Pkg.LastErrorDetails}"
+ logger.error "Solving issues: #{Yast::Pkg.PkgSolveErrors}"
+ end
+
+ # @return [Logger]
+ attr_reader :logger
+
+ def count_packages
+ Yast::Pkg.PkgMediaCount.reduce(0) { |sum, res| sum + res.reduce(0, :+)
}
+ end
+
+ def import_gpg_keys
+ gpg_keys = Dir.glob(GPG_KEYS_GLOB).map(&:to_s)
+ logger.info "Importing GPG keys: #{gpg_keys}"
+ gpg_keys.each do |path|
+ Yast::Pkg.ImportGPGKey(path, true)
+ end
+ end
+
+ def add_base_repo
+ @config.data["software"]["installation_repositories"].each do |repo|
+ if repo.is_a?(Hash)
+ url = repo["url"]
+ # skip if repo is not for current arch
+ next if repo["archs"] &&
!Yast2::ArchFilter.from_string(repo["archs"]).match?
+ else
+ url = repo
+ end
+ Yast::Pkg.SourceCreate(url, "/") # TODO: having that dir also in
config?
+ end
+
+ Yast::Pkg.SourceSaveAll
+ end
+
+ def select_base_product(name)
+ base_product = Y2Packager::Product.available_base_products.find do
|product|
+ product.name == name
+ end
+ logger.info "Base product to select: #{base_product&.name}"
+ base_product&.select
+ end
+
+ REPOS_BACKUP = "/etc/zypp/repos.d.dinstaller.backup"
+ private_constant :REPOS_BACKUP
+
+ REPOS_DIR = "/etc/zypp/repos.d"
+ private_constant :REPOS_DIR
+
+ # ensure that repos backup is there and repos.d is empty
+ def store_original_repos
+ # Backup was already created, so just remove all repos
+ if File.directory?(REPOS_BACKUP)
+ logger.info "removing #{REPOS_DIR}"
+ FileUtils.rm_rf(REPOS_DIR)
+ else # move repos to backup
+ logger.info "moving #{REPOS_DIR} to #{REPOS_BACKUP}"
+ FileUtils.mv(REPOS_DIR, REPOS_BACKUP)
+ end
+ end
+
+ def restore_original_repos
+ logger.info "removing #{REPOS_DIR}"
+ FileUtils.rm_rf(REPOS_DIR)
+ logger.info "moving #{REPOS_BACKUP} to #{REPOS_DIR}"
+ FileUtils.mv(REPOS_BACKUP, REPOS_DIR)
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/software.rb
new/lib/dinstaller/software.rb
--- old/lib/dinstaller/software.rb 2022-12-05 16:56:00.000000000 +0100
+++ new/lib/dinstaller/software.rb 2022-12-22 16:38:27.000000000 +0100
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# Copyright (c) [2021] SUSE LLC
+# Copyright (c) [2022] SUSE LLC
#
# All Rights Reserved.
#
@@ -19,238 +19,10 @@
# To contact SUSE LLC about this file by physical or electronic mail, you may
# find current contact information at www.suse.com.
-require "yast"
-require "fileutils"
-require "dinstaller/package_callbacks"
-require "dinstaller/config"
-require "dinstaller/with_progress"
-require "y2packager/product"
-require "yast2/arch_filter"
-
-Yast.import "Package"
-Yast.import "Packages"
-Yast.import "Pkg"
-Yast.import "Stage"
-
-# YaST specific code lives under this namespace
module DInstaller
- # This class is responsible for software handling
- class Software
- include WithProgress
-
- GPG_KEYS_GLOB = "/usr/lib/rpm/gnupg/keys/gpg-*"
- private_constant :GPG_KEYS_GLOB
-
- attr_reader :product
-
- DEFAULT_LANGUAGES = ["en_US"].freeze
- private_constant :DEFAULT_LANGUAGES
-
- attr_accessor :languages
-
- # FIXME: what about defining a Product class?
- # @return [Array<Array<String,Hash>>] An array containing the product ID
and
- # additional information in a hash
- attr_reader :products
-
- def initialize(config, logger)
- @config = config
- @logger = logger
- @languages = DEFAULT_LANGUAGES
- @products = @config.products
- if @config.multi_product?
- @product = nil
- else
- @product = @products.keys.first # use the available product as default
- @config.pick_product(@product)
- end
- end
-
- def select_product(name)
- return if name == @product
- raise ArgumentError unless @products[name]
-
- @config.pick_product(name)
- @product = name
- end
-
- def probe
- logger.info "Probing software"
-
- store_original_repos
- Yast::Pkg.SetSolverFlags("ignoreAlreadyRecommended" => false,
"onlyRequires" => true)
-
- # as we use liveDVD with normal like ENV, lets temporary switch to
normal to use its repos
- Yast::Stage.Set("normal")
-
- start_progress(3)
- progress.step("Initialize target repositories") {
initialize_target_repos }
- progress.step("Initialize sources") { add_base_repo }
- progress.step("Making the initial proposal") do
- proposal = Yast::Packages.Proposal(force_reset = true, reinit = false,
_simple = true)
- logger.info "proposal #{proposal["raw_proposal"]}"
- end
-
- Yast::Stage.Set("initial")
- end
-
- def initialize_target_repos
- Yast::Pkg.TargetInitialize("/")
- import_gpg_keys
- end
-
- def propose
- Yast::Pkg.TargetFinish # ensure that previous target is closed
- Yast::Pkg.TargetInitialize(Yast::Installation.destdir)
- Yast::Pkg.TargetLoad
- Yast::Pkg.SetAdditionalLocales(languages)
- select_base_product(@config.data["software"]["base_product"])
-
- add_resolvables
- proposal = Yast::Packages.Proposal(force_reset = false, reinit = false,
_simple = true)
- logger.info "proposal #{proposal["raw_proposal"]}"
-
- solve_dependencies
-
- # do not return proposal hash, so intentional nil here
- nil
- end
-
- def install
- start_progress(count_packages)
- PackageCallbacks.setup(count_packages, progress)
-
- # TODO: error handling
- commit_result = Yast::Pkg.Commit({})
-
- if commit_result.nil? || commit_result.empty?
- logger.error("Commit failed")
- raise Yast::Pkg.LastError
- end
-
- logger.info "Commit result #{commit_result}"
- end
-
- # Writes the repositories information to the installed system
- def finish
- start_progress(2)
- progress.step("Writing repositories to the target system") do
- Yast::Pkg.SourceSaveAll
- Yast::Pkg.TargetFinish
- Yast::Pkg.SourceCacheCopyTo(Yast::Installation.destdir)
- end
- progress.step("Restoring original repositories") {
restore_original_repos }
- end
-
- # Determine whether the given tag is provided by the selected packages
- #
- # @param tag [String] Tag to search for (package names, requires/provides,
or file
- # names)
- # @return [Boolean] true if it is provided; false otherwise
- def provision_selected?(tag)
- Yast::Pkg.IsSelected(tag) || Yast::Pkg.IsProvided(tag)
- end
-
- # Determines whether a package is installed
- #
- # @param name [String] Package name
- # @return [Boolean] true if it is installed; false otherwise
- def package_installed?(name)
- Yast::Package.Installed(name, target: :system)
- end
-
- private
-
- # adds resolvables from yaml config for given product
- def add_resolvables
- mandatory_patterns = @config.data["software"]["mandatory_patterns"] || []
- Yast::PackagesProposal.SetResolvables("d-installer", :pattern,
mandatory_patterns)
-
- optional_patterns = @config.data["software"]["optional_patterns"] || []
- Yast::PackagesProposal.SetResolvables("d-installer", :pattern,
optional_patterns,
- optional: true)
-
- mandatory_packages = @config.data["software"]["mandatory_packages"] || []
- Yast::PackagesProposal.SetResolvables("d-installer", :package,
mandatory_packages)
-
- optional_packages = @config.data["software"]["optional_packages"] || []
- Yast::PackagesProposal.SetResolvables("d-installer", :package,
optional_packages,
- optional: true)
- end
-
- # call solver to satisfy dependency or log error
- def solve_dependencies
- res = Yast::Pkg.PkgSolve(unused = true)
- logger.info "solver run #{res.inspect}"
-
- return if res
-
- logger.error "Solver failed: #{Yast::Pkg.LastError}"
- logger.error "Details: #{Yast::Pkg.LastErrorDetails}"
- logger.error "Solving issues: #{Yast::Pkg.PkgSolveErrors}"
- end
-
- # @return [Logger]
- attr_reader :logger
-
- def count_packages
- Yast::Pkg.PkgMediaCount.reduce(0) { |sum, res| sum + res.reduce(0, :+) }
- end
-
- def import_gpg_keys
- gpg_keys = Dir.glob(GPG_KEYS_GLOB).map(&:to_s)
- logger.info "Importing GPG keys: #{gpg_keys}"
- gpg_keys.each do |path|
- Yast::Pkg.ImportGPGKey(path, true)
- end
- end
-
- def add_base_repo
- @config.data["software"]["installation_repositories"].each do |repo|
- if repo.is_a?(Hash)
- url = repo["url"]
- # skip if repo is not for current arch
- next if repo["archs"] &&
!Yast2::ArchFilter.from_string(repo["archs"]).match?
- else
- url = repo
- end
- Yast::Pkg.SourceCreate(url, "/") # TODO: having that dir also in
config?
- end
-
- Yast::Pkg.SourceSaveAll
- end
-
- def select_base_product(name)
- base_product = Y2Packager::Product.available_base_products.find do
|product|
- product.name == name
- end
- logger.info "Base product to select: #{base_product&.name}"
- base_product&.select
- end
-
- REPOS_BACKUP = "/etc/zypp/repos.d.dinstaller.backup"
- private_constant :REPOS_BACKUP
-
- REPOS_DIR = "/etc/zypp/repos.d"
- private_constant :REPOS_DIR
-
- # ensure that repos backup is there and repos.d is empty
- def store_original_repos
- # Backup was already created, so just remove all repos
- if File.directory?(REPOS_BACKUP)
- logger.info "removing #{REPOS_DIR}"
- FileUtils.rm_rf(REPOS_DIR)
- else # move repos to backup
- logger.info "moving #{REPOS_DIR} to #{REPOS_BACKUP}"
- FileUtils.mv(REPOS_DIR, REPOS_BACKUP)
- end
- end
-
- def restore_original_repos
- logger.info "removing #{REPOS_DIR}"
- FileUtils.rm_rf(REPOS_DIR)
- logger.info "moving #{REPOS_BACKUP} to #{REPOS_DIR}"
- FileUtils.mv(REPOS_BACKUP, REPOS_DIR)
- end
+ # Namespace for software backend
+ module Software
end
end
+
+require "dinstaller/software/manager"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/storage/manager.rb
new/lib/dinstaller/storage/manager.rb
--- old/lib/dinstaller/storage/manager.rb 2022-12-05 16:56:00.000000000
+0100
+++ new/lib/dinstaller/storage/manager.rb 2022-12-22 16:38:27.000000000
+0100
@@ -20,6 +20,8 @@
# find current contact information at www.suse.com.
require "yast"
+require "yast2/execute"
+require "yast2/systemd/service"
require "bootloader/proposal_client"
require "bootloader/finish_client"
require "y2storage/storage_manager"
@@ -79,17 +81,25 @@
# Unmounts the target file system
def finish
- start_progress(4)
+ steps = tpm_key? ? 6 : 5
+ start_progress(steps)
on_target do
progress.step("Writing Linux Security Modules configuration") {
security.write }
progress.step("Installing bootloader") do
- hack_olaf_password
::Bootloader::FinishClient.new.write
end
+ if tpm_key?
+ progress.step("Preparing the system to unlock the encryption using
the TPM") do
+ prepare_tpm_key
+ end
+ end
progress.step("Configuring file systems snapshots") do
Yast::WFM.CallFunction("snapshots_finish", ["Write"])
end
+ progress.step("Copying logs") do
+ Yast::WFM.CallFunction("copy_logs_finish", ["Write"])
+ end
progress.step("Unmounting storage devices") do
Yast::WFM.CallFunction("umount_finish", ["Write"])
end
@@ -175,38 +185,60 @@
@software ||= DBus::Clients::Software.new
end
- # Temporary method for testing FDE during early development
- def hack_olaf_password
- password = config.data.fetch("security", {})["olaf_luks2_password"]
- return if password.nil? || password.empty?
-
- grub_path = File.join(Yast::Installation.destdir, "etc", "default",
"grub")
- File.open(grub_path, "a") do |file|
- file.puts "GRUB_CRYPTODISK_PASSWORD=\"#{password}\""
- end
+ def tpm_key?
+ tpm_product? && tpm_proposal? && tpm_system?
+ end
- hack_jeos_firstboot
+ def tpm_proposal?
+ settings = proposal.calculated_settings
+ settings.encrypt? && !settings.lvm
end
- # @see #hack_olaf_password
- #
- # This assumes the package jeos-firstboot has been installed
- def hack_jeos_firstboot
- require "yast2/systemd/service"
- require "fileutils"
- destdir = Yast::Installation.destdir
+ def tpm_system?
+ Y2Storage::Arch.new.efiboot? && tpm_present?
+ end
+
+ def tpm_present?
+ return @tpm_present unless @tpm_present.nil?
+
+ @tpm_present =
+ begin
+ execute_fdectl("tpm-present")
+ logger.info "FDE: TPMv2 detected"
+ true
+ rescue Cheetah::ExecutionFailed
+ logger.info "FDE: TPMv2 not detected"
+ false
+ end
+ end
+
+ def tpm_product?
+ config.data.fetch("security", {}).fetch("tpm_luks_open", false)
+ end
+
+ def prepare_tpm_key
+ keyfile_path = File.join(Yast::Installation.destdir, "root",
".root.keyfile")
+ execute_fdectl(
+ "add-secondary-key", "--keyfile", keyfile_path,
+ stdin: "#{proposal.calculated_settings.encryption_password}\n",
+ recorder: Yast::ReducedRecorder.new(skip: :stdin)
+ )
- service = Yast2::Systemd::Service.find("jeos-firstboot")
+ service = Yast2::Systemd::Service.find("fde-tpm-enroll.service")
+ logger.info "FDE: TPM enroll service: #{service}"
service&.enable
+ rescue Cheetah::ExecutionFailed
+ false
+ end
- reconfig_path = File.join(destdir, "var", "lib", "YaST2")
- FileUtils.mkdir_p(reconfig_path)
- FileUtils.touch(File.join(reconfig_path, "reconfig_system"))
-
- jeos_path = File.join(destdir, "etc", "jeos-firstboot.conf")
- File.open(jeos_path, "a") do |file|
- file.puts "JEOS_PASSWORD_ALREADY_SET='yes'"
- end
+ def execute_fdectl(*args)
+ # Some subcommands like "tpm-present" should not require a --device
argument, but they
+ # currently do. Let's always us until the problem at fdectl is fully
fixed.
+ Yast::Execute.locally!("fdectl", "--device", fdectl_device, *args)
+ end
+
+ def fdectl_device
+ Yast::Installation.destdir
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/storage/proposal.rb
new/lib/dinstaller/storage/proposal.rb
--- old/lib/dinstaller/storage/proposal.rb 2022-12-05 16:56:00.000000000
+0100
+++ new/lib/dinstaller/storage/proposal.rb 2022-12-22 16:38:27.000000000
+0100
@@ -123,7 +123,6 @@
settings ||= ProposalSettings.new
settings.freeze
proposal_settings = to_y2storage_settings(settings)
- hack_olaf_password(proposal_settings)
@proposal = new_proposal(proposal_settings)
storage_manager.proposal = proposal
@@ -296,16 +295,6 @@
# Setting #linux_delete_mode to :all is not enough to prevent VG
reusing in all cases
settings.lvm_vg_reuse = false
end
-
- # Temporary method for testing FDE during early development
- #
- # @param settings [Y2Storage::ProposalSettings]
- def hack_olaf_password(settings)
- password = config.data.fetch("security", {})["olaf_luks2_password"]
- return if password.nil? || password.empty?
-
- settings.encryption_password = password
- end
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/storage/proposal_settings.rb
new/lib/dinstaller/storage/proposal_settings.rb
--- old/lib/dinstaller/storage/proposal_settings.rb 2022-12-05
16:56:00.000000000 +0100
+++ new/lib/dinstaller/storage/proposal_settings.rb 2022-12-22
16:38:27.000000000 +0100
@@ -55,6 +55,13 @@
@candidate_devices = []
@volumes = []
end
+
+ # Whether the proposal must create encrypted devices
+ #
+ # @return [Boolean]
+ def encrypt?
+ !(encryption_password.nil? || encryption_password.empty?)
+ end
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/dinstaller/with_progress.rb
new/lib/dinstaller/with_progress.rb
--- old/lib/dinstaller/with_progress.rb 2022-12-05 16:56:00.000000000 +0100
+++ new/lib/dinstaller/with_progress.rb 2022-12-22 16:38:27.000000000 +0100
@@ -24,6 +24,9 @@
module DInstaller
# Mixin that allows to start a progress and configure callbacks
module WithProgress
+ # There is an unfinished progress
+ class NotFinishedProgress < StandardError; end
+
# @return [Progress, nil]
attr_reader :progress
@@ -33,7 +36,7 @@
#
# @param total_steps [Integer] total number of the steps for the progress.
def start_progress(total_steps)
- raise "There already is an unfinished progress" if progress &&
!progress.finished?
+ raise NotFinishedProgress if progress && !progress.finished?
on_change_callbacks = @on_progress_change_callbacks || []
on_finish_callbacks = @on_progress_finish_callbacks || []
@@ -44,6 +47,13 @@
end
end
+ # Finishes the current progress
+ def finish_progress
+ return if progress.nil? || progress.finished?
+
+ progress.finish
+ end
+
# Registers an on_change callback to be added to the progress
#
# @param block [Proc]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2022-12-05 16:56:00.000000000 +0100
+++ new/metadata 2022-12-22 16:38:27.000000000 +0100
@@ -1,14 +1,14 @@
--- !ruby/object:Gem::Specification
name: d-installer
version: !ruby/object:Gem::Version
- version: '0.6'
+ version: 0.6.2
platform: ruby
authors:
- YaST Team
autorequire:
bindir: bin
cert_chain: []
-date: 2022-12-05 00:00:00.000000000 Z
+date: 2022-12-22 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: packaging_rake_tasks
@@ -261,6 +261,7 @@
- lib/dinstaller/dbus/y2dir/manager/modules/Package.rb
- lib/dinstaller/dbus/y2dir/manager/modules/PackagesProposal.rb
- lib/dinstaller/dbus/y2dir/modules/Autologin.rb
+- lib/dinstaller/dbus/y2dir/software/modules/PackageCallbacks.rb
- lib/dinstaller/dbus/y2dir/software/modules/SpaceCalculation.rb
- lib/dinstaller/dbus/y2dir/storage/modules/Package.rb
- lib/dinstaller/dbus/y2dir/storage/modules/PackagesProposal.rb
@@ -271,13 +272,17 @@
- lib/dinstaller/luks_activation_question.rb
- lib/dinstaller/manager.rb
- lib/dinstaller/network.rb
-- lib/dinstaller/package_callbacks.rb
- lib/dinstaller/progress.rb
- lib/dinstaller/question.rb
- lib/dinstaller/questions_manager.rb
- lib/dinstaller/security.rb
- lib/dinstaller/service_status_recorder.rb
- lib/dinstaller/software.rb
+- lib/dinstaller/software/callbacks.rb
+- lib/dinstaller/software/callbacks/media.rb
+- lib/dinstaller/software/callbacks/progress.rb
+- lib/dinstaller/software/callbacks/signature.rb
+- lib/dinstaller/software/manager.rb
- lib/dinstaller/storage.rb
- lib/dinstaller/storage/actions.rb
- lib/dinstaller/storage/callbacks.rb
++++++ gem2rpm.yml ++++++
--- /var/tmp/diff_new_pack.I0RFIC/_old 2022-12-23 10:21:39.231532553 +0100
+++ /var/tmp/diff_new_pack.I0RFIC/_new 2022-12-23 10:21:39.235532576 +0100
@@ -1,8 +1,8 @@
---
:sourceurl: "%{mod_full_name}.gem"
:preamble: |-
- BuildRequires: pkgconfig(dbus-1)
- Requires: pkgconfig(dbus-1)
+ BuildRequires: dbus-1-common
+ Requires: dbus-1-common
Requires: snapper
Requires: yast2-bootloader
Requires: yast2-country