RE: Changing what gets loaded

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Humm...

Under roswell the Base package is always installed whatever your ks looks
like. I have made a patch that adds --nobase to the %package directive. No
need to touch comps. Here is the patch to anaconda (the patch is bigger than
is should because emacs replaced tabs with spaces in the indentation).

Noted that this patch also includes a --satisfy-dependencies in addition to
--nobase so that if you have missing dependencies, it will include them
automatically instead of showing your the ugly screen. This makes your
ks.cfg short and sweet :))

This patch also adds a --nopasswd to the rootpw in the case your machine is
really insecure and you dont even want a rootpw (which is mostly always a
bad idea).

Daniel Shane.


PATCH: for 7.1.94 (roswell)



diff -durpN anaconda-7.1.94.orig/dispatch.py anaconda-7.1.94/dispatch.py
--- anaconda-7.1.94.orig/dispatch.py	Tue Sep 18 15:43:05 2001
+++ anaconda-7.1.94/dispatch.py	Fri Sep 21 16:44:12 2001
@@ -40,8 +40,8 @@ from network import networkDeviceCheck
 #
 # items are one of
 #
-#	( name, tuple)
-#	( name, Function, tuple)
+#       ( name, tuple)
+#       ( name, Function, tuple)
 #
 # in the second case, the function is called directly from the dispatcher
 
@@ -100,7 +100,7 @@ installSteps = [
                                           "id", "instPath")),
     ("checkdeps", checkDependencies, ("dir", "intf", "dispatch",
                                       "id", "instPath")),
-    ("dependencies", ("id.comps", "id.dependencies")),
+    ("dependencies", ("id.comps", "id.dependencies",
"id.satisfyDependencies")),
     ("videocard", ("dispatch", "id.xconfig", "id.videocard", "intf")),
     ("confirminstall", ()),
     ("confirmupgrade", ()),
