/[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.6 by slords, Thu Aug 26 22:09:11 2010 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
     useabledrives = 0  
64    
65      parentClass = ( _("Install SME Server"), "smeserver.png" )      parentClass = ( _("Install SME Server"), "smeserver.png" )
66    
67      def requiredDisplayMode(self):      def requiredDisplayMode(self):
68          return 't'          return 't'
69    
70        def createCmdlineDict(self):
71            cmdlineDict = {}
72            cmdline = open("/proc/cmdline", "r").read().strip()
73    
74            for i in cmdline.split():
75                try:
76                    (key, val) = i.split("=", 1)
77                except:
78                    key = i
79                    val = True
80    
81                cmdlineDict[key] = val
82    
83            return cmdlineDict
84    
85      def setSteps(self, dispatch):      def setSteps(self, dispatch):
86            self.anaconda = dispatch
87            self.cmdline = self.createCmdlineDict()
88    
89          dispatch.setStepList(          dispatch.setStepList(
90                     "betanag",
91                   "language",                   "language",
92                   "keyboard",                   "keyboard",
93                   "findrootparts",                   "findrootparts",
                  "betanag",  
94                   "installtype",                   "installtype",
95                   "partitionobjinit",                   "partitionobjinit",
96                   "autopartitionexecute",                   "autopartitionexecute",
                  "parttype",  
                  "partition",  
97                   "partitiondone",                   "partitiondone",
98                   "bootloadersetup",                                   "bootloadersetup",
99                   "languagesupport",                   "languagesupport",
100                   "timezone",                   "timezone",
101                   "readcomps",                   "readcomps",
# Line 95  class InstallClass(BaseInstallClass): Line 111  class InstallClass(BaseInstallClass):
111                   "postinstallconfig",                   "postinstallconfig",
112                   "writeconfig",                   "writeconfig",
113                   "instbootloader",                   "instbootloader",
                  "dopostaction",  
114                   "writeksconfig",                   "writeksconfig",
                  "methodcomplete",  
                  "copylogs",  
115                   "setfilecon",                   "setfilecon",
116                     "copylogs",
117                     "dopostaction",
118                     "methodcomplete",
119                   "complete"                   "complete"
120                  )                  )
121    
122          # 'partition' can be used on the command line to force          # 'partition' can be used on the command line to force
123          # verification of partitions.  useful in some cases...          # verification of partitions.  useful in some cases...
124          cmdline = open("/proc/cmdline", "r").read()          dispatch.skipStep("partition", skip = (1,0)[self.cmdline.has_key("partition")])
         cmdline = cmdline.split()  
         if self.useabledrives == 0 or "partition" in cmdline:  
             dispatch.skipStep("parttype", skip = 0)  
             dispatch.skipStep("partition", skip = 0)  
         else:  
             dispatch.skipStep("parttype", skip = 1)  
             dispatch.skipStep("partition", skip = 1)  
125    
126      def setDefaultPartitioning(self, partitions, clear = CLEARPART_TYPE_LINUX, doClear = 1):      def setDefaultPartitioning(self, partitions, clear = CLEARPART_TYPE_LINUX, doClear = 1):
127          uniqueID = 100          diskset = self.anaconda.id.diskset
         (swapMin, swapMax) = iutil.swapSuggestion()  
         diskset = partedUtils.DiskSet()  
         drives = diskset.driveList()  
         usedDrives = []  
   
         spares = 0  
         self.useabledrives = 0  
         for drive in drives:  
             if not isys.driveIsRemovable(drive):  
                 self.useabledrives = self.useabledrives + 1  
   
         log.info("Found %d useable drives" % self.useabledrives)  
         if self.useabledrives >= 1:  
             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);  
128    
129                          if "nolvm" in cmdline:          if self.cmdline.has_key("exclude"):
130                              filesystem = fileSystemTypeGet("ext3")              alldrives = filter(lambda x:not (partedUtils.hasProtectedPartitions(x, self.anaconda) or
131                              request = partRequests.PartitionSpec(filesystem, mountpoint="/", drive=[drive],                                               x in self.cmdline["exclude"].split(",")), diskset.driveList())
132                                      size=1300, grow=1, primary=1, format=1)          else:
133                              partitions.autoPartitionRequests.append(request)              alldrives = filter(lambda x:not partedUtils.hasProtectedPartitions(x, self.anaconda), diskset.disks.keys())
   
                             filesystem = fileSystemTypeGet("swap")  
                             request = partRequests.PartitionSpec(filesystem, drive=[drive], size=swapMin,  
                                     maxSizeMB=swapMax, grow=1, primary=1, format=1)  
                             partitions.autoPartitionRequests.append(request)  
