/[smeserver]/cdrom.image/updates/bootloaderInfo.py
ViewVC logotype

Diff of /cdrom.image/updates/bootloaderInfo.py

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

Revision 1.4 by slords, Wed Nov 23 22:49:43 2005 UTC Revision 1.7 by slords, Wed Apr 5 05:13:40 2006 UTC
# Line 4  Line 4 
4  #  #
5  # Jeremy Katz <katzj@redhat.com>  # Jeremy Katz <katzj@redhat.com>
6  # Erik Troan <ewt@redhat.com>  # Erik Troan <ewt@redhat.com>
7    # Peter Jones <pjones@redhat.com>
8  #  #
9  # Copyright 2002 Red Hat, Inc.  # Copyright 2005 Red Hat, Inc.
10  #  #
11  # This software may be freely redistributed under the terms of the GNU  # This software may be freely redistributed under the terms of the GNU
12  # library public license.  # library public license.
# Line 18  Line 19 
19  import isys  import isys
20  import os, sys  import os, sys
21  import crypt  import crypt
22  import whrandom  import random
23  import butil  import butil
24  import string  import string
25    
# Line 174  class BootImages: Line 175  class BootImages:
175          # These have appeared          # These have appeared
176          for (dev, type) in devs:          for (dev, type) in devs:
177              if not self.images.has_key(dev):              if not self.images.has_key(dev):
178                  if type in dosFilesystems:                  if type in dosFilesystems and doesDualBoot():
179                        self.images[dev] = ("Other", "Other", type)
180                    elif type in ("hfs", "hfs+") and butil.getPPCMachine() == "PMac":
181                      self.images[dev] = ("Other", "Other", type)                      self.images[dev] = ("Other", "Other", type)
182                  else:                  else:
183                      self.images[dev] = (None, None, type)                      self.images[dev] = (None, None, type)
# Line 215  class BootImages: Line 218  class BootImages:
218                  # maybe questionable, but the first ntfs or fat is likely to                  # maybe questionable, but the first ntfs or fat is likely to
219                  # be the correct one to boot with XP using ntfs                  # be the correct one to boot with XP using ntfs
220                  foundDos = 1                  foundDos = 1
221              elif (type == 'hfs') and butil.getPPCMachine() == "PMac":              elif type in ('hfs', 'hfs+') and butil.getPPCMachine() == "PMac":
222                  import isys                  import isys
223                  import partedUtils                  import partedUtils
224    
                 isys.makeDevInode(dev, '/tmp/' + dev)  
225                  part = partedUtils.get_partition_by_name(diskSet.disks, dev)                  part = partedUtils.get_partition_by_name(diskSet.disks, dev)
226                  if partedUtils.get_flags(part) != "boot":                  if partedUtils.get_flags(part) != "boot":
227                      devs.append((dev, type))                      devs.append((dev, type))
# Line 419  class bootloaderInfo: Line 421  class bootloaderInfo:
421              return args              return args
422    
423          args.append("--location=%s" % (self.defaultDevice,))          args.append("--location=%s" % (self.defaultDevice,))
424            args.append("--driveorder=%s" % (",".join(self.drivelist)))
425    
426          if self.args.get():          if self.args.get():
427              args.append("--append=\"%s\"" %(self.args.get()))              args.append("--append=\"%s\"" %(self.args.get()))
# Line 450  class bootloaderInfo: Line 453  class bootloaderInfo:
453          self.args = KernelArguments()          self.args = KernelArguments()
454          self.images = BootImages()          self.images = BootImages()
455          self.device = None          self.device = None
         self.useLinear = 1    # only used for kickstart compatibility  
