Add repository object

master3.3
Mike Hiretsky 14 years ago
parent c3262c7a23
commit 57c3394fe7

@ -18,6 +18,56 @@ class DistributiveError(Exception):
"""Error for distributive operations""" """Error for distributive operations"""
pass pass
class DistributiveRepository:
system = {
'cds':'server',
'cld':'desktop',
'cldg':'desktop',
'cldx':'desktop',
'cls':'desktop',
'css':'server'
}
marches = ['i686','x86_64']
extensiton = ['iso','tar.bz2','tar.gz','tar.7z','tar.lzma']
reDistName = re.compile("""
^(?P<name>%(name)s)
-(?P<ver>%(ver)s)
-(?P<march>%(march)s)
.(?P<ext>%(ext)s)$""" %
{'name':"|".join(system.keys()),
'ver':r"(\d+\.)*\d+",
'march':"|".join(marches),
'ext':"|".join(extensiton)
}, re.X)
def __init__(self,directory):
self.root = directory
def _getAvailableDistributives(self,system=None,shortname=None,march=None,
version=None):
def distfilter(dist):
match = self.reDistName.match(dist)
if not match:
return False
d = match.groupdict()
# check filter conditions
if system and self.system(d['name']) != system or \
shortname and d['name'] != shortname or \
march and d['march'] != march or \
version and d['ver'] != version:
return False
else:
return True
return [ dist for dist in os.listdir(self.root) if distfilter(dist) ]
def getLastDistributive(self,system=None,shortname=None,march=None,
version=None):
return self._getAvailableDistributives(system,shortname,march,
version)[0]
class Distributive(object): class Distributive(object):
"""Distributive object. Parent object for all distributive.""" """Distributive object. Parent object for all distributive."""
mountError = "Cann't mount %s:\n%s" mountError = "Cann't mount %s:\n%s"
@ -185,8 +235,8 @@ class Distributive(object):
return newDirectoryName return newDirectoryName
class DirectoryDistributive(Distributive): class DirectoryDistributive(Distributive):
def __init__(self,directory=None,parent=None): def __init__(self,directory,parent=None):
DirectoryDistributive.__init__(self,parent=parent) Distributive.__init__(self,parent=parent)
self.directory = directory self.directory = directory
if not parent: if not parent:
self._makeDirectory(self.directory) self._makeDirectory(self.directory)
@ -206,10 +256,15 @@ class DirectoryDistributive(Distributive):
self.copy(dFrom.directory,self.directory) self.copy(dFrom.directory,self.directory)
class PartitionDistributive(Distributive): class PartitionDistributive(Distributive):
def __init__(self,partition=None,parent=None,mdirectory="/mnt/calculate"): reRightPartition = re.compile(r"^/dev/(sd[a-z]\d+|cciss/c\d+d\d+)$")
DirectoryDistributive.__init__(self,parent=parent)
def __init__(self,partition,parent=None,mdirectory="/mnt/calculate"):
"""Raise DistributiveError if partition has bad name"""
Distributive.__init__(self,parent=parent)
self.partition = partition self.partition = partition
self.mdirectory = mdirectory self.mdirectory = mdirectory
if not self.reRightPartition.match(partition):
raise DistributiveError("Wrong partition name '%s'"%partition)
def _mountPartition(self,partition,directory): def _mountPartition(self,partition,directory):
"""Mount partition to directory""" """Mount partition to directory"""
@ -235,7 +290,7 @@ class PartitionDistributive(Distributive):
return child return child
mdirectory = self._getMntDirectory(mdirectory) mdirectory = self._getMntDirectory(mdirectory)
self._mountPartition(self.partition,mdirectory) self._mountPartition(self.partition,mdirectory)
return DirectoryDistributive(directory=mdirectory,parent=self) return DirectoryDistributive(mdirectory,parent=self)
def _convertTo(self,typeDistributive): def _convertTo(self,typeDistributive):
if typeDistributive == DirectoryDistributive: if typeDistributive == DirectoryDistributive:
@ -251,8 +306,8 @@ class PartitionDistributive(Distributive):
distrTo.installFrom(source) distrTo.installFrom(source)
class ArchiveDistributive(Distributive): class ArchiveDistributive(Distributive):
def __init__(self,file=None,parent=None,mdirectory="/var/calculate/tmp/stage"): def __init__(self,file,parent=None,mdirectory="/var/calculate/tmp/stage"):
DirectoryDistributive.__init__(self,parent=parent) Distributive.__init__(self,parent=parent)
self.file = file self.file = file
self.mdirectory = mdirectory self.mdirectory = mdirectory
@ -306,7 +361,7 @@ class ArchiveDistributive(Distributive):
return child return child
# get temporary directory for unpacking # get temporary directory for unpacking
mdirectory = self._getMntDirectory(mdirectory) mdirectory = self._getMntDirectory(mdirectory)
dirdist = DirectoryDistributive(directory=mdirectory,parent=self) dirdist = DirectoryDistributive(mdirectory,parent=self)
self._unpackArchive(self.file,mdirectory) self._unpackArchive(self.file,mdirectory)
return dirdist return dirdist
@ -337,8 +392,8 @@ class ArchiveDistributive(Distributive):
self.packToArchive(dFrom.directory, self.file) self.packToArchive(dFrom.directory, self.file)
class SquashDistributive(Distributive): class SquashDistributive(Distributive):
def __init__(self,file=None,parent=None,mdirectory="/mnt/livecd"): def __init__(self,file,parent=None,mdirectory="/mnt/livecd"):
DirectoryDistributive.__init__(self,parent=parent) Distributive.__init__(self,parent=parent)
self.file = file self.file = file
self.mdirectory = mdirectory self.mdirectory = mdirectory
@ -359,7 +414,7 @@ class SquashDistributive(Distributive):
return child return child
mdirectory = self._getMntDirectory(mdirectory) mdirectory = self._getMntDirectory(mdirectory)
self._mountSquash(self.file,mdirectory) self._mountSquash(self.file,mdirectory)
return DirectoryDistributive(directory=mdirectory,parent=self) return DirectoryDistributive(mdirectory,parent=self)
def releaseChild(self,child): def releaseChild(self,child):
"""Umount child Directory distributive""" """Umount child Directory distributive"""
@ -390,9 +445,9 @@ class SquashDistributive(Distributive):
class IsoDistributive(Distributive): class IsoDistributive(Distributive):
reLive = re.compile(r"^live[^.]*(\.(\d+))?\.squashfs$",re.S) reLive = re.compile(r"^live[^.]*(\.(\d+))?\.squashfs$",re.S)
def __init__(self,file=None,parent=None,mdirectory="/mnt/cdrom", def __init__(self,file,parent=None,mdirectory="/mnt/cdrom",
bdirectory="/var/calculate/tmp/iso"): bdirectory="/var/calculate/tmp/iso"):
DirectoryDistributive.__init__(self,parent=parent) Distributive.__init__(self,parent=parent)
self.file = file self.file = file
self.mdirectory = mdirectory self.mdirectory = mdirectory
self.bdirectory = bdirectory self.bdirectory = bdirectory
@ -432,7 +487,7 @@ class IsoDistributive(Distributive):
if not fileLive: if not fileLive:
raise DistributiveError("Iso %s doesn't contain live image" % raise DistributiveError("Iso %s doesn't contain live image" %
self.file) self.file)
return SquashDistributive(file=pathjoin(mdirectory,fileLive), return SquashDistributive(pathjoin(mdirectory,fileLive),
parent=self) parent=self)
def releaseChild(self,child): def releaseChild(self,child):
@ -446,7 +501,7 @@ class IsoDistributive(Distributive):
return self.convertTo(SquashDistributive).\ return self.convertTo(SquashDistributive).\
convertTo(DirectoryDistributive) convertTo(DirectoryDistributive)
if typeDistributive == SquashDistributive: if typeDistributive == SquashDistributive:
return self._Squash() return self._convertToSquash()
if typeDistributive == IsoDistributive: if typeDistributive == IsoDistributive:
return self return self
@ -487,7 +542,7 @@ class IsoDistributive(Distributive):
else: else:
distDirectory = source.convertTo(DirectoryDistributive) distDirectory = source.convertTo(DirectoryDistributive)
squashDistr = SquashDistributive( squashDistr = SquashDistributive(
file=pathjoin(isoDirectory,"livecd.squashfs")) pathjoin(isoDirectory,"livecd.squashfs"))
squashDistr.installFrom(distDirectory) squashDistr.installFrom(distDirectory)
# prepare iso # prepare iso

