# # instdata.py - central store for all configuration data needed to install # # Erik Troan # # Copyright 2001-2002 Red Hat, Inc. # # This software may be freely redistributed under the terms of the GNU # library public license. # # You should have received a copy of the GNU Library Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # import language import network import firewall import timezone import desktop import users import fsset import bootloader import partitions import partedUtils import hdrlist from flags import * from constants import * from rhpl.simpleconfig import SimpleConfigFile import rhpl.keyboard as keyboard class Boolean: def set(self, val): self.val = val def get(self): return self.val def __init__(self, val = 0): self.val = val # Collector class for all data related to an install/upgrade. class InstallData: def reset(self): # Reset everything except: # # - The mouse # - The install language # - The keyboard self.langSupport = language.Language() self.instClass = None self.network = network.Network() self.firewall = firewall.Firewall() self.timezone = timezone.Timezone() self.accounts = users.Accounts() self.rootPassword = users.RootPassword () self.auth = users.Authentication() self.desktop = desktop.Desktop() self.grpset = None self.upgrade = Boolean() # XXX move fsset and/or diskset into Partitions object? self.fsset.reset() self.diskset = partedUtils.DiskSet() self.partitions = partitions.Partitions() self.bootloader = bootloader.getBootloader() self.dependencies = [] self.handleDeps = CHECK_DEPS self.dbpath = None self.upgradeRoot = None self.rootParts = None self.upgradeSwapInfo = None self.upgradeDeps = "" self.upgradeRemove = [] self.upgradeInfoFound = None self.configFileData = self.tmpData self.firstboot = FIRSTBOOT_DEFAULT def setInstallProgressClass(self, c): self.instProgress = c # expects a Keyboard object def setKeyboard(self, keyboard): self.keyboard = keyboard # expects a Mouse object def setMouse(self, mouse): self.mouse = mouse # expects a VideoCardInfo object def setVideoCard(self, video): self.videocard = video # expects a Monitor object def setMonitor(self, monitor): self.monitor = monitor # expects a XF86Config object def setXSetup(self, xsetup): self.xsetup = xsetup # expects 0/1 def setHeadless(self, isHeadless): self.isHeadless = isHeadless def write(self, instPath): self.langSupport.write (instPath) if not self.isHeadless: self.mouse.write(instPath) self.keyboard.write (instPath) self.network.write (instPath) self.timezone.write (instPath) self.auth.write (instPath) self.firewall.write (instPath) self.rootPassword.write (instPath, self.auth) self.accounts.write (instPath, self.auth) def writeKS(self, filename): # make it so only root can read, could have password f = open(filename, "w", 0600) f.write("# Kickstart file automatically generated by anaconda.\n\n") if self.upgrade.get(): f.write("upgrade\n"); else: f.write("install\n"); self.instLanguage.writeKS(f) self.langSupport.writeKS(f) if not self.isHeadless: self.keyboard.writeKS(f) self.mouse.writeKS(f) self.xsetup.writeKS(f, self.desktop) self.network.writeKS(f) self.rootPassword.writeKS(f, self.auth) self.firewall.writeKS(f) self.auth.writeKS(f) self.timezone.writeKS(f) self.bootloader.writeKS(f) self.partitions.writeKS(f) self.writePackagesKS(f) f.write("\n%post\n") self.accounts.writeKScommands(f, self.auth) def writePackagesKS(self, f): f.write("\n%packages") if self.handleDeps == IGNORE_DEPS: f.write(" --ignoredeps\n") elif self.handleDeps == RESOLVE_DEPS: f.write(" --resolvedeps\n") else: f.write("\n") packages = {} forcedoff = {} forcedon = {} for group in self.grpset.groups.values(): if group.isSelected(): if (group.isSelected(justManual = 1) and group.id != "base" and group.id != "core"): f.write("@ %s\n" % group.id) # handle metapkgs. this is a little weird for (pkgnevra, pkg) in group.packages.items(): if pkg["meta"] == 0: continue metapkg = self.grpset.groups[pkgnevra] # if it's optional and turned on, put it in the ks.cfg if (metapkg.isSelected() and pkg["type"] == hdrlist.PKGTYPE_OPTIONAL): f.write("@ %s\n" %(metapkg.id,)) # if it's default and turned off, then turn off the # component packages (we dont' have a -@grp syntax) elif (not metapkg.isSelected() and pkg["type"] == hdrlist.PKGTYPE_DEFAULT): for (pkgnevra, pkg) in metapkg.packages.items(): name = self.grpset.hdrlist[pkgnevra].name forcedoff[name] = 1 # handle packages for (pkgnevra, pkg) in group.packages.items(): if pkg["meta"] != 0: continue name = self.grpset.hdrlist[pkgnevra].name # if it's in base or core, it really should be installed if group.id == "base" or group.id == "core": packages[name] = 1 else: if pkg["type"] == hdrlist.PKGTYPE_MANDATORY: packages[name] = 1 else: if ((pkg["type"] == hdrlist.PKGTYPE_DEFAULT) and (pkg["state"] in hdrlist.ON_STATES)): packages[name] = 1 elif ((pkg["type"] == hdrlist.PKGTYPE_DEFAULT) and (pkg["state"] in hdrlist.OFF_STATES)): forcedoff[name] = 1 elif ((pkg["type"] == hdrlist.PKGTYPE_OPTIONAL) and (pkg["state"] in hdrlist.ON_STATES)): forcedon[name] = 1 elif ((pkg["type"] == hdrlist.PKGTYPE_OPTIONAL) and (pkg["state"] not in hdrlist.ON_STATES)): pass for pkg in self.grpset.hdrlist.values(): if ((pkg.isSelected() and pkg.manual_state == 2) or (forcedon.has_key(pkg.name))): f.write("%s\n" % pkg.name) if ((not pkg.isSelected() and pkg.manual_state == -2) or forcedoff.has_key(pkg.name)): f.write("-%s\n" %(pkg.name)) def __init__(self, extraModules, floppyDevice, configFileData, methodstr): self.instLanguage = language.InstallTimeLanguage() self.keyboard = keyboard.Keyboard() self.tmpData = configFileData self.configFileData = None self.mouse = None self.monitor = None self.videocard = None self.xsetup = None self.isHeadless = 0 self.extraModules = extraModules self.floppyDevice = floppyDevice self.fsset = fsset.FileSystemSet() # FIXME: this is a major hack to get the comps package installed self.compspkg = None self.methodstr = methodstr self.reset()