/[smeserver]/cdrom.image/sme7/product/installclasses/smeinstallclass.py
ViewVC logotype

Diff of /cdrom.image/sme7/product/installclasses/smeinstallclass.py

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

Revision 1.1 by slords, Sat Jun 6 23:51:54 2009 UTC Revision 1.3 by slords, Mon Jun 8 14:43:06 2009 UTC
# Line 13  import partedUtils Line 13  import partedUtils
13    
14  class Script:  class Script:
15      def __repr__(self):      def __repr__(self):
16          str = ("(s: '%s' i: %s c: %d)") %  \          str = ("(s: '%s' i: %s c: %d)") % \
17              (self.script, self.interp, self.inChroot)              (self.script, self.interp, self.inChroot)
18          return string.replace(str, "\n", "|")          return string.replace(str, "\n", "|")
19    
# Line 59  class InstallClass(BaseInstallClass): Line 59  class InstallClass(BaseInstallClass):
59      description = N_("This option performs a new install of "      description = N_("This option performs a new install of "
60                       "SME Server.  All attached hard drives "                       "SME Server.  All attached hard drives "
61                       "will be repartitioned and formated.")                       "will be repartitioned and formated.")
62    
63      sortPriority = 1      sortPriority = 1
64      useabledrives = 0      doPartition = False
65        cmdline = {}
66    
67      parentClass = ( _("Install SME Server"), "smeserver.png" )      parentClass = ( _("Install SME Server"), "smeserver.png" )
68    
69      def requiredDisplayMode(self):      def requiredDisplayMode(self):
70          return 't'          return 't'
71    
72        def createCmdlineDict(self):
73            cmdlineDict = {}
74            cmdline = open("/proc/cmdline", "r").read().strip()
75    
76            for i in cmdline.split():
77                try:
78                    (key, val) = i.split("=", 1)
79                except:
80                    key = i
81                    val = True
82    
83                cmdlineDict[key] = val
84    
85            return cmdlineDict
86    
87        def mediaPresent(self, device):
88            try:
89                fd = os.open("/dev/%s" % device, os.O_RDONLY)
90            except OSError, (errno, strerror):
91                # error 123 = No medium found
92                if errno == 123:
93                    return False
94                else:
95                    return True
96            else:
97                os.close(fd)
98                return True
99    
100      def setSteps(self, dispatch):      def setSteps(self, dispatch):
101          dispatch.setStepList(          dispatch.setStepList(
102                   "language",                   "language",
# Line 76  class InstallClass(BaseInstallClass): Line 106  class InstallClass(BaseInstallClass):
106                   "installtype",                   "installtype",
107                   "partitionobjinit",                   "partitionobjinit",
108                   "autopartitionexecute",                   "autopartitionexecute",
                  "parttype",  
109                   "partition",                   "partition",
110                   "partitiondone",                   "partitiondone",
111                   "bootloadersetup",                                   "bootloadersetup",
112                   "languagesupport",                   "languagesupport",
113                   "timezone",                   "timezone",
114                   "readcomps",                   "readcomps",
# Line 103  class InstallClass(BaseInstallClass): Line 132  class InstallClass(BaseInstallClass):
132                   "complete"                   "complete"
133                  )                  )
134    
135          # 'partition' can be used on the command line to force          # 'partition' can be used on the command line to force
136          # verification of partitions.  useful in some cases...          # verification of partitions.  useful in some cases...
137          cmdline = open("/proc/cmdline", "r").read()          if self.doPartition or self.cmdline.has_key("partition"):
         cmdline = cmdline.split()  
         if self.useabledrives == 0 or "partition" in cmdline:  
             dispatch.skipStep("parttype", skip = 0)  
138              dispatch.skipStep("partition", skip = 0)              dispatch.skipStep("partition", skip = 0)
139          else:          else:
             dispatch.skipStep("parttype", skip = 1)  
140              dispatch.skipStep("partition", skip = 1)              dispatch.skipStep("partition", skip = 1)
141    
142      def setDefaultPartitioning(self, partitions, clear = CLEARPART_TYPE_LINUX, doClear = 1):      def setDefaultPartitioning(self, partitions, clear = CLEARPART_TYPE_LINUX, doClear = 1):
143          uniqueID = 100          self.cmdline = self.createCmdlineDict()
         (swapMin, swapMax) = iutil.swapSuggestion()  
