d-installer 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +29 -0
- data/Gemfile.lock +75 -0
- data/bin/d-installer +74 -0
- data/etc/d-installer.yaml +284 -0
- data/lib/dinstaller/can_ask_question.rb +48 -0
- data/lib/dinstaller/cmdline_args.rb +80 -0
- data/lib/dinstaller/cockpit_manager.rb +176 -0
- data/lib/dinstaller/config.rb +128 -0
- data/lib/dinstaller/config_reader.rb +164 -0
- data/lib/dinstaller/dbus/base_object.rb +58 -0
- data/lib/dinstaller/dbus/clients/base.rb +71 -0
- data/lib/dinstaller/dbus/clients/language.rb +86 -0
- data/lib/dinstaller/dbus/clients/manager.rb +76 -0
- data/lib/dinstaller/dbus/clients/software.rb +185 -0
- data/lib/dinstaller/dbus/clients/users.rb +112 -0
- data/lib/dinstaller/dbus/clients/with_progress.rb +56 -0
- data/lib/dinstaller/dbus/clients/with_service_status.rb +75 -0
- data/lib/dinstaller/dbus/clients.rb +34 -0
- data/lib/dinstaller/dbus/interfaces/progress.rb +113 -0
- data/lib/dinstaller/dbus/interfaces/service_status.rb +89 -0
- data/lib/dinstaller/dbus/language.rb +93 -0
- data/lib/dinstaller/dbus/language_service.rb +92 -0
- data/lib/dinstaller/dbus/manager.rb +147 -0
- data/lib/dinstaller/dbus/manager_service.rb +132 -0
- data/lib/dinstaller/dbus/question.rb +176 -0
- data/lib/dinstaller/dbus/questions.rb +124 -0
- data/lib/dinstaller/dbus/service_runner.rb +97 -0
- data/lib/dinstaller/dbus/service_status.rb +87 -0
- data/lib/dinstaller/dbus/software/manager.rb +131 -0
- data/lib/dinstaller/dbus/software/proposal.rb +82 -0
- data/lib/dinstaller/dbus/software.rb +31 -0
- data/lib/dinstaller/dbus/software_service.rb +86 -0
- data/lib/dinstaller/dbus/storage/proposal.rb +170 -0
- data/lib/dinstaller/dbus/storage.rb +30 -0
- data/lib/dinstaller/dbus/users.rb +132 -0
- data/lib/dinstaller/dbus/users_service.rb +92 -0
- data/lib/dinstaller/dbus/with_service_status.rb +48 -0
- data/lib/dinstaller/dbus/y2dir/manager/modules/Package.rb +51 -0
- data/lib/dinstaller/dbus/y2dir/manager/modules/PackagesProposal.rb +62 -0
- data/lib/dinstaller/dbus/y2dir/modules/Autologin.rb +214 -0
- data/lib/dinstaller/dbus/y2dir/software/modules/SpaceCalculation.rb +44 -0
- data/lib/dinstaller/dbus.rb +11 -0
- data/lib/dinstaller/errors.rb +28 -0
- data/lib/dinstaller/installation_phase.rb +106 -0
- data/lib/dinstaller/language.rb +73 -0
- data/lib/dinstaller/luks_activation_question.rb +92 -0
- data/lib/dinstaller/manager.rb +261 -0
- data/lib/dinstaller/network.rb +53 -0
- data/lib/dinstaller/package_callbacks.rb +69 -0
- data/lib/dinstaller/progress.rb +149 -0
- data/lib/dinstaller/question.rb +103 -0
- data/lib/dinstaller/questions_manager.rb +145 -0
- data/lib/dinstaller/security.rb +96 -0
- data/lib/dinstaller/service_status_recorder.rb +58 -0
- data/lib/dinstaller/software.rb +232 -0
- data/lib/dinstaller/storage/actions.rb +90 -0
- data/lib/dinstaller/storage/callbacks/activate.rb +93 -0
- data/lib/dinstaller/storage/callbacks/activate_luks.rb +93 -0
- data/lib/dinstaller/storage/callbacks/activate_multipath.rb +77 -0
- data/lib/dinstaller/storage/callbacks.rb +30 -0
- data/lib/dinstaller/storage/manager.rb +104 -0
- data/lib/dinstaller/storage/proposal.rb +197 -0
- data/lib/dinstaller/storage.rb +30 -0
- data/lib/dinstaller/users.rb +156 -0
- data/lib/dinstaller/with_progress.rb +63 -0
- data/lib/dinstaller.rb +5 -0
- data/share/dbus.conf +38 -0
- data/share/dbus.service +5 -0
- data/share/systemd.service +14 -0
- metadata +295 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (c) [2022] SUSE LLC
|
4
|
+
#
|
5
|
+
# All Rights Reserved.
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or modify it
|
8
|
+
# under the terms of version 2 of the GNU General Public License as published
|
9
|
+
# by the Free Software Foundation.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
12
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
13
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
14
|
+
# more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License along
|
17
|
+
# with this program; if not, contact SUSE LLC.
|
18
|
+
#
|
19
|
+
# To contact SUSE LLC about this file by physical or electronic mail, you may
|
20
|
+
# find current contact information at www.suse.com.
|
21
|
+
|
22
|
+
module DInstaller
|
23
|
+
module DBus
|
24
|
+
# Name space for software D-Bus classes
|
25
|
+
module Software
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
require "dinstaller/dbus/software/manager"
|
31
|
+
require "dinstaller/dbus/software/proposal"
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (c) [2022] SUSE LLC
|
4
|
+
#
|
5
|
+
# All Rights Reserved.
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or modify it
|
8
|
+
# under the terms of version 2 of the GNU General Public License as published
|
9
|
+
# by the Free Software Foundation.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
12
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
13
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
14
|
+
# more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License along
|
17
|
+
# with this program; if not, contact SUSE LLC.
|
18
|
+
#
|
19
|
+
# To contact SUSE LLC about this file by physical or electronic mail, you may
|
20
|
+
# find current contact information at www.suse.com.
|
21
|
+
|
22
|
+
require "dbus"
|
23
|
+
require "dinstaller/dbus/software"
|
24
|
+
require "dinstaller/software"
|
25
|
+
|
26
|
+
module DInstaller
|
27
|
+
module DBus
|
28
|
+
# D-Bus service (org.opensuse.DInstaller.Software)
|
29
|
+
#
|
30
|
+
# It connects to the system D-Bus and answers requests on objects below
|
31
|
+
# `/org/opensuse/DInstaller/Software`.
|
32
|
+
class SoftwareService
|
33
|
+
SERVICE_NAME = "org.opensuse.DInstaller.Software"
|
34
|
+
private_constant :SERVICE_NAME
|
35
|
+
|
36
|
+
# D-Bus connection
|
37
|
+
#
|
38
|
+
# @return [::DBus::Connection]
|
39
|
+
attr_reader :bus
|
40
|
+
|
41
|
+
# @param config [Config] Configuration object
|
42
|
+
# @param logger [Logger]
|
43
|
+
def initialize(config, logger = nil)
|
44
|
+
@logger = logger || Logger.new($stdout)
|
45
|
+
@bus = ::DBus::SystemBus.instance
|
46
|
+
@backend = DInstaller::Software.new(config, logger)
|
47
|
+
@backend.on_progress_change { dispatch }
|
48
|
+
end
|
49
|
+
|
50
|
+
# Exports the software object through the D-Bus service
|
51
|
+
def export
|
52
|
+
dbus_objects.each { |o| service.export(o) }
|
53
|
+
paths = dbus_objects.map(&:path).join(", ")
|
54
|
+
logger.info "Exported #{paths} objects"
|
55
|
+
end
|
56
|
+
|
57
|
+
# Call this from some main loop to dispatch the D-Bus messages
|
58
|
+
def dispatch
|
59
|
+
bus.dispatch_message_queue
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
# @return [Logger]
|
65
|
+
attr_reader :logger, :backend
|
66
|
+
|
67
|
+
# @return [::DBus::Service]
|
68
|
+
def service
|
69
|
+
@service ||= bus.request_service(SERVICE_NAME)
|
70
|
+
end
|
71
|
+
|
72
|
+
# @return [Array<::DBus::Object>]
|
73
|
+
def dbus_objects
|
74
|
+
@dbus_objects ||= [
|
75
|
+
dbus_software_manager,
|
76
|
+
DInstaller::DBus::Software::Proposal.new(logger)
|
77
|
+
]
|
78
|
+
end
|
79
|
+
|
80
|
+
# @return [DInstaller::DBus::Software::Manager]
|
81
|
+
def dbus_software_manager
|
82
|
+
@dbus_software_manager ||= DInstaller::DBus::Software::Manager.new(@backend, logger)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,170 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (c) [2022] SUSE LLC
|
4
|
+
#
|
5
|
+
# All Rights Reserved.
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or modify it
|
8
|
+
# under the terms of version 2 of the GNU General Public License as published
|
9
|
+
# by the Free Software Foundation.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
12
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
13
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
14
|
+
# more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License along
|
17
|
+
# with this program; if not, contact SUSE LLC.
|
18
|
+
#
|
19
|
+
# To contact SUSE LLC about this file by physical or electronic mail, you may
|
20
|
+
# find current contact information at www.suse.com.
|
21
|
+
|
22
|
+
require "dbus"
|
23
|
+
require "dinstaller/dbus/base_object"
|
24
|
+
require "dinstaller/dbus/with_service_status"
|
25
|
+
require "dinstaller/dbus/interfaces/service_status"
|
26
|
+
require "dinstaller/storage/proposal"
|
27
|
+
|
28
|
+
module DInstaller
|
29
|
+
module DBus
|
30
|
+
module Storage
|
31
|
+
# D-Bus object to manage a storage proposal
|
32
|
+
class Proposal < BaseObject
|
33
|
+
include WithServiceStatus
|
34
|
+
include Interfaces::ServiceStatus
|
35
|
+
|
36
|
+
PATH = "/org/opensuse/DInstaller/Storage/Proposal1"
|
37
|
+
private_constant :PATH
|
38
|
+
|
39
|
+
# Constructor
|
40
|
+
#
|
41
|
+
# @param backend [DInstaller::Storage::Proposal]
|
42
|
+
# @param logger [Logger]
|
43
|
+
def initialize(backend, logger)
|
44
|
+
super(PATH, logger: logger)
|
45
|
+
@backend = backend
|
46
|
+
|
47
|
+
register_callbacks
|
48
|
+
register_service_status_callbacks
|
49
|
+
end
|
50
|
+
|
51
|
+
STORAGE_PROPOSAL_INTERFACE = "org.opensuse.DInstaller.Storage.Proposal1"
|
52
|
+
private_constant :STORAGE_PROPOSAL_INTERFACE
|
53
|
+
|
54
|
+
dbus_interface STORAGE_PROPOSAL_INTERFACE do
|
55
|
+
dbus_reader :lvm, "b", dbus_name: "LVM"
|
56
|
+
|
57
|
+
dbus_reader :candidate_devices, "as"
|
58
|
+
|
59
|
+
# The first string is the name of the device (as expected by #Calculate for
|
60
|
+
# the setting CandidateDevices), the second one is the label to represent that device in
|
61
|
+
# the UI when further information is needed.
|
62
|
+
#
|
63
|
+
# TODO: this representation is a temporary solution. In the future we should likely
|
64
|
+
# return more complex structures, probably with an interface similar to
|
65
|
+
# com.redhat.Blivet0.Device or org.freedesktop.UDisks2.Block.
|
66
|
+
dbus_reader :available_devices, "a(ssa{sv})"
|
67
|
+
|
68
|
+
# result: 0 success; 1 error
|
69
|
+
dbus_method :Calculate, "in settings:a{sv}, out result:u" do |settings|
|
70
|
+
success = busy_while do
|
71
|
+
backend.calculate(to_proposal_properties(settings))
|
72
|
+
end
|
73
|
+
|
74
|
+
success ? 0 : 1
|
75
|
+
end
|
76
|
+
|
77
|
+
dbus_reader :actions, "aa{sv}"
|
78
|
+
end
|
79
|
+
|
80
|
+
# List of disks available for installation
|
81
|
+
#
|
82
|
+
# Each device is represented by an array containing id and UI label. See the documentation
|
83
|
+
# of the available_devices DBus reader.
|
84
|
+
#
|
85
|
+
# @see DInstaller::Storage::Proposal
|
86
|
+
#
|
87
|
+
# @return [Array<Array>]
|
88
|
+
def available_devices
|
89
|
+
backend.available_devices.map do |dev|
|
90
|
+
[dev.name, backend.device_label(dev), {}]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# @see DInstaller::Storage::Proposal
|
95
|
+
def lvm
|
96
|
+
backend.lvm?
|
97
|
+
rescue DInstaller::Storage::Proposal::NoProposalError
|
98
|
+
false
|
99
|
+
end
|
100
|
+
|
101
|
+
# @see DInstaller::Storage::Proposal
|
102
|
+
def candidate_devices
|
103
|
+
backend.candidate_devices
|
104
|
+
rescue DInstaller::Storage::Proposal::NoProposalError
|
105
|
+
[]
|
106
|
+
end
|
107
|
+
|
108
|
+
# List of sorted actions in D-Bus format
|
109
|
+
#
|
110
|
+
# @see #to_dbus
|
111
|
+
#
|
112
|
+
# @return [Array<Hash>]
|
113
|
+
def actions
|
114
|
+
backend.actions.all.map { |a| action_to_dbus(a) }
|
115
|
+
end
|
116
|
+
|
117
|
+
private
|
118
|
+
|
119
|
+
# @return [DInstaller::Storage::Proposal]
|
120
|
+
attr_reader :backend
|
121
|
+
|
122
|
+
# @return [Logger]
|
123
|
+
attr_reader :logger
|
124
|
+
|
125
|
+
# Equivalence between properties names in D-Bus and backend.
|
126
|
+
PROPOSAL_PROPERTIES = {
|
127
|
+
"LVM" => "use_lvm",
|
128
|
+
"CandidateDevices" => "candidate_devices"
|
129
|
+
}.freeze
|
130
|
+
private_constant :PROPOSAL_PROPERTIES
|
131
|
+
|
132
|
+
# Registers callback to be called when properties change
|
133
|
+
def register_callbacks
|
134
|
+
backend.add_on_change_listener do
|
135
|
+
dbus_properties_changed(STORAGE_PROPOSAL_INTERFACE, { "LVM" => lvm,
|
136
|
+
"CandidateDevices" => candidate_devices,
|
137
|
+
"AvailableDevices" => available_devices,
|
138
|
+
"Actions" => actions }, [])
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
# Converts settings from D-Bus to backend names
|
143
|
+
#
|
144
|
+
# @example
|
145
|
+
# settings = { "LVM" => true, "CandidateDevices" => ["/dev/sda"] }
|
146
|
+
# to_proposal_settings(settings) #=>
|
147
|
+
# { "use_lvm" => true, "candidate_devices" => ["/dev/sda"] }
|
148
|
+
#
|
149
|
+
# @param settings [Hash]
|
150
|
+
def to_proposal_properties(settings)
|
151
|
+
settings.each_with_object({}) do |e, h|
|
152
|
+
h[PROPOSAL_PROPERTIES[e.first]] = e.last
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
# Converts an action to D-Bus format
|
157
|
+
#
|
158
|
+
# @param action [Y2Storage::CompoundAction]
|
159
|
+
# @return [Hash]
|
160
|
+
def action_to_dbus(action)
|
161
|
+
{
|
162
|
+
"Text" => action.sentence,
|
163
|
+
"Subvol" => action.device_is?(:btrfs_subvolume),
|
164
|
+
"Delete" => action.delete?
|
165
|
+
}
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (c) [2022] SUSE LLC
|
4
|
+
#
|
5
|
+
# All Rights Reserved.
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or modify it
|
8
|
+
# under the terms of version 2 of the GNU General Public License as published
|
9
|
+
# by the Free Software Foundation.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
12
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
13
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
14
|
+
# more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License along
|
17
|
+
# with this program; if not, contact SUSE LLC.
|
18
|
+
#
|
19
|
+
# To contact SUSE LLC about this file by physical or electronic mail, you may
|
20
|
+
# find current contact information at www.suse.com.
|
21
|
+
|
22
|
+
module DInstaller
|
23
|
+
module DBus
|
24
|
+
# Namespace for storage D-Bus classes
|
25
|
+
module Storage
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
require "dinstaller/dbus/storage/proposal"
|
@@ -0,0 +1,132 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (c) [2022] SUSE LLC
|
4
|
+
#
|
5
|
+
# All Rights Reserved.
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or modify it
|
8
|
+
# under the terms of version 2 of the GNU General Public License as published
|
9
|
+
# by the Free Software Foundation.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
12
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
13
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
14
|
+
# more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License along
|
17
|
+
# with this program; if not, contact SUSE LLC.
|
18
|
+
#
|
19
|
+
# To contact SUSE LLC about this file by physical or electronic mail, you may
|
20
|
+
# find current contact information at www.suse.com.
|
21
|
+
|
22
|
+
require "dbus"
|
23
|
+
require "dinstaller/users"
|
24
|
+
require "dinstaller/dbus/base_object"
|
25
|
+
require "dinstaller/dbus/with_service_status"
|
26
|
+
require "dinstaller/dbus/interfaces/service_status"
|
27
|
+
|
28
|
+
module DInstaller
|
29
|
+
module DBus
|
30
|
+
# YaST D-Bus object (/org/opensuse/DInstaller/Users1)
|
31
|
+
class Users < BaseObject
|
32
|
+
include WithServiceStatus
|
33
|
+
include Interfaces::ServiceStatus
|
34
|
+
|
35
|
+
PATH = "/org/opensuse/DInstaller/Users1"
|
36
|
+
private_constant :PATH
|
37
|
+
|
38
|
+
# Constructor
|
39
|
+
#
|
40
|
+
# @param backend [DInstaller::Users]
|
41
|
+
# @param logger [Logger]
|
42
|
+
def initialize(backend, logger)
|
43
|
+
super(PATH, logger: logger)
|
44
|
+
@backend = backend
|
45
|
+
register_service_status_callbacks
|
46
|
+
end
|
47
|
+
|
48
|
+
USERS_INTERFACE = "org.opensuse.DInstaller.Users1"
|
49
|
+
private_constant :USERS_INTERFACE
|
50
|
+
|
51
|
+
FUSER_SIG = "in FullName:s, in UserName:s, in Password:s, in AutoLogin:b, in data:a{sv}"
|
52
|
+
private_constant :FUSER_SIG
|
53
|
+
|
54
|
+
# rubocop:disable Metrics/BlockLength
|
55
|
+
dbus_interface USERS_INTERFACE do
|
56
|
+
dbus_reader :root_password_set, "b"
|
57
|
+
|
58
|
+
dbus_reader :root_ssh_key, "s", dbus_name: "RootSSHKey"
|
59
|
+
|
60
|
+
dbus_reader :first_user, "(ssba{sv})"
|
61
|
+
|
62
|
+
dbus_method :SetRootPassword,
|
63
|
+
"in Value:s, in Encrypted:b, out result:u" do |value, encrypted|
|
64
|
+
logger.info "Setting Root Password"
|
65
|
+
backend.assign_root_password(value, encrypted)
|
66
|
+
|
67
|
+
dbus_properties_changed(USERS_INTERFACE, { "RootPasswordSet" => !value.empty? }, [])
|
68
|
+
0
|
69
|
+
end
|
70
|
+
|
71
|
+
dbus_method :RemoveRootPassword, "out result:u" do
|
72
|
+
logger.info "Clearing the root password"
|
73
|
+
backend.remove_root_password
|
74
|
+
|
75
|
+
dbus_properties_changed(USERS_INTERFACE, { "RootPasswordSet" => backend.root_password? },
|
76
|
+
[])
|
77
|
+
0
|
78
|
+
end
|
79
|
+
|
80
|
+
dbus_method :SetRootSSHKey, "in Value:s, out result:u" do |value|
|
81
|
+
logger.info "Setting Root ssh key"
|
82
|
+
backend.root_ssh_key = (value)
|
83
|
+
|
84
|
+
dbus_properties_changed(USERS_INTERFACE, { "RootSSHKey" => value }, [])
|
85
|
+
0
|
86
|
+
end
|
87
|
+
|
88
|
+
dbus_method :SetFirstUser,
|
89
|
+
FUSER_SIG + ", out result:u" do |full_name, user_name, password, auto_login, data|
|
90
|
+
logger.info "Setting first user #{full_name}"
|
91
|
+
backend.assign_first_user(full_name, user_name, password, auto_login, data)
|
92
|
+
|
93
|
+
dbus_properties_changed(USERS_INTERFACE, { "FirstUser" => first_user }, [])
|
94
|
+
0
|
95
|
+
end
|
96
|
+
|
97
|
+
dbus_method :RemoveFirstUser, "out result:u" do
|
98
|
+
logger.info "Removing the first user"
|
99
|
+
backend.remove_first_user
|
100
|
+
|
101
|
+
dbus_properties_changed(USERS_INTERFACE, { "FirstUser" => first_user }, [])
|
102
|
+
0
|
103
|
+
end
|
104
|
+
|
105
|
+
dbus_method :Write, "out result:u" do
|
106
|
+
logger.info "Writting users"
|
107
|
+
|
108
|
+
backend.write
|
109
|
+
0
|
110
|
+
end
|
111
|
+
end
|
112
|
+
# rubocop:enable Metrics/BlockLength
|
113
|
+
|
114
|
+
def root_ssh_key
|
115
|
+
backend.root_ssh_key
|
116
|
+
end
|
117
|
+
|
118
|
+
def first_user
|
119
|
+
backend.first_user
|
120
|
+
end
|
121
|
+
|
122
|
+
def root_password_set
|
123
|
+
backend.root_password?
|
124
|
+
end
|
125
|
+
|
126
|
+
private
|
127
|
+
|
128
|
+
# @return [DInstaller::Users]
|
129
|
+
attr_reader :backend
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (c) [2022] SUSE LLC
|
4
|
+
#
|
5
|
+
# All Rights Reserved.
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or modify it
|
8
|
+
# under the terms of version 2 of the GNU General Public License as published
|
9
|
+
# by the Free Software Foundation.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
12
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
13
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
14
|
+
# more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License along
|
17
|
+
# with this program; if not, contact SUSE LLC.
|
18
|
+
#
|
19
|
+
# To contact SUSE LLC about this file by physical or electronic mail, you may
|
20
|
+
# find current contact information at www.suse.com.
|
21
|
+
|
22
|
+
require "dbus"
|
23
|
+
require "dinstaller/dbus/users"
|
24
|
+
require "dinstaller/users"
|
25
|
+
|
26
|
+
module DInstaller
|
27
|
+
module DBus
|
28
|
+
# D-Bus service (org.opensuse.DInstaller.Users)
|
29
|
+
#
|
30
|
+
# It connects to the system D-Bus and answers requests on objects below
|
31
|
+
# `/org/opensuse/DInstaller/Users1`.
|
32
|
+
class UsersService
|
33
|
+
# Service name
|
34
|
+
#
|
35
|
+
# @return [String]
|
36
|
+
SERVICE_NAME = "org.opensuse.DInstaller.Users"
|
37
|
+
private_constant :SERVICE_NAME
|
38
|
+
|
39
|
+
# System D-Bus
|
40
|
+
#
|
41
|
+
# @return [::DBus::Connection]
|
42
|
+
attr_reader :bus
|
43
|
+
|
44
|
+
# @param config [Config] Configuration object
|
45
|
+
# @param logger [Logger]
|
46
|
+
def initialize(_config, logger = nil)
|
47
|
+
@logger = logger || Logger.new($stdout)
|
48
|
+
@bus = ::DBus::SystemBus.instance
|
49
|
+
end
|
50
|
+
|
51
|
+
# Exports the installer object through the D-Bus service
|
52
|
+
def export
|
53
|
+
dbus_objects.each { |o| service.export(o) }
|
54
|
+
|
55
|
+
paths = dbus_objects.map(&:path).join(", ")
|
56
|
+
logger.info "Exported #{paths} objects"
|
57
|
+
end
|
58
|
+
|
59
|
+
# Call this from some main loop to dispatch the D-Bus messages
|
60
|
+
def dispatch
|
61
|
+
bus.dispatch_message_queue
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
# @return [Logger]
|
67
|
+
attr_reader :logger
|
68
|
+
|
69
|
+
# @return [::DBus::Service]
|
70
|
+
def service
|
71
|
+
@service ||= bus.request_service(SERVICE_NAME)
|
72
|
+
end
|
73
|
+
|
74
|
+
# @return [Array<::DBus::Object>]
|
75
|
+
def dbus_objects
|
76
|
+
@dbus_objects ||= [
|
77
|
+
users_dbus
|
78
|
+
]
|
79
|
+
end
|
80
|
+
|
81
|
+
# @return [DInstaller::DBus::Users]
|
82
|
+
def users_dbus
|
83
|
+
@users_dbus ||= DInstaller::DBus::Users.new(users_backend(logger), logger)
|
84
|
+
end
|
85
|
+
|
86
|
+
# @return [DInstaller::Users]
|
87
|
+
def users_backend(logger)
|
88
|
+
@users_backend ||= DInstaller::Users.new(logger)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (c) [2022] SUSE LLC
|
4
|
+
#
|
5
|
+
# All Rights Reserved.
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or modify it
|
8
|
+
# under the terms of version 2 of the GNU General Public License as published
|
9
|
+
# by the Free Software Foundation.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
12
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
13
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
14
|
+
# more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License along
|
17
|
+
# with this program; if not, contact SUSE LLC.
|
18
|
+
#
|
19
|
+
# To contact SUSE LLC about this file by physical or electronic mail, you may
|
20
|
+
# find current contact information at www.suse.com.
|
21
|
+
|
22
|
+
require "dinstaller/dbus/service_status"
|
23
|
+
|
24
|
+
module DInstaller
|
25
|
+
module DBus
|
26
|
+
# Mixin to be included by D-Bus objects that needs to register a service status
|
27
|
+
module WithServiceStatus
|
28
|
+
# Service status
|
29
|
+
#
|
30
|
+
# @return [ServiceStatus]
|
31
|
+
def service_status
|
32
|
+
@service_status ||= ServiceStatus.new.idle
|
33
|
+
end
|
34
|
+
|
35
|
+
# Sets the service status to busy meanwhile the given block is running
|
36
|
+
#
|
37
|
+
# @param block [Proc]
|
38
|
+
# @return [Object] the result of the given block
|
39
|
+
def busy_while(&block)
|
40
|
+
service_status.busy
|
41
|
+
result = block.call
|
42
|
+
service_status.idle
|
43
|
+
|
44
|
+
result
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# Copyright (c) [2022] SUSE LLC
|
2
|
+
#
|
3
|
+
# All Rights Reserved.
|
4
|
+
#
|
5
|
+
# This program is free software; you can redistribute it and/or modify it
|
6
|
+
# under the terms of version 2 of the GNU General Public License as published
|
7
|
+
# by the Free Software Foundation.
|
8
|
+
#
|
9
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
10
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
11
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
12
|
+
# more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License along
|
15
|
+
# with this program; if not, contact SUSE LLC.
|
16
|
+
#
|
17
|
+
# To contact SUSE LLC about this file by physical or electronic mail, you may
|
18
|
+
# find current contact information at www.suse.com.
|
19
|
+
|
20
|
+
require "yast"
|
21
|
+
|
22
|
+
# :nodoc:
|
23
|
+
module Yast
|
24
|
+
# Replacement for the Yast::Package module
|
25
|
+
#
|
26
|
+
# @see https://github.com/yast/yast-yast2/blob/b8cd178b7f341f6e3438782cb703f4a3ab0529ed/library/packages/src/modules/Package.rb
|
27
|
+
class PackageClass < Module
|
28
|
+
def main
|
29
|
+
puts "Loading mocked module #{__FILE__}"
|
30
|
+
end
|
31
|
+
|
32
|
+
# Determines whether the package is available
|
33
|
+
#
|
34
|
+
# @see https://github.com/yast/yast-yast2/blob/b8cd178b7f341f6e3438782cb703f4a3ab0529ed/library/packages/src/modules/Package.rb#L72
|
35
|
+
# @todo Perform a real D-Bus call.
|
36
|
+
def Available(_package_name)
|
37
|
+
true
|
38
|
+
end
|
39
|
+
|
40
|
+
# Determines whether the package is available
|
41
|
+
#
|
42
|
+
# @see https://github.com/yast/yast-yast2/blob/b8cd178b7f341f6e3438782cb703f4a3ab0529ed/library/packages/src/modules/Package.rb#L121
|
43
|
+
# @todo Perform a real D-Bus call.
|
44
|
+
def Installed(_package_name, target: nil)
|
45
|
+
false
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
Package = PackageClass.new
|
50
|
+
Package.main
|
51
|
+
end
|