@@ -134,12 +134,12 @@ installSteps = [
 class Dispatcher:
 
     def gotoPrev(self):
-	self.dir = -1
-	self.moveStep()
+        self.dir = -1
+        self.moveStep()
 
     def gotoNext(self):
-	self.dir = 1
-	self.moveStep()
+        self.dir = 1
+        self.moveStep()
 
     def canGoBack(self):
         # begin with the step before this one.  If all steps are skipped,
@@ -157,107 +157,107 @@ class Dispatcher:
             if state == 1:
                 del self.skipSteps[step]
 
-	stepExists = {}
-	for step in installSteps:
-	    name = step[0]
-	    if not name in steps:
-		self.skipSteps[name] = 1
+        stepExists = {}
+        for step in installSteps:
+            name = step[0]
+            if not name in steps:
+                self.skipSteps[name] = 1
 
-	    stepExists[name] = 1
+            stepExists[name] = 1
 
-	for name in steps:
-	    if not stepExists.has_key(name):
-		raise KeyError, ("step %s does not exist" % name)
+        for name in steps:
+            if not stepExists.has_key(name):
+                raise KeyError, ("step %s does not exist" % name)
 
     def stepInSkipList(self, step):
-	return self.skipSteps.has_key(step)
+        return self.skipSteps.has_key(step)
 
     def skipStep(self, stepToSkip, skip = 1, permanent = 0):
-	for step in installSteps:
-	    name = step[0]
-	    if name == stepToSkip:
-		if skip:
+        for step in installSteps:
+            name = step[0]
+            if name == stepToSkip:
+                if skip:
                     if permanent:
                         self.skipSteps[name] = 2
                     else:
                         self.skipSteps[name] = 1
-		elif self.skipSteps.has_key(name):
-		    del self.skipSteps[name]
-		return
+                elif self.skipSteps.has_key(name):
+                    del self.skipSteps[name]
+                return
 
-	raise KeyError, ("unknown step %s" % stepToSkip)
+        raise KeyError, ("unknown step %s" % stepToSkip)
 
     def moveStep(self):
-	if self.step == None:
-	    self.step = self.firstStep
-	else:
-	    self.step = self.step + self.dir
+        if self.step == None:
+            self.step = self.firstStep
+        else:
+            self.step = self.step + self.dir
 
-	if self.step >= len(installSteps):
-	    return None
+        if self.step >= len(installSteps):
+            return None
 
-	while ((self.step >= self.firstStep
+        while ((self.step >= self.firstStep
                 and self.step < len(installSteps))
                and (self.skipSteps.has_key(installSteps[self.step][0])
                     or (type(installSteps[self.step][1]) ==
FunctionType))):
-	    info = installSteps[self.step]
-	    if ((type(info[1]) == FunctionType)
+            info = installSteps[self.step]
+            if ((type(info[1]) == FunctionType)
                 and (not self.skipSteps.has_key(info[0]))):
-		(func, args) = info[1:]
-		rc = apply(func, self.bindArgs(args))
-		if rc == DISPATCH_BACK:
-		    self.dir = -1
-		elif rc == DISPATCH_FORWARD:
-		    self.dir = 1
-		# if anything else, leave self.dir alone
+                (func, args) = info[1:]
+                rc = apply(func, self.bindArgs(args))
+                if rc == DISPATCH_BACK:
+                    self.dir = -1
+                elif rc == DISPATCH_FORWARD:
+                    self.dir = 1
+                # if anything else, leave self.dir alone
 
-	    self.step = self.step + self.dir
-	    if self.step == len(installSteps):
-		return None
+            self.step = self.step + self.dir
+            if self.step == len(installSteps):
+                return None
 
-	if (self.step < 0):
-	    # pick the first step not in the skip list
-	    self.step = 0
-	    while self.skipSteps.has_key(installSteps[self.step][0]):
-		self.step = self.step + 1
-	elif self.step >= len(installSteps):
-	    self.step = len(installSteps) - 1
-	    while self.skipSteps.has_key(installSteps[self.step][0]):
-		self.step = self.step - 1
+        if (self.step < 0):
+            # pick the first step not in the skip list
+            self.step = 0
+            while self.skipSteps.has_key(installSteps[self.step][0]):
+                self.step = self.step + 1
+        elif self.step >= len(installSteps):
+            self.step = len(installSteps) - 1
+            while self.skipSteps.has_key(installSteps[self.step][0]):
+                self.step = self.step - 1
 
     def bindArgs(self, args):
-	newArgs = ()
-	for arg in args:
-	    obj = self
-	    for item in string.split(arg, '.'):
-		if not obj.__dict__.has_key(item):
-		    print "cannot find %s in %s" % (item, obj)
-		obj = obj.__dict__[item]
-	    newArgs = newArgs + (obj,)
+        newArgs = ()
+        for arg in args:
+            obj = self
+            for item in string.split(arg, '.'):
+                if not obj.__dict__.has_key(item):
+                    print "cannot find %s in %s" % (item, obj)
+                obj = obj.__dict__[item]
+            newArgs = newArgs + (obj,)
 
-	return newArgs
+        return newArgs
 
     def currentStep(self):
-	if self.step == None:
-	    self.gotoNext()
-	elif self.step >= len(installSteps):
-	    return (None, None)
+        if self.step == None:
+            self.gotoNext()
+        elif self.step >= len(installSteps):
+            return (None, None)
 
-	stepInfo = installSteps[self.step]
-	step = stepInfo[0]
-	args = self.bindArgs(stepInfo[1])
+        stepInfo = installSteps[self.step]
+        step = stepInfo[0]
+        args = self.bindArgs(stepInfo[1])
 
-	return (step, args)
+        return (step, args)
 
     def __init__(self, intf, id, method, instPath):
-	self.dir = DISPATCH_FORWARD
-	self.step = None
-	self.skipSteps = {}
+        self.dir = DISPATCH_FORWARD
+        self.step = None
+        self.skipSteps = {}
 
-	self.id = id
-	self.flags = flags
-	self.intf = intf
-	self.method = method
-	self.dispatch = self
-	self.instPath = instPath
-	self.firstStep = 0
+        self.id = id
+        self.flags = flags
+        self.intf = intf
+        self.method = method
+        self.dispatch = self
+        self.instPath = instPath
+        self.firstStep = 0
diff -durpN anaconda-7.1.94.orig/kickstart.py anaconda-7.1.94/kickstart.py
--- anaconda-7.1.94.orig/kickstart.py	Mon Aug 13 15:04:50 2001
+++ anaconda-7.1.94/kickstart.py	Fri Sep 21 16:42:52 2001
@@ -11,112 +11,125 @@ import string
 
 class Script:
     def __repr__(self):
-	str = ("(s: '%s' i: %s c: %d)") %  \
-	    (self.script, self.interp, self.inChroot)
-	return string.replace(str, "\n", "|")
+        str = ("(s: '%s' i: %s c: %d)") %  \
+            (self.script, self.interp, self.inChroot)
+        return string.replace(str, "\n", "|")
 
     def __init__(self, script, interp, inChroot):
-	self.script = script
-	self.interp = interp
-	self.inChroot = inChroot
+        self.script = script
+        self.interp = interp
+        self.inChroot = inChroot
 
     def run(self, chroot, serial):
-	scriptRoot = "/"
-	if self.inChroot:
-	    scriptRoot = chroot
+        scriptRoot = "/"
+        if self.inChroot:
+            scriptRoot = chroot
 
-	path = scriptRoot + "/tmp/ks-script"
+        path = scriptRoot + "/tmp/ks-script"
 
-	f = open(path, "w")
-	f.write(self.script)
-	f.close()
-	os.chmod(path, 0700)
+        f = open(path, "w")
+        f.write(self.script)
+        f.close()
+        os.chmod(path, 0700)
 
-	if serial:
-	    messages = "/tmp/ks-script.log"
-	else:
-	    messages = "/dev/tty3"
+        if serial:
+            messages = "/tmp/ks-script.log"
+        else:
+            messages = "/dev/tty3"
 
-	iutil.execWithRedirect (self.interp, [self.interp, "/tmp/ks-script"
], 
-		stdout = messages, stderr = messages, root = scriptRoot)
-				
-	os.unlink(path)
+        iutil.execWithRedirect (self.interp, [self.interp, "/tmp/ks-script"
], 
+                stdout = messages, stderr = messages, root = scriptRoot)
+                                
+        os.unlink(path)
 
 class KickstartBase(BaseInstallClass):
     name = "kickstart"
     
     def postAction(self, rootPath, serial):
-	for script in self.postScripts:
-	    script.run(rootPath, serial)
+        for script in self.postScripts:
+            script.run(rootPath, serial)
 
     def doRootPw(self, id, args):
-	(args, extra) = isys.getopt(args, '', [ 'iscrypted' ])
-
-	isCrypted = 0
-	for n in args:
-	    (str, arg) = n
-	    if (str == '--iscrypted'):
-		isCrypted = 1
+        (args, extra) = isys.getopt(args, '', [ 'iscrypted', 'nopasswd' ])
+        
+        isCrypted = 0
+        noRootPasswd  = 0
+        for n in args:
+            (str, arg) = n
+            if str == '--iscrypted':
+                isCrypted = 1
+            elif str == '--nopasswd':
+                noRootPasswd = 1
                 
-	if len(extra) != 1:
-	    raise ValueError, "a single argument is expected to rootPw"
-
-	self.setRootPassword(id, extra[0], isCrypted = isCrypted)
-	self.skipSteps.append("accounts")
-	
+        if isCrypted == 1 and noRootPasswd == 1:   
+            raise ValueError, "rootpw: --iscrypted and --nopasswd do not
work together"
+        if noRootPasswd == 1 and len(extra) != 0:   
+            raise ValueError, "no argument is expected to rootpw
--nopasswd"
+        if noRootPasswd == 0 and len(extra) != 1:     
+            raise ValueError, "rootpw: To many arguments."      
+            
+
+
+        if noRootPasswd == 1:
+            self.setRootPassword(id, "", isCrypted = 1)
+        else:
+            self.setRootPassword(id, extra[0], isCrypted = isCrypted)
+            
+        self.skipSteps.append("accounts")
+        
     def doFirewall(self, id, args):
-	(args, extra) = isys.getopt(args, '',
-		[ 'dhcp', 'ssh', 'telnet', 'smtp', 'http', 'ftp',
-		  'port=', 'high', 'medium', 'disabled', 'trust=' ])
-		  
-	dhcp = 0
-	ssh = 0
-	telnet = 0
-	smtp = 0
-	http = 0
-	ftp = 0
-	policy = 0
-	enable = -1
-	trusts = []
-	ports = ""
-	
-	for n in args:
-	    (str, arg) = n
-	    if str == '--dhcp':
-		dhcp = 1
-	    elif str == '--ssh':
-		ssh = 1
-	    elif str == '--telnet':
-		telnet = 1
-	    elif str == '--smtp':
-		smtp = 1
-	    elif str == '--http':
-		http = 1
-	    elif str == '--ftp':
-		ftp = 1
-	    elif str == '--high':
-		policy = 0
-		enable = 1
-	    elif str == '--medium':
-		policy = 1
-		enable = 1
-	    elif str == '--disabled':
-		enable = 0
-	    elif str == '--trust':
-		trusts.append(arg)
-	    elif str == '--port':
-		if ports:
-		    ports = '%s %s' % (ports, arg)
-		else:
-		    ports = arg
-	    
-	self.setFirewall(id, enable, policy, trusts, ports, dhcp, ssh,
telnet,
-			smtp, http, ftp)
-	    
+        (args, extra) = isys.getopt(args, '',
+                [ 'dhcp', 'ssh', 'telnet', 'smtp', 'http', 'ftp',
+                  'port=', 'high', 'medium', 'disabled', 'trust=' ])
+                  
+        dhcp = 0
+        ssh = 0
+        telnet = 0
+        smtp = 0
+        http = 0
+        ftp = 0
+        policy = 0
+        enable = -1
+        trusts = []
+        ports = ""
+        
+        for n in args:
+            (str, arg) = n
+            if str == '--dhcp':
+                dhcp = 1
+            elif str == '--ssh':
+                ssh = 1
+            elif str == '--telnet':
+                telnet = 1
+            elif str == '--smtp':
+                smtp = 1
+            elif str == '--http':
+                http = 1
+            elif str == '--ftp':
+                ftp = 1
+            elif str == '--high':
+                policy = 0
+                enable = 1
+            elif str == '--medium':
+                policy = 1
+                enable = 1
+            elif str == '--disabled':
+                enable = 0
+            elif str == '--trust':
+                trusts.append(arg)
+            elif str == '--port':
+                if ports:
+                    ports = '%s %s' % (ports, arg)
+                else:
+                    ports = arg
+            
+        self.setFirewall(id, enable, policy, trusts, ports, dhcp, ssh,
telnet,
+                        smtp, http, ftp)
+            
     def doAuthconfig(self, id, args):
-	(args, extra) = isys.getopt(args, '',
+        (args, extra) = isys.getopt(args, '',
                 [ 'useshadow', 'enableshadow',
-		  'enablemd5',
+                  'enablemd5',
                   'enablenis', 'nisdomain=', 'nisserver=',
                   'enableldap', 'enableldapauth', 'ldapserver=',
'ldapbasedn=',
                   'enableldaptls', 
@@ -125,14 +138,14 @@ class KickstartBase(BaseInstallClass):
                   'enablesmbauth', 'smbservers=', 'smbworkgroup=',
                   'enablecache'])
 
-	useShadow = 0
+        useShadow = 0
 
-	useMd5 = 0
+        useMd5 = 0
 
-	useNis = 0
-	nisServer = ""
-	nisDomain = ""
-	nisBroadcast = 0
+        useNis = 0
+        nisServer = ""
+        nisDomain = ""
+        nisBroadcast = 0
 
         useLdap = 0
         useLdapauth = 0
@@ -154,19 +167,19 @@ class KickstartBase(BaseInstallClass):
         smbWorkgroup = ""
 
         enableCache = 0
-	
-	for n in args:
-	    (str, arg) = n
-	    if (str == '--enablenis'):
-		useNis = 1
-	    elif (str == '--useshadow') or (str == '--enableshadow'):
-		useShadow = 1
-	    elif (str == '--enablemd5'):
-		useMd5 = 1
-	    elif (str == '--nisserver'):
-		nisServer = arg
-	    elif (str == '--nisdomain'):
-		nisDomain = arg
+        
+        for n in args:
+            (str, arg) = n
+            if (str == '--enablenis'):
+                useNis = 1
+            elif (str == '--useshadow') or (str == '--enableshadow'):
+                useShadow = 1
+            elif (str == '--enablemd5'):
+                useMd5 = 1
+            elif (str == '--nisserver'):
+                nisServer = arg
+            elif (str == '--nisdomain'):
+                nisDomain = arg
             elif (str == '--enableldap'):
                 useLdap = 1
             elif (str == '--enableldapauth'):
@@ -201,9 +214,9 @@ class KickstartBase(BaseInstallClass):
                 enableCache = 1
                 
 
-	if useNis and not nisServer: nisBroadcast = 1
-	    
-	self.setAuthentication(id, useShadow, useMd5,
+        if useNis and not nisServer: nisBroadcast = 1
+            
+        self.setAuthentication(id, useShadow, useMd5,
                                useNis, nisDomain, nisBroadcast, nisServer,
                                useLdap, useLdapauth, ldapServer,
                                ldapBasedn, useLdaptls,
@@ -212,7 +225,7 @@ class KickstartBase(BaseInstallClass):
                                useSamba, smbServers, smbWorkgroup,
                                enableCache)
         
-	self.skipSteps.append("authentication")
+        self.skipSteps.append("authentication")
 
     def doBootloader (self, id, args, useLilo = 0):
         (args, extra) = isys.getopt(args, '',
@@ -235,10 +248,10 @@ class KickstartBase(BaseInstallClass):
                 location = arg
             elif str == '--useLilo':
                 useLilo = 1
-	    elif str == '--linear':
-		linear = 1
-	    elif str == '--nolinear':
-		linear = 0
+            elif str == '--linear':
+                linear = 1
+            elif str == '--nolinear':
+                linear = 0
             elif str == '--lba32':
                 forceLBA = 1
             elif str == '--password':
@@ -258,85 +271,85 @@ class KickstartBase(BaseInstallClass):
         self.skipSteps.append("bootloader")
         self.skipSteps.append("bootloaderpassword")
 
-    def doLilo	(self, id, args):
+    def doLilo  (self, id, args):
         self.doBootloader(id, args, useLilo = 1)
         
     def doLiloCheck (self, args):
         drives = isys.hardDriveDict ().keys()
-	drives.sort(isys.compareDrives)
-	device = drives[0]
-	isys.makeDevInode(device, '/tmp/' + device)
-	fd = os.open('/tmp/' + device, os.O_RDONLY)
-	os.unlink('/tmp/' + device)
-	block = os.read(fd, 512)
-	os.close(fd)
-	if block[6:10] == "LILO":
-	    sys.exit(0)
+        drives.sort(isys.compareDrives)
+        device = drives[0]
+        isys.makeDevInode(device, '/tmp/' + device)
+        fd = os.open('/tmp/' + device, os.O_RDONLY)
+        os.unlink('/tmp/' + device)
+        block = os.read(fd, 512)
+        os.close(fd)
+        if block[6:10] == "LILO":
+            sys.exit(0)
 
     def doTimezone(self, id, args):
-	(args, extra) = isys.getopt(args, '',
-		[ 'utc' ])
+        (args, extra) = isys.getopt(args, '',
+                [ 'utc' ])
 
-	isUtc = 0
-	
-	for n in args:
-	    (str, arg) = n
-	    if str == '--utc':
-		isUtc = 1
+        isUtc = 0
+        
+        for n in args:
+            (str, arg) = n
+            if str == '--utc':
+                isUtc = 1
 
-	self.setTimezoneInfo(id, extra[0], asUtc = isUtc)
+        self.setTimezoneInfo(id, extra[0], asUtc = isUtc)
 
-	self.skipSteps.append("timezone")
+        self.skipSteps.append("timezone")
 
 
     def doXconfig(self, id, args):
-	(args, extra) = isys.getopt(args, '',
-		[ 'server=', 'card=', 'videoram=',
+        (args, extra) = isys.getopt(args, '',
+                [ 'server=', 'card=', 'videoram=',
                   'monitor=', 'hsync=', 'vsync=',
                   'resolution=', 'depth=', 
-		  'startxonboot', 'noprobe', 'defaultdesktop=' ])
+                  'startxonboot', 'noprobe', 'defaultdesktop=' ])
 
-	if extra:
-	    raise ValueError, "unexpected arguments to xconfig command"
+        if extra:
+            raise ValueError, "unexpected arguments to xconfig command"
 
-	server = None
-	card = None
+        server = None
+        card = None
         videoRam = None
-	monitor = None
-	hsync = None
-	vsync = None
+        monitor = None
+        hsync = None
+        vsync = None
         resolution = None
         depth = None
         noProbe = 0
-	startX = 0
+        startX = 0
         defaultdesktop = ""
 
-	for n in args:
-	    (str, arg) = n
-	    if (str == "--noprobe"):
-		noProbe = 1
-	    elif (str == "--server"):
-		server = arg
-	    elif (str == "--card"):
-		card = arg
+        for n in args:
+            (str, arg) = n
+            if (str == "--noprobe"):
+                noProbe = 1
+            elif (str == "--server"):
+                server = arg
+            elif (str == "--card"):
+                card = arg
             elif (str == "--videoram"):
                 videoRam = arg
-	    elif (str == "--monitor"):
-		monitor = arg
-	    elif (str == "--hsync"):
-		hsync = arg
-	    elif (str == "--vsync"):
-		vsync = arg
+            elif (str == "--monitor"):
+                monitor = arg
+            elif (str == "--hsync"):
+                hsync = arg
+            elif (str == "--vsync"):
+                vsync = arg
             elif (str == "--resolution"):
                 resolution = arg
             elif (str == "--depth"):
                 depth = arg
-	    elif (str == "--startxonboot"):
-		startX = 1
+            elif (str == "--startxonboot"):
+                startX = 1
             elif (str == "--defaultdesktop"):
                 defaultdesktop = arg
 
-	self.configureX(id, server, card, videoRam, monitor, hsync, vsync,
+        self.configureX(id, server, card, videoRam, monitor, hsync, vsync,
                         resolution, depth, noProbe, startX)
         self.setDesktop(id, defaultdesktop)
 
@@ -347,44 +360,44 @@ class KickstartBase(BaseInstallClass):
 
 
     def doUpgrade(self, id, args):
-	self.installType = "upgrade"
+        self.installType = "upgrade"
 
     def doNetwork(self, id, args):
-	# nodns is only used by the loader
-	(args, extra) = isys.getopt(args, '',
-		[ 'bootproto=', 'ip=', 'netmask=', 'gateway=',
'nameserver=',
-		  'nodns', 'device=', 'hostname='])
-	bootProto = "dhcp"
-	ip = None
-	netmask = ""
-	gateway = ""
-	nameserver = ""
-	hostname = ""
+        # nodns is only used by the loader
+        (args, extra) = isys.getopt(args, '',
+                [ 'bootproto=', 'ip=', 'netmask=', 'gateway=',
'nameserver=',
+                  'nodns', 'device=', 'hostname='])
+        bootProto = "dhcp"
+        ip = None
+        netmask = ""
+        gateway = ""
+        nameserver = ""
+        hostname = ""
         device = None
-	for n in args:
-	    (str, arg) = n
-	    if str == "--bootproto":
-		bootProto = arg
-	    elif str == "--ip":
-		ip = arg
-	    elif str == "--netmask":
-		netmask = arg
-	    elif str == "--gateway":
-		gateway = arg
-	    elif str == "--nameserver":
-		nameserver = arg
-	    elif str == "--device":
-		device = arg
-	    elif str == "--hostname":
-		hostname = arg
+        for n in args:
+            (str, arg) = n
+            if str == "--bootproto":
+                bootProto = arg
+            elif str == "--ip":
+                ip = arg
+            elif str == "--netmask":
+                netmask = arg
+            elif str == "--gateway":
+                gateway = arg
+            elif str == "--nameserver":
+                nameserver = arg
+            elif str == "--device":
+                device = arg
+            elif str == "--hostname":
+                hostname = arg
 
-	self.setNetwork(id, bootProto, ip, netmask, gateway, nameserver,
device=device)
-	if hostname != "":
-	    self.setHostname(id, hostname)
+        self.setNetwork(id, bootProto, ip, netmask, gateway, nameserver,
device=device)
+        if hostname != "":
+            self.setHostname(id, hostname)
 
     def doLang(self, id, args):
         self.setLanguage(id, args[0])
-	self.skipSteps.append("language")
+        self.skipSteps.append("language")
 
     def doLangSupport (self, id, args):
         (args, extra) = isys.getopt(args, '', [ 'default=' ])
@@ -397,28 +410,28 @@ class KickstartBase(BaseInstallClass):
     def doKeyboard(self, id, args):
         self.setKeyboard(id, args[0])
         id.keyboard.beenset = 1
-	self.skipSteps.append("keyboard")
+        self.skipSteps.append("keyboard")
 
     def doZeroMbr(self, id, args):
         self.setZeroMbr(id, 1)
 
     def doMouse(self, id, args):
-	(args, extra) = isys.getopt(args, '', [ 'device=', 'emulthree' ])
+        (args, extra) = isys.getopt(args, '', [ 'device=', 'emulthree' ])
         mouseType = "none"
-	device = None
-	emulThree = 0
+        device = None
+        emulThree = 0
 
-	for n in args:
-	    (str, arg) = n
-	    if str == "--device":
-		device = arg
-	    elif str == "--emulthree":
-		emulThree = 1
+        for n in args:
+            (str, arg) = n
+            if str == "--device":
+                device = arg
+            elif str == "--emulthree":
+                emulThree = 1
 
-	if extra:
-	    mouseType = extra[0]
+        if extra:
+            mouseType = extra[0]
 
-	if mouseType != "none":
+        if mouseType != "none":
             self.setMouse(id, mouseType, device, emulThree)
 
         self.skipSteps.append("mouse")
@@ -441,97 +454,110 @@ class KickstartBase(BaseInstallClass):
         flags.autostep = 1
 
     def readKickstart(self, id, file):
-	handlers = { 
-		     "auth"		: self.doAuthconfig	,
-		     "authconfig"	: self.doAuthconfig	,
-		     "cdrom"		: None			,
-		     "clearpart"	: self.doClearPart	,
-		     "device"		: None			,
-		     "deviceprobe"	: None			,
-		     "driverdisk"	: None			,
-		     "firewall"		: self.doFirewall	,
-		     "harddrive"	: None			,
-		     "install"		: None          	,
-		     "keyboard"		: self.doKeyboard	,
-		     "lang"		: self.doLang		,
-                     "langsupport"	: self.doLangSupport	,
-		     "lilo"		: self.doLilo		,
+        handlers = { 
+                     "auth"             : self.doAuthconfig     ,
+                     "authconfig"       : self.doAuthconfig     ,
+                     "cdrom"            : None                  ,
+                     "clearpart"        : self.doClearPart      ,
+                     "device"           : None                  ,
+                     "deviceprobe"      : None                  ,
+                     "driverdisk"       : None                  ,
+                     "firewall"         : self.doFirewall       ,
+                     "harddrive"        : None                  ,
+                     "install"          : None                  ,
+                     "keyboard"         : self.doKeyboard       ,
+                     "lang"             : self.doLang           ,
+                     "langsupport"      : self.doLangSupport    ,
+                     "lilo"             : self.doLilo           ,
                      "bootloader"       : self.doBootloader     ,
-		     "lilocheck"	: self.doLiloCheck	,
-		     "mouse"		: self.doMouse		,
-		     "network"		: self.doNetwork	,
-		     "nfs"		: None			,
-		     "part"		: self.definePartition	,
-		     "partition"	: self.definePartition	,
-		     "raid"		: self.defineRaid	,
-		     "reboot"		: self.doReboot		,
-		     "rootpw"		: self.doRootPw		,
-		     "skipx"		: self.doSkipX		,
-		     "text"		: None			,
-		     "timezone"		: self.doTimezone	,
-		     "url"		: None			,
-		     "upgrade"		: self.doUpgrade	,
-		     "xconfig"		: self.doXconfig	,
-		     "xdisplay"		: None			,
-		     "zerombr"		: self.doZeroMbr	,
+                     "lilocheck"        : self.doLiloCheck      ,
+                     "mouse"            : self.doMouse          ,
+                     "network"          : self.doNetwork        ,
+                     "nfs"              : None                  ,
+                     "part"             : self.definePartition  ,
+                     "partition"        : self.definePartition  ,
+                     "raid"             : self.defineRaid       ,
+                     "reboot"           : self.doReboot         ,
+                     "rootpw"           : self.doRootPw         ,
+                     "skipx"            : self.doSkipX          ,
+                     "text"             : None                  ,
+                     "timezone"         : self.doTimezone       ,
+                     "url"              : None                  ,
+                     "upgrade"          : self.doUpgrade        ,
+                     "xconfig"          : self.doXconfig        ,
+                     "xdisplay"         : None                  ,
+                     "zerombr"          : self.doZeroMbr        ,
                      "interactive"      : self.doInteractive    ,
                      "autostep"         : self.doAutoStep       ,
-		   }
+                   }
 
-	where = "commands"
-	packages = []
-	groups = []
+        where = "commands"
+        packages = []
+        groups = []
         excludedPackages = []
-	for n in open(file).readlines():
-	    args = isys.parseArgv(n)
+        for n in open(file).readlines():
+            args = isys.parseArgv(n)
 
-	    # don't eliminate white space or comments from scripts
-	    if where != "pre" and where != "post":
-		if not args or args[0][0] == '#': continue
+            # don't eliminate white space or comments from scripts
+            if where != "pre" and where != "post":
+                if not args or args[0][0] == '#': continue
 
-	    if args and (args[0] == "%post" or args[0] == "%pre"):
-		if where =="pre" or where == "post":
-		    s = Script(script, scriptInterp, scriptChroot)
-		    if where == "pre":
-			self.preScripts.append(s)
-		    else:
-			self.postScripts.append(s)
+            if args and (args[0] == "%post" or args[0] == "%pre"):
+                if where =="pre" or where == "post":
+                    s = Script(script, scriptInterp, scriptChroot)
+                    if where == "pre":
+                        self.preScripts.append(s)
+                    else:
+                        self.postScripts.append(s)
 
-		where = args[0][1:]
-		args = isys.parseArgv(n)
+                where = args[0][1:]
+                args = isys.parseArgv(n)
 
-		scriptInterp = "/bin/sh"
-		if where == "pre":
-		    scriptChroot = 0
-		else:
-		    scriptChroot = 1
+                scriptInterp = "/bin/sh"
+                if where == "pre":
+                    scriptChroot = 0
+                else:
+                    scriptChroot = 1
 
-		script = ""
+                script = ""
 
-		argList = [ 'interpreter=' ]
-		if where == "post":
-		    argList.append('nochroot')
+                argList = [ 'interpreter=' ]
+                if where == "post":
+                    argList.append('nochroot')
 
-		(args, extra) = isys.getopt(args, '', argList)
-		for n in args:
-		    (str, arg) = n
-		    
-		    if str == "--nochroot":
-			scriptChroot = 0
-		    elif str == "--interpreter":
-			scriptInterp = arg
+                (args, extra) = isys.getopt(args, '', argList)
+                for n in args:
+                    (str, arg) = n
+                    
+                    if str == "--nochroot":
+                        scriptChroot = 0
+                    elif str == "--interpreter":
+                        scriptInterp = arg
 
-	    elif args and args[0] == "%packages":
-		if where =="pre" or where == "post":
-		    s = Script(script, scriptInterp, scriptChroot)
-		    if where == "pre":
-			self.preScripts.append(s)
-		    else:
-			self.postScripts.append(s)
+            elif args and args[0] == "%packages":
+                (args, extra) = isys.getopt(args, '', [ 'nobase',
'satisfy-dependencies' ])
 
-		where = "packages"
-	    else:
-		if where == "packages":
+                id.noBase = 0
+                id.satisfyDependencies = 0
+                
+                for n in args:
+                    (str, arg) = n
+
+                    if str == "--nobase":
+                        id.noBase = 1
+                    elif str == "--satisfy-dependencies":
+                        id.satisfyDependencies = 1
+                    
+                if where =="pre" or where == "post":
+                    s = Script(script, scriptInterp, scriptChroot)
+                    if where == "pre":
+                        self.preScripts.append(s)
+                    else:
+                        self.postScripts.append(s)
+
+                where = "packages"
+            else:
+                if where == "packages":
                     #Scan for comments in package list...drop off
everything after "#" mark
                     try:
                         ind = string.index(n, "#")
@@ -540,47 +566,47 @@ class KickstartBase(BaseInstallClass):
                         #No "#" found in line
                         pass
                     
-		    if n[0] == '@':
-			n = n[1:]
+                    if n[0] == '@':
+                        n = n[1:]
                         n = string.strip (n)
-			groups.append(n)
+                        groups.append(n)
                     elif n[0] == '-':
                         n = n[1:]
                         n = string.strip(n)
                         excludedPackages.append(n)
-		    else:
+                    else:
                         n = string.strip (n)
-			packages.append(n)
-		elif where == "commands":
-		    if handlers[args[0]]:
-			handlers[args[0]](id, args[1:])
-		elif where == "pre" or where == "post":
-		    script = script + n
-		else:
-		    raise SyntaxError, "I'm lost in kickstart"
+                        packages.append(n)
+                elif where == "commands":
+                    if handlers[args[0]]:
+                        handlers[args[0]](id, args[1:])
+                elif where == "pre" or where == "post":
+                    script = script + n
+                else:
+                    raise SyntaxError, "I'm lost in kickstart"
 
-	self.groupList = groups
-	self.packageList = packages
+        self.groupList = groups
+        self.packageList = packages
         self.excludedList = excludedPackages
 
         # test to see if they specified to clear partitions and also
         # tried to --onpart on a logical partition
-	#
-	# XXX
-	#
+        #
+        # XXX
+        #
         #if iutil.getArch() == 'i386' and self.fstab:
             #clear = self.getClearParts()
             #if clear == FSEDIT_CLEAR_LINUX or clear == FSEDIT_CLEAR_ALL:
-		#for (mntpoint, (dev, fstype, reformat)) in self.fstab:
-		    #if int(dev[-1:]) > 4:
-			#raise RuntimeError, "Clearpart and --onpart on
non-primary partition %s not allowed" % dev
+                #for (mntpoint, (dev, fstype, reformat)) in self.fstab:
+                    #if int(dev[-1:]) > 4:
+                        #raise RuntimeError, "Clearpart and --onpart on
non-primary partition %s not allowed" % dev
                 
-	if where =="pre" or where == "post":
-	    s = Script(script, scriptInterp, scriptChroot)
-	    if where == "pre":
-		self.preScripts.append(s)
-	    else:
-		self.postScripts.append(s)
+        if where =="pre" or where == "post":
+            s = Script(script, scriptInterp, scriptChroot)
+            if where == "pre":
+                self.preScripts.append(s)
+            else:
+                self.postScripts.append(s)
 
     def doClearPart(self, id, args):
         type = CLEARPART_TYPE_NONE
@@ -604,7 +630,7 @@ class KickstartBase(BaseInstallClass):
         self.setClearParts(id, type, drives, initAll = initAll)
 
     def defineRaid(self, id, args):
-	(args, extra) = isys.getopt(args, '', [ 'level=', 'device=',
+        (args, extra) = isys.getopt(args, '', [ 'level=', 'device=',
                                                 'spares=', 'fstype=',
                                                 'noformat'] )
 
@@ -613,13 +639,13 @@ class KickstartBase(BaseInstallClass):
         spares = 0
         fstype = None
         format = 1
-					
-	for n in args:
-	    (str, arg) = n
-	    if str == '--level':
-		level = arg
-	    elif str == "--device":
-		raidDev = arg
+                                        
+        for n in args:
+            (str, arg) = n
+            if str == '--level':
+                level = arg
+            elif str == "--device":
+                raidDev = arg
             elif str == "--spares":
                 spares = int(arg)
             elif str == "--noformat":
@@ -661,12 +687,12 @@ class KickstartBase(BaseInstallClass):
 
 
     def definePartition(self, id, args):
-	# we set up partition requests (whee!)
-	size = None
-	grow = None
-	maxSize = None
-	disk = None
-	onPart = None
+        # we set up partition requests (whee!)
+        size = None
+        grow = None
+        maxSize = None
+        disk = None
+        onPart = None
         fsopts = None
         type = None
         primOnly = None
@@ -679,25 +705,25 @@ class KickstartBase(BaseInstallClass):
         badblocks = None
         recommended = None
         
-	(args, extra) = isys.getopt(args, '', [ 'size=', 'maxsize=', 
-					'grow', 'onpart=', 'ondisk=',
+        (args, extra) = isys.getopt(args, '', [ 'size=', 'maxsize=', 
+                                        'grow', 'onpart=', 'ondisk=',
                                         'bytes-per-inode=', 'usepart=',
                                         'type=', 'fstype=', 'asprimary',
                                         'noformat', 'start=', 'end=',
                                         'badblocks', 'recommended'])
 
-	for n in args:
-	    (str, arg) = n
-	    if str == '--size':
-		size = int(arg)
-	    elif str == '--maxsize':
-		maxSize = int(arg)
-	    elif str == '--grow':
-		grow = 1
-	    elif str == '--onpart' or str == '--usepart':
-		onPart = arg
-	    elif str == '--ondisk' or str == '--ondrive':
-		disk = arg
+        for n in args:
+            (str, arg) = n
+            if str == '--size':
+                size = int(arg)
+            elif str == '--maxsize':
+                maxSize = int(arg)
+            elif str == '--grow':
+                grow = 1
+            elif str == '--onpart' or str == '--usepart':
+                onPart = arg
+            elif str == '--ondisk' or str == '--ondrive':
+                disk = arg
             elif str == '--bytes-per-inode':
                 fsopts = ['-i', arg]
             # XXX this doesn't do anything right now
@@ -720,8 +746,8 @@ class KickstartBase(BaseInstallClass):
             elif str == "--recommended":
                 recommended = 1
 
-	if len(extra) != 1:
-	    raise ValueError, "partition command requires one anonymous
argument"
+        if len(extra) != 1:
+            raise ValueError, "partition command requires one anonymous
argument"
 
         if extra[0] == 'swap':
             filesystem = fileSystemTypeGet('swap')
@@ -802,7 +828,7 @@ class KickstartBase(BaseInstallClass):
             dispatch.skipStep("bootdisk")            
             return
         
-	dispatch.skipStep("bootdisk")
+        dispatch.skipStep("bootdisk")
         dispatch.skipStep("welcome")
         dispatch.skipStep("package-selection")
         dispatch.skipStep("confirminstall")
@@ -811,51 +837,53 @@ class KickstartBase(BaseInstallClass):
         dispatch.skipStep("installtype")
 
         # skipping firewall by default, disabled by default
-	dispatch.skipStep("firewall")
+        dispatch.skipStep("firewall")
 
-	for n in self.skipSteps:
-	    dispatch.skipStep(n)
+        for n in self.skipSteps:
+            dispatch.skipStep(n)
 
     def setInstallData(self, id):
-	BaseInstallClass.setInstallData(self, id)
+        BaseInstallClass.setInstallData(self, id)
 
-	self.setEarlySwapOn(1)
-	self.postScripts = []
-	self.preScripts = []
+        self.setEarlySwapOn(1)
+        self.postScripts = []
+        self.preScripts = []
 
-	self.installType = "install"
+        self.installType = "install"
         self.id = id
-	self.readKickstart(id, self.file)
+        self.readKickstart(id, self.file)
 
-	for script in self.preScripts:
-	    script.run("/", self.serial)
+        for script in self.preScripts:
+            script.run("/", self.serial)
 
     # Note that this assumes setGroupSelection() is called after
     # setPackageSelection()
     def setPackageSelection(self, hdlist):
-	for pkg in hdlist.keys():
-	    hdlist[pkg].setState((0, 0))
+        for pkg in hdlist.keys():
+            hdlist[pkg].setState((0, 0))
 
-	for n in self.packageList:
-	    hdlist[n].select()
+        for n in self.packageList:
+            hdlist[n].select()
 
-    def setGroupSelection(self, comps):
-	for comp in comps:
-	    comp.unselect()
+    def setGroupSelection(self, comps, noBase):
+        for comp in comps:
+            comp.unselect()
 
-	comps['Base'].select()
-	for n in self.groupList:
-	    comps[n].select()
+        if (noBase != 1):
+          comps['Base'].select()
+
+        for n in self.groupList:
+            comps[n].select()
 
         for n in self.excludedList:
             comps.packages[n].unselect()
 
     def __init__(self, file, serial):
-	self.serial = serial
-	self.file = file
-	self.skipSteps = []
+        self.serial = serial
+        self.file = file
+        self.skipSteps = []
         self.interactive = 0
-	BaseInstallClass.__init__(self, 0)
+        BaseInstallClass.__init__(self, 0)
 
 def Kickstart(file, serial):
 
@@ -865,31 +893,31 @@ def Kickstart(file, serial):
 
     passedLines = []
     while lines:
-	l = lines[0]
-	lines = lines[1:]
-	if l == "%installclass\n":
-	    break
-	passedLines.append(l)
+        l = lines[0]
+        lines = lines[1:]
+        if l == "%installclass\n":
+            break
+        passedLines.append(l)
 
     if lines:
-	newKsFile = file + ".new"
-	f = open(newKsFile, "w")
-	f.writelines(passedLines)
-	f.close()
+        newKsFile = file + ".new"
+        f = open(newKsFile, "w")
+        f.writelines(passedLines)
+        f.close()
 
-	f = open('/tmp/ksclass.py', "w")
-	f.writelines(lines)
-	f.close()
+        f = open('/tmp/ksclass.py', "w")
+        f.writelines(lines)
+        f.close()
 
-	oldPath = sys.path
-	sys.path.append('/tmp')
+        oldPath = sys.path
+        sys.path.append('/tmp')
 
-	from ksclass import CustomKickstart
-	os.unlink("/tmp/ksclass.py")
+        from ksclass import CustomKickstart
+        os.unlink("/tmp/ksclass.py")
 
-	ksClass = CustomKickstart(newKsFile, serial)
-	os.unlink(newKsFile)
+        ksClass = CustomKickstart(newKsFile, serial)
+        os.unlink(newKsFile)
     else:
-	ksClass = KickstartBase(file, serial)
+        ksClass = KickstartBase(file, serial)
 
     return ksClass
diff -durpN anaconda-7.1.94.orig/packages.py anaconda-7.1.94/packages.py
--- anaconda-7.1.94.orig/packages.py	Tue Aug 14 18:15:09 2001
+++ anaconda-7.1.94/packages.py	Fri Sep 21 16:45:14 2001
@@ -54,9 +54,9 @@ def writeConfiguration(id, instPath):
 def writeKSConfiguration(id, instPath):
     log("Writing autokickstart file")
     if not flags.test:
-	fn = instPath + "/root/anaconda-ks.cfg"
+        fn = instPath + "/root/anaconda-ks.cfg"
     else:
-	fn = "/tmp/anaconda-ks.cfg"
+        fn = "/tmp/anaconda-ks.cfg"
 
     id.writeKS(fn)
 
@@ -85,7 +85,7 @@ def writeXConfiguration(id, instPath):
             pass
             
         os.symlink ("../../usr/X11R6/bin/" + xserver,
-			    instPath + "/etc/X11/X")
+                            instPath + "/etc/X11/X")
     else:
         fn = "/tmp/"
 
@@ -94,21 +94,21 @@ def writeXConfiguration(id, instPath):
 
 def readPackages(intf, method, id):
     if (not id.hdList):
-	w = intf.waitWindow(_("Reading"), _("Reading package
information..."))
-	id.hdList = method.readHeaders()
-	id.instClass.setPackageSelection(id.hdList)
-	w.pop()
+        w = intf.waitWindow(_("Reading"), _("Reading package
information..."))
+        id.hdList = method.readHeaders()
+        id.instClass.setPackageSelection(id.hdList)
+        w.pop()
 
     if not id.comps:
-	id.comps = method.readComps(id.hdList)
-	id.instClass.setGroupSelection(id.comps)
+        id.comps = method.readComps(id.hdList)
+        id.instClass.setGroupSelection(id.comps, id.noBase)
 
-	# XXX
-	#updateInstClassComps ()
+        # XXX
+        #updateInstClassComps ()
     else:
-	# re-evaluate all the expressions for packages with qualifiers.
+        # re-evaluate all the expressions for packages with qualifiers.
 
-	id.comps.updateSelections()
+        id.comps.updateSelections()
 
 def handleX11Packages(dir, intf, disp, id, instPath):
 
@@ -149,7 +149,7 @@ def handleX11Packages(dir, intf, disp, i
 
 def checkDependencies(dir, intf, disp, id, instPath):
     if dir == DISPATCH_BACK:
-	return
+        return
 
     win = intf.waitWindow(_("Dependency Check"),
       _("Checking dependencies in packages selected for installation..."))
@@ -159,9 +159,9 @@ def checkDependencies(dir, intf, disp, i
     win.pop()
 
     if id.dependencies:
-	disp.skipStep("dependencies", skip = 0)
+        disp.skipStep("dependencies", skip = 0)
     else:
-	disp.skipStep("dependencies")
+        disp.skipStep("dependencies")
 
 #XXX
 #try:
@@ -176,93 +176,93 @@ def checkDependencies(dir, intf, disp, i
     #extra = msg
 #except KeyError, key:
     #extra = ("The comps file references a package called \"%s\" which "
-	     #"could not be found." % (key,))
+             #"could not be found." % (key,))
 #except:
     #extra = ""
 #
 #if self.files_found == "FALSE":
     #if extra:
-	#text = (_("The following error occurred while "
-		  #"retreiving hdlist file:\n\n"
-		  #"%s\n\n"
-		  #"Installer will exit now.") % extra)
+        #text = (_("The following error occurred while "
+                  #"retreiving hdlist file:\n\n"
+                  #"%s\n\n"
+                  #"Installer will exit now.") % extra)
     #else:
-	#text = (_("An error has occurred while retreiving the hdlist "
-		  #"file.  The installation media or image is "
-		  #"probably corrupt.  Installer will exit now."))
+        #text = (_("An error has occurred while retreiving the hdlist "
+                  #"file.  The installation media or image is "
+                  #"probably corrupt.  Installer will exit now."))
     #win = ErrorWindow (text)
 #else:
 
 class InstallCallback:
     def cb(self, what, amount, total, h, (param)):
-	if (what == rpm.RPMCALLBACK_TRANS_START):
-	    # step 6 is the bulk of the transaction set
-	    # processing time
-	    if amount == 6:
-		self.progressWindow = \
-		   self.progressWindowClass (_("Processing"),
-					     _("Preparing to install..."),
-					     total)
-	if (what == rpm.RPMCALLBACK_TRANS_PROGRESS):
-	    if self.progressWindow:
-		self.progressWindow.set (amount)
-		
-	if (what == rpm.RPMCALLBACK_TRANS_STOP and self.progressWindow):
-	    self.progressWindow.pop ()
+        if (what == rpm.RPMCALLBACK_TRANS_START):
+            # step 6 is the bulk of the transaction set
+            # processing time
+            if amount == 6:
+                self.progressWindow = \
+                   self.progressWindowClass (_("Processing"),
+                                             _("Preparing to install..."),
+                                             total)
+        if (what == rpm.RPMCALLBACK_TRANS_PROGRESS):
+            if self.progressWindow:
+                self.progressWindow.set (amount)
+                
+        if (what == rpm.RPMCALLBACK_TRANS_STOP and self.progressWindow):
+            self.progressWindow.pop ()
 
-	if (what == rpm.RPMCALLBACK_INST_OPEN_FILE):
-	    # We don't want to start the timer until we get to the first
-	    # file.
-	    self.pkgTimer.start()
+        if (what == rpm.RPMCALLBACK_INST_OPEN_FILE):
+            # We don't want to start the timer until we get to the first
+            # file.
+            self.pkgTimer.start()
 
-	    self.progress.setPackage(h)
-	    self.progress.setPackageScale(0, 1)
-	    self.instLog.write (self.modeText % (h[rpm.RPMTAG_NAME],))
-	    self.instLog.flush ()
-	    fn = self.method.getFilename(h, self.pkgTimer)
+            self.progress.setPackage(h)
+            self.progress.setPackageScale(0, 1)
+            self.instLog.write (self.modeText % (h[rpm.RPMTAG_NAME],))
+            self.instLog.flush ()
+            fn = self.method.getFilename(h, self.pkgTimer)
 
-	    self.rpmFD = -1
-	    while self.rpmFD < 0:
-		try:
-		    self.rpmFD = os.open(fn, os.O_RDONLY)
-		    # Make sure this package seems valid
-		    try:
-			(h, isSource) = rpm.headerFromPackage(self.rpmFD)
-			os.lseek(self.rpmFD, 0, 0)
-		    except:
-			self.rpmFD = -1
-			os.close(self.rpmFD)
-			raise SystemError
-		except:
-		    self.messageWindow(_("Error"),
-			_("The file %s cannot be opened. This is due to "
-			  "a missing file, a bad package, or bad media. "
-			  "Press <return> to try again.") % fn)
+            self.rpmFD = -1
+            while self.rpmFD < 0:
+                try:
+                    self.rpmFD = os.open(fn, os.O_RDONLY)
+                    # Make sure this package seems valid
+                    try:
+                        (h, isSource) = rpm.headerFromPackage(self.rpmFD)
+                        os.lseek(self.rpmFD, 0, 0)
+                    except:
+                        self.rpmFD = -1
+                        os.close(self.rpmFD)
+                        raise SystemError
+                except:
+                    self.messageWindow(_("Error"),
+                        _("The file %s cannot be opened. This is due to "
+                          "a missing file, a bad package, or bad media. "
+                          "Press <return> to try again.") % fn)
 
-	    fn = self.method.unlinkFilename(fn)
-	    return self.rpmFD
-	elif (what == rpm.RPMCALLBACK_INST_PROGRESS):
-	    if total:
-		self.progress.setPackageScale(amount, total)
-	    pass
-	elif (what == rpm.RPMCALLBACK_INST_CLOSE_FILE):
-	    os.close (self.rpmFD)
-	    self.progress.completePackage(h, self.pkgTimer)
-	else:
-	    pass
+            fn = self.method.unlinkFilename(fn)
+            return self.rpmFD
+        elif (what == rpm.RPMCALLBACK_INST_PROGRESS):
+            if total:
+                self.progress.setPackageScale(amount, total)
+            pass
+        elif (what == rpm.RPMCALLBACK_INST_CLOSE_FILE):
+            os.close (self.rpmFD)
+            self.progress.completePackage(h, self.pkgTimer)
+        else:
+            pass
 
-	self.progress.processEvents()
+        self.progress.processEvents()
 
     def __init__(self, messageWindow, progress, pkgTimer, method,
-		 progressWindowClass, instLog, modeText):
-	self.messageWindow = messageWindow
-	self.progress = progress
-	self.pkgTimer = pkgTimer
-	self.method = method
-	self.progressWindowClass = progressWindowClass
-	self.progressWindow = None
-	self.instLog = instLog
-	self.modeText = modeText
+                 progressWindowClass, instLog, modeText):
+        self.messageWindow = messageWindow
+        self.progress = progress
+        self.pkgTimer = pkgTimer
+        self.method = method
+        self.progressWindowClass = progressWindowClass
+        self.progressWindow = None
+        self.instLog = instLog
+        self.modeText = modeText
 
 def sortPackages(first, second):
     # install packages in cd order (cd tag is 1000002)
@@ -270,40 +270,40 @@ def sortPackages(first, second):
     two = None
 
     if first[1000003] != None:
-	one = first[1000003]
+        one = first[1000003]
 
     if second[1000003] != None:
-	two = second[1000003]
+        two = second[1000003]
 
     if one == None or two == None:
-	one = 0
-	two = 0
-	if first[1000002] != None:
-	    one = first[1000002]
+        one = 0
+        two = 0
+        if first[1000002] != None:
+            one = first[1000002]
 
-	if second[1000002] != None:
-	    two = second[1000002]
+        if second[1000002] != None:
+            two = second[1000002]
 
     if one < two:
-	return -1
+        return -1
     elif one > two:
-	return 1
+        return 1
     elif (string.lower(first[rpm.RPMTAG_NAME])
           < string.lower(second[rpm.RPMTAG_NAME])):
-	return -1
+        return -1
     elif (string.lower(first[rpm.RPMTAG_NAME])
           > string.lower(second[rpm.RPMTAG_NAME])):
-	return 1
+        return 1
 
     return 0
 
 class rpmErrorClass:
 
     def cb(self):
-	self.f.write (rpm.errorString () + "\n")
+        self.f.write (rpm.errorString () + "\n")
 
     def __init__(self, f):
-	self.f = f
+        self.f = f
 
 def doMigrateFilesystems(dir, thefsset, diskset, upgrade, instPath):
     if dir == DISPATCH_BACK:
@@ -317,23 +317,23 @@ def doMigrateFilesystems(dir, thefsset, 
 
 def turnOnFilesystems(dir, thefsset, diskset, upgrade, instPath):
     if dir == DISPATCH_BACK:
-	thefsset.umountFilesystems(instPath)
-	return
+        thefsset.umountFilesystems(instPath)
+        return
 
     if flags.setupFilesystems:
-	if not upgrade.get():
+        if not upgrade.get():
             thefsset.setActive(diskset)
             if not thefsset.isActive():
                 diskset.savePartitions ()
             thefsset.checkBadblocks(instPath)
             thefsset.formatSwap(instPath)
             thefsset.turnOnSwap(instPath)
-	    thefsset.makeFilesystems (instPath)
+            thefsset.makeFilesystems (instPath)
             thefsset.mountFilesystems (instPath)
 
 def doPreInstall(method, id, intf, instPath, dir):
     if flags.test:
-	return
+        return
 
     if dir == DISPATCH_BACK:
         return
@@ -341,15 +341,15 @@ def doPreInstall(method, id, intf, instP
     arch = iutil.getArch ()
 
     if arch == "alpha":
-	# if were're on alpha with ARC console, set the clock
-	# so that our installed files won't be in the future
+        # if were're on alpha with ARC console, set the clock
+        # so that our installed files won't be in the future
         from milo import MiloInstall, onMILO
-	if onMILO ():
-	    args = ("clock", "-A", "-s")
-	    try:
-		iutil.execWithRedirect('/usr/sbin/clock', args)
-	    except:
-		pass
+        if onMILO ():
+            args = ("clock", "-A", "-s")
+            try:
+                iutil.execWithRedirect('/usr/sbin/clock', args)
+            except:
+                pass
 
     # shorthand
     upgrade = id.upgrade.get()
@@ -359,37 +359,37 @@ def doPreInstall(method, id, intf, instP
             hdList[name].selected = 1
 
     if not upgrade:
-	# this is NICE and LATE. It lets kickstart/server/workstation
-	# installs detect this properly
-	if arch == "s390" or arch == "s390x":
-	    if (string.find(os.uname()[2], "vrdr") > -1):
-		select(id.hdList, 'kernel-vrdr')
-	    if (string.find(os.uname()[2], "tape") > -1):
-		select(id.hdList, 'kernel-tape')
-	elif isys.smpAvailable():
+        # this is NICE and LATE. It lets kickstart/server/workstation
+        # installs detect this properly
+        if arch == "s390" or arch == "s390x":
+            if (string.find(os.uname()[2], "vrdr") > -1):
+                select(id.hdList, 'kernel-vrdr')
+            if (string.find(os.uname()[2], "tape") > -1):
+                select(id.hdList, 'kernel-tape')
+        elif isys.smpAvailable():
             select(id.hdList, 'kernel-smp')
 
-	if (id.hdList.has_key('kernel-enterprise')):
-	    import lilo
+        if (id.hdList.has_key('kernel-enterprise')):
+            import lilo
 
-	    if lilo.needsEnterpriseKernel():
-		id.hdList['kernel-enterprise'].selected = 1
+            if lilo.needsEnterpriseKernel():
+                id.hdList['kernel-enterprise'].selected = 1
 
-	# we *always* need a kernel installed
+        # we *always* need a kernel installed
         select(id.hdList, 'kernel')
 
-	# if NIS is configured, install ypbind and dependencies:
-	if id.auth.useNIS:
+        # if NIS is configured, install ypbind and dependencies:
+        if id.auth.useNIS:
             select(id.hdList, 'ypbind')
             select(id.hdList, 'yp-tools')
             select(id.hdList, 'portmap')
 
-	if id.auth.useLdap:
+        if id.auth.useLdap:
             select(id.hdList, 'nss_ldap')
             select(id.hdList, 'openldap')
             select(id.hdList, 'perl')
 
-	if id.auth.useKrb5:
+        if id.auth.useKrb5:
             select(id.hdList, 'pam_krb5')
             select(id.hdList, 'krb5-workstation')
             select(id.hdList, 'krbafs')
@@ -417,25 +417,25 @@ def doPreInstall(method, id, intf, instP
     method.mergeFullHeaders(id.hdList)
 
     if upgrade:
-	# An old mtab can cause confusion (esp if loop devices are
-	# in it)
-	f = open(instPath + "/etc/mtab", "w+")
-	f.close()
+        # An old mtab can cause confusion (esp if loop devices are
+        # in it)
+        f = open(instPath + "/etc/mtab", "w+")
+        f.close()
 
     if method.systemMounted (id.fsset, instPath, id.hdList.selected()):
-	id.fsset.umountFilesystems(instPath)
-	return DISPATCH_BACK
+        id.fsset.umountFilesystems(instPath)
+        return DISPATCH_BACK
 
     for i in ( '/var', '/var/lib', '/var/lib/rpm', '/tmp', '/dev', '/etc',
-	       '/etc/sysconfig', '/etc/sysconfig/network-scripts',
-	       '/etc/X11' ):
-	try:
-	    os.mkdir(instPath + i)
-	except os.error, (errno, msg):
+               '/etc/sysconfig', '/etc/sysconfig/network-scripts',
+               '/etc/X11' ):
+        try:
+            os.mkdir(instPath + i)
+        except os.error, (errno, msg):
             #self.intf.messageWindow("Error",
             #                        "Error making directory %s: "
             #                        "%s" % (i, msg))
-	    pass
+            pass
 
     # write out the fstab
     if not upgrade:
@@ -451,7 +451,7 @@ def doPreInstall(method, id, intf, instP
 
 def doInstall(method, id, intf, instPath):
     if flags.test:
-	return
+        return
 
     upgrade = id.upgrade.get()
     db = rpm.opendb(1, instPath)
@@ -461,14 +461,14 @@ def doInstall(method, id, intf, instPath
     totalSize = 0
 
     if upgrade:
-	how = "u"
+        how = "u"
     else:
-	how = "i"
+        how = "i"
 
     l = []
 
     for p in id.hdList.selected():
-	l.append(p)
+        l.append(p)
     l.sort(sortPackages)
 
     progress = intf.progressWindow(_("Processing"),
@@ -477,28 +477,28 @@ def doInstall(method, id, intf, instPath
 
     i = 0
     for p in l:
-	ts.add(p.h, p.h, how)
-	total = total + 1
-	totalSize = totalSize + (p[rpm.RPMTAG_SIZE] / 1024)
+        ts.add(p.h, p.h, how)
+        total = total + 1
+        totalSize = totalSize + (p[rpm.RPMTAG_SIZE] / 1024)
         i = i + 1
         progress.set(i)
 
     progress.pop()
     
     if not id.hdList.preordered():
-	log ("WARNING: not all packages in hdlist had order tag")
-	ts.order()
+        log ("WARNING: not all packages in hdlist had order tag")
+        ts.order()
 
     if upgrade:
-	logname = '/tmp/upgrade.log'
+        logname = '/tmp/upgrade.log'
     else:
-	logname = '/tmp/install.log'
+        logname = '/tmp/install.log'
 
     instLogName = instPath + logname
     try:
-	iutil.rmrf (instLogName)
+        iutil.rmrf (instLogName)
     except OSError:
-	pass
+        pass
 
     instLog = open(instLogName, "w+")
     syslogname = "%s%s.syslog" % (instPath, logname)
@@ -513,9 +513,9 @@ def doInstall(method, id, intf, instPath
     # dup'd when we go out of scope
 
     if upgrade:
-	modeText = _("Upgrading %s.\n")
+        modeText = _("Upgrading %s.\n")
     else:
-	modeText = _("Installing %s.\n")
+        modeText = _("Installing %s.\n")
 
     errors = rpmErrorClass(instLog)
     oldError = rpm.errorSetCallback (errors.cb)
@@ -525,7 +525,7 @@ def doInstall(method, id, intf, instPath
     id.instProgress.processEvents()
 
     cb = InstallCallback(intf.messageWindow, id.instProgress, pkgTimer,
-			 method, intf.progressWindow, instLog, modeText)
+                         method, intf.progressWindow, instLog, modeText)
 
     # write out migrate adjusted fstab so kernel RPM can get initrd right
     if upgrade:
@@ -542,81 +542,81 @@ def doInstall(method, id, intf, instPath
         if upgrade:
             id.fsset.restoreMigratedFstab(instPath)
         
-	spaceneeded = {}
-	nodeneeded = {}
-	size = 12
+        spaceneeded = {}
+        nodeneeded = {}
+        size = 12
 
-	# XXX
-	nodeprob = -1
-	if rpm.__dict__.has_key ("RPMPROB_DISKNODES"):
-	    nodeprob = rpm.RPMPROB_DISKNODES
+        # XXX
+        nodeprob = -1
+        if rpm.__dict__.has_key ("RPMPROB_DISKNODES"):
+            nodeprob = rpm.RPMPROB_DISKNODES
 
-	for (descr, (type, mount, need)) in problems:
-	    idx = string.find (mount, "/mnt/sysimage")
-	    if mount[0:13] == "/mnt/sysimage":
-		mount = mount[13:]
-		if not mount:
-		    mount = '/'
+        for (descr, (type, mount, need)) in problems:
+            idx = string.find (mount, "/mnt/sysimage")
+            if mount[0:13] == "/mnt/sysimage":
+                mount = mount[13:]
+                if not mount:
+                    mount = '/'
 
-	    if type == rpm.RPMPROB_DISKSPACE:
-		if spaceneeded.has_key (mount) and spaceneeded[mount] <
need:
-		    spaceneeded[mount] = need
-		else:
-		    spaceneeded[mount] = need
-	    elif type == nodeprob:
-		if nodeneeded.has_key (mount) and nodeneeded[mount] < need:
-		    nodeneeded[mount] = need
-		else:
-		    nodeneeded[mount] = need
-	    else:
-		log ("WARNING: unhandled problem returned from "
+            if type == rpm.RPMPROB_DISKSPACE:
+                if spaceneeded.has_key (mount) and spaceneeded[mount] <
need:
+                    spaceneeded[mount] = need
+                else:
+                    spaceneeded[mount] = need
+            elif type == nodeprob:
+                if nodeneeded.has_key (mount) and nodeneeded[mount] < need:
+                    nodeneeded[mount] = need
+                else:
+                    nodeneeded[mount] = need
+            else:
+                log ("WARNING: unhandled problem returned from "
                      "transaction set type %d",
-		     type)
+                     type)
 
-	probs = ""
-	if spaceneeded:
-	    probs = probs + _("You don't appear to have enough disk space "
+        probs = ""
+        if spaceneeded:
+            probs = probs + _("You don't appear to have enough disk space "
                               "to install the packages you've selected. "
                               "You need more space on the following "
                               "filesystems:\n\n")
-	    probs = probs + ("%-15s %s\n") % (_("Mount Point"),
+            probs = probs + ("%-15s %s\n") % (_("Mount Point"),
                                               _("Space Needed"))
 
-	    for (mount, need) in spaceneeded.items ():
-		if need > (1024*1024):
-		    need = (need + 1024 * 1024 - 1) / (1024 * 1024)
-		    suffix = "M"
-		else:
-		    need = (need + 1023) / 1024
-		    suffix = "k"
+            for (mount, need) in spaceneeded.items ():
+                if need > (1024*1024):
+                    need = (need + 1024 * 1024 - 1) / (1024 * 1024)
+                    suffix = "M"
+                else:
+                    need = (need + 1023) / 1024
+                    suffix = "k"
 
-		prob = "%-15s %d %c\n" % (mount, need, suffix)
-		probs = probs + prob
-	if nodeneeded:
-	    if probs:
-		probs = probs + '\n'
-	    probs = probs + _("You don't appear to have enough file nodes "
+                prob = "%-15s %d %c\n" % (mount, need, suffix)
+                probs = probs + prob
+        if nodeneeded:
+            if probs:
+                probs = probs + '\n'
+            probs = probs + _("You don't appear to have enough file nodes "
                               "to install the packages you've selected. "
                               "You need more file nodes on the following "
                               "filesystems:\n\n")
-	    probs = probs + ("%-15s %s\n") % (_("Mount Point"),
+            probs = probs + ("%-15s %s\n") % (_("Mount Point"),
                                               _("Nodes Needed"))
 
-	    for (mount, need) in nodeneeded.items ():
-		prob = "%-15s %d\n" % (mount, need)
-		probs = probs + prob
+            for (mount, need) in nodeneeded.items ():
+                prob = "%-15s %d\n" % (mount, need)
+                probs = probs + prob
 
-	intf.messageWindow (_("Disk Space"), probs)
+        intf.messageWindow (_("Disk Space"), probs)
 
-	del ts
-	del db
-	instLog.close()
-	syslog.stop()
+        del ts
+        del db
+        instLog.close()
+        syslog.stop()
 
-	method.systemUnmounted ()
+        method.systemUnmounted ()
 
-	rpm.errorSetCallback (oldError)
-	return DISPATCH_BACK
+        rpm.errorSetCallback (oldError)
+        return DISPATCH_BACK
 
     # This should close the RPM database so that you can
     # do RPM ops in the chroot in a %post ks script
@@ -627,22 +627,22 @@ def doInstall(method, id, intf, instPath
     method.filesDone ()
     
     if upgrade:
-	instLog.write ("\n\nThe following packages were available in this "
+        instLog.write ("\n\nThe following packages were available in this "
                        "version but NOT upgraded:\n")
-	for p in id.hdList.packages.values ():
-	    if not p.selected:
-		instLog.write("%s-%s-%s.%s.rpm\n" %
-				   (p.h[rpm.RPMTAG_NAME],
-				    p.h[rpm.RPMTAG_VERSION],
-				    p.h[rpm.RPMTAG_RELEASE],
-				    p.h[rpm.RPMTAG_ARCH]))
+        for p in id.hdList.packages.values ():
+            if not p.selected:
+                instLog.write("%s-%s-%s.%s.rpm\n" %
+                                   (p.h[rpm.RPMTAG_NAME],
+                                    p.h[rpm.RPMTAG_VERSION],
+                                    p.h[rpm.RPMTAG_RELEASE],
+                                    p.h[rpm.RPMTAG_ARCH]))
     instLog.close ()
 
     id.instProgress = None
 
 def doPostInstall(method, id, intf, instPath):
     if flags.test:
-	return
+        return
     
     w = intf.progressWindow(_("Post Install"),
                             _("Performing post install configuration..."),
7)
@@ -651,90 +651,90 @@ def doPostInstall(method, id, intf, inst
     arch = iutil.getArch ()
 
     if upgrade:
-	logname = '/tmp/upgrade.log'
+        logname = '/tmp/upgrade.log'
     else:
-	logname = '/tmp/install.log'
+        logname = '/tmp/install.log'
 
     instLogName = instPath + logname
     instLog = open(instLogName, "a")
     
     try:
-	if not upgrade:
-	    w.set(1)
+        if not upgrade:
+            w.set(1)
 
-	    copyExtraModules(instPath, id.comps, id.extraModules)
+            copyExtraModules(instPath, id.comps, id.extraModules)
 
-	    w.set(2)
+            w.set(2)
 
-	    # pcmcia is supported only on i386 at the moment
-	    if arch == "i386":
-		pcmcia.createPcmciaConfig(
-			instPath + "/etc/sysconfig/pcmcia")
-		       
-	    w.set(3)
+            # pcmcia is supported only on i386 at the moment
+            if arch == "i386":
+                pcmcia.createPcmciaConfig(
+                        instPath + "/etc/sysconfig/pcmcia")
+                       
+            w.set(3)
 
-	    # blah.  If we're on a serial mouse, and we have X, we need to
-	    # close the mouse device, then run kudzu, then open it again.
+            # blah.  If we're on a serial mouse, and we have X, we need to
+            # close the mouse device, then run kudzu, then open it again.
 
-	    # turn it off
-	    mousedev = None
+            # turn it off
+            mousedev = None
 
-	    # XXX currently Bad Things (X async reply) happen when doing
-	    # Mouse Magic on Sparc (Mach64, specificly)
-	    # The s390 doesn't even have a mouse!
-	    if os.environ.has_key ("DISPLAY") and not (arch == "sparc" or
arch == "s390" or arch == "s390x"):
-		import xmouse
-		try:
-		    mousedev = xmouse.get()[0]
-		except RuntimeError:
-		    pass
+            # XXX currently Bad Things (X async reply) happen when doing
+            # Mouse Magic on Sparc (Mach64, specificly)
+            # The s390 doesn't even have a mouse!
+            if os.environ.has_key ("DISPLAY") and not (arch == "sparc" or
arch == "s390" or arch == "s390x"):
+                import xmouse
+                try:
+                    mousedev = xmouse.get()[0]
+                except RuntimeError:
+                    pass
 
-	    if mousedev:
-		try:
-		    os.rename (mousedev, "/dev/disablemouse")
-		except OSError:
-		    pass
-		try:
-		    xmouse.reopen()
-		except RuntimeError:
-		    pass
+            if mousedev:
+                try:
+                    os.rename (mousedev, "/dev/disablemouse")
+                except OSError:
+                    pass
+                try:
+                    xmouse.reopen()
+                except RuntimeError:
+                    pass
 
-	    if arch != "s390" and arch != "s390x":
-		    unmountUSB = 0
-		    try:
-			isys.mount('/usbdevfs', instPath+'/proc/bus/usb',
'usbdevfs')
-			unmountUSB = 1
-		    except:
-			log("Mount of /proc/bus/usb failed")
-			pass
+            if arch != "s390" and arch != "s390x":
+                    unmountUSB = 0
+                    try:
+                        isys.mount('/usbdevfs', instPath+'/proc/bus/usb',
'usbdevfs')
+                        unmountUSB = 1
+                    except:
+                        log("Mount of /proc/bus/usb failed")
+                        pass
 
-			
-		    argv = [ "/usr/sbin/kudzu", "-q" ]
-		    devnull = os.open("/dev/null", os.O_RDWR)
-		    iutil.execWithRedirect(argv[0], argv, root = instPath,
-					   stdout = devnull)
-		    # turn it back on            
-		    if mousedev:
-			try:
-			    os.rename ("/dev/disablemouse", mousedev)
-			except OSError:
-			    pass
-			try:
-			    xmouse.reopen()
-			except RuntimeError:
-			    pass
+                        
+                    argv = [ "/usr/sbin/kudzu", "-q" ]
+                    devnull = os.open("/dev/null", os.O_RDWR)
+                    iutil.execWithRedirect(argv[0], argv, root = instPath,
+                                           stdout = devnull)
+                    # turn it back on            
+                    if mousedev:
+                        try:
+                            os.rename ("/dev/disablemouse", mousedev)
+                        except OSError:
+                            pass
+                        try:
+                            xmouse.reopen()
+                        except RuntimeError:
+                            pass
 
-		    if unmountUSB:
-			isys.umount(instPath + '/proc/bus/usb', removeDir =
0)
+                    if unmountUSB:
+                        isys.umount(instPath + '/proc/bus/usb', removeDir =
0)
 
-	w.set(4)
+        w.set(4)
 
-	if upgrade:
-	    # move the rebuilt db into place.
-	    try:
-		iutil.rmrf (instPath + "/var/lib/rpm.rpmsave")
-	    except OSError:
-		pass
+        if upgrade:
+            # move the rebuilt db into place.
+            try:
+                iutil.rmrf (instPath + "/var/lib/rpm.rpmsave")
+            except OSError:
+                pass
             try:
                 os.rename (instPath + "/var/lib/rpm",
                            instPath + "/var/lib/rpm.rpmsave")
@@ -745,35 +745,35 @@ def doPostInstall(method, id, intf, inst
                            instPath + "/var/lib/rpm.rpmsave-%s" %
                            (str(int(time.time())),))
             os.rename (instPath + id.dbpath,
-		       instPath + "/var/lib/rpm")
+                       instPath + "/var/lib/rpm")
 
-	    # XXX - rpm 4.0.2 %post braindeadness support
-	    try:
-		os.unlink (instPath + "/etc/rpm/macros.db1")
-	    except OSError:
-		pass
+            # XXX - rpm 4.0.2 %post braindeadness support
+            try:
+                os.unlink (instPath + "/etc/rpm/macros.db1")
+            except OSError:
+                pass
 
-	    # needed for prior systems which were not xinetd based
-	    migrateXinetd(instPath, instLogName)
+            # needed for prior systems which were not xinetd based
+            migrateXinetd(instPath, instLogName)
 
         w.set(5)
 
-	if flags.setupFilesystems:
-	    # go ahead and depmod modules as modprobe in rc.sysinit
-	    # will complain loaduly if we don't do it now.
-	    depmodModules(id.comps, instPath)
+        if flags.setupFilesystems:
+            # go ahead and depmod modules as modprobe in rc.sysinit
+            # will complain loaduly if we don't do it now.
+            depmodModules(id.comps, instPath)
 
-	w.set(6)
+        w.set(6)
 
-	if flags.setupFilesystems:
-	    f = open("/tmp/cleanup", "w")
-	    method.writeCleanupPath(f)
-	    f.close()
+        if flags.setupFilesystems:
+            f = open("/tmp/cleanup", "w")
+            method.writeCleanupPath(f)
+            f.close()
 
-	w.set(7)
+        w.set(7)
 
     finally:
-	pass
+        pass
 
     w.pop ()
 
@@ -781,56 +781,56 @@ def doPostInstall(method, id, intf, inst
 
 def migrateXinetd(instPath, instLog):
     if not os.access (instPath + "/usr/sbin/inetdconvert", os.X_OK):
-	return
+        return
 
     if not os.access (instPath + "/etc/inetd.conf.rpmsave", os.R_OK):
-	return
+        return
 
     argv = [ "/usr/sbin/inetdconvert", "--convertremaining",
-	     "--inetdfile", "/etc/inetd.conf.rpmsave" ]
+             "--inetdfile", "/etc/inetd.conf.rpmsave" ]
 
     logfile = os.open (instLog, os.O_APPEND)
     iutil.execWithRedirect(argv[0], argv, root = instPath,
-			   stdout = logfile, stderr = logfile)
+                           stdout = logfile, stderr = logfile)
     os.close(logfile)
 
 def copyExtraModules(instPath, comps, extraModules):
     kernelVersions = comps.kernelVersionList()
 
     for (path, subdir, name) in extraModules:
-	pattern = ""
-	names = ""
-	for (n, tag) in kernelVersions:
-	    pattern = pattern + " " + n + "/" + name + ".o"
-	    names = names + " " + name + ".o"
-	command = ("cd %s/lib/modules; gunzip < %s/modules.cgz | "
+        pattern = ""
+        names = ""
+        for (n, tag) in kernelVersions:
+            pattern = pattern + " " + n + "/" + name + ".o"
+            names = names + " " + name + ".o"
+        command = ("cd %s/lib/modules; gunzip < %s/modules.cgz | "
                    "%s/bin/cpio  --quiet -iumd %s" % 
                    (instPath, path, instPath, pattern))
-	log("running: '%s'" % (command, ))
-	os.system(command)
+        log("running: '%s'" % (command, ))
+        os.system(command)
 
-	for (n, tag) in kernelVersions:
-	    fromFile = "%s/lib/modules/%s/%s.o" % (instPath, n, name)
-	    toDir = "%s/lib/modules/%s/kernel/drivers/%s" % \
-		    (instPath, n, subdir)
-	    to = "%s/%s.o" % (toDir, name)
+        for (n, tag) in kernelVersions:
+            fromFile = "%s/lib/modules/%s/%s.o" % (instPath, n, name)
+            toDir = "%s/lib/modules/%s/kernel/drivers/%s" % \
+                    (instPath, n, subdir)
+            to = "%s/%s.o" % (toDir, name)
 
-	    if (os.access(fromFile, os.R_OK) and 
-		    os.access(toDir, os.X_OK)):
-		log("moving %s to %s" % (fromFile, to))
-		os.rename(fromFile, to)
+            if (os.access(fromFile, os.R_OK) and 
+                    os.access(toDir, os.X_OK)):
+                log("moving %s to %s" % (fromFile, to))
+                os.rename(fromFile, to)
 
-		# the file might not have been owned by root in the cgz
-		os.chown(to, 0, 0)
-	    else:
-		log("missing DD module %s (this may be okay)" % 
-			    fromFile)
+                # the file might not have been owned by root in the cgz
+                os.chown(to, 0, 0)
+            else:
+                log("missing DD module %s (this may be okay)" % 
+                            fromFile)
 
 def depmodModules(comps, instPath):
     kernelVersions = comps.kernelVersionList()
 
     for (version, tag) in kernelVersions:
-	iutil.execWithRedirect ("/sbin/depmod",
-				[ "/sbin/depmod", "-a", version ],
-				root = instPath, stderr = '/dev/null')
+        iutil.execWithRedirect ("/sbin/depmod",
+                                [ "/sbin/depmod", "-a", version ],
+                                root = instPath, stderr = '/dev/null')
 
diff -durpN anaconda-7.1.94.orig/textw/packages_text.py
anaconda-7.1.94/textw/packages_text.py
--- anaconda-7.1.94.orig/textw/packages_text.py	Fri Aug 10 13:01:01 2001
+++ anaconda-7.1.94/textw/packages_text.py	Fri Sep 21 16:46:26 2001
@@ -21,26 +21,26 @@ class PackageGroupWindow:
     # Unfortunately, the checkboxtree is callback-happy
 
     def size(self, comps):
-	return _("Total install size: %s") % comps.sizeStr()
+        return _("Total install size: %s") % comps.sizeStr()
     
     def updateSize(self, args):
-	(label, comps, ct ) = args
+        (label, comps, ct ) = args
 
-	comp = ct.getCurrent()
-	list = ct.getSelection()
+        comp = ct.getCurrent()
+        list = ct.getSelection()
 
-	try:
-	    list.index(comp)
-	    if comp.isSelected(justManual = 1): return
-	    comp.select()
-	except ValueError:
-	    if not comp.isSelected(justManual = 1): return
-	    comp.unselect()
+        try:
+            list.index(comp)
+            if comp.isSelected(justManual = 1): return
+            comp.select()
+        except ValueError:
+            if not comp.isSelected(justManual = 1): return
+            comp.unselect()
 
-	label.setText(self.size(comps))
+        label.setText(self.size(comps))
 
     def __call__(self, screen, comps, dispatch):
-	origSelection = comps.getSelectionState()
+        origSelection = comps.getSelectionState()
 
         ct = CheckboxTree(height = 8, scroll = 1)
         for comp in comps:
@@ -48,14 +48,14 @@ class PackageGroupWindow:
                 ct.append(_(comp.name), comp, comp.isSelected(justManual =
1))
 
         cb = Checkbox (_("Select individual packages"), 
-			    not dispatch.stepInSkipList("indivpackage"))
+                            not dispatch.stepInSkipList("indivpackage"))
         bb = ButtonBar (screen, (TEXT_OK_BUTTON, TEXT_BACK_BUTTON))
-	la = Label(self.size(comps))
+        la = Label(self.size(comps))
 
-	ct.setCallback(self.updateSize, (la, comps, ct))
+        ct.setCallback(self.updateSize, (la, comps, ct))
 
         g = GridFormHelp (screen, _("Package Group Selection"), 
-			  "packagetree", 1, 4)
+                          "packagetree", 1, 4)
 
         g.add (la, 0, 0, (0, 0, 0, 1), anchorLeft = 1)
         g.add (ct, 0, 1, (0, 0, 0, 1))
@@ -67,114 +67,114 @@ class PackageGroupWindow:
         rc = bb.buttonPressed (result)
 
         if rc == TEXT_BACK_CHECK:
-	    comps.setSelectionState(origSelection)
+            comps.setSelectionState(origSelection)
             return INSTALL_BACK
 
-	if cb.selected():
-	    dispatch.skipStep("indivpackage", skip = 0)
-	else:
-	    dispatch.skipStep("indivpackage")
+        if cb.selected():
+            dispatch.skipStep("indivpackage", skip = 0)
+        else:
+            dispatch.skipStep("indivpackage")
 
         return INSTALL_OK
 
 class IndividualPackageWindow:
     def get_rpm_desc (self, header):
-	desc = string.replace (header[rpm.RPMTAG_DESCRIPTION], "\n\n",
"\x00")
-	desc = string.replace (desc, "\n", " ")
-	desc = string.replace (desc, "\x00", "\n\n")
-	return desc
+        desc = string.replace (header[rpm.RPMTAG_DESCRIPTION], "\n\n",
"\x00")
+        desc = string.replace (desc, "\n", " ")
+        desc = string.replace (desc, "\x00", "\n\n")
+        return desc
 
     def printHelp(self, screen, header):
-	sg = Grid(2, 2)
-	bb = ButtonBar (screen, (TEXT_OK_BUTTON,))
+        sg = Grid(2, 2)
+        bb = ButtonBar (screen, (TEXT_OK_BUTTON,))
 
-	sg.setField (Label (_("Package :")), 0, 0, (0, 0, 1, 0), anchorLeft
= 1)
-	sg.setField (Label ("%s-%s-%s" % (header[rpm.RPMTAG_NAME],
-	                                  header[rpm.RPMTAG_VERSION],
-	                                  header[rpm.RPMTAG_RELEASE])),
-	             1, 0, anchorLeft = 1)
-	sg.setField (Label (_("Size    :")), 0, 1, (0, 0, 1, 0), anchorLeft
= 1)
-	sg.setField (Label (_("%.1f KBytes") 
-		% (header[rpm.RPMTAG_SIZE] / 1024.0)), 1, 1, anchorLeft= 1)
+        sg.setField (Label (_("Package :")), 0, 0, (0, 0, 1, 0), anchorLeft
= 1)
+        sg.setField (Label ("%s-%s-%s" % (header[rpm.RPMTAG_NAME],
+                                          header[rpm.RPMTAG_VERSION],
+                                          header[rpm.RPMTAG_RELEASE])),
+                     1, 0, anchorLeft = 1)
+        sg.setField (Label (_("Size    :")), 0, 1, (0, 0, 1, 0), anchorLeft
= 1)
+        sg.setField (Label (_("%.1f KBytes") 
+                % (header[rpm.RPMTAG_SIZE] / 1024.0)), 1, 1, anchorLeft= 1)
 
-	txt = TextboxReflowed(60, self.get_rpm_desc(header), maxHeight = 10)
+        txt = TextboxReflowed(60, self.get_rpm_desc(header), maxHeight =
10)
 
-	g = GridForm (screen, header[rpm.RPMTAG_NAME], 1, 3)
-	g.add (sg, 0, 0, (0, 0, 0, 1), anchorLeft = 1)
-	g.add (txt, 0, 1, (0, 0, 0, 1))
-	g.add (bb, 0, 2, growx = 1)
+        g = GridForm (screen, header[rpm.RPMTAG_NAME], 1, 3)
+        g.add (sg, 0, 0, (0, 0, 0, 1), anchorLeft = 1)
+        g.add (txt, 0, 1, (0, 0, 0, 1))
+        g.add (bb, 0, 2, growx = 1)
 
-	g.runOnce()
+        g.runOnce()
 
     def printSize(self, size):
-	if not size:
-	    return "      "
+        if not size:
+            return "      "
         return "%3d.%dM" % (size / 1024, (((size * 10) / 1024) % 10))
 
     def printTotal(self):
-	size = self.total
-	self.lbl.setText("%-*s   %4d.%dM" % (self.length, _("Total size"),
size / 1024, (((size * 10) / 1024) % 10)))
+        size = self.total
+        self.lbl.setText("%-*s   %4d.%dM" % (self.length, _("Total size"),
size / 1024, (((size * 10) / 1024) % 10)))
 
     def printNum(self, group):
-	if self.groupCount[group] == self.groupSelCount[group]:
-	    return "*"
-	elif self.groupSelCount[group]:
-	    return "o"
-	else:
-	    return " "
+        if self.groupCount[group] == self.groupSelCount[group]:
+            return "*"
+        elif self.groupSelCount[group]:
+            return "o"
+        else:
+            return " "
 
     def ctSet(self, header, isOn):
-	isSelected = header.isSelected()
-	if isSelected and not isOn:
-	    header.unselect()
-	elif not isSelected and isOn:
-	    header.select()
+        isSelected = header.isSelected()
+        if isSelected and not isOn:
+            header.unselect()
+        elif not isSelected and isOn:
+            header.select()
 
-	key = header[rpm.RPMTAG_GROUP]
-	if isOn:
-	    self.groupSize[key] = self.groupSize[key] +
(header[rpm.RPMTAG_SIZE] / 1024)
-	    self.total = self.total + (header[rpm.RPMTAG_SIZE] / 1024)
-	    self.groupSelCount[key] = self.groupSelCount[key] + 1
-	    self.ct.setEntry(header, "%-*s %s" % (self.length,
-						  header[rpm.RPMTAG_NAME],
-
self.printSize(header[rpm.RPMTAG_SIZE] / 1024)))
-	else:
-	    self.groupSize[key] = self.groupSize[key] -
(header[rpm.RPMTAG_SIZE] / 1024)
-	    self.total = self.total - (header[rpm.RPMTAG_SIZE] / 1024)
-	    self.groupSelCount[key] = self.groupSelCount[key] - 1
-	    self.ct.setEntry(header, "%-*s" % (self.length + 7,
header[rpm.RPMTAG_NAME]))
-	self.ct.setEntry(key, "[%s] %-*s %s" % (self.printNum(key),
-						self.length - 1, key,
-
self.printSize(self.groupSize[key])))
-	self.printTotal()
+        key = header[rpm.RPMTAG_GROUP]
+        if isOn:
+            self.groupSize[key] = self.groupSize[key] +
(header[rpm.RPMTAG_SIZE] / 1024)
+            self.total = self.total + (header[rpm.RPMTAG_SIZE] / 1024)
+            self.groupSelCount[key] = self.groupSelCount[key] + 1
+            self.ct.setEntry(header, "%-*s %s" % (self.length,
+                                                  header[rpm.RPMTAG_NAME],
+
self.printSize(header[rpm.RPMTAG_SIZE] / 1024)))
+        else:
+            self.groupSize[key] = self.groupSize[key] -
(header[rpm.RPMTAG_SIZE] / 1024)
+            self.total = self.total - (header[rpm.RPMTAG_SIZE] / 1024)
+            self.groupSelCount[key] = self.groupSelCount[key] - 1
+            self.ct.setEntry(header, "%-*s" % (self.length + 7,
header[rpm.RPMTAG_NAME]))
+        self.ct.setEntry(key, "[%s] %-*s %s" % (self.printNum(key),
+                                                self.length - 1, key,
+
self.printSize(self.groupSize[key])))
+        self.printTotal()
 
     def ctCallback(self):
-	data = self.ct.getCurrent()
-	(branch, isOn) = self.ct.getEntryValue(data)
-	if not branch:
-	    if data.isSelected() and not isOn:
-		self.ctSet(data, 0)
-	    elif isOn and not data.isSelected():
-		self.ctSet(data, 1)
-	else:
-	    for header in self.groups[data]:
-		(branch, isOn) = self.ct.getEntryValue(header)
-		if header.isSelected() and not isOn:
-		    self.ctSet(header, 0)
-		elif isOn and not header.isSelected():
-		    self.ctSet(header, 1)
+        data = self.ct.getCurrent()
+        (branch, isOn) = self.ct.getEntryValue(data)
+        if not branch:
+            if data.isSelected() and not isOn:
+                self.ctSet(data, 0)
+            elif isOn and not data.isSelected():
+                self.ctSet(data, 1)
+        else:
+            for header in self.groups[data]:
+                (branch, isOn) = self.ct.getEntryValue(header)
+                if header.isSelected() and not isOn:
+                    self.ctSet(header, 0)
+                elif isOn and not header.isSelected():
+                    self.ctSet(header, 1)
 
     def __call__(self, screen, comps, hdList):
-	origSelection = comps.getSelectionState()
+        origSelection = comps.getSelectionState()
 
         ct = CheckboxTree(height = 10, scroll = 1)
-	self.ct = ct
-	self.groups = {}
-	self.groupSize = {}
-	self.groupCount = {}
-	self.groupSelCount = {}
-	self.length = 0
-	self.total = 0
+        self.ct = ct
+        self.groups = {}
+        self.groupSize = {}
+        self.groupCount = {}
+        self.groupSelCount = {}
+        self.length = 0
+        self.total = 0
 
         # go through all the headers and grok out the group names, placing
         # packages in lists in the groups dictionary.
@@ -183,18 +183,18 @@ class IndividualPackageWindow:
             header = hdList.packages[key]
             # don't show this package if it is in the base group
             if not comps["Base"].includesPackage (header):
-		group = header[rpm.RPMTAG_GROUP]
-		if not self.groups.has_key (group):
-		    self.groups[group] = []
-		    self.groupSize[group] = 0
-		    self.groupCount[group] = 0
-		    self.groupSelCount[group] = 0
-		self.groups[group].append (header)
-		self.length = max((self.length,
len(header[rpm.RPMTAG_NAME])))
-		self.groupCount[group] = self.groupCount[group] + 1
-		if header.isSelected():
-		    self.groupSize[group] = self.groupSize[group] +
(header[rpm.RPMTAG_SIZE] / 1024)
-		    self.groupSelCount[group] = self.groupSelCount[group] +
1
+                group = header[rpm.RPMTAG_GROUP]
+                if not self.groups.has_key (group):
+                    self.groups[group] = []
+                    self.groupSize[group] = 0
+                    self.groupCount[group] = 0
+                    self.groupSelCount[group] = 0
+                self.groups[group].append (header)
+                self.length = max((self.length,
len(header[rpm.RPMTAG_NAME])))
+                self.groupCount[group] = self.groupCount[group] + 1
+                if header.isSelected():
+                    self.groupSize[group] = self.groupSize[group] +
(header[rpm.RPMTAG_SIZE] / 1024)
+                    self.groupSelCount[group] = self.groupSelCount[group] +
1
 
         # now insert the groups into the list, then each group's packages
         # after sorting the list
@@ -205,69 +205,69 @@ class IndividualPackageWindow:
                 return 0
             return 1
         
-	keys = self.groups.keys ()
+        keys = self.groups.keys ()
         keys.sort ()
-	for key in keys:
-	    self.length = max((self.length, 1+len(key)))
+        for key in keys:
+            self.length = max((self.length, 1+len(key)))
 
-	# comps.size() is in meg, we found in k
-	self.total = comps.size() * 1024
+        # comps.size() is in meg, we found in k
+        self.total = comps.size() * 1024
 
         index = 0
         for key in keys:
-	    self.groups[key].sort (cmpHdrName)
-	    name = "[%s] %-*s %s" % (self.printNum(key), self.length - 1,
key, self.printSize(self.groupSize[key]))
-	    ct.append (name, key)
-	    for header in self.groups[key]:
-		if header.isSelected():
-		    name = "%-*s %s" % (self.length,
header[rpm.RPMTAG_NAME], self.printSize(header[rpm.RPMTAG_SIZE] / 1024))
-		else:
-		    name = "%-*s" % (self.length + 7,
header[rpm.RPMTAG_NAME])
-		ct.addItem (name, (index, snackArgs["append"]),
+            self.groups[key].sort (cmpHdrName)
+            name = "[%s] %-*s %s" % (self.printNum(key), self.length - 1,
key, self.printSize(self.groupSize[key]))
+            ct.append (name, key)
+            for header in self.groups[key]:
+                if header.isSelected():
+                    name = "%-*s %s" % (self.length,
header[rpm.RPMTAG_NAME], self.printSize(header[rpm.RPMTAG_SIZE] / 1024))
+                else:
+                    name = "%-*s" % (self.length + 7,
header[rpm.RPMTAG_NAME])
+                ct.addItem (name, (index, snackArgs["append"]),
                             header, header.isSelected())
             index = index + 1
                 
-	ct.setCallback(self.ctCallback)
-		
+        ct.setCallback(self.ctCallback)
+                
         bb = ButtonBar (screen, (TEXT_OK_BUTTON, TEXT_BACK_BUTTON))
 
-	self.lbl = Label ("")
-	self.printTotal()
+        self.lbl = Label ("")
+        self.printTotal()
 
-	g = GridFormHelp (screen, _("Individual Package Selection"),
+        g = GridFormHelp (screen, _("Individual Package Selection"),
                           "indvpackage", 1, 3)
-	g.add (ct, 0, 0, (0, 0, 0, 0))
-	g.add (self.lbl, 0, 1, (4, 0, 0, 1), anchorLeft = 1)
-	g.add (bb, 0, 2, growx = 1)
+        g.add (ct, 0, 0, (0, 0, 0, 0))
+        g.add (self.lbl, 0, 1, (4, 0, 0, 1), anchorLeft = 1)
+        g.add (bb, 0, 2, growx = 1)
 
-	g.addHotKey("F2")
+        g.addHotKey("F2")
 
-	screen.pushHelpLine (_("   <Space>,<+>,<-> selection   |   <F1> help
|   <F2> package description"))
+        screen.pushHelpLine (_("   <Space>,<+>,<-> selection   |   <F1>
help   |   <F2> package description"))
 
-	while 1:
-	    result = g.run ()
-	    if result != "F2":
-		break
-	    header = self.ct.getCurrent()
-	    (branch, isOn) = self.ct.getEntryValue(header)
-	    if not branch:
-		self.printHelp(screen, header)
+        while 1:
+            result = g.run ()
+            if result != "F2":
+                break
+            header = self.ct.getCurrent()
+            (branch, isOn) = self.ct.getEntryValue(header)
+            if not branch:
+                self.printHelp(screen, header)
 
-	screen.popWindow()
+        screen.popWindow()
 
-	screen.popHelpLine ()
+        screen.popHelpLine ()
 
         rc = bb.buttonPressed (result)
         
         if rc == TEXT_BACK_CHECK:
-	    comps.setSelectionState(origSelection)
+            comps.setSelectionState(origSelection)
             return INSTALL_BACK
 
         return INSTALL_OK
 
 class PackageDepWindow:
     def size(self, comps):
-	return _("Total install size: %s") % comps.sizeStr()
+        return _("Total install size: %s") % comps.sizeStr()
 
     def radiocb (self, args):
         (label, comps, deps, widget) = args
@@ -283,15 +283,19 @@ class PackageDepWindow:
         else:
             raise RuntimeError, "never reached"
         
-	label.setText(self.size(comps))
+        label.setText(self.size(comps))
 
-    def __call__(self, screen, comps, deps):
+    def __call__(self, screen, comps, deps, satisfyDependencies):
 
-	origSelection = comps.getSelectionState()
+        origSelection = comps.getSelectionState()
         comps.selectDeps (deps)
 
+        if (satisfyDependencies == 1):
+            comps.selectDepCause (deps)
+            return INSTALL_OK
+
         g = GridFormHelp(screen, _("Package Dependencies"), 
-			 "packagedeps", 1, 8)
+                         "packagedeps", 1, 8)
         g.add (TextboxReflowed (50, _("Some of the packages you have "
                                       "selected to install require "
                                       "packages you have not selected. If "
@@ -322,16 +326,16 @@ class PackageDepWindow:
             return "%-*s" % (pad, text)
         
         self.inst = SingleRadioButton (pad (maxlen, instt), None, 1)
-	self.inst.setCallback(self.radiocb, (la, comps, deps, self.inst))
+        self.inst.setCallback(self.radiocb, (la, comps, deps, self.inst))
         g.add (self.inst, 0, 4, (0, 1, 0, 0), anchorLeft = 1)
 
         self.cause = SingleRadioButton (pad (maxlen, causet), self.inst, 0)
-	self.cause.setCallback(self.radiocb, (la, comps, deps, self.cause))
+        self.cause.setCallback(self.radiocb, (la, comps, deps, self.cause))
         g.add (self.cause, 0, 5, anchorLeft = 1)
         
         self.ignore = SingleRadioButton (pad (maxlen, ignt), self.cause, 0)
         g.add (self.ignore, 0, 6, (0, 0, 0, 1), anchorLeft = 1)
-	self.ignore.setCallback(self.radiocb, (la, comps, deps,
self.ignore))
+        self.ignore.setCallback(self.radiocb, (la, comps, deps,
self.ignore))
         
         bb = ButtonBar (screen, (TEXT_OK_BUTTON, TEXT_BACK_BUTTON))
         g.add (bb, 0, 7, growx = 1)



Attachment: anaconda-eiconpatch.diff
Description: Binary data


[Index of Archives]     [Red Hat General]     [CentOS Users]     [Fedora Users]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]

  Powered by Linux