144          diskset = partedUtils.DiskSet()          diskset = partedUtils.DiskSet()
         drives = diskset.driveList()  
         usedDrives = []  
145    
146          spares = 0          alldrives = diskset.driveList()
147          self.useabledrives = 0          if self.cmdline.has_key("drives"):
148          for drive in drives:              drives = filter(lambda x:self.mediaPresent(x) and
149              if not isys.driveIsRemovable(drive):                                       x in self.cmdline["drives"].split(","), alldrives)
150                  self.useabledrives = self.useabledrives + 1          else:
151                drives = filter(lambda x:not isys.driveIsRemovable(x) and
152          log.info("Found %d useable drives" % self.useabledrives)                                       self.mediaPresent(x) and
153          if self.useabledrives >= 1:                                       not isys.driveUsesModule(x, ["usb-storage", "ub", "sbp2"]), alldrives)
             if "noraid" in cmdline:  
                 for drive in drives:  
                     if not isys.driveIsRemovable(drive):  
                         filesystem = fileSystemTypeGet("ext3")  
                         request = partRequests.PartitionSpec(filesystem, mountpoint="/boot", drive=[drive],  
                                 size=100, primary=1, format=1)  
                         partitions.autoPartitionRequests.append(request)  
                         usedDrives.append(drive);  
154    
155                          if "nolvm" in cmdline:          if self.cmdline.has_key("spares"):
156                              filesystem = fileSystemTypeGet("ext3")              spares = max(0,min(int(self.cmdline["spares"]),len(drives)-2))
157                              request = partRequests.PartitionSpec(filesystem, mountpoint="/", drive=[drive],          else:
158                                      size=1300, grow=1, primary=1, format=1)              spares = (len(drives)+4)/7
                             partitions.autoPartitionRequests.append(request)  
   
                             filesystem = fileSystemTypeGet("swap")  
                             request = partRequests.PartitionSpec(filesystem, drive=[drive], size=swapMin,  
                                     maxSizeMB=swapMax, grow=1, primary=1, format=1)  
                             partitions.autoPartitionRequests.append(request)  
   
                         else:  
                             filesystem = fileSystemTypeGet("physical volume (LVM)")  
                             request = partRequests.PartitionSpec(filesystem, drive=[drive], size=swapMin+1500,  
                                     grow=1, primary=1, format=1)  
                             request.uniqueID = 200  
                             partitions.autoPartitionRequests.append(request)  
159    
160                          break          if self.cmdline.has_key("raid") and self.cmdline["raid"] in ["none","0","1","5","6"]:
161                if self.cmdline["raid"] == "none":
162                    level = 0
163                else:
164                    level = int(self.cmdline["raid"])
165                if level == 0:
166                    del drives[1:]
167                    spares = 0
168                if level == 6 and len(drives)-spares < 4:
169                    level = 5
170                if level == 5 and len(drives)-spares < 3:
171                    level = 1
172                if level == 1:
173                    if spares > 1 and not self.cmdline.has_key("spares"):
174                        spares = 1
175                    del drives[2+spares:]
176            else:
177                if len(drives) - spares >= 6:
178                    level = 6
179                elif len(drives) - spares >= 3:
180                    level = 5
181                else:
182                    level = 1
183    
184            if len(drives) >= 1:
185                log("Using the following drives: %s" % drives)
186                if level >= 1:
187                    log("Installing using RAID%s" % level)
188                    log("Using %s spare drives" % spares)
189              else:              else:
190                    log("Installing without using RAID")
191    
192                (swapMin, swapMax) = iutil.swapSuggestion()
193                if level >= 1:
194                  raid1 = []                  raid1 = []
195                  raid2 = []                  raid2 = []
196                  raid3 = []                  raid3 = []
197                    uniqueID = 100
198    
199                  if self.useabledrives >= 3 and "nospare" not in cmdline:                  for drive in drives:
200                      self.useabledrives = self.useabledrives - 1                      request = partRequests.PartitionSpec(fileSystemTypeGet("software RAID"),
201                      spares = 1                              drive=[drive], size=100, primary=1, format=1)
202                        request.uniqueID = uniqueID
203                        raid1.append(uniqueID)
204                        partitions.autoPartitionRequests.append(request)
205    
206                  if "raid1" in cmdline and self.useabledrives >= 1:                      if not self.cmdline.has_key("nolvm"):
207                      self.useabledrives = 1                          request = partRequests.PartitionSpec(fileSystemTypeGet("software RAID"),
208                      raidLevel = "RAID1"                                  size=(swapMin+4096)/(len(drives)-spares-max(0,level-4)),
209                  else:                                  drive=[drive], primary=1, grow=1, format=1)
210                      if self.useabledrives >= 6:                          request.uniqueID = uniqueID + 50
211                          self.useabledrives = self.useabledrives - 2                          raid2.append(uniqueID + 50)
212                          raidLevel = "RAID6"                          partitions.autoPartitionRequests.append(request)
                     elif self.useabledrives >= 2:  
                         self.useabledrives = self.useabledrives - 1  
                         if self.useabledrives >= 2:  
                             raidLevel = "RAID5"  
                         else:  
                             raidLevel = "RAID1"  
