Change-Id: I5cfae1779b77c161e294fa44d873e2da67b6ed31
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/3068
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Divya Thaluru <dthaluru@vmware.com>
1 | 1 |
deleted file mode 100644 |
... | ... |
@@ -1,58 +0,0 @@ |
1 |
-#!/usr/bin/python2 |
|
2 |
-# |
|
3 |
-# Copyright (C) 2015 vmware inc. |
|
4 |
-# |
|
5 |
-# Author: Mahmoud Bassiouny <mbassiouny@vmware.com> |
|
6 |
- |
|
7 |
-import json |
|
8 |
-import curses |
|
9 |
-from sets import Set |
|
10 |
-from jsonwrapper import JsonWrapper |
|
11 |
-from menu import Menu |
|
12 |
-from window import Window |
|
13 |
-from actionresult import ActionResult |
|
14 |
- |
|
15 |
-class CustomPackageSelector(object): |
|
16 |
- def __init__(self, maxy, maxx, install_config): |
|
17 |
- self.install_config = install_config |
|
18 |
- self.menu_items = [] |
|
19 |
- |
|
20 |
- self.maxx = maxx |
|
21 |
- self.maxy = maxy |
|
22 |
- self.win_width = 60 |
|
23 |
- self.win_height = 23 |
|
24 |
- |
|
25 |
- self.win_starty = (self.maxy - self.win_height) / 2 |
|
26 |
- self.win_startx = (self.maxx - self.win_width) / 2 |
|
27 |
- |
|
28 |
- self.menu_starty = self.win_starty + 3 |
|
29 |
- self.selected_packages = Set([]) |
|
30 |
- |
|
31 |
- self.load_package_list() |
|
32 |
- |
|
33 |
- self.window = Window(self.win_height, self.win_width, self.maxy, self.maxx, 'Select your Packages', True, self.package_menu) |
|
34 |
- |
|
35 |
- def load_package_list(self): |
|
36 |
- json_wrapper_package_list = JsonWrapper("packages_full.json"); |
|
37 |
- package_list_json = json_wrapper_package_list.read() |
|
38 |
- |
|
39 |
- for package in package_list_json["packages"]: |
|
40 |
- self.menu_items.append((package, self.exit_function)) |
|
41 |
- self.package_menu = Menu(self.menu_starty, self.maxx, self.menu_items, height = 18, selector_menu = True) |
|
42 |
- |
|
43 |
- |
|
44 |
- def exit_function(self, selected_indexes): |
|
45 |
- json_wrapper_package_list = JsonWrapper("packages_minimal.json"); |
|
46 |
- package_list_json = json_wrapper_package_list.read() |
|
47 |
- selected_items = [] |
|
48 |
- for index in selected_indexes: |
|
49 |
- selected_items.append(self.menu_items[index][0]) |
|
50 |
- |
|
51 |
- self.install_config['packages'] = package_list_json["packages"] + selected_items |
|
52 |
- return ActionResult(True, None) |
|
53 |
- |
|
54 |
- def display(self, params): |
|
55 |
- if (params['custom']): |
|
56 |
- return self.window.do_action() |
|
57 |
- else: |
|
58 |
- return ActionResult(True, None) |
59 | 1 |
deleted file mode 100755 |
... | ... |
@@ -1,51 +0,0 @@ |
1 |
-#! /usr/bin/python2 |
|
2 |
-# |
|
3 |
-# Copyright (C) 2015 vmware inc. |
|
4 |
-# |
|
5 |
-# Author: Mahmoud Bassiouny <mbassiouny@vmware.com> |
|
6 |
- |
|
7 |
-import subprocess |
|
8 |
-import os |
|
9 |
-import json |
|
10 |
-from device import Device |
|
11 |
-from menu import Menu |
|
12 |
-from window import Window |
|
13 |
-from actionresult import ActionResult |
|
14 |
- |
|
15 |
-class DiskPartitioner(object): |
|
16 |
- def __init__(self, maxy, maxx): |
|
17 |
- self.menu_items = [] |
|
18 |
- |
|
19 |
- self.maxx = maxx |
|
20 |
- self.maxy = maxy |
|
21 |
- self.win_width = 70 |
|
22 |
- self.win_height = 17 |
|
23 |
- |
|
24 |
- self.win_starty = (self.maxy - self.win_height) / 2 |
|
25 |
- self.win_startx = (self.maxx - self.win_width) / 2 |
|
26 |
- |
|
27 |
- self.menu_starty = self.win_starty + 10 |
|
28 |
- |
|
29 |
- # initialize the devices |
|
30 |
- self.devices = Device.refresh_devices() |
|
31 |
- |
|
32 |
- self.items = [ |
|
33 |
- ('Auto-partitioning - use entire disk', self.guided_partitions, None), |
|
34 |
- ('Manual - not implemented!', self.manual_partitions, None), |
|
35 |
- ] |
|
36 |
- self.menu = Menu(self.menu_starty, self.maxx, self.items) |
|
37 |
- |
|
38 |
- self.window = Window(self.win_height, self.win_width, self.maxy, self.maxx, 'Welcome to the Photon installer', True, self.menu) |
|
39 |
- self.window.addstr(0, 0, 'First, we will setup your disks. \n\nYou can: \n\na) use auto-partitioning or\nb) you can do it manually.') |
|
40 |
- |
|
41 |
- def guided_partitions(self, params): |
|
42 |
- return ActionResult(True, {'guided': True, 'devices': self.devices}) |
|
43 |
- |
|
44 |
- def manual_partitions(self, params): |
|
45 |
- raise NameError('Manual partitioning not implemented') |
|
46 |
- |
|
47 |
- def display(self, params): |
|
48 |
- return self.window.do_action() |
|
49 |
- |
|
50 |
- |
|
51 |
- |
... | ... |
@@ -1,5 +1,3 @@ |
1 |
-#!/usr/bin/python2 |
|
2 |
-# |
|
3 | 1 |
# Copyright (C) 2015 vmware inc. |
4 | 2 |
# |
5 | 3 |
# Author: Mahmoud Bassiouny <mbassiouny@vmware.com> |
... | ... |
@@ -25,10 +23,8 @@ from __builtin__ import isinstance |
25 | 25 |
|
26 | 26 |
class Installer(object): |
27 | 27 |
def __init__(self, install_config, maxy = 0, maxx = 0, iso_installer = False, |
28 |
- rpm_path = "../stage/RPMS", log_path = "../stage/LOGS", |
|
29 |
- ks_config = None): |
|
28 |
+ rpm_path = "../stage/RPMS", log_path = "../stage/LOGS"): |
|
30 | 29 |
self.install_config = install_config |
31 |
- self.ks_config = ks_config |
|
32 | 30 |
self.iso_installer = iso_installer |
33 | 31 |
self.rpm_path = rpm_path |
34 | 32 |
self.log_path = log_path |
... | ... |
@@ -72,7 +68,7 @@ class Installer(object): |
72 | 72 |
def exit_gracefully(self, signal, frame): |
73 | 73 |
if self.iso_installer: |
74 | 74 |
self.progress_bar.hide() |
75 |
- self.window.addstr(0, 0, 'Opps, Installer got interrupted.\n\nPress any key to get to the bash...') |
|
75 |
+ self.window.addstr(0, 0, 'Oops, Installer got interrupted.\n\nPress any key to get to the bash...') |
|
76 | 76 |
self.window.content_window().getch() |
77 | 77 |
|
78 | 78 |
modules.commons.dump(modules.commons.LOG_FILE_NAME) |
... | ... |
@@ -236,7 +232,7 @@ class Installer(object): |
236 | 236 |
self.progress_bar.hide() |
237 | 237 |
self.window.addstr(0, 0, 'Congratulations, Photon has been installed in {0} secs.\n\nPress any key to continue to boot...'.format(self.progress_bar.time_elapsed)) |
238 | 238 |
eject_cdrom = True |
239 |
- if self.ks_config == None: |
|
239 |
+ if 'ui_install' in self.install_config: |
|
240 | 240 |
self.window.content_window().getch() |
241 | 241 |
if 'eject_cdrom' in self.install_config and not self.install_config['eject_cdrom']: |
242 | 242 |
eject_cdrom = False |
... | ... |
@@ -428,7 +424,7 @@ class Installer(object): |
428 | 428 |
if not hasattr(mod, 'execute'): |
429 | 429 |
modules.commons.log(modules.commons.LOG_ERROR, "Error: not able to execute module {}".format(module)) |
430 | 430 |
continue |
431 |
- mod.execute(module, self.ks_config, self.install_config, self.photon_root) |
|
431 |
+ mod.execute(module, self.install_config, self.photon_root) |
|
432 | 432 |
|
433 | 433 |
def adjust_packages_for_vmware_virt(self): |
434 | 434 |
try: |
... | ... |
@@ -9,11 +9,13 @@ from ostreeinstaller import OstreeInstaller |
9 | 9 |
from ostreeserverinstaller import OstreeServerInstaller |
10 | 10 |
|
11 | 11 |
class InstallerContainer(object): |
12 |
- def __init__(self, install_config, maxy = 0, maxx = 0, iso_installer = False, rpm_path = "../stage/RPMS", log_path = "../stage/LOGS", ks_config = None): |
|
12 |
+ def __init__(self, install_config, maxy = 0, maxx = 0, |
|
13 |
+ iso_installer = False, rpm_path = "../stage/RPMS", |
|
14 |
+ log_path = "../stage/LOGS"): |
|
15 |
+ |
|
13 | 16 |
self.install_config = install_config |
14 | 17 |
self.maxy = maxy |
15 | 18 |
self.maxx = maxx |
16 |
- self.ks_config = ks_config |
|
17 | 19 |
self.iso_installer = iso_installer |
18 | 20 |
self.rpm_path = rpm_path |
19 | 21 |
self.log_path = log_path |
... | ... |
@@ -21,10 +23,10 @@ class InstallerContainer(object): |
21 | 21 |
def install(self, params): |
22 | 22 |
installer = None |
23 | 23 |
if self.install_config['type'] == "ostree_host": |
24 |
- installer = OstreeInstaller(self.install_config, self.maxy, self.maxx, self.iso_installer, self.rpm_path, self.log_path, self.ks_config) |
|
24 |
+ installer = OstreeInstaller(self.install_config, self.maxy, self.maxx, self.iso_installer, self.rpm_path, self.log_path) |
|
25 | 25 |
elif self.install_config['type'] == "ostree_server": |
26 |
- installer = OstreeServerInstaller(self.install_config, self.maxy, self.maxx, self.iso_installer, self.rpm_path, self.log_path, self.ks_config) |
|
26 |
+ installer = OstreeServerInstaller(self.install_config, self.maxy, self.maxx, self.iso_installer, self.rpm_path, self.log_path) |
|
27 | 27 |
else: |
28 |
- installer = Installer(self.install_config, self.maxy, self.maxx, self.iso_installer, self.rpm_path, self.log_path, self.ks_config) |
|
28 |
+ installer = Installer(self.install_config, self.maxy, self.maxx, self.iso_installer, self.rpm_path, self.log_path) |
|
29 | 29 |
|
30 | 30 |
return installer.install(params) |
31 | 31 |
\ No newline at end of file |
... | ... |
@@ -34,6 +34,7 @@ class IsoInstaller(object): |
34 | 34 |
if path.startswith("http://"): |
35 | 35 |
# Do 5 trials to get the kick start |
36 | 36 |
# TODO: make sure the installer run after network is up |
37 |
+ ks_file_error = "Failed to get the kickstart file at {0}".format(path) |
|
37 | 38 |
wait = 1 |
38 | 39 |
for x in range(0, 5): |
39 | 40 |
err_msg = "" |
... | ... |
@@ -44,14 +45,19 @@ class IsoInstaller(object): |
44 | 44 |
err_msg = response.text |
45 | 45 |
except Exception as e: |
46 | 46 |
err_msg = e |
47 |
- modules.commons.log(modules.commons.LOG_ERROR, "Failed to get the kickstart file at {0}, error msg: {1}".format(path, err_msg)) |
|
48 |
- print "Failed to get the kickstart file at {0}, retry in a second".format(path) |
|
47 |
+ |
|
48 |
+ modules.commons.log(modules.commons.LOG_ERROR, |
|
49 |
+ ks_file_error) |
|
50 |
+ modules.commons.log(modules.commons.LOG_ERROR, |
|
51 |
+ "error msg: {0}".format(err_msg)) |
|
52 |
+ print(ks_file_error) |
|
53 |
+ print("retry in a second") |
|
49 | 54 |
time.sleep(wait) |
50 | 55 |
wait = wait * 2 |
51 | 56 |
|
52 |
- |
|
53 | 57 |
# Something went wrong |
54 |
- print "Failed to get the kickstart file at {0}, exiting the installer, check the logs for more details".format(path) |
|
58 |
+ print(ks_file_error) |
|
59 |
+ print("exiting the installer, check the logs for more details") |
|
55 | 60 |
raise Exception(err_msg) |
56 | 61 |
else: |
57 | 62 |
if path.startswith("cdrom:/"): |
... | ... |
@@ -75,9 +81,10 @@ class IsoInstaller(object): |
75 | 75 |
if retval == 0: |
76 | 76 |
self.cd_path = "/mnt/cdrom" |
77 | 77 |
return |
78 |
- print "Failed to mount the cd, retry in a second" |
|
78 |
+ print("Failed to mount the cd, retry in a second") |
|
79 | 79 |
time.sleep(1) |
80 |
- print "Failed to mount the cd, exiting the installer, check the logs for more details" |
|
80 |
+ print("Failed to mount the cd, exiting the installer") |
|
81 |
+ print("check the logs for more details") |
|
81 | 82 |
raise Exception("Can not mount the cd") |
82 | 83 |
|
83 | 84 |
def validate_hostname(self, hostname): |
... | ... |
@@ -98,14 +105,16 @@ class IsoInstaller(object): |
98 | 98 |
machinename = fields[0] |
99 | 99 |
return (len(machinename) <= 64) and (ord(machinename[0]) in self.alpha_chars), error_hostname |
100 | 100 |
|
101 |
- def validate_password(self, text): |
|
101 |
+ @staticmethod |
|
102 |
+ def validate_password(text): |
|
102 | 103 |
try: |
103 | 104 |
p = cracklib.VeryFascistCheck(text) |
104 | 105 |
except ValueError, message: |
105 | 106 |
p = str(message) |
106 | 107 |
return p == text, "Error: " + p |
107 | 108 |
|
108 |
- def generate_password_hash(self, password): |
|
109 |
+ @staticmethod |
|
110 |
+ def generate_password_hash(password): |
|
109 | 111 |
shadow_password = crypt.crypt(password, "$6$" + "".join([random.choice(string.ascii_letters + string.digits) for _ in range(16)])) |
110 | 112 |
return shadow_password |
111 | 113 |
|
... | ... |
@@ -136,6 +145,7 @@ class IsoInstaller(object): |
136 | 136 |
random_id = '%12x' % random.randrange(16**12) |
137 | 137 |
random_hostname = "photon-" + random_id.strip() |
138 | 138 |
install_config = {'iso_system': False} |
139 |
+ install_config['ui_install'] = True |
|
139 | 140 |
license_agreement = License(self.maxy, self.maxx) |
140 | 141 |
select_disk = SelectDisk(self.maxy, self.maxx, install_config) |
141 | 142 |
select_partition = PartitionISO(self.maxy, self.maxx, install_config) |
... | ... |
@@ -165,7 +175,7 @@ class IsoInstaller(object): |
165 | 165 |
None, # confirmation error msg if it's a confirmation text |
166 | 166 |
'*', # echo char |
167 | 167 |
None, # set of accepted chars |
168 |
- self.validate_password, # validation function of the input |
|
168 |
+ IsoInstaller.validate_password, # validation function of the input |
|
169 | 169 |
None, # post processing of the input field |
170 | 170 |
'Set up root password', 'Root password:', 2, install_config) |
171 | 171 |
confirm_password_reader = WindowStringReader( |
... | ... |
@@ -175,7 +185,7 @@ class IsoInstaller(object): |
175 | 175 |
'*', # echo char |
176 | 176 |
None, # set of accepted chars |
177 | 177 |
None, # validation function of the input |
178 |
- self.generate_password_hash, # post processing of the input field |
|
178 |
+ IsoInstaller.generate_password_hash, # post processing of the input field |
|
179 | 179 |
'Confirm root password', 'Confirm Root password:', 2, install_config) |
180 | 180 |
|
181 | 181 |
items.append((license_agreement.display, False)) |
... | ... |
@@ -227,6 +237,53 @@ class IsoInstaller(object): |
227 | 227 |
if install_config['type'] == 'ostree_server': |
228 | 228 |
index -= 1 |
229 | 229 |
|
230 |
+ def ks_install(self, options_file, rpm_path, ks_config): |
|
231 |
+ install_config = ks_config |
|
232 |
+ install_config['iso_system'] = False |
|
233 |
+ if self.is_vmware_virtualization() and 'install_linux_esx' not in install_config: |
|
234 |
+ install_config['install_linux_esx'] = True |
|
235 |
+ |
|
236 |
+ json_wrapper_option_list = JsonWrapper("build_install_options_all.json") |
|
237 |
+ option_list_json = json_wrapper_option_list.read() |
|
238 |
+ options_sorted = option_list_json.items() |
|
239 |
+ |
|
240 |
+ base_path = os.path.dirname("build_install_options_all.json") |
|
241 |
+ package_list = [] |
|
242 |
+ |
|
243 |
+ package_list = PackageSelector.get_packages_to_install(options_sorted, install_config['type'], base_path) |
|
244 |
+ if 'additional_packages' in install_config: |
|
245 |
+ package_list.extend(install_config['additional_packages']) |
|
246 |
+ install_config['packages'] = package_list |
|
247 |
+ |
|
248 |
+ if 'partitions' in install_config: |
|
249 |
+ partitions = install_config['partitions'] |
|
250 |
+ else: |
|
251 |
+ partitions = modules.commons.default_partitions |
|
252 |
+ |
|
253 |
+ install_config['disk'] = modules.commons.partition_disk(install_config['disk'], partitions) |
|
254 |
+ |
|
255 |
+ if "hostname" in install_config: |
|
256 |
+ evalhostname = os.popen('printf ' + install_config["hostname"].strip(" ")).readlines() |
|
257 |
+ install_config['hostname'] = evalhostname[0] |
|
258 |
+ if "hostname" not in install_config or install_config['hostname'] == "": |
|
259 |
+ random_id = '%12x' % random.randrange(16**12) |
|
260 |
+ install_config['hostname'] = "photon-" + random_id.strip() |
|
261 |
+ |
|
262 |
+ # crypt the password if needed |
|
263 |
+ if install_config['password']['crypted']: |
|
264 |
+ install_config['password'] = install_config['password']['text'] |
|
265 |
+ else: |
|
266 |
+ install_config['password'] = crypt.crypt(install_config['password']['text'], |
|
267 |
+ "$6$" + "".join([random.choice(string.ascii_letters + string.digits) for _ in range(16)])) |
|
268 |
+ |
|
269 |
+ installer = InstallerContainer( |
|
270 |
+ install_config, |
|
271 |
+ self.maxy, self.maxx, |
|
272 |
+ True, |
|
273 |
+ rpm_path=rpm_path, |
|
274 |
+ log_path="/var/log") |
|
275 |
+ |
|
276 |
+ installer.install(None) |
|
230 | 277 |
|
231 | 278 |
def is_vmware_virtualization(self): |
232 | 279 |
process = subprocess.Popen(['systemd-detect-virt'], stdout=subprocess.PIPE) |
... | ... |
@@ -270,22 +327,10 @@ class IsoInstaller(object): |
270 | 270 |
self.mount_RPMS_cd() |
271 | 271 |
rpm_path = os.path.join(self.cd_path, "RPMS") |
272 | 272 |
|
273 |
- if not ks_config: |
|
274 |
- self.ui_install(options_file, rpm_path) |
|
273 |
+ if ks_config: |
|
274 |
+ self.ks_install(options_file, rpm_path, ks_config) |
|
275 | 275 |
else: |
276 |
- install_config = ks_config |
|
277 |
- install_config['iso_system'] = False |
|
278 |
- if self.is_vmware_virtualization() and 'install_linux_esx' not in install_config: |
|
279 |
- install_config['install_linux_esx'] = True |
|
280 |
- installer = InstallerContainer( |
|
281 |
- install_config, |
|
282 |
- self.maxy, self.maxx, |
|
283 |
- True, |
|
284 |
- rpm_path=rpm_path, |
|
285 |
- log_path="/var/log", |
|
286 |
- ks_config=ks_config) |
|
287 |
- |
|
288 |
- installer.install(None) |
|
276 |
+ self.ui_install(options_file, rpm_path) |
|
289 | 277 |
|
290 | 278 |
if __name__ == '__main__': |
291 | 279 |
usage = "Usage: %prog [options]" |
292 | 280 |
deleted file mode 100644 |
... | ... |
@@ -1,30 +0,0 @@ |
1 |
-import os |
|
2 |
-import commons |
|
3 |
-from jsonwrapper import JsonWrapper |
|
4 |
- |
|
5 |
-install_phase = commons.PRE_INSTALL |
|
6 |
-enabled = True |
|
7 |
- |
|
8 |
-def get_packages_to_install(options, config_type): |
|
9 |
- package_list = [] |
|
10 |
- install_option = options[config_type] |
|
11 |
- for include_type in install_option["include"]: |
|
12 |
- package_list = package_list + get_packages_to_install(options, include_type) |
|
13 |
- json_wrapper_package_list = JsonWrapper(install_option["file"]) |
|
14 |
- package_list_json = json_wrapper_package_list.read() |
|
15 |
- package_list = package_list + package_list_json["packages"] |
|
16 |
- |
|
17 |
- return package_list |
|
18 |
- |
|
19 |
-def execute(name, ks_config, config, root): |
|
20 |
- |
|
21 |
- if ks_config: |
|
22 |
- |
|
23 |
- options = JsonWrapper("build_install_options_all.json").read() |
|
24 |
- packages = get_packages_to_install(options, ks_config['type']) |
|
25 |
- |
|
26 |
- if 'additional_packages' in ks_config: |
|
27 |
- packages.extend(ks_config['additional_packages']) |
|
28 |
- |
|
29 |
- config['type'] = ks_config['type'] |
|
30 |
- config["packages"] = packages |
31 | 1 |
deleted file mode 100644 |
... | ... |
@@ -1,15 +0,0 @@ |
1 |
-import os |
|
2 |
-import subprocess |
|
3 |
-import commons |
|
4 |
- |
|
5 |
-install_phase = commons.PRE_INSTALL |
|
6 |
-enabled = True |
|
7 |
- |
|
8 |
-def execute(name, ks_config, config, root): |
|
9 |
- |
|
10 |
- if ks_config: |
|
11 |
- if 'partitions' in ks_config: |
|
12 |
- partitions = ks_config['partitions'] |
|
13 |
- else: |
|
14 |
- partitions = commons.default_partitions |
|
15 |
- config['disk'] = commons.partition_disk(ks_config['disk'], partitions) |
... | ... |
@@ -5,10 +5,7 @@ import commons |
5 | 5 |
install_phase = commons.POST_INSTALL |
6 | 6 |
enabled = True |
7 | 7 |
|
8 |
-def execute(name, ks_config, config, root): |
|
9 |
- |
|
10 |
- if ks_config and 'postinstall' in ks_config: |
|
11 |
- config['postinstall'] = ks_config['postinstall'] |
|
8 |
+def execute(name, config, root): |
|
12 | 9 |
if 'postinstall' not in config: |
13 | 10 |
return |
14 | 11 |
# run the script in the chroot environment |
... | ... |
@@ -20,5 +17,10 @@ def execute(name, ks_config, config, root): |
20 | 20 |
outfile.write("\n".join(script)) |
21 | 21 |
|
22 | 22 |
os.chmod(script_file, 0700); |
23 |
- process = subprocess.Popen(["./mk-run-chroot.sh", '-w', root, "/etc/tmpfiles.d/postinstall.sh"]) |
|
24 |
- process.wait() |
|
23 |
+ with open("/var/log/installer-kickstart.log","w") as logfile: |
|
24 |
+ process = subprocess.Popen(["./mk-run-chroot.sh", '-w', root, "/etc/tmpfiles.d/postinstall.sh"], |
|
25 |
+ stdout=logfile,stderr=logfile) |
|
26 |
+ retval = process.wait() |
|
27 |
+ if retval==0: |
|
28 |
+ return True |
|
29 |
+ return False |
... | ... |
@@ -5,16 +5,7 @@ import random |
5 | 5 |
install_phase = commons.POST_INSTALL |
6 | 6 |
enabled = True |
7 | 7 |
|
8 |
-def execute(name, ks_config, config, root): |
|
9 |
- |
|
10 |
- if ks_config: |
|
11 |
- if "hostname" in ks_config: |
|
12 |
- evalhostname = os.popen('printf ' + ks_config["hostname"].strip(" ")).readlines() |
|
13 |
- config['hostname'] = evalhostname[0] |
|
14 |
- if "hostname" not in config or config['hostname'] == "": |
|
15 |
- random_id = '%12x' % random.randrange(16**12) |
|
16 |
- config['hostname'] = "photon-" + random_id.strip() |
|
17 |
- |
|
8 |
+def execute(name, config, root): |
|
18 | 9 |
hostname = config['hostname'] |
19 | 10 |
|
20 | 11 |
hostname_file = os.path.join(root, 'etc/hostname') |
... | ... |
@@ -7,16 +7,7 @@ import string |
7 | 7 |
install_phase = commons.POST_INSTALL |
8 | 8 |
enabled = True |
9 | 9 |
|
10 |
-def execute(name, ks_config, config, root): |
|
11 |
- |
|
12 |
- if ks_config: |
|
13 |
- # crypt the password if needed |
|
14 |
- if ks_config['password']['crypted']: |
|
15 |
- config['password'] = ks_config['password']['text'] |
|
16 |
- else: |
|
17 |
- config['password'] = crypt.crypt(ks_config['password']['text'], |
|
18 |
- "$6$" + "".join([random.choice(string.ascii_letters + string.digits) for _ in range(16)])) |
|
19 |
- |
|
10 |
+def execute(name, config, root): |
|
20 | 11 |
shadow_password = config['password'] |
21 | 12 |
|
22 | 13 |
passwd_filename = os.path.join(root, 'etc/passwd') |
... | ... |
@@ -5,9 +5,7 @@ import commons |
5 | 5 |
install_phase = commons.POST_INSTALL |
6 | 6 |
enabled = True |
7 | 7 |
|
8 |
-def execute(name, ks_config, config, root): |
|
9 |
- if ks_config and 'public_key' in ks_config: |
|
10 |
- config['public_key'] = ks_config['public_key'] |
|
8 |
+def execute(name, config, root): |
|
11 | 9 |
if 'public_key' not in config: |
12 | 10 |
return |
13 | 11 |
|
... | ... |
@@ -12,8 +12,8 @@ from actionresult import ActionResult |
12 | 12 |
|
13 | 13 |
class OstreeInstaller(Installer): |
14 | 14 |
|
15 |
- def __init__(self, install_config, maxy = 0, maxx = 0, iso_installer = False, rpm_path = "../stage/RPMS", log_path = "../stage/LOGS", ks_config = None): |
|
16 |
- Installer.__init__(self, install_config, maxy, maxx, iso_installer, rpm_path, log_path, ks_config) |
|
15 |
+ def __init__(self, install_config, maxy = 0, maxx = 0, iso_installer = False, rpm_path = "../stage/RPMS", log_path = "../stage/LOGS"): |
|
16 |
+ Installer.__init__(self, install_config, maxy, maxx, iso_installer, rpm_path, log_path) |
|
17 | 17 |
self.repo_config = {} |
18 | 18 |
self.repo_read_conf() |
19 | 19 |
|
... | ... |
@@ -93,7 +93,7 @@ class OstreeInstaller(Installer): |
93 | 93 |
self.window.show_window() |
94 | 94 |
self.progress_bar.initialize("Initializing installation...") |
95 | 95 |
self.progress_bar.show() |
96 |
- |
|
96 |
+ |
|
97 | 97 |
self.execute_modules(modules.commons.PRE_INSTALL) |
98 | 98 |
|
99 | 99 |
disk = self.install_config['disk']['disk'] |
... | ... |
@@ -165,7 +165,7 @@ class OstreeInstaller(Installer): |
165 | 165 |
self.progress_bar.update_loading_message("Ready to restart") |
166 | 166 |
self.progress_bar.hide() |
167 | 167 |
self.window.addstr(0, 0, 'Congratulations, Photon RPM-OSTree Host has been installed in {0} secs.\n\nPress any key to continue to boot...'.format(self.progress_bar.time_elapsed)) |
168 |
- if self.ks_config == None: |
|
168 |
+ if 'ui_install' in self.install_config: |
|
169 | 169 |
self.window.content_window().getch() |
170 | 170 |
return ActionResult(True, None) |
171 | 171 |
|
... | ... |
@@ -27,8 +27,8 @@ from installer import Installer |
27 | 27 |
|
28 | 28 |
class OstreeServerInstaller(Installer): |
29 | 29 |
|
30 |
- def __init__(self, install_config, maxy = 0, maxx = 0, iso_installer = False, rpm_path = "../stage/RPMS", log_path = "../stage/LOGS", ks_config = None): |
|
31 |
- Installer.__init__(self, install_config, maxy, maxx, iso_installer, rpm_path, log_path, ks_config) |
|
30 |
+ def __init__(self, install_config, maxy = 0, maxx = 0, iso_installer = False, rpm_path = "../stage/RPMS", log_path = "../stage/LOGS"): |
|
31 |
+ Installer.__init__(self, install_config, maxy, maxx, iso_installer, rpm_path, log_path) |
|
32 | 32 |
|
33 | 33 |
def finalize_system(self): |
34 | 34 |
Installer.finalize_system(self) |