134    
135                          else:          if self.cmdline.has_key("drives"):
136                              filesystem = fileSystemTypeGet("physical volume (LVM)")              if self.cmdline["drives"] == "all":
137                              request = partRequests.PartitionSpec(filesystem, drive=[drive], size=swapMin+1500,                  drives = alldrives
138                                      grow=1, primary=1, format=1)              else:
139                              request.uniqueID = 200                  drives = filter(lambda x:x in self.cmdline["drives"].split(","), alldrives)
140                              partitions.autoPartitionRequests.append(request)          else:
141                drives = filter(lambda x:not isys.driveUsesModule(x, ["usb-storage", "ub", "sbp2"]), alldrives)
142    
143                          break          if self.cmdline.has_key("spares"):
144                if self.cmdline["spares"] == "none":
145                    spares = 0
146                else:
147                    try:
148                        spares = max(0,min(int(self.cmdline["spares"]),len(drives)-2))
149                    except:
150                        spares = (len(drives)+4)/7
151            else:
152                spares = (len(drives)+4)/7
153    
154            if self.cmdline.has_key("raid") and self.cmdline["raid"] in ["none","0","1","5","6"]:
155                if self.cmdline["raid"] == "none":
156                    level = 0
157              else:              else:
158                    level = int(self.cmdline["raid"])
159                if level == 0:
160                    del drives[1:]
161                    spares = 0
162                if level == 6 and len(drives)-spares < 4:
163                    level = 5
164                if level == 5 and len(drives)-spares < 3:
165                    level = 1
166                if level == 1:
167                    if spares > 1 and not self.cmdline.has_key("spares"):
168                        spares = 1
169                    del drives[2+spares:]
170            elif len(drives) > 1 and len(drives) == len(filter(lambda x:x.startswith('mapper/'), alldrives)):
171                level = -1
172                del drives[1:]
173                spares = 0
174            else:
175                if len(drives) - spares >= 6:
176                    level = 6
177                elif len(drives) - spares >= 3:
178                    level = 5
179                else:
180                    level = 1
181    
182            if len(drives) >= 1:
183                log("Using the following drives: %s" % drives)
184                excluded = filter(lambda x:x not in drives, diskset.disks.keys())
185                if excluded:
186                    log("Excluding the following drives: %s" % excluded)
187                skipped = filter(lambda x:x not in diskset.disks.keys(), diskset.driveList())
188                if skipped:
189                    log("Skipping the following drives: %s" % skipped)
190                if level >= 1:
191                    log("Installing using RAID%s" % level)
192                    log("Using %s spare drives" % spares)
193                elif level < 0:
194                    log("Detected BIOS raid (skipping raid)")
195                else:
196                    log("Installing without using RAID")
197    
198                (swapMin, swapMax) = iutil.swapSuggestion()
199                if level >= 1:
200                  raid1 = []                  raid1 = []
201                  raid2 = []                  raid2 = []
202                  raid3 = []                  raid3 = []
203                    uniqueID = 100
204    
205                  if self.useabledrives >= 3 and "nospare" not in cmdline:                  for drive in drives:
206                      self.useabledrives = self.useabledrives - 1                      request = partRequests.PartitionSpec(fileSystemTypeGet("software RAID"),
207                      spares = 1                              drive=[drive], size=100, primary=1, format=1)
208                        request.uniqueID = uniqueID
209                        raid1.append(uniqueID)
210                        partitions.autoPartitionRequests.append(request)
211    
212                  if "raid1" in cmdline and self.useabledrives >= 1:                      if not self.cmdline.has_key("nolvm"):
213                      self.useabledrives = 1                          if not self.cmdline.has_key("multipart"):
214                      raidLevel = "RAID1"                              request = partRequests.PartitionSpec(fileSystemTypeGet("software RAID"),
215                  else:                                      size=(swapMin+1536)/(len(drives)-spares-max(0,level-4)),
216                      if self.useabledrives >= 6:                                      drive=[drive], primary=1, grow=1, format=1)
                         self.useabledrives = self.useabledrives - 2  
                         raidLevel = "RAID6"  
                     elif self.useabledrives >= 2:  
                         self.useabledrives = self.useabledrives - 1  
                         if self.useabledrives >= 2:  
                             raidLevel = "RAID5"  
217                          else:                          else:
218                              raidLevel = "RAID1"                              request = partRequests.PartitionSpec(fileSystemTypeGet("software RAID"),
219                                        size=(swapMin+5120)/(len(drives)-spares-max(0,level-4)),
220                                        drive=[drive], primary=1, grow=1, format=1)
221                            request.uniqueID = uniqueID + 50
222                            raid2.append(uniqueID + 50)
223                            partitions.autoPartitionRequests.append(request)
224                      else:                      else:
225                          raidLevel = "RAID1"                          request = partRequests.PartitionSpec(fileSystemTypeGet("software RAID"),
226                                    drive=[drive], size=swapMin/(len(drives)-spares-max(0,level-4))+10, grow=1,
227                  for drive in drives:                                  maxSizeMB=swapMax/(len(drives)-spares-max(0,level-4)), format=1, primary=1)
228                      if not isys.driveIsRemovable(drive):                          request.uniqueID = uniqueID + 30
229                          filesystem = fileSystemTypeGet("software RAID")                          raid2.append(uniqueID + 30)
                         request = partRequests.PartitionSpec(filesystem, drive=[drive], size=100, primary=1, format=1)  
                         request.uniqueID = uniqueID  
                         raid1.append(uniqueID)  