456          self.defaultDevice = None  # XXX hack, used by kickstart          self.defaultDevice = None  # XXX hack, used by kickstart
457          self.useGrubVal = 0      # only used on x86          self.useGrubVal = 0      # only used on x86
458          self.configfile = None          self.configfile = None
# Line 587  class ia64BootloaderInfo(bootloaderInfo) Line 589  class ia64BootloaderInfo(bootloaderInfo)
589          bootdisk = bootdev[:ind]          bootdisk = bootdev[:ind]
590          bootpart = bootdev[ind:]          bootpart = bootdev[ind:]
591          if (bootdisk.startswith('ida/') or bootdisk.startswith('cciss/') or          if (bootdisk.startswith('ida/') or bootdisk.startswith('cciss/') or
592              bootdisk.startswith('rd/')):              bootdisk.startswith('rd/') or bootdisk.startswith('sx8/')):
593              bootdisk = bootdisk[:-1]              bootdisk = bootdisk[:-1]
594    
595          self.removeOldEfiEntries(instRoot)                      self.removeOldEfiEntries(instRoot)            
# Line 626  class x86BootloaderInfo(bootloaderInfo): Line 628  class x86BootloaderInfo(bootloaderInfo):
628              saltLen = 8              saltLen = 8
629    
630              for i in range(saltLen):              for i in range(saltLen):
631                  salt = salt + whrandom.choice (string.letters +                  salt = salt + random.choice (string.letters +
632                                                 string.digits + './')                                               string.digits + './')
633    
634              self.password = crypt.crypt (val, salt)              self.password = crypt.crypt (val, salt)
635              self.pure = val              self.pure = val
# Line 687  class x86BootloaderInfo(bootloaderInfo): Line 689  class x86BootloaderInfo(bootloaderInfo):
689          target = "mbr"          target = "mbr"
690          if grubTarget[-1].isdigit() and not grubTarget.startswith('md'):          if grubTarget[-1].isdigit() and not grubTarget.startswith('md'):
691              target = "partition"              target = "partition"
692                
693          f = open(instRoot + cf, "w+")          f = open(instRoot + cf, "w+")
694    
695          f.write("# grub.conf generated by anaconda\n")          f.write("# grub.conf generated by anaconda\n")
# Line 714  class x86BootloaderInfo(bootloaderInfo): Line 716  class x86BootloaderInfo(bootloaderInfo):
716    
717          bootDevs = self.getPhysicalDevices(bootDev.device.getDevice())          bootDevs = self.getPhysicalDevices(bootDev.device.getDevice())
718          bootDev = bootDev.device.getDevice()          bootDev = bootDev.device.getDevice()
719            
720          f.write('#          root %s\n' % self.grubbyPartitionName(bootDevs[0]))          f.write('#          root %s\n' % self.grubbyPartitionName(bootDevs[0]))
721          f.write("#          kernel %svmlinuz-version ro "          f.write("#          kernel %svmlinuz-version ro "
722                  "root=/dev/%s\n" % (cfPath, rootDev))                  "root=/dev/%s\n" % (cfPath, rootDev))
723          f.write("#          initrd %sinitrd-version.img\n" % (cfPath))          f.write("#          initrd %sinitrd-version.img\n" % (cfPath))
724          f.write("#boot=/dev/%s\n" % (grubTarget))          f.write("#boot=/dev/%s\n" % (grubTarget))
725    
726          # Check to see if smp kernel should be default or not          # Check to see if smp kernel should be default or not
727          if isys.smpAvailable() or isys.htavailable():          if isys.smpAvailable() or isys.htavailable():
728              smpCapable=1              smpCapable=1
729          else:          else:
730              smpCapable=0              smpCapable=0
731    
732          # get the default image to boot... we have to walk and find it          # get the default image to boot... we have to walk and find it
# Line 779  class x86BootloaderInfo(bootloaderInfo): Line 781  class x86BootloaderInfo(bootloaderInfo):
781    
782          for dev in self.getPhysicalDevices(grubTarget):          for dev in self.getPhysicalDevices(grubTarget):
783              usedDevs[dev] = 1              usedDevs[dev] = 1
784                
785          if self.password:          if self.password:
786              f.write('password --md5 %s\n' %(self.password))              f.write('password --md5 %s\n' %(self.password))
787                    
# Line 836  class x86BootloaderInfo(bootloaderInfo): Line 838  class x86BootloaderInfo(bootloaderInfo):
838                
839          for dev in self.getPhysicalDevices(rootDev):          for dev in self.getPhysicalDevices(rootDev):
840              usedDevs[dev] = 1              usedDevs[dev] = 1
841          
842            for dev in bootDevs:
843                usedDevs[dev] = 1
844    
845          if not os.access(instRoot + "/boot/grub/device.map", os.R_OK):          if not os.access(instRoot + "/boot/grub/device.map", os.R_OK):
846              f = open(instRoot + "/boot/grub/device.map", "w+")              f = open(instRoot + "/boot/grub/device.map", "w+")
# Line 855  class x86BootloaderInfo(bootloaderInfo): Line 860  class x86BootloaderInfo(bootloaderInfo):
860                  # be in the device map, they shouldn't still be in the list.                  # be in the device map, they shouldn't still be in the list.
861                  if not drive.startswith('md'):                  if not drive.startswith('md'):
862                      f.write("(%s)     /dev/%s\n" % (self.grubbyDiskName(drive),                      f.write("(%s)     /dev/%s\n" % (self.grubbyDiskName(drive),
863                                                      drive))                                                  drive))
864              f.close()              f.close()
865                    
866          if self.forceLBA32:          if self.forceLBA32:
# Line 875  class x86BootloaderInfo(bootloaderInfo): Line 880  class x86BootloaderInfo(bootloaderInfo):
880                        instRoot + sysconf + '.rpmsave')                        instRoot + sysconf + '.rpmsave')
881          f = open(instRoot + sysconf, 'w+')          f = open(instRoot + sysconf, 'w+')
882          f.write("boot=/dev/%s\n" %(grubTarget,))          f.write("boot=/dev/%s\n" %(grubTarget,))
883            # XXX forcelba never gets read back...
884          if self.forceLBA32:          if self.forceLBA32:
885              f.write("forcelba=1\n")              f.write("forcelba=1\n")
886          else:          else:
# Line 883  class x86BootloaderInfo(bootloaderInfo): Line 889  class x86BootloaderInfo(bootloaderInfo):
889                            
890          cmds = []          cmds = []
891          for bootDev in bootDevs:          for bootDev in bootDevs:
892              gtPart = self.getMatchingPart(bootDev, grubTarget)              gtDisk = self.grubbyPartitionName(getDiskPart(bootDev)[0])
893              gtDisk = self.grubbyPartitionName(getDiskPart(gtPart)[0])              bPart = self.grubbyPartitionName(bootDev)
             bPart = self.grubbyPartitionName(bootDev)  