@ -27,6 +27,7 @@ from cl_template import template
from cl_fill import clLocale from cl_fill import clLocale
from cl_datavars import DataVars from cl_datavars import DataVars
from cl_print import color_print from cl_print import color_print
from cl_distr import PartitionDistributive,DistributiveRepository
tr = lang() tr = lang()
tr.setGlobalDomain('cl_install') tr.setGlobalDomain('cl_install')
@ -85,10 +86,13 @@ class cl_install(color_print):
else: else:
return dirsFiles return dirsFiles
def installSystem(self): def installSystem(self,disk=""):
"""install System by current variable enviroment""" """install System by current variable enviroment"""
targetDistr = PartitionDistributive(disk,mdirectory="/mnt/install")
pass distRep = DistributiveRepository('/usr/calculate/share/linux')
distRep.getLastDistributive(
march=self.clVars.Get('os_arch_machine'),
shortname=self.clVars.Get('os_linux_shortname').lower())
def setAllLocaleByLang(self,lang): def setAllLocaleByLang(self,lang):
"""Set all locale variable by specified lang""" """Set all locale variable by specified lang"""

@ -44,7 +44,8 @@ class install_cmd(cl_install,opt,share_cmd):
package=__app__, package=__app__,
version=__version__, version=__version__,
description=DESCRIPTION, description=DESCRIPTION,
option_list= CMD_OPTIONS + opt.variable_control + opt.color_control, option_list= CMD_OPTIONS + opt.variable_control +
opt.color_control,
check_values=self.checkOpts) check_values=self.checkOpts)
cl_install.__init__(self) cl_install.__init__(self)
@ -103,7 +104,7 @@ class install_cmd(cl_install,opt,share_cmd):
def installSystem(self): def installSystem(self):
try: try:
cl_install.installSystem(self,disk=values.d) cl_install.installSystem(self,disk=self.values.d)
except InstallError,e: except InstallError,e:
print e print e
return False return False

@ -33,3 +33,5 @@ class Data:
# program version # program version
cl_ver = {'value':'2.2.0'} cl_ver = {'value':'2.2.0'}
os_arch_machine = {'mode':'w'}

Loading…
Cancel
Save