/[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.1 by slords, Sun Jul 3 23:48:44 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 15  Line 16 
16  # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17  #  #
18    
19    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 173  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 214  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 418  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 449  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 586  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 625  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 686  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 713  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
727            if isys.smpAvailable() or isys.htavailable():
728                smpCapable=1
729            else:
730                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
733          # since grub indexes by where it is in the config file          # since grub indexes by where it is in the config file
734          if defaultDev == rootDev:          if defaultDev == rootDev:
735              default = 0              for kernel in range(0, len(kernelList)):
736                    default=kernel
737                    version=kernelList[kernel][2]
738                    if version.find('smp')<0 and not smpCapable:
739                            break
740                    if version.find('smp')>=0 and smpCapable:
741                            break
742          else:          else:
743              # if the default isn't linux, it's the first thing in the              # if the default isn't linux, it's the first thing in the
744              # chain list              # chain list
# Line 766  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 823  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 842  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 862  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 870  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%s/stage1 d %s %s/stage2 p %s%s/grub.conf" % \              cmd = "install %s/stage1 %s %s1+16 p %s%s/stage2 %s/grub.conf" % \
902                  (forcelba, grubPath, stage1Target, grubPath, bPart, 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 906  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 927  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 977  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 1064  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 1079  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 1125  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 %s/stage1 d %s %s/stage2 p %s%s/grub.conf" \              cmd = "root %s\ninstall %s/stage1 %s %s1+16 p %s%s/stage2 %s/grub.conf" \
1088                  % (grubbyRootPart, grubPath, grubbyStage1Dev,                  % (grubbyRootPart, grubPath, stage1Dev, stage1Dev,
1089                     grubPath, grubbyRootPart, 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 1163  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 1196  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 1213  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 1599  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 1609  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 1622  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 1670  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 1814  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