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

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

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

Revision 1.6 by slords, Wed Nov 23 22:49:43 2005 UTC Revision 1.9 by slords, Wed Apr 5 21:11:51 2006 UTC
# Line 141  class FileSystemType: Line 141  class FileSystemType:
141      def __init__(self):      def __init__(self):
142          self.deviceArguments = {}          self.deviceArguments = {}
143          self.formattable = 0          self.formattable = 0
         self.checkable = 0  
144          self.checked = 0          self.checked = 0
145          self.name = ""          self.name = ""
146          self.linuxnativefs = 0          self.linuxnativefs = 0
# Line 271  class FileSystemType: Line 270  class FileSystemType:
270          if self.isFormattable():          if self.isFormattable():
271              raise RuntimeError, "formatDevice method not defined"              raise RuntimeError, "formatDevice method not defined"
272    
     def checkDevice(self, entry, progress, chroot='/'):  
         if self.isCheckable():  
             raise RuntimeError, "checkDevice method not defined"  
   
273      def migrateFileSystem(self, device, message, chroot='/'):      def migrateFileSystem(self, device, message, chroot='/'):
274          if self.isMigratable():          if self.isMigratable():
275              raise RuntimeError, "migrateFileSystem method not defined"              raise RuntimeError, "migrateFileSystem method not defined"
# Line 285  class FileSystemType: Line 280  class FileSystemType:
280      def isFormattable(self):      def isFormattable(self):
281          return self.formattable          return self.formattable
282    
     def isCheckable(self):  
         return self.checkable  
   
283      def isLinuxNativeFS(self):      def isLinuxNativeFS(self):
284          return self.linuxnativefs          return self.linuxnativefs
285    
# Line 515  class extFileSystem(FileSystemType): Line 507  class extFileSystem(FileSystemType):
507          FileSystemType.__init__(self)          FileSystemType.__init__(self)
508          self.partedFileSystemType = None          self.partedFileSystemType = None
509          self.formattable = 1          self.formattable = 1
         self.checkable = 1  
510          self.checked = 1          self.checked = 1
511          self.linuxnativefs = 1          self.linuxnativefs = 1
512          self.maxSizeMB = 8 * 1024 * 1024          self.maxSizeMB = 8 * 1024 * 1024
# Line 545  class extFileSystem(FileSystemType): Line 536  class extFileSystem(FileSystemType):
536                                    entry.mountpoint)                                    entry.mountpoint)
537          if rc:          if rc:
538              raise SystemError              raise SystemError
           
     def checkDevice(self, entry, progress, chroot='/'):  
         devicePath = entry.device.setupDevice(chroot)  
         args = [ "/usr/sbin/e2fsck", "-p", "-f", "-C0", devicePath]  
   
         rc = fsckFilesystem(args, "/dev/tty5",  
                             progress, entry.mountpoint)  
         if rc:  
             raise SystemError  
