# this is the prototypical class for workstation, server, and kickstart # installs # # The interface to InstallClass is *public* -- ISVs/OEMs can customize the # install by creating a new derived type of this class. # putting these here is a bit of a hack, but we can't switch between # newtfsedit and gnomefsedit right now, so we have to put up with this FSEDIT_CLEAR_LINUX = (1 << 1) FSEDIT_CLEAR_ALL = (1 << 2) FSEDIT_USE_EXISTING = (1 << 3) import gettext from xf86config import XF86Config cat = gettext.Catalog ("anaconda", "/usr/share/locale") _ = cat.gettext class InstallClass: # ummm, HACK def finishPartitioning(self, ddruid): if not self.partitions: return attempt = [] swapCount = 0 for (mntpoint, size, maxsize, grow) in self.partitions: type = 0x83 if (mntpoint == "swap"): mntpoint = "Swap%04d-auto" % swapCount swapCount = swapCount + 1 type = 0x82 attempt.append((mntpoint, size, type, grow, -1)) try: ddruid.attempt (attempt, "Junk Argument", self.clearParts) return 1 except: # life's a female dog -- we should log something though # self.skipPartitioning = 0 self.clearPartText = None pass return 0 # look in mouse.py for a list of valid mouse names -- use the LONG names def setMouseType(self, name, device = None, emulateThreeButtons = 0): self.mouse = (name, device, emulateThreeButtons) def setLiloInformation(self, location, linear = 1, appendLine = None): # this throws an exception if there is a problem ["mbr", "partition", "none"].index(location) self.lilo = (location, linear, appendLine) def setClearParts(self, clear, warningText = None): self.clearParts = clear # XXX hack for install help text in GUI mode if clear == FSEDIT_CLEAR_LINUX: self.clearType = "wkst" if clear == FSEDIT_CLEAR_ALL: self.clearType = "svr" self.clearPartText = warningText def getLiloInformation(self): return self.lilo def getFstab(self): return self.fstab def addToFstab(self, mntpoint, dev, fstype = "ext2" , reformat = 1): self.fstab.append((mntpoint, (dev, fstype, reformat))) def setTimezoneInfo(self, timezone, asUtc = 0, asArc = 0): self.timezone = (timezone, asUtc, asArc) def getTimezoneInfo(self): return self.timezone def removeFromSkipList(self, type): if type == "partition": self.skipPartitioning = 0 self.removeFromSkipList("format") else: if self.skipSteps.has_key(type): del self.skipSteps[type] def addToSkipList(self, type): # this throws an exception if there is a problem [ "lilo", "mouse", "network", "authentication", "complete", "complete", "package-selection", "bootdisk", "partition", "format", "timezone", "accounts", "dependencies", "language", "keyboard", "xconfig", "welcome", "installtype", "mouse", "confirm-install" ].index(type) if type == "partition": self.skipPartitioning = 1 else: self.skipSteps[type] = 1 def setHostname(self, hostname): self.hostname = hostname def getHostname(self): return self.hostname def setAuthentication(self, useShadow, useMd5, useNIS = 0, nisDomain = "", nisBroadcast = 0, nisServer = ""): self.auth = ( useShadow, useMd5, useNIS, nisDomain, nisBroadcast, nisServer) def getAuthentication(self): return self.auth def skipStep(self, step): return self.skipSteps.has_key(step) def configureX(self, server, card, monitor, hsync, vsync, noProbe, startX): self.x = XF86Config(mouse = None) if (not noProbe): self.x.probe() #cjs if not self.x.server: #cjs self.x.setVidcard (card) #cjs -- the following was taken from 7.0 if not self.x.server: if (card != None): self.x.setVidcardByName (card) elif (server != None): self.x.setVidcardByServer (server) else: raise RuntimeError, "Could not probe video card and no fallback specified." #cjs -- up to here if not self.x.monID and monitor: self.x.setMonitor((monitor, (None, None))) elif hsync and vsync: self.x.setMonitor((None, (hsync, vsync))) if startX: self.defaultRunlevel = 5 # Groups is a list of group names -- the full list can be found in # ths comps file for each release def setGroups(self, groups): self.groups = groups def getGroups(self): return self.groups # This is a list of packages -- it is combined with the group list def setPackages(self, packages): self.packages = packages def getPackages(self): return self.packages def doRootPw(self, pw, isCrypted = 0): self.rootPassword = pw self.isCrypted = isCrypted def getMakeBootdisk(self): return self.makeBootdisk def setNetwork(self, bootproto, ip, netmask, gateway, nameserver): self.bootProto = bootproto self.ip = ip self.netmask = netmask self.gateway = gateway self.nameserver = nameserver def setZeroMbr(self, state): self.zeroMbr = state def getNetwork(self): return (self.bootProto, self.ip, self.netmask, self.gateway, self.nameserver) def setEarlySwapOn(self, state = 0): self.earlySwapOn = state def setLanguage(self, lang): self.language = lang def setKeyboard(self, kb): self.keyboard = kb def setPostScript(self, postScript, inChroot = 1): if self.postScript: self.postScript = self.postScript + postScript else: self.postScript = postScript # self.FermiScript = postScript #cjs above changed so that we do not overwrite what kickstart post says self.postInChroot = inChroot def __init__(self): self.skipSteps = {} self.hostname = None self.lilo = ("mbr", 0, "") self.groups = None self.packages = None self.makeBootdisk = 0 self.timezone = None self.setAuthentication(1, 1, 0) self.rootPassword = None self.isCrypted = 0 self.installType = None self.bootProto = None self.ip = "" self.netmask = "" self.gateway = "" self.nameserver = "" self.partitions = [] self.skipPartitioning = 0 self.clearParts = 0 self.clearType = None self.clearText = None self.clearPartText = None self.zeroMbr = 0 self.language = None self.keyboard = None self.mouse = None self.x = None self.defaultRunlevel = None self.postScript = None self.postInChroot = 0 self.fstab = [] self.earlySwapOn = 0 self.desktop = "" # we need to be able to differentiate between this and custom class DefaultInstall(InstallClass): def __init__(self): InstallClass.__init__(self) # custom installs are easy :-) class CustomInstall(InstallClass): def __init__(self): InstallClass.__init__(self) # GNOME and KDE installs are derived from this class Workstation(InstallClass): def __init__(self): InstallClass.__init__(self) self.setHostname("localhost.localdomain") self.addToSkipList("lilo") self.addToSkipList("authentication") self.addToSkipList("bootdisk") self.addToSkipList("partition") self.addToSkipList("package-selection") self.addToSkipList("format") self.partitions.append(('/boot', 16, 16, 0)) self.partitions.append(('/', 500, 500, 1)) self.partitions.append(('swap', 64, 64, 0)) self.setClearParts(FSEDIT_CLEAR_LINUX, warningText = _("You are about to erase any preexisting Linux " "installations on your system.")) class GNOMEWorkstation(Workstation): def __init__(self): Workstation.__init__(self) self.desktop = "GNOME" self.setGroups(["GNOME Workstation"]) self.addToSkipList("package-selection") class KDEWorkstation(Workstation): def __init__(self): Workstation.__init__(self) self.desktop = "KDE" self.setGroups(["KDE Workstation"]) class Server(InstallClass): def __init__(self): InstallClass.__init__(self) self.setGroups(["Server"]) self.setHostname("localhost.localdomain") self.addToSkipList("lilo") self.addToSkipList("package-selection") self.addToSkipList("authentication") self.addToSkipList("bootdisk") self.addToSkipList("partition") self.addToSkipList("format") self.partitions.append(('/boot', 16, 16, 0)) self.partitions.append(('/', 256, 256, 0)) self.partitions.append(('/usr', 512, 512, 1)) self.partitions.append(('/var', 256, 256, 0)) self.partitions.append(('/home', 512, 512, 1)) self.partitions.append(('swap', 64, 64, 1)) self.setClearParts(FSEDIT_CLEAR_ALL, warningText = _("You are about to erase ALL DATA on your hard " + \ "drive to make room for your Linux installation."))