894              cmd = "root %s" % (bPart,)              cmd = "root %s" % (bPart,)
895              cmds.append(cmd)              cmds.append(cmd)
896    
897              stage1Target = gtDisk              stage1Target = gtDisk
898              if target == "partition":              if target == "partition":
899                  stage1Target = self.grubbyPartitionName(gtPart)                  stage1Target = self.grubbyPartitionName(bootDev)
900    
901              cmd = "install %s --stage2=/boot/grub/stage2 %s%s/stage1 %s %s%s/stage2 p %s/grub.conf" % \              cmd = "install %s/stage1 %s %s1+16 p %s%s/stage2 %s/grub.conf" % \
902                  (forcelba, bPart, grubPath, stage1Target, bPart, grubPath, grubPath)                  (grubPath, stage1Target, stage1Target, bPart, grubPath, grubPath)
903              cmds.append(cmd)              cmds.append(cmd)
904                
905          if not justConfigFile:          if not justConfigFile:
906              log("GRUB commands:")              log("GRUB commands:")
907              for cmd in cmds:              for cmd in cmds:
# Line 919  class x86BootloaderInfo(bootloaderInfo): Line 924  class x86BootloaderInfo(bootloaderInfo):
924              # really install the bootloader              # really install the bootloader
925              p = os.pipe()              p = os.pipe()
926              for cmd in cmds:              for cmd in cmds:
927                  os.write(p[1], cmd + '\n')                  os.write(p[1], cmd + '\n')
928              os.close(p[1])              os.close(p[1])
929              rhpl.executil.execWithRedirect('/sbin/grub' ,              rhpl.executil.execWithRedirect('/sbin/grub' ,
930                                      [ "grub",  "--batch", "--no-floppy",                                      [ "grub",  "--batch", "--no-floppy",
# Line 940  class x86BootloaderInfo(bootloaderInfo): Line 945  class x86BootloaderInfo(bootloaderInfo):
945                  return device                  return device
946          return devices[0]          return devices[0]
947    
   
948      def grubbyDiskName(self, name):      def grubbyDiskName(self, name):
949          return "hd%d" % self.drivelist.index(name)          return "hd%d" % self.drivelist.index(name)
950    
# Line 990  class x86BootloaderInfo(bootloaderInfo): Line 994  class x86BootloaderInfo(bootloaderInfo):
994              if os.access(instRoot + message, os.R_OK):              if os.access(instRoot + message, os.R_OK):
995                  config.addEntry("message", message, replace = 0)                  config.addEntry("message", message, replace = 0)
996    
997          if not config.testEntry('lba32') and not config.testEntry('linear'):          if not config.testEntry('lba32'):
998              if self.forceLBA32 or (bl.above1024 and              if self.forceLBA32 or (bl.above1024 and
999                                     butil.getArch() != "x86_64" and                                     butil.getArch() != "x86_64" and
1000                                     edd.detect()):                                     edd.detect()):
1001                  config.addEntry("lba32", replace = 0)                  config.addEntry("lba32", replace = 0)
             elif self.useLinear:  
                 config.addEntry("linear", replace = 0)  
             else:  
                 config.addEntry("nolinear", replace = 0)  
1002    
1003          return config          return config
1004    
     def writeLilo(self, instRoot, fsset, bl, langs, kernelList,  
                   chainList, defaultDev, justConfig):  
         if not self.doUpgradeOnly and len(kernelList) >= 1:  
             config = self.getBootloaderConfig(instRoot, fsset, bl, langs,  
                                           kernelList, chainList, defaultDev)  
             config.write(instRoot + self.configfile, perms = self.perms)  
         elif self.doUpgradeOnly:  
             # this is to work around the fact that older kernels don't  
             # remove themselves from lilo.conf on upgrade  
             # it's a really bad hack, probably also needs to happen on  
             # other arches once they support upgradeonly  
             config = LiloConfigFile ()  
             if os.access (instRoot + self.configfile, os.R_OK):  
                 self.perms = os.stat(instRoot + self.configfile)[0] & 0777  
                 config.read (instRoot + self.configfile)  
                 # Remove any invalid entries that are in the file; we probably  
                 # just removed those kernels.  
                 for label in config.listImages():  
                     (fsType, sl, path, other) = config.getImage(label)  
                     if fsType == "other": continue  
   
                     if not os.access(instRoot + sl.getPath(), os.R_OK):  
                         config.delImage(label)  
   
                 # make sure that the default entry really exists. since  
                 # getDefault actually gets the entry for us, we'll get an  
                 # exception if it doesn't really exist.    
                 try:  
                     default = config.getDefault()  
                 except:  
                     try:  
                         config.delEntry("default")  
                     except:  
                         pass  
                   
                 config.write(instRoot + self.configfile, perms = self.perms)  
   
         # FIXME: do some syncs, just to make sure the config is written out  
         import isys  
         isys.sync()  
         isys.sync()  
         isys.sync()  
   
         if not justConfig:  
             str = rhpl.executil.execWithRedirect('/sbin/lilo' ,  
                                          ["/sbin/lilo", "-v"],  
                                          stdout = "/dev/tty5",  
                                          stderr = "/dev/tty5",  
                                          root = instRoot)  
         else:  
             str = ""  
   
         return str  
   
1005      # this is a hackish function that depends on the way anaconda writes      # this is a hackish function that depends on the way anaconda writes
1006      # out the grub.conf with a #boot= comment      # out the grub.conf with a #boot= comment
1007      # XXX this falls into the category of self.doUpgradeOnly      # XXX this falls into the category of self.doUpgradeOnly
# Line 1077  class x86BootloaderInfo(bootloaderInfo): Line 1023  class x86BootloaderInfo(bootloaderInfo):
1023              f.close()              f.close()
1024              for line in lines:              for line in lines:
1025                  if line.startswith(stanza):                  if line.startswith(stanza):
                     import checkbootloader  
1026                      theDev = checkbootloader.getBootDevString(line)                      theDev = checkbootloader.getBootDevString(line)
1027                      break                      break
1028              if theDev is not None:              if theDev is not None:
# Line 1092  class x86BootloaderInfo(bootloaderInfo): Line 1037  class x86BootloaderInfo(bootloaderInfo):
1037          if not os.access(instRoot + sysconf, os.R_OK):          if not os.access(instRoot + sysconf, os.R_OK):
1038              f = open(instRoot + sysconf, "w+")              f = open(instRoot + sysconf, "w+")
1039              f.write("boot=%s\n" %(theDev,))              f.write("boot=%s\n" %(theDev,))
1040                # XXX forcelba never gets read back at all...
1041              if self.forceLBA32:              if self.forceLBA32:
1042                  f.write("forcelba=1\n")                  f.write("forcelba=1\n")
1043              else:              else:
# Line 1138  class x86BootloaderInfo(bootloaderInfo): Line 1084  class x86BootloaderInfo(bootloaderInfo):
1084                      grubbyRootPart = self.grubbyPartitionName(rootDev)                      grubbyRootPart = self.grubbyPartitionName(rootDev)
1085                      break                      break
1086                                            
1087              cmd = "root %s\ninstall --stage2=/boot/grub/stage2 %s%s/stage1 %s %s%s/stage2 p %s/grub.conf" \              cmd = "root %s\ninstall %s/stage1 %s %s1+16 p %s%s/stage2 %s/grub.conf" \
1088                  % (grubbyRootPart, grubbyRootPart, grubPath, grubbyStage1Dev,                  % (grubbyRootPart, grubPath, stage1Dev, stage1Dev,
1089                     grubbyRootPart, grubPath, grubPath)                     grubbyRootPart, grubPath, grubPath)
1090                    
1091          if not justConfigFile:              if not justConfigFile:
1092              log("GRUB command %s", cmd)                  log("GRUB command %s", cmd)
1093    
1094              # copy the stage files over into /boot                  # copy the stage files over into /boot
1095              rhpl.executil.execWithRedirect( "/sbin/grub-install",                  rhpl.executil.execWithRedirect( "/sbin/grub-install",
1096                                      ["/sbin/grub-install", "--just-copy"],                                      ["/sbin/grub-install", "--just-copy"],
1097                                      stdout = "/dev/tty5", stderr = "/dev/tty5",                                      stdout = "/dev/tty5", stderr = "/dev/tty5",
1098                                      root = instRoot)                                      root = instRoot)
1099    
1100              # get the stage files synced to disk                  # get the stage files synced to disk
1101              import isys                  import isys
1102              isys.sync()                  isys.sync()
1103              isys.sync()                  isys.sync()
1104              isys.sync()                              isys.sync()            
1105                            
1106              # really install the bootloader                  # really install the bootloader
1107              p = os.pipe()                  p = os.pipe()
1108              os.write(p[1], cmd + '\n')                  os.write(p[1], cmd + '\n')
1109              os.close(p[1])                  os.close(p[1])
1110              rhpl.executil.execWithRedirect('/sbin/grub' ,                  rhpl.executil.execWithRedirect('/sbin/grub' ,
1111                                     [ "grub",  "--batch", "--no-floppy",                                     [ "grub",  "--batch", "--no-floppy",
1112                                       "--device-map=/boot/grub/device.map" ],                                       "--device-map=/boot/grub/device.map" ],
1113                                     stdin = p[0],                                     stdin = p[0],
1114                                     stdout = "/dev/tty5", stderr = "/dev/tty5",                                     stdout = "/dev/tty5", stderr = "/dev/tty5",
1115                                     root = instRoot)                                     root = instRoot)
1116              os.close(p[0])                  os.close(p[0])
1117                            
1118          return ""          return ""
1119    
# Line 1176  class x86BootloaderInfo(bootloaderInfo): Line 1122  class x86BootloaderInfo(bootloaderInfo):
1122                    defaultDev, justConfig, intf):                    defaultDev, justConfig, intf):
1123          # XXX HACK ALERT - see declaration above          # XXX HACK ALERT - see declaration above
1124          if self.doUpgradeOnly:          if self.doUpgradeOnly:
1125              if not self.useGrubVal:              if self.useGrubVal:
                 # we do upgrades sort of right for lilo...  
                 str = self.writeLilo(instRoot, fsset, bl, langs, kernelList,  
                                      chainList, defaultDev,  
                                      justConfig | (self.useGrubVal))  
             else:  
1126                  self.upgradeGrub(instRoot, fsset, bl, langs, kernelList,                  self.upgradeGrub(instRoot, fsset, bl, langs, kernelList,
1127                                   chainList, defaultDev, justConfig)                                   chainList, defaultDev, justConfig)
1128    
# Line 1209  class x86BootloaderInfo(bootloaderInfo): Line 1150  class x86BootloaderInfo(bootloaderInfo):
1150          if len(kernelList) < 1:          if len(kernelList) < 1:
1151              self.noKernelsWarn(intf)              self.noKernelsWarn(intf)
1152    
         str = self.writeLilo(instRoot, fsset, bl, langs, kernelList,  
                              chainList, defaultDev,  
                              justConfig | (self.useGrubVal))  
1153          str = self.writeGrub(instRoot, fsset, bl, langs, kernelList,          str = self.writeGrub(instRoot, fsset, bl, langs, kernelList,
1154                               chainList, defaultDev,                               chainList, defaultDev,
1155                               justConfig | (not self.useGrubVal))                               justConfig | (not self.useGrubVal))
# Line 1226  class x86BootloaderInfo(bootloaderInfo): Line 1164  class x86BootloaderInfo(bootloaderInfo):
1164      def getArgList(self):      def getArgList(self):
1165          args = bootloaderInfo.getArgList(self)          args = bootloaderInfo.getArgList(self)
1166                    
         if not self.useGrubVal:  
             args.append("--useLilo")  
1167          if self.forceLBA32:          if self.forceLBA32:
1168              args.append("--lba32")              args.append("--lba32")
         if not self.useLinear:  
             args.append("--nolinear")  
1169          if self.password:          if self.password:
1170              args.append("--md5pass=%s" %(self.password))              args.append("--md5pass=%s" %(self.password))
1171                    
# Line 1612  class ppcBootloaderInfo(bootloaderInfo): Line 1546  class ppcBootloaderInfo(bootloaderInfo):
1546          bootDev = bootDev.device.getDevice(asBoot = 1)          bootDev = bootDev.device.getDevice(asBoot = 1)
1547    
1548          f = open(instRoot + cf, "w+")          f = open(instRoot + cf, "w+")
1549    
1550          f.write("# yaboot.conf generated by anaconda\n\n")          f.write("# yaboot.conf generated by anaconda\n\n")
1551                    
1552          f.write("boot=%s\n" %(yabootTarget,))          f.write("boot=%s\n" %(yabootTarget,))
# Line 1622  class ppcBootloaderInfo(bootloaderInfo): Line 1557  class ppcBootloaderInfo(bootloaderInfo):
1557          partno = partNum + 1 # 1 based          partno = partNum + 1 # 1 based
1558          f.write("partition=%s\n" %(partno,))          f.write("partition=%s\n" %(partno,))
1559    
1560          f.write("timeout=20\n")          f.write("timeout=80\n")
1561          f.write("install=/usr/lib/yaboot/yaboot\n")          f.write("install=/usr/lib/yaboot/yaboot\n")
1562          f.write("delay=5\n")          f.write("delay=5\n")
1563            f.write("enablecdboot\n")
1564            f.write("enableofboot\n")
1565            f.write("enablenetboot\n")        
1566    
1567          if butil.getPPCMachine() == "PMac":          if butil.getPPCMachine() == "PMac":
1568                # write out the first hfs/hfs+ partition as being macosx
1569                for (label, longlabel, device) in chainList:
1570                    if ((not label) or (label == "")):
1571                        continue
1572                    f.write("macosx=/dev/%s\n" %(device,))
1573                    break
1574                
1575              f.write("magicboot=/usr/lib/yaboot/ofboot\n")              f.write("magicboot=/usr/lib/yaboot/ofboot\n")
1576    
1577          if butil.getPPCMachine() == "pSeries":          if butil.getPPCMachine() == "pSeries":
# Line 1635  class ppcBootloaderInfo(bootloaderInfo): Line 1580  class ppcBootloaderInfo(bootloaderInfo):
1580          if self.password:          if self.password:
1581              f.write("password=%s\n" %(self.password,))              f.write("password=%s\n" %(self.password,))
1582              f.write("restricted\n")              f.write("restricted\n")
           
1583    
1584          f.write("\n")          f.write("\n")
1585                    
# Line 1683  class ppcBootloaderInfo(bootloaderInfo): Line 1627  class ppcBootloaderInfo(bootloaderInfo):
1627                    
1628                    
1629          log("running: %s" %(ybinargs,))          log("running: %s" %(ybinargs,))
1630          if not flags.test:          if not flags.test:
1631              rhpl.executil.execWithRedirect(ybinargs[0],              rhpl.executil.execWithRedirect(ybinargs[0],
1632                                             ybinargs,                                             ybinargs,
1633                                             stdout = "/dev/tty5",                                             stdout = "/dev/tty5",
# Line 1827  class iseriesBootloaderInfo(bootloaderIn Line 1771  class iseriesBootloaderInfo(bootloaderIn
1771          bootloaderInfo.__init__(self)          bootloaderInfo.__init__(self)
1772          self.kernelLocation = "/boot/"          self.kernelLocation = "/boot/"
1773                    
1774    class sparcBootloaderInfo(bootloaderInfo):
1775        def writeSilo(self, instRoot, fsset, bl, langs, kernelList,
1776                    chainList, defaultDev, justConfigFile):
1777    
1778            from flags import flags
1779    
1780            bootDev = fsset.getEntryByMountPoint("/boot")
1781            if bootDev:
1782                cf = "/boot/silo.conf"
1783                mf = "/boot/silo.message"
1784                cfPath = ""
1785                if not os.path.isdir(instRoot + "/boot"):
1786                    os.mkdir(instRoot + "/boot")
1787            else:
1788                bootDev = fsset.getEntryByMountPoint("/")
1789                cf = "/etc/silo.conf"
1790                mf = "/etc/silo.message"
1791                cfPath = "/boot"
1792            bootDev = bootDev.device.getDevice(asBoot = 1)
1793    
1794            f = open(instRoot + mf, "w+")
1795            f.write("Welcome to %s!\nHit <TAB> for boot options\n\n" % \
1796                (butil.getProductName(),))
1797            f.close()
1798            os.chmod(instRoot + mf, 0600)
1799    
1800            f = open(instRoot + cf, "w+")
1801            f.write("# silo.conf generated by anaconda\n\n")
1802    
1803            f.write("#boot=%s\n" % (bootDev,))
1804            f.write("message=%s\n" % (mf,))
1805            f.write("timeout=50\n")
1806    
1807            (name, partNum) = getDiskPart(bootDev)
1808            partno = partNum + 1
1809            f.write("partition=%s\n" % (partno,))
1810    
1811            if self.password:
1812                f.write("password=%s\n" % (self.password,))
1813                f.write("restricted\n")
1814    
1815            f.write("default=%s\n" % (kernelList[0][0],))
1816            f.write("\n")
1817    
1818            rootDev = fsset.getEntryByMountPoint("/").device.getDevice()
1819    
1820            for (label, longlabel, version) in kernelList:
1821                kernelTag = "-" + version
1822                kernelFile = "%s/vmlinuz%s" % (cfPath, kernelTag)
1823    
1824                f.write("image=%s\n" % (kernelFile,))
1825                f.write("\tlabel=%s\n" % (label,))
1826                f.write("\tread-only\n")
1827    
1828                initrd = booty.makeInitrd(kernelTag, instRoot)
1829                if os.access(instRoot + initrd, os.R_OK):
1830                    f.write("\tinitrd=%s/initrd%s.img\n" % (cfPath, kernelTag))
1831    
1832                append = "%s" % (self.args.get(),)
1833    
1834                realroot = getRootDevName(initrd, fsset, rootDev, instRoot)
1835                if not realroot.startswith("LABEL="):
1836                    f.write("\troot=%s\n" % (realroot,))
1837                else:
1838                    if len(append) > 0:
1839                        append = "%s root=%s" % (append, realroot)
1840                    else:
1841                        append = "root=%s" % (realroot,)
1842    
1843                if len(append) > 0:
1844                    f.write("\tappend=\"%s\"\n" % (append,))
1845                f.write("\n")
1846    
1847            f.close()
1848            os.chmod(instRoot + cf, 0600)
1849    
1850            # FIXME: hack to make sure things are written to disk
1851            import isys
1852            isys.sync()
1853            isys.sync()
1854            isys.sync()
1855    
1856            backup = "%s/backup.b" % (cfPath,)
1857            sbinargs = ["/sbin/silo", "-f", "-C", cf, "-S", backup]
1858            if butil.getSparcMachine() == "sun4u":
1859                sbinargs += ["-u"]
1860            else:
1861                sbinargs += ["-U"]
1862    
1863            log("running: %s" % (sbinargs,))
1864            if not flags.test:
1865                rhpl.executil.execWithRedirect(sbinargs[0],
1866                                                sbinargs,
1867                                                stdout = "/dev/tty5",
1868                                                stderr = "/dev/tty5",
1869                                                root = instRoot)
1870    
1871            if (not os.access(instRoot + "/etc/silo.conf", os.R_OK) and
1872                os.access(instRoot + "/boot/etc/silo.conf", os.R_OK)):
1873                os.symlink("../boot/etc/silo.conf",
1874                           instRoot + "/etc/silo.conf")
1875    
1876            return ""
1877    
1878        def setPassword(self, val, isCrypted = 1):
1879            # silo just handles the password unencrypted
1880            self.password = val
1881    
1882        def write(self, instRoot, fsset, bl, langs, kernelList, chainList,
1883                      defaultDev, justConfig, intf):
1884            if len(kernelList) >= 1:
1885                self.writeSilo(instRoot, fsset, bl, langs, kernelList, chainList,
1886                            defaultDev, justConfig)
1887            else:
1888                self.noKernelsWarn(intf)
1889    
1890        def __init__(self):
1891            bootloaderInfo.__init__(self)
1892            self.useSiloVal = 1
1893            self.kernelLocation = "/boot"
1894            self.configfile = "/etc/silo.conf"
1895    
1896  ###############  ###############
1897  # end of boot loader objects... these are just some utility functions used  # end of boot loader objects... these are just some utility functions used


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

admin@koozali.org
ViewVC Help
Powered by ViewVC 1.2.1 RSS 2.0 feed