539    
540      # this is only for ext3 filesystems, but migration is a method      # this is only for ext3 filesystems, but migration is a method
541      # of the ext2 fstype, so it needs to be here.  FIXME should be moved      # of the ext2 fstype, so it needs to be here.  FIXME should be moved
# Line 753  class swapFileSystem(FileSystemType): Line 735  class swapFileSystem(FileSystemType):
735    
736      def labelDevice(self, entry, chroot):      def labelDevice(self, entry, chroot):
737          file = entry.device.setupDevice(chroot)          file = entry.device.setupDevice(chroot)
738          label = labelFactory.createLabel("SWAP-%s" %entry.device.getDevice(),          devName = entry.device.getDevice()
739                                           self.maxLabelChars)          # we'll keep the SWAP-* naming for all devs but Compaq SMART2
740            # nodes (#170500)
741            if devName[0:6] == "cciss/":
742                swapLabel = "SW-%s" % (devName)
743            else:
744                swapLabel = "SWAP-%s" % (devName)
745            label = labelFactory.createLabel("%s" %swapLabel, self.maxLabelChars)
746          rc = iutil.execWithRedirect ("/usr/sbin/mkswap",          rc = iutil.execWithRedirect ("/usr/sbin/mkswap",
747                                       [ "mkswap", '-v1', "-L", label, file ],                                       [ "mkswap", '-v1', "-L", label, file ],
748                                       stdout = "/dev/tty5",                                       stdout = "/dev/tty5",
# Line 843  class prepbootFileSystem(FileSystemType) Line 831  class prepbootFileSystem(FileSystemType)
831      def __init__(self):      def __init__(self):
832          FileSystemType.__init__(self)          FileSystemType.__init__(self)
833          self.partedFileSystemType = None          self.partedFileSystemType = None
834            self.partedPartitionFlags = [ parted.PARTITION_BOOT ]
835          self.checked = 0          self.checked = 0
836          self.name = "PPC PReP Boot"          self.name = "PPC PReP Boot"
837          self.maxSizeMB = 10          self.maxSizeMB = 10
# Line 1198  MAILADDR root Line 1187  MAILADDR root
1187    
1188          f.close()          f.close()
1189                    
1190      # return the "boot" devicce      # return the "boot" device
1191      def getBootDev(self):      def getBootDev(self):
1192          mntDict = {}          mntDict = {}
1193          bootDev = None          bootDev = None
# Line 1394  MAILADDR root Line 1383  MAILADDR root
1383          log("formatting %s as %s" %(entry.mountpoint, entry.fsystem.name))          log("formatting %s as %s" %(entry.mountpoint, entry.fsystem.name))
1384          entry.fsystem.formatDevice(entry, self.progressWindow, chroot)          entry.fsystem.formatDevice(entry, self.progressWindow, chroot)
1385    
     def checkEntry(self, entry, chroot):  
         log("checking %s type %s" %(entry.mountpoint, entry.fsystem.name))  
         entry.fsystem.checkDevice(entry, self.progressWindow, chroot)  
   
1386      def badblocksEntry(self, entry, chroot):      def badblocksEntry(self, entry, chroot):
1387          entry.fsystem.badblocksDevice(entry, self.progressWindow, chroot)          entry.fsystem.badblocksDevice(entry, self.progressWindow, chroot)
1388                    
# Line 1463  MAILADDR root Line 1448  MAILADDR root
1448          formatted = []          formatted = []
1449          notformatted = []          notformatted = []
1450          for entry in self.entries:          for entry in self.entries:
             if (entry.mountpoint != '/boot'):  
                 continue  
             try:  
                 self.formatEntry(entry, chroot)  
                 formatted.append(entry)  
             except SystemError:  
                 if self.messageWindow:  
                     self.messageWindow(_("Error"),  
                                        _("An error occurred trying to "  
                                          "format %s.  This problem is "  
                                          "serious, and the install cannot "  
                                          "continue.\n\n"  
                                          "Press <Enter> to reboot your system.")  
                                        % (entry.device.getDevice(),))  
                 sys.exit(0)  
   
         for entry in self.entries:  
             if (entry.mountpoint == '/boot'):  
                 continue  
1451              if (not entry.fsystem.isFormattable() or not entry.getFormat()              if (not entry.fsystem.isFormattable() or not entry.getFormat()
1452                  or entry.isMounted()):                  or entry.isMounted()):
1453                  notformatted.append(entry)                  notformatted.append(entry)
# Line 1526  MAILADDR root Line 1492  MAILADDR root
1492      def haveMigratedFilesystems(self):      def haveMigratedFilesystems(self):
1493          return self.migratedfs          return self.migratedfs
1494    
     def checkFilesystems (self, chroot='/'):  
         for entry in self.entries:  
             if entry.fsystem.isCheckable():  
                 self.checkEntry(entry, chroot)  
   
1495      def migrateFilesystems (self, chroot='/'):      def migrateFilesystems (self, chroot='/'):
1496          if self.migratedfs:          if self.migratedfs:
1497              return              return
# Line 1929  class RAIDDevice(Device): Line 1890  class RAIDDevice(Device):
1890                                                 self.minor)                                                 self.minor)
1891    
1892      def raidTab (self, devPrefix='/dev'):      def raidTab (self, devPrefix='/dev'):
1893          d = self.numDisks          if self.level == 1:
1894          if d == 1:              nDisks = max(2, self.numDisks)
1895              d = 2          elif self.level == 5:
1896                nDisks = max(3, self.numDisks)
1897            elif self.level == 6:
1898                nDisks = max(4, self.numDisks)
1899            else:
1900                nDisks = self.numDisks
1901    
1902          entry = ""          entry = ""
1903          entry = entry + "raiddev                    %s/%s\n" % (devPrefix,          entry = entry + "raiddev                    %s/%s\n" % (devPrefix,
1904                                                                  self.device,)                                                                  self.device,)
1905          entry = entry + "raid-level                 %d\n" % (self.level,)          entry = entry + "raid-level                 %d\n" % (self.level,)
1906          entry = entry + "nr-raid-disks              %d\n" % (d)          entry = entry + "nr-raid-disks              %d\n" % (nDisks,)
1907          entry = entry + "chunk-size                 %s\n" %(self.chunksize,)          entry = entry + "chunk-size                 %s\n" %(self.chunksize,)
1908          entry = entry + "persistent-superblock      1\n"          entry = entry + "persistent-superblock      1\n"
1909          entry = entry + "nr-spare-disks             %d\n" % (self.spares,)          entry = entry + "nr-spare-disks             %d\n" % (self.spares,)
# Line 1946  class RAIDDevice(Device): Line 1913  class RAIDDevice(Device):
1913                                                          device)                                                          device)
1914              entry = entry + "    raid-disk     %d\n" % (i,)              entry = entry + "    raid-disk     %d\n" % (i,)
1915              i = i + 1              i = i + 1
1916            while i < nDisks:
1917                entry = entry + "    device     dev/null\n"
1918                entry = entry + "    failed-disk    %d\n" % (i,)
1919                i = i + 1
1920          i = 0          i = 0
1921          for device in self.members[self.numDisks:]:          for device in self.members[self.numDisks:]:
1922              entry = entry + "    device     %s/%s\n" % (devPrefix,              entry = entry + "    device     %s/%s\n" % (devPrefix,
1923                                                          device)                                                          device)
1924              entry = entry + "    spare-disk     %d\n" % (i,)              entry = entry + "    spare-disk     %d\n" % (i,)
1925              i = i + 1              i = i + 1
         if self.numDisks == 1:  
             entry = entry + "    device     dev/null\n"  
             entry = entry + "    failed-disk     1\n"  