213                      else:                      else:
214                          raidLevel = "RAID1"                          request = partRequests.PartitionSpec(fileSystemTypeGet("software RAID"),
215                                    drive=[drive], size=swapMin/(len(drives)-spares-max(0,level-4))+10, grow=1,
216                                    maxSizeMB=swapMax/(len(drives)-spares-max(0,level-4)), format=1, primary=1)
217                            request.uniqueID = uniqueID + 30
218                            raid2.append(uniqueID + 30)
219                            partitions.autoPartitionRequests.append(request)
220    
221                  for drive in drives:                          request = partRequests.PartitionSpec(fileSystemTypeGet("software RAID"),
222                      if not isys.driveIsRemovable(drive):                                  size=1500/(len(drives)-spares-max(0,level-4)),
223                          filesystem = fileSystemTypeGet("software RAID")                                  drive=[drive], grow=1, primary=1, format=1)
224                          request = partRequests.PartitionSpec(filesystem, drive=[drive], size=100, primary=1, format=1)                          request.uniqueID = uniqueID + 60
225                          request.uniqueID = uniqueID                          raid3.append(uniqueID + 60)
                         raid1.append(uniqueID)  
226                          partitions.autoPartitionRequests.append(request)                          partitions.autoPartitionRequests.append(request)
                         usedDrives.append(drive);  
227    
228                          if "nolvm" in cmdline:                      uniqueID = uniqueID + 1
                             filesystem = fileSystemTypeGet("software RAID")  
                             request = partRequests.PartitionSpec(filesystem, drive=[drive], size=swapMin/self.useabledrives+10,  
                                     maxSizeMB=swapMax/self.useabledrives, grow=1, primary=1, format=1)  
                             request.uniqueID = uniqueID + 30  
                             raid2.append(uniqueID + 30)  
                             partitions.autoPartitionRequests.append(request)  
   
                             filesystem = fileSystemTypeGet("software RAID")  
                             request = partRequests.PartitionSpec(filesystem, drive=[drive], size=1500/self.useabledrives,  
                                     grow=1, primary=1, format=1)  
                             request.uniqueID = uniqueID + 60  
                             raid3.append(uniqueID + 60)  
                             partitions.autoPartitionRequests.append(request)  
   
                         else:  
                             filesystem = fileSystemTypeGet("software RAID")  
                             if "multipart" in cmdline:  
                                 request = partRequests.PartitionSpec(filesystem, drive=[drive], size=(swapMin+3000)/self.useabledrives,  
                                         grow=1, format=1)  
                             else:  
                                 request = partRequests.PartitionSpec(filesystem, drive=[drive], size=(swapMin+1500)/self.useabledrives,  
                                         grow=1, format=1)  
                             request.uniqueID = uniqueID + 50  
                             raid2.append(uniqueID + 50)  
                             partitions.autoPartitionRequests.append(request)  
   
                         uniqueID = uniqueID + 1  
   
                         if "raid1" in cmdline and len(raid1)-spares >= 2:  
                             break  
   
                 filesystem = fileSystemTypeGet("ext3")  
                 request = partRequests.RaidRequestSpec(filesystem, mountpoint="/boot", raidminor=1,  
                         raidmembers=raid1, raidlevel="RAID1", format=1, raidspares=spares)  
                 partitions.autoPartitionRequests.append(request)  
