1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
#!/bin/python
import os
import sys
from pyanaconda.users import Users
if "DISPLAY" in os.environ and os.environ["DISPLAY"]:
mode="gui"
else:
mode="tui"
if mode == "gui":
# We need this so we can tell GI to look for overrides objects
# also in anaconda source directories
import gi.overrides
for p in os.environ.get("ANACONDA_WIDGETS_OVERRIDES", "").split(":"):
gi.overrides.__path__.insert(0, p)
# set the root path to / so the imported spokes
# know where to apply their changes
from pyanaconda import constants
# this has to stay in the form constants.ROOT_PATH so it modifies
# the scalar in anaconda, not the local copy here
constants.ROOT_PATH = "/"
from pyanaconda.addons import collect_addon_paths
addon_paths = ["/usr/share/initial-setup/modules", "/usr/share/anaconda/addons"]
# append ADDON_PATHS dirs at the end
sys.path.extend(addon_paths)
addon_module_paths = collect_addon_paths(addon_paths, mode)
# Too bad anaconda does not have modularized logging
from pyanaconda import anaconda_log
anaconda_log.init()
# init threading before Gtk can do anything and before we start using threads
# initThreading initializes the threadMgr instance, import it afterwards
from pyanaconda.threads import initThreading
initThreading()
from pyanaconda import kickstart
# Construct a commandMap with the supported Anaconda's commands only
kickstart_commands = ["user",
"group",
"keyboard",
"lang",
"rootpw",
"timezone",
"logging",
"selinux",
"firewall",
]
commandMap = dict((k, kickstart.commandMap[k]) for k in kickstart_commands)
# Prepare new data object
data = kickstart.AnacondaKSHandler(addon_module_paths["ks"], commandUpdates=commandMap)
# Read the installed kickstart
parser = kickstart.AnacondaKSParser(data)
parser.readKickstart("/root/anaconda-ks.cfg")
if mode == "gui":
# Import IS gui specifics
import gui
# Add addons to search paths
gui.InitialSetupGraphicalUserInterface.update_paths(addon_module_paths)
# Initialize the UI
ui = gui.InitialSetupGraphicalUserInterface(None, None, None)
else:
# Import IS gui specifics
import tui
# Add addons to search paths
tui.InitialSetupTextUserInterface.update_paths(addon_module_paths)
# Initialize the UI
ui = tui.InitialSetupTextUserInterface(None, None, None)
# Pass the data object to user inteface
ui.setup(data)
# Start the application
ret = ui.run()
# TUI returns False if the app was ended prematurely
# all other cases return True or None
if ret == False:
sys.exit(0)
# Do not execute sections that were part of the original
# anaconda kickstart file (== have .seen flag set)
sections = [data.keyboard, data.lang]
# data.selinux
# data.firewall
# data.timezone
for section in sections:
if section.seen:
continue
section.execute(None, data, None)
# Prepare the user database tools
u = Users()
sections = [data.group, data.user, data.rootpw]
for section in sections:
if section.seen:
continue
section.execute(None, data, None, u)
# Configure all addons
data.addons.execute(None, data, None, u)
# Print the kickstart data to file
with open("/root/initial-setup-ks.cfg", "w") as f:
f.write(str(data))
|