1926          return entry          return entry
1927    
1928      def setupDevice (self, chroot="/", devPrefix='/dev'):      def setupDevice (self, chroot="/", devPrefix='/dev'):
1929          def devify(x):          def devify(x):
1930              return "/dev/%s" %(x,)              return "/dev/%s" %(x,)
1931                    
1932            if self.level == 1:
1933                nDisks = max(2, self.numDisks)
1934            elif self.level == 5:
1935                nDisks = max(3, self.numDisks)
1936            elif self.level == 6:
1937                nDisks = max(4, self.numDisks)
1938            else:
1939                nDisks = self.numDisks
1940    
1941          node = "%s/%s" % (devPrefix, self.device)          node = "%s/%s" % (devPrefix, self.device)
1942          isys.makeDevInode(self.device, node)          isys.makeDevInode(self.device, node)
1943    
# Line 1969  class RAIDDevice(Device): Line 1946  class RAIDDevice(Device):
1946                  PartitionDevice(device).setupDevice(chroot,                  PartitionDevice(device).setupDevice(chroot,
1947                                                      devPrefix=devPrefix)                                                      devPrefix=devPrefix)
1948    
1949              args = ["/usr/sbin/mdadm", "--create", "/dev/%s" %(self.device,),              args = ["/usr/sbin/mdadm", "--create", "/dev/%s" %(self.device,),
1950                      "--run", "--chunk=%s" %(self.chunksize,),                      "--run", "--chunk=%s" %(self.chunksize,),
1951                      "--level=%s" %(self.level,),                      "--level=%s" %(self.level,),
1952                      ]                      "--raid-devices=%s" %(nDisks,)]
1953    
1954              if self.spares > 0:              if self.spares > 0:
1955                  args.append("--spare-devices=%s" %(self.spares,),)                  args.append("--spare-devices=%s" %(self.spares,),)
1956                            
             if self.numDisks == 1 and self.level == 1:  
                 args.append("--raid-devices=2")  
             else:  
                 args.append("--raid-devices=%s" %(self.numDisks,),)  
   