229    
230                  if "nolvm" in cmdline:                  partitions.autoPartitionRequests.append(partRequests.RaidRequestSpec(fileSystemTypeGet("ext3"),
231                      filesystem = fileSystemTypeGet("swap")                          mountpoint="/boot", raidmembers=raid1, raidlevel="RAID1", raidminor=1, format=1,
232                      request = partRequests.RaidRequestSpec(filesystem, raidmembers=raid2,  raidminor=2,                          raidspares=0))
233                              raidlevel=raidLevel, format=1, raidspares=spares)  
234                    if not self.cmdline.has_key("nolvm"):
235                        request = partRequests.RaidRequestSpec(fileSystemTypeGet("physical volume (LVM)"),
236                                raidmembers=raid2, raidlevel="RAID"+str(level), raidminor=2, format=1,
237                                raidspares=spares)
238                        request.uniqueID = 200
239                      partitions.autoPartitionRequests.append(request)                      partitions.autoPartitionRequests.append(request)
240                    else:
241                        partitions.autoPartitionRequests.append(partRequests.RaidRequestSpec(fileSystemTypeGet("swap"),
242                                raidmembers=raid2, raidlevel="RAID"+str(level), raidminor=2, format=1, raidspares=spares))
243    
244                      filesystem = fileSystemTypeGet("ext3")                      partitions.autoPartitionRequests.append(partRequests.RaidRequestSpec(fileSystemTypeGet("ext3"),
245                      request = partRequests.RaidRequestSpec(filesystem, mountpoint="/", raidmembers=raid3,  raidminor=3,                              mountpoint="/", raidmembers=raid3, raidlevel="RAID"+str(level), raidminor=3, format=1,
246                              raidlevel=raidLevel, format=1, raidspares=spares)                              raidspares=spares))
                     partitions.autoPartitionRequests.append(request)  