230                          partitions.autoPartitionRequests.append(request)                          partitions.autoPartitionRequests.append(request)
                         usedDrives.append(drive);  
231    
232                          if "nolvm" in cmdline:                          request = partRequests.PartitionSpec(fileSystemTypeGet("software RAID"),
233                              filesystem = fileSystemTypeGet("software RAID")                                  size=1536/(len(drives)-spares-max(0,level-4)),
234                              request = partRequests.PartitionSpec(filesystem, drive=[drive], size=swapMin/self.useabledrives+10,                                  drive=[drive], grow=1, primary=1, format=1)
235                                      maxSizeMB=swapMax/self.useabledrives, grow=1, primary=1, format=1)                          request.uniqueID = uniqueID + 60
236                              request.uniqueID = uniqueID + 30                          raid3.append(uniqueID + 60)
237                              raid2.append(uniqueID + 30)                          partitions.autoPartitionRequests.append(request)
                             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)  
238    
239                          else:                      uniqueID = uniqueID + 1
                             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)  
240    
241                  if "nolvm" in cmdline:                  partitions.autoPartitionRequests.append(partRequests.RaidRequestSpec(fileSystemTypeGet("ext3"),
242                      filesystem = fileSystemTypeGet("swap")                          mountpoint="/boot", raidmembers=raid1, raidlevel="RAID1", raidminor=1, format=1,
243                      request = partRequests.RaidRequestSpec(filesystem, raidmembers=raid2,  raidminor=2,                          raidspares=0))
244                              raidlevel=raidLevel, format=1, raidspares=spares)  
245                    if not self.cmdline.has_key("nolvm"):
246                        request = partRequests.RaidRequestSpec(fileSystemTypeGet("physical volume (LVM)"),
247                                raidmembers=raid2, raidlevel="RAID"+str(level), raidminor=2, format=1,
248                                raidspares=spares)
249                        request.uniqueID = 200
250                      partitions.autoPartitionRequests.append(request)                      partitions.autoPartitionRequests.append(request)
251                    else:
252                        partitions.autoPartitionRequests.append(partRequests.RaidRequestSpec(fileSystemTypeGet("swap"),
253                                raidmembers=raid2, raidlevel="RAID"+str(level), raidminor=2, format=1, raidspares=spares))
254    
255                      filesystem = fileSystemTypeGet("ext3")                      partitions.autoPartitionRequests.append(partRequests.RaidRequestSpec(fileSystemTypeGet("ext3"),
256                      request = partRequests.RaidRequestSpec(filesystem, mountpoint="/", raidmembers=raid3,  raidminor=3,                              mountpoint="/", raidmembers=raid3, raidlevel="RAID"+str(level), raidminor=3, format=1,
257                              raidlevel=raidLevel, format=1, raidspares=spares)                              raidspares=spares))
                     partitions.autoPartitionRequests.append(request)  
258    
259                  else:              else:
260                      filesystem = fileSystemTypeGet("physical volume (LVM)")                  for drive in drives:
261                      request = partRequests.RaidRequestSpec(filesystem, raidmembers=raid2,  raidminor=2,                      partitions.autoPartitionRequests.append(partRequests.PartitionSpec(fileSystemTypeGet("ext3"),
262                              raidlevel=raidLevel, format=1, raidspares=spares)                              mountpoint="/boot", drive=[drive], size=100, primary=1, format=1))
263                      request.uniqueID = 200  
264                      partitions.autoPartitionRequests.append(request)                      if not self.cmdline.has_key("nolvm"):
265                            if not self.cmdline.has_key("multipart"):
266                                request = partRequests.PartitionSpec(fileSystemTypeGet("physical volume (LVM)"),
267                                        drive=[drive], size=swapMin+1536, grow=1, primary=1, format=1)
268                            else:
269                                request = partRequests.PartitionSpec(fileSystemTypeGet("physical volume (LVM)"),
270                                        drive=[drive], size=swapMin+5120, grow=1, primary=1, format=1)
271                            request.uniqueID = 200
272                            partitions.autoPartitionRequests.append(request)
273                        else:
274                            partitions.autoPartitionRequests.append(partRequests.PartitionSpec(fileSystemTypeGet("ext3"),
275                                    mountpoint="/", drive=[drive], size=1536, grow=1, primary=1, format=1))
276    
277                            partitions.autoPartitionRequests.append(partRequests.PartitionSpec(fileSystemTypeGet("swap"),
278                                    drive=[drive], size=swapMin, maxSizeMB=swapMax, grow=1, primary=1, format=1))
279    
280              if not "nolvm" in cmdline:              if not self.cmdline.has_key("nolvm"):
281                  request = partRequests.VolumeGroupRequestSpec(vgname="main", physvols=[200],                  request = partRequests.VolumeGroupRequestSpec(vgname="main", physvols=[200], pesize=32768, format=1)
                         pesize=32768, format=1)  
