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

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

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

Revision 1.30 by slords, Mon Nov 17 23:17:50 2008 UTC Revision 1.31 by slords, Mon Jun 1 15:33:17 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    
20      def __init__(self, script, interp, inChroot, logfile = None):      def __init__(self, script, interp, inChroot, logfile = None):
21          self.script = script          self.script = script
22          self.interp = interp          self.interp = interp
23          self.inChroot = inChroot          self.inChroot = inChroot
24          self.logfile = logfile          self.logfile = logfile
25    
26      def run(self, chroot, serial):      def run(self, chroot, serial):
27          scriptRoot = "/"          scriptRoot = "/"
28          if self.inChroot:          if self.inChroot:
29              scriptRoot = chroot              scriptRoot = chroot
30    
31          path = scriptRoot + "/tmp/sme-script"          path = scriptRoot + "/tmp/sme-script"
32    
33          f = open(path, "w")          f = open(path, "w")
34          f.write(self.script)          f.write(self.script)
35          f.close()          f.close()
36          os.chmod(path, 0700)          os.chmod(path, 0700)
37    
38          if self.logfile is not None:          if self.logfile is not None:
39              messages = self.logfile              messages = self.logfile
40          elif serial:          elif serial:
41              messages = "/tmp/sme-script.log"              messages = "/tmp/sme-script.log"
42          else:          else:
43              messages = "/dev/tty3"              messages = "/dev/tty3"
44    
45          rc = iutil.execWithRedirect(self.interp,          rc = iutil.execWithRedirect(self.interp,
46                                      [self.interp,"/tmp/sme-script"],                                      [self.interp,"/tmp/sme-script"],
47                                      stdout = messages, stderr = messages,                                      stdout = messages, stderr = messages,
48                                      root = scriptRoot)                                      root = scriptRoot)
49    
50          if rc != 0:          if rc != 0:
51              log("WARNING - Error code %s encountered running a sme script", rc)              log("WARNING - Error code %s encountered running a sme script", rc)
52    
53          os.unlink(path)          os.unlink(path)
54    
55  class InstallClass(BaseInstallClass):  class InstallClass(BaseInstallClass):
56      id = "smeserver"      id = "smeserver"
# Line 60  class InstallClass(BaseInstallClass): Line 60  class InstallClass(BaseInstallClass):
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      sortPriority = 1      sortPriority = 1
63        useabledrives = 0
64    
65      parentClass = ( _("Install SME Server"), "smeserver.png" )      parentClass = ( _("Install SME Server"), "smeserver.png" )
66    
# Line 68  class InstallClass(BaseInstallClass): Line 69  class InstallClass(BaseInstallClass):
69    
70      def setSteps(self, dispatch):      def setSteps(self, dispatch):
71          dispatch.setStepList(          dispatch.setStepList(
72                   "language",                   "language",
73                   "keyboard",                   "keyboard",
74                   "findrootparts",                   "findrootparts",
75                   #"betanag",                   "betanag",
76                   "installtype",                   "installtype",
77                   "partitionobjinit",                   "partitionobjinit",
78                   "autopartitionexecute",                   "autopartitionexecute",
79                     "parttype",
80                   "partition",                   "partition",
81                   "partitiondone",                   "partitiondone",
82                   "bootloadersetup",                                   "bootloadersetup",                
83                   "languagesupport",                   "languagesupport",
84                   "timezone",                   "timezone",
85                   "readcomps",                   "readcomps",
86                   "selectlangpackages",                   "selectlangpackages",
87                   "checkdeps",                   "checkdeps",
88                   "dependencies",                   "dependencies",
89                   "install",                   "install",
90                   "enablefilesystems",                   "enablefilesystems",
91                   "migratefilesystems",                   "migratefilesystems",
92                   "setuptime",                   "setuptime",
93                   "preinstallconfig",                   "preinstallconfig",
94                   "installpackages",                   "installpackages",
95                   "postinstallconfig",                   "postinstallconfig",
96                   "writeconfig",                   "writeconfig",
97                   "instbootloader",                   "instbootloader",
98                   "dopostaction",                   "dopostaction",
99                   "writeksconfig",                   "writeksconfig",
100                   "methodcomplete",                   "methodcomplete",
101                   "copylogs",                   "copylogs",
102                   "setfilecon",                   "setfilecon",
103                   "complete"                   "complete"
104                  )                  )
105    
106          # 'partition' can be used on the command line to force          # 'partition' can be used on the command line to force
107          # verification of partitions.  useful in some cases...          # verification of partitions.  useful in some cases...
108          cmdline = open("/proc/cmdline", "r").read()          cmdline = open("/proc/cmdline", "r").read()
109          cmdline = cmdline.split()          cmdline = cmdline.split()
110          if "partition" in cmdline:          if self.useabledrives == 0 or "partition" in cmdline:
111                dispatch.skipStep("parttype", skip = 0)
112              dispatch.skipStep("partition", skip = 0)              dispatch.skipStep("partition", skip = 0)
113          else:          else:
114                dispatch.skipStep("parttype", skip = 1)
115              dispatch.skipStep("partition", skip = 1)              dispatch.skipStep("partition", skip = 1)
116    
117      def setDefaultPartitioning(self, partitions, clear = CLEARPART_TYPE_LINUX, doClear = 1):      def setDefaultPartitioning(self, partitions, clear = CLEARPART_TYPE_LINUX, doClear = 1):
118          uniqueID = 100          uniqueID = 100
119          (swapMin, swapMax) = iutil.swapSuggestion()          (swapMin, swapMax) = iutil.swapSuggestion()
120          diskset = partedUtils.DiskSet()          diskset = partedUtils.DiskSet()
121          drives = diskset.driveList()          drives = diskset.driveList()
122          usedDrives = []          usedDrives = []
123    
124          spares = 0          spares = 0
125          useable = 0          self.useabledrives = 0
126          for drive in drives:          for drive in drives:
127              if not isys.driveIsRemovable(drive):              if not isys.driveIsRemovable(drive):
128                  useable = useable + 1                  self.useabledrives = self.useabledrives + 1
129    
130          if useable >= 1:          log.info("Found %d useable drives" % self.useabledrives)
131              if "noraid" in cmdline:          if self.useabledrives >= 1:
132                  for drive in drives:              if "noraid" in cmdline:
133                      if not isys.driveIsRemovable(drive):                  for drive in drives:
134                          filesystem = fileSystemTypeGet("ext3")                      if not isys.driveIsRemovable(drive):
135                          request = partRequests.PartitionSpec(filesystem, mountpoint="/boot", drive=[drive],                          filesystem = fileSystemTypeGet("ext3")
136                                  size=100, primary=1, format=1)                          request = partRequests.PartitionSpec(filesystem, mountpoint="/boot", drive=[drive],
137                          partitions.autoPartitionRequests.append(request)                                  size=100, primary=1, format=1)
138                          usedDrives.append(drive);                          partitions.autoPartitionRequests.append(request)
139                            usedDrives.append(drive);
140                          if "nolvm" in cmdline:  
141                              filesystem = fileSystemTypeGet("ext3")                          if "nolvm" in cmdline:
142                              request = partRequests.PartitionSpec(filesystem, mountpoint="/", drive=[drive],                              filesystem = fileSystemTypeGet("ext3")
143                                      size=1300, grow=1, primary=1, format=1)                              request = partRequests.PartitionSpec(filesystem, mountpoint="/", drive=[drive],
144                              partitions.autoPartitionRequests.append(request)                                      size=1300, grow=1, primary=1, format=1)
145                                partitions.autoPartitionRequests.append(request)
146                              filesystem = fileSystemTypeGet("swap")  
147                              request = partRequests.PartitionSpec(filesystem, drive=[drive], size=swapMin,                              filesystem = fileSystemTypeGet("swap")
148                                      maxSizeMB=swapMax, grow=1, primary=1, format=1)                              request = partRequests.PartitionSpec(filesystem, drive=[drive], size=swapMin,
149                              partitions.autoPartitionRequests.append(request)                                      maxSizeMB=swapMax, grow=1, primary=1, format=1)
150                                partitions.autoPartitionRequests.append(request)
151                          else:  
152                              filesystem = fileSystemTypeGet("physical volume (LVM)")                          else:
153                              request = partRequests.PartitionSpec(filesystem, drive=[drive], size=swapMin+1500,                              filesystem = fileSystemTypeGet("physical volume (LVM)")
154                                      grow=1, primary=1, format=1)                              request = partRequests.PartitionSpec(filesystem, drive=[drive], size=swapMin+1500,
155                              request.uniqueID = 200                                      grow=1, primary=1, format=1)
156                              partitions.autoPartitionRequests.append(request)                              request.uniqueID = 200
157                                partitions.autoPartitionRequests.append(request)
158                          break  
159                            break
160              else:  
161                  raid1 = []              else:
162                  raid2 = []                  raid1 = []
163                  raid3 = []                  raid2 = []
164                    raid3 = []
165                  if useable >= 3 and "nospare" not in cmdline:  
166                      useable = useable - 1                  if self.useabledrives >= 3 and "nospare" not in cmdline:
167                      spares = 1                      self.useabledrives = self.useabledrives - 1
168                        spares = 1
169                  if "raid1" in cmdline and useable >= 1:  
170                      useable = 1                  if "raid1" in cmdline and self.useabledrives >= 1:
171                      raidLevel = "RAID1"                      self.useabledrives = 1
172                  else:                      raidLevel = "RAID1"
173                      if useable >= 6:                  else:
174                          useable = useable - 2                      if self.useabledrives >= 6:
175                          raidLevel = "RAID6"                          self.useabledrives = self.useabledrives - 2
176                      elif useable >= 2:                          raidLevel = "RAID6"
177                          useable = useable - 1                      elif self.useabledrives >= 2:
178                          if useable >= 2:                          self.useabledrives = self.useabledrives - 1
179                              raidLevel = "RAID5"                          if self.useabledrives >= 2:
180                          else:                              raidLevel = "RAID5"
181                              raidLevel = "RAID1"                          else:
182                      else:                              raidLevel = "RAID1"
183                          raidLevel = "RAID1"                      else:
184                            raidLevel = "RAID1"
185                  for drive in drives:  
186                      if not isys.driveIsRemovable(drive):                  for drive in drives:
187                          filesystem = fileSystemTypeGet("software RAID")                      if not isys.driveIsRemovable(drive):
188                          request = partRequests.PartitionSpec(filesystem, drive=[drive], size=100, primary=1, format=1)                          filesystem = fileSystemTypeGet("software RAID")
189                          request.uniqueID = uniqueID                          request = partRequests.PartitionSpec(filesystem, drive=[drive], size=100, primary=1, format=1)
190                          raid1.append(uniqueID)                          request.uniqueID = uniqueID
191                          partitions.autoPartitionRequests.append(request)                          raid1.append(uniqueID)
192                          usedDrives.append(drive);                          partitions.autoPartitionRequests.append(request)
193                            usedDrives.append(drive);
194                          if "nolvm" in cmdline:  
195                              filesystem = fileSystemTypeGet("software RAID")                          if "nolvm" in cmdline:
196                              request = partRequests.PartitionSpec(filesystem, drive=[drive], size=swapMin/useable+10,                              filesystem = fileSystemTypeGet("software RAID")
197                                      maxSizeMB=swapMax/useable, grow=1, primary=1, format=1)                              request = partRequests.PartitionSpec(filesystem, drive=[drive], size=swapMin/self.useabledrives+10,
198                              request.uniqueID = uniqueID + 30                                      maxSizeMB=swapMax/self.useabledrives, grow=1, primary=1, format=1)
199                              raid2.append(uniqueID + 30)                              request.uniqueID = uniqueID + 30
200                              partitions.autoPartitionRequests.append(request)                              raid2.append(uniqueID + 30)
201                                partitions.autoPartitionRequests.append(request)
202                              filesystem = fileSystemTypeGet("software RAID")  
203                              request = partRequests.PartitionSpec(filesystem, drive=[drive], size=1500/useable,                              filesystem = fileSystemTypeGet("software RAID")
204                                      grow=1, primary=1, format=1)                              request = partRequests.PartitionSpec(filesystem, drive=[drive], size=1500/self.useabledrives,
205                              request.uniqueID = uniqueID + 60                                      grow=1, primary=1, format=1)
206                              raid3.append(uniqueID + 60)                              request.uniqueID = uniqueID + 60
207                              partitions.autoPartitionRequests.append(request)                              raid3.append(uniqueID + 60)
208                                partitions.autoPartitionRequests.append(request)
209                          else:  
210                              filesystem = fileSystemTypeGet("software RAID")                          else:
211                              if "multipart" in cmdline:                              filesystem = fileSystemTypeGet("software RAID")
212                                  request = partRequests.PartitionSpec(filesystem, drive=[drive], size=(swapMin+3000)/useable,                              if "multipart" in cmdline:
213                                          grow=1, format=1)                                  request = partRequests.PartitionSpec(filesystem, drive=[drive], size=(swapMin+3000)/self.useabledrives,
214                              else:                                          grow=1, format=1)
215                                  request = partRequests.PartitionSpec(filesystem, drive=[drive], size=(swapMin+1500)/useable,                              else:
216                                          grow=1, format=1)                                  request = partRequests.PartitionSpec(filesystem, drive=[drive], size=(swapMin+1500)/self.useabledrives,
217                              request.uniqueID = uniqueID + 50                                          grow=1, format=1)
218                              raid2.append(uniqueID + 50)                              request.uniqueID = uniqueID + 50
219                              partitions.autoPartitionRequests.append(request)                              raid2.append(uniqueID + 50)
220                                partitions.autoPartitionRequests.append(request)
221                          uniqueID = uniqueID + 1  
222                            uniqueID = uniqueID + 1
223                          if "raid1" in cmdline and len(raid1)-spares >= 2:  
224                              break                          if "raid1" in cmdline and len(raid1)-spares >= 2:
225                                break
226                  filesystem = fileSystemTypeGet("ext3")  
227                  request = partRequests.RaidRequestSpec(filesystem, mountpoint="/boot", raidminor=1,                  filesystem = fileSystemTypeGet("ext3")
228                          raidmembers=raid1, raidlevel="RAID1", format=1, raidspares=spares)                  request = partRequests.RaidRequestSpec(filesystem, mountpoint="/boot", raidminor=1,
229                  partitions.autoPartitionRequests.append(request)                          raidmembers=raid1, raidlevel="RAID1", format=1, raidspares=spares)
230                    partitions.autoPartitionRequests.append(request)
231                  if "nolvm" in cmdline:  
232                      filesystem = fileSystemTypeGet("swap")                  if "nolvm" in cmdline:
233                      request = partRequests.RaidRequestSpec(filesystem, raidmembers=raid2,  raidminor=2,                      filesystem = fileSystemTypeGet("swap")
234                              raidlevel=raidLevel, format=1, raidspares=spares)                      request = partRequests.RaidRequestSpec(filesystem, raidmembers=raid2,  raidminor=2,
235                      partitions.autoPartitionRequests.append(request)                              raidlevel=raidLevel, format=1, raidspares=spares)
236                        partitions.autoPartitionRequests.append(request)
237                      filesystem = fileSystemTypeGet("ext3")  
238                      request = partRequests.RaidRequestSpec(filesystem, mountpoint="/", raidmembers=raid3,  raidminor=3,                      filesystem = fileSystemTypeGet("ext3")
239                              raidlevel=raidLevel, format=1, raidspares=spares)                      request = partRequests.RaidRequestSpec(filesystem, mountpoint="/", raidmembers=raid3,  raidminor=3,
240                      partitions.autoPartitionRequests.append(request)                              raidlevel=raidLevel, format=1, raidspares=spares)
241                        partitions.autoPartitionRequests.append(request)
242                  else:  
243                      filesystem = fileSystemTypeGet("physical volume (LVM)")                  else:
244                      request = partRequests.RaidRequestSpec(filesystem, raidmembers=raid2,  raidminor=2,                      filesystem = fileSystemTypeGet("physical volume (LVM)")
245                              raidlevel=raidLevel, format=1, raidspares=spares)                      request = partRequests.RaidRequestSpec(filesystem, raidmembers=raid2,  raidminor=2,
246                      request.uniqueID = 200                              raidlevel=raidLevel, format=1, raidspares=spares)
247                      partitions.autoPartitionRequests.append(request)                      request.uniqueID = 200
248                        partitions.autoPartitionRequests.append(request)
249              if not "nolvm" in cmdline:  
250                  request = partRequests.VolumeGroupRequestSpec(vgname="main", physvols=[200],              if not "nolvm" in cmdline:
251                          pesize=32768, format=1)                  request = partRequests.VolumeGroupRequestSpec(vgname="main", physvols=[200],
252                  request.uniqueID = 201                          pesize=32768, format=1)
253                  partitions.autoPartitionRequests.append(request)                  request.uniqueID = 201
254                    partitions.autoPartitionRequests.append(request)
255                  if "multipart" in cmdline:  
256                      filesystem = fileSystemTypeGet("ext3")                  if "multipart" in cmdline:
257                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/", size=2048,                      filesystem = fileSystemTypeGet("ext3")
258                              maxSizeMB=4096, volgroup=201, lvname="root", grow=1, format=1)                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/", size=2048,
259                      partitions.autoPartitionRequests.append(request)                              maxSizeMB=4096, volgroup=201, lvname="root", grow=1, format=1)
260                        partitions.autoPartitionRequests.append(request)
261                      filesystem = fileSystemTypeGet("ext3")  
262                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/var", size=1024,                      filesystem = fileSystemTypeGet("ext3")
263                              maxSizeMB=4096, volgroup=201, lvname="var", grow=1, format=1)                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/var", size=1024,
264                      partitions.autoPartitionRequests.append(request)                              maxSizeMB=4096, volgroup=201, lvname="var", grow=1, format=1)
265                        partitions.autoPartitionRequests.append(request)
266                      filesystem = fileSystemTypeGet("ext3")  
267                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/home/e-smith/files", size=1024,                      filesystem = fileSystemTypeGet("ext3")
268                              maxSizeMB=8192, volgroup=201, lvname="files", grow=1, format=1)                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/home/e-smith/files", size=1024,
269                      partitions.autoPartitionRequests.append(request)                              maxSizeMB=8192, volgroup=201, lvname="files", grow=1, format=1)
270                        partitions.autoPartitionRequests.append(request)
271                      filesystem = fileSystemTypeGet("ext3")  
272                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/tmp", size=512,                      filesystem = fileSystemTypeGet("ext3")
273                              maxSizeMB=4096, volgroup=201, lvname="tmp", grow=1, format=1)                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/tmp", size=512,
274                      partitions.autoPartitionRequests.append(request)                              maxSizeMB=4096, volgroup=201, lvname="tmp", grow=1, format=1)
275                        partitions.autoPartitionRequests.append(request)
276                      filesystem = fileSystemTypeGet("swap")  
277                      request = partRequests.LogicalVolumeRequestSpec(filesystem, size=swapMin, maxSizeMB=swapMax,                      filesystem = fileSystemTypeGet("swap")
278                              volgroup=201, lvname="swap", grow=1, format=1)                      request = partRequests.LogicalVolumeRequestSpec(filesystem, size=swapMin, maxSizeMB=swapMax,
279                      partitions.autoPartitionRequests.append(request)                              volgroup=201, lvname="swap", grow=1, format=1)
280                  else:                      partitions.autoPartitionRequests.append(request)
281                      filesystem = fileSystemTypeGet("ext3")                  else:
282                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/", size=1300,                      filesystem = fileSystemTypeGet("ext3")
283                              volgroup=201, lvname="root", grow=1, format=1)                      request = partRequests.LogicalVolumeRequestSpec(filesystem, mountpoint="/", size=1300,
284                      partitions.autoPartitionRequests.append(request)                              volgroup=201, lvname="root", grow=1, format=1)
285                        partitions.autoPartitionRequests.append(request)
286                      filesystem = fileSystemTypeGet("swap")  
287                      request = partRequests.LogicalVolumeRequestSpec(filesystem, size=swapMin, maxSizeMB=swapMax,                      filesystem = fileSystemTypeGet("swap")
288                              volgroup=201, lvname="swap", grow=1, format=1)                      request = partRequests.LogicalVolumeRequestSpec(filesystem, size=swapMin, maxSizeMB=swapMax,
289                      partitions.autoPartitionRequests.append(request)                              volgroup=201, lvname="swap", grow=1, format=1)
290                        partitions.autoPartitionRequests.append(request)
291              partitions.autoClearPartDrives = usedDrives  
292          else:              partitions.autoClearPartDrives = usedDrives
293              BaseInstallClass.setDefaultPartitioning(self, partitions, clear, doClear)          else:
294                BaseInstallClass.setDefaultPartitioning(self, partitions, clear, doClear)
295    
296      def setAsHeadless(self, dispatch, isHeadless = 0):      def setAsHeadless(self, dispatch, isHeadless = 0):
297          if isHeadless == 0:          if isHeadless == 0:
298              pass              pass
299          else:          else:
300              dispatch.skipStep("handleX11pkgs", permanent = 1)              dispatch.skipStep("handleX11pkgs", permanent = 1)
301              dispatch.skipStep("videocard", permanent = 1)              dispatch.skipStep("videocard", permanent = 1)
302              dispatch.skipStep("monitor", permanent = 1)              dispatch.skipStep("monitor", permanent = 1)
303              dispatch.skipStep("xcustom", permanent = 1)              dispatch.skipStep("xcustom", permanent = 1)
304              dispatch.skipStep("writexconfig", permanent = 1)              dispatch.skipStep("writexconfig", permanent = 1)
305    
306      def setGroupSelection(self, grpset, intf):      def setGroupSelection(self, grpset, intf):
307          grpset.unselectAll()          grpset.unselectAll()
# Line 324  class InstallClass(BaseInstallClass): Line 329  class InstallClass(BaseInstallClass):
329          self.setBootloader(id, useLilo=0, location="mbr", linear=1)          self.setBootloader(id, useLilo=0, location="mbr", linear=1)
330    
331      def __init__(self, expert):      def __init__(self, expert):
332          BaseInstallClass.__init__(self, expert)          BaseInstallClass.__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