247    
248                  else:              else:
249                      filesystem = fileSystemTypeGet("physical volume (LVM)")                  for drive in drives:
250                      request = partRequests.RaidRequestSpec(filesystem, raidmembers=raid2,  raidminor=2,                      partitions.autoPartitionRequests.append(partRequests.PartitionSpec(fileSystemTypeGet("ext3"),
251                              raidlevel=raidLevel, format=1, raidspares=spares)                              mountpoint="/boot", drive=[drive], size=100, primary=1, format=1))
252                      request.uniqueID = 200  
253                      partitions.autoPartitionRequests.append(request)                      if not self.cmdline.has_key("nolvm"):
254                            request = partRequests.PartitionSpec(fileSystemTypeGet("physical volume (LVM)"),
255                                    drive=[drive], size=swapMin+4096, grow=1, primary=1, format=1)
256                            request.uniqueID = 200
257                            partitions.autoPartitionRequests.append(request)
258                        else:
259                            partitions.autoPartitionRequests.append(partRequests.PartitionSpec(fileSystemTypeGet("ext3"),
260                                    mountpoint="/", drive=[drive], size=4096, grow=1, primary=1, format=1))
261    
262              if not "nolvm" in cmdline:                          partitions.autoPartitionRequests.append(partRequests.PartitionSpec(fileSystemTypeGet("swap"),
263                  request = partRequests.VolumeGroupRequestSpec(vgname="main", physvols=[200],                                  drive=[drive], size=swapMin, maxSizeMB=swapMax, grow=1, primary=1, format=1))
264                          pesize=32768, format=1)  
265                if not self.cmdline.has_key("nolvm"):
266                    request = partRequests.VolumeGroupRequestSpec(vgname="main", physvols=[200], pesize=32768, format=1)
267                  request.uniqueID = 201                  request.uniqueID = 201
268                  partitions.autoPartitionRequests.append(request)                  partitions.autoPartitionRequests.append(request)
269    
270                  if "multipart" in cmdline:                  if not self.cmdline.has_key("multipart"):
271                      filesystem = fileSystemTypeGet("ext3")                      partitions.autoPartitionRequests.append(partRequests.LogicalVolumeRequestSpec(fileSystemTypeGet("ext3"),
272                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/", size=2048,                              mountpoint="/", size=1300, volgroup=201, lvname="root", grow=1, format=1))
                             maxSizeMB=4096, volgroup=201, lvname="root", grow=1, format=1)  
                     partitions.autoPartitionRequests.append(request)  
273    
274                      filesystem = fileSystemTypeGet("ext3")                      partitions.autoPartitionRequests.append(partRequests.LogicalVolumeRequestSpec(fileSystemTypeGet("swap"),
275                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/var", size=1024,                              size=swapMin, maxSizeMB=swapMax, volgroup=201, lvname="swap", grow=1, format=1))
276                              maxSizeMB=4096, volgroup=201, lvname="var", grow=1, format=1)                  else:
277                      partitions.autoPartitionRequests.append(request)                      partitions.autoPartitionRequests.append(partRequests.LogicalVolumeRequestSpec(fileSystemTypeGet("ext3"),
278                                mountpoint="/", size=2048, maxSizeMB=4096, volgroup=201, lvname="root", grow=1, format=1))
279    
280                      filesystem = fileSystemTypeGet("ext3")                      partitions.autoPartitionRequests.append(partRequests.LogicalVolumeRequestSpec(fileSystemTypeGet("ext3"),
281                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/home/e-smith/files", size=1024,                              mountpoint="/var", size=1024, maxSizeMB=4096, volgroup=201, lvname="var", grow=1, format=1))
                             maxSizeMB=8192, volgroup=201, lvname="files", grow=1, format=1)  
                     partitions.autoPartitionRequests.append(request)  
282    
283                      filesystem = fileSystemTypeGet("ext3")                      partitions.autoPartitionRequests.append(partRequests.LogicalVolumeRequestSpec(fileSystemTypeGet("ext3"),
284                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/tmp", size=512,                              mountpoint="/home/e-smith/files", size=1024, maxSizeMB=8192, volgroup=201, lvname="files", grow=1, format=1))
                             maxSizeMB=4096, volgroup=201, lvname="tmp", grow=1, format=1)  
                     partitions.autoPartitionRequests.append(request)  
285    
286                      filesystem = fileSystemTypeGet("swap")                      partitions.autoPartitionRequests.append(partRequests.LogicalVolumeRequestSpec(fileSystemTypeGet("ext3"),
287                      request = partRequests.LogicalVolumeRequestSpec(filesystem, size=swapMin, maxSizeMB=swapMax,                              mountpoint="/tmp", size=512, maxSizeMB=4096, volgroup=201, lvname="tmp", grow=1, format=1))
                             volgroup=201, lvname="swap", grow=1, format=1)  
                     partitions.autoPartitionRequests.append(request)  
                 else:  
                     filesystem = fileSystemTypeGet("ext3")  
                     request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/", size=1300,  
                             volgroup=201, lvname="root", grow=1, format=1)  
                     partitions.autoPartitionRequests.append(request)  
288    
289                      filesystem = fileSystemTypeGet("swap")                      partitions.autoPartitionRequests.append(partRequests.LogicalVolumeRequestSpec(fileSystemTypeGet("swap"),
290                      request = partRequests.LogicalVolumeRequestSpec(filesystem, size=swapMin, maxSizeMB=swapMax,                              size=swapMin, maxSizeMB=swapMax, volgroup=201, lvname="swap", grow=1, format=1))
                             volgroup=201, lvname="swap", grow=1, format=1)  
                     partitions.autoPartitionRequests.append(request)  
291    
292              partitions.autoClearPartDrives = usedDrives              partitions.autoClearPartType = CLEARPART_TYPE_ALL
293                partitions.autoClearPartDrives = drives
294                self.doPartition = False
295          else:          else:
296                log("Not useable drives found.  Enabling manual partitioning.")
297                self.doPartition = True
298              BaseInstallClass.setDefaultPartitioning(self, partitions, clear, doClear)              BaseInstallClass.setDefaultPartitioning(self, partitions, clear, doClear)
299    
300      def setAsHeadless(self, dispatch, isHeadless = 0):      def setAsHeadless(self, dispatch, isHeadless = 0):


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