282                  request.uniqueID = 201                  request.uniqueID = 201
283                  partitions.autoPartitionRequests.append(request)                  partitions.autoPartitionRequests.append(request)
284    
285                  if "multipart" in cmdline:                  if not self.cmdline.has_key("multipart"):
286                      filesystem = fileSystemTypeGet("ext3")                      partitions.autoPartitionRequests.append(partRequests.LogicalVolumeRequestSpec(fileSystemTypeGet("ext3"),
287                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/", size=2048,                              mountpoint="/", size=1536, volgroup=201, lvname="root", grow=1, format=1))
                             maxSizeMB=4096, volgroup=201, lvname="root", grow=1, format=1)  
                     partitions.autoPartitionRequests.append(request)  
288    
289                      filesystem = fileSystemTypeGet("ext3")                      partitions.autoPartitionRequests.append(partRequests.LogicalVolumeRequestSpec(fileSystemTypeGet("swap"),
290                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/var", size=1024,                              size=swapMin, maxSizeMB=swapMax, volgroup=201, lvname="swap", grow=1, format=1))
291                              maxSizeMB=4096, volgroup=201, lvname="var", grow=1, format=1)                  else:
292                      partitions.autoPartitionRequests.append(request)                      partitions.autoPartitionRequests.append(partRequests.LogicalVolumeRequestSpec(fileSystemTypeGet("ext3"),
293                                mountpoint="/", size=2048, maxSizeMB=4096, volgroup=201, lvname="root", grow=1, format=1))
294    
295                      filesystem = fileSystemTypeGet("ext3")                      partitions.autoPartitionRequests.append(partRequests.LogicalVolumeRequestSpec(fileSystemTypeGet("ext3"),
296                      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)  
297    
298                      filesystem = fileSystemTypeGet("ext3")                      partitions.autoPartitionRequests.append(partRequests.LogicalVolumeRequestSpec(fileSystemTypeGet("ext3"),
299                      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)  
300    
301                      filesystem = fileSystemTypeGet("swap")                      partitions.autoPartitionRequests.append(partRequests.LogicalVolumeRequestSpec(fileSystemTypeGet("ext3"),
302                      request = partRequests.LogicalVolumeRequestSpec(filesystem, size=swapMin, maxSizeMB=swapMax,                              mountpoint="/tmp", size=1024, 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)  
303    
304                      filesystem = fileSystemTypeGet("swap")                      partitions.autoPartitionRequests.append(partRequests.LogicalVolumeRequestSpec(fileSystemTypeGet("swap"),
305                      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)  
306    
307              partitions.autoClearPartDrives = usedDrives              partitions.autoClearPartType = CLEARPART_TYPE_ALL
308                partitions.autoClearPartDrives = drives
309          else:          else:
310              BaseInstallClass.setDefaultPartitioning(self, partitions, clear, doClear)              log("Not useable drives found.  Enabling manual partitioning.")
311                BaseInstallClass.setDefaultPartitioning(self, partitions, clear = CLEARPART_TYPE_ALL, doClear = True)
312                self.anaconda.skipStep("partition", skip = 0)
313    
314      def setAsHeadless(self, dispatch, isHeadless = 0):      def setAsHeadless(self, dispatch, isHeadless = 0):
315          if isHeadless == 0:          if isHeadless == 0:
# Line 325  class InstallClass(BaseInstallClass): Line 343  class InstallClass(BaseInstallClass):
343          self.setRootPassword(id, pw="ThisIsGoingToBeDisabledAnyway", isCrypted=0)          self.setRootPassword(id, pw="ThisIsGoingToBeDisabledAnyway", isCrypted=0)
344          self.setZeroMbr(id, zeroMbr=1)          self.setZeroMbr(id, zeroMbr=1)
345          self.setClearParts(id, clear=CLEARPART_TYPE_ALL, initAll=1)          self.setClearParts(id, clear=CLEARPART_TYPE_ALL, initAll=1)
         self.setDefaultPartitioning(id.partitions, doClear=0)  
346          self.setBootloader(id, useLilo=0, location="mbr", linear=1)          self.setBootloader(id, useLilo=0, location="mbr", linear=1)
347    
348      def __init__(self, expert):      def __init__(self, expert):


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