1957              args.extend(map(devify, self.members))              args.extend(map(devify, self.members))
1958    
1959              if self.numDisks == 1 and self.level == 1:              i = 0
1960                while self.numDisks + i < nDisks:
1961                  args.append("missing")                  args.append("missing")
1962                    i = i + 1
1963    
1964              log("going to run: %s" %(args,))              log("going to run: %s" %(args,))
1965              iutil.execWithRedirect (args[0], args,              iutil.execWithRedirect (args[0], args,
# Line 2597  def ext2FormatFilesystem(argList, messag Line 2571  def ext2FormatFilesystem(argList, messag
2571          return 0          return 0
2572    
2573      return 1      return 1
   
 def fsckFilesystem(argList, messageFile, windowCreator, mntpoint):  
     if windowCreator:  
         w = windowCreator(_("Checking"),  
                           _("Checking %s file system...") % (mntpoint,), 100)  
     else:  
         w = None  
   
     fd = os.open(messageFile, os.O_RDWR | os.O_CREAT | os.O_APPEND)  
     p = os.pipe()  
     childpid = os.fork()  
     if not childpid:  
         os.close(p[0])  
         os.dup2(p[1], 1)  
         os.dup2(fd, 2)  
         os.close(p[1])  
         os.close(fd)  
         os.execv(argList[0], argList)  
         log("failed to exec %s", argList)  
         os._exit(1)  
                               
     os.close(p[1])  
   
     # ignoring SIGCHLD would be cleaner then ignoring EINTR, but  
     # we can't use signal() in this thread?  
   
     s = 'a'  
     num = ''  
     sync = 0  
     while s:  
         try:  
             s = os.read(p[0], 1)  
             os.write(fd, s)  
   
             if s != ' ':  
                 try:  
                     num = num + s  
                 except:  
                     pass  
             else:  
                 if num and num[:1] != '(' and num[-1] == '%':  
                     try:  
                         val = int(num[:string.find(num, ".")])  
                     except (IndexError, TypeError):  
                         pass  
                     else:  
                         w and w.set(val)  
                 num = ''  
         except OSError, args:  
             (errno, str) = args  
             if (errno != 4):  
                 raise IOError, args  
   
     try:  
         (pid, status) = os.waitpid(childpid, 0)  
     except OSError, (num, msg):  
         log("exception from waitpid while checking: %s %s" %(num, msg))  
         status = None  
     os.close(fd)  
   
     w and w.pop()  
   
     # *shrug*  no clue why this would happen, but hope that things are fine  
     if status is None:  
         return 0  
       
     if os.WIFEXITED(status) and ((os.WEXITSTATUS(status) == 0) or (os.WEXITSTATUS(status) == 1)):  
         return 0  
   
     return 1  
2574    
2575  if __name__ == "__main__":  if __name__ == "__main__":
2576      log.open("foo")      log.open("foo")


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