|
|
|
@ -21,24 +21,33 @@ import os
|
|
|
|
|
import re
|
|
|
|
|
import sys
|
|
|
|
|
|
|
|
|
|
import cl_overriding
|
|
|
|
|
|
|
|
|
|
install_errors = ""
|
|
|
|
|
def installExit(*args,**kwars):
|
|
|
|
|
raise InstallError(globals()["install_errors"])
|
|
|
|
|
|
|
|
|
|
def overprintERROR(s):
|
|
|
|
|
globals()["install_errors"] += s +"\n"
|
|
|
|
|
|
|
|
|
|
cl_overriding.exit = installExit
|
|
|
|
|
cl_overriding.printERROR = overprintERROR
|
|
|
|
|
|
|
|
|
|
from cl_lang import lang
|
|
|
|
|
from cl_template import template
|
|
|
|
|
from cl_fill import clLocale
|
|
|
|
|
from cl_template import template
|
|
|
|
|
from cl_datavars import DataVars
|
|
|
|
|
from cl_print import color_print
|
|
|
|
|
from cl_distr import PartitionDistributive,DistributiveRepository,\
|
|
|
|
|
DistributiveError, ScratchDistributive
|
|
|
|
|
from time import sleep
|
|
|
|
|
import cl_overriding
|
|
|
|
|
from subprocess import Popen,PIPE
|
|
|
|
|
|
|
|
|
|
tr = lang()
|
|
|
|
|
tr.setGlobalDomain('cl_install')
|
|
|
|
|
tr.setLanguage(sys.modules[__name__])
|
|
|
|
|
|
|
|
|
|
def installExit(*args,**kwars):
|
|
|
|
|
raise InstallError("Processing template error")
|
|
|
|
|
|
|
|
|
|
cl_overriding.exit = installExit
|
|
|
|
|
|
|
|
|
|
class InstallError(Exception):
|
|
|
|
|
"""Installation Error"""
|
|
|
|
@ -63,7 +72,7 @@ class cl_install(color_print):
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
self.clVars = None
|
|
|
|
|
self.clTemp = None
|
|
|
|
|
self.clTempl = None
|
|
|
|
|
self.color = True
|
|
|
|
|
|
|
|
|
|
def colorPrint(self,*argv,**kwarg):
|
|
|
|
@ -85,10 +94,10 @@ class cl_install(color_print):
|
|
|
|
|
def applyTemplatesForSystem(self):
|
|
|
|
|
"""Apply templates for root of system."""
|
|
|
|
|
self.clVars.Set("cl_root_path","/", True)
|
|
|
|
|
self.clTemp = template(self.clVars)
|
|
|
|
|
dirsFiles = self.clTemp.applyTemplates()
|
|
|
|
|
if self.clTemp.getError():
|
|
|
|
|
self.printERROR(self.clTemp.getError())
|
|
|
|
|
self.clTempl = template(self.clVars)
|
|
|
|
|
dirsFiles = self.clTempl.applyTemplates()
|
|
|
|
|
if self.clTempl.getError():
|
|
|
|
|
self.printERROR(self.clTempl.getError())
|
|
|
|
|
return False
|
|
|
|
|
else:
|
|
|
|
|
return dirsFiles
|
|
|
|
@ -169,11 +178,10 @@ class cl_install(color_print):
|
|
|
|
|
def applyTemplates(self,directory):
|
|
|
|
|
"""Apply templates for root of system."""
|
|
|
|
|
self.clVars.Set("cl_root_path",directory, True)
|
|
|
|
|
self.clTemp = template(self.clVars)
|
|
|
|
|
dirsFiles = self.clTemp.applyTemplates()
|
|
|
|
|
if self.clTemp.getError():
|
|
|
|
|
self.printERROR(self.clTemp.getError())
|
|
|
|
|
return False
|
|
|
|
|
self.clTempl = template(self.clVars)
|
|
|
|
|
dirsFiles = self.clTempl.applyTemplates()
|
|
|
|
|
if self.clTempl.getError():
|
|
|
|
|
raise InstallError(self.clTempl.getError())
|
|
|
|
|
else:
|
|
|
|
|
return dirsFiles
|
|
|
|
|
|
|
|
|
@ -222,7 +230,7 @@ class cl_install(color_print):
|
|
|
|
|
"""
|
|
|
|
|
pipe = Popen(["/sbin/grub",
|
|
|
|
|
"--device-map=%s/boot/grub/device.map"%target.getDirectory(),
|
|
|
|
|
"--batch"], stdin=PIPE,stdout=PIPE)
|
|
|
|
|
"--batch"], stdin=PIPE, stdout=PIPE,stderr=PIPE)
|
|
|
|
|
pipe.stdin.write("root (hd%s)\n"%
|
|
|
|
|
self.getFieldByField("grub","install","/"))
|
|
|
|
|
# TODO: change hd0 for bootloader install to other disks
|
|
|
|
@ -279,16 +287,20 @@ class cl_install(color_print):
|
|
|
|
|
self.printWARNING("Interrupting the installation")
|
|
|
|
|
error = _("Installation manually interrupt")
|
|
|
|
|
try:
|
|
|
|
|
if self.clTempl:
|
|
|
|
|
self.clTempl.closeFiles()
|
|
|
|
|
if sourceDistr:
|
|
|
|
|
self.printSUCCESS(_("Releasing source distributive"))
|
|
|
|
|
sourceDistr.close()
|
|
|
|
|
if targetDistr:
|
|
|
|
|
self.printSUCCESS(_("Unmount target system volume"))
|
|
|
|
|
targetDistr.close()
|
|
|
|
|
except (InstallError,DistributiveError),e:
|
|
|
|
|
error = "%s\n%s" % (str(error),_("Unmouting error"))
|
|
|
|
|
except KeyboardInterrupt,e:
|
|
|
|
|
pass
|
|
|
|
|
if error:
|
|
|
|
|
for line in str(error).split('\n'):
|
|
|
|
|
for line in filter(lambda x: x,str(error).split('\n')):
|
|
|
|
|
self.printERROR(line)
|
|
|
|
|
return False
|
|
|
|
|
self.printSUCCESS(_("System successfully installed"))
|
|
|
|
|