Add repository object

netsetup
Mike Hiretsky 14 years ago
parent c3262c7a23
commit 57c3394fe7

@ -18,6 +18,56 @@ class DistributiveError(Exception):
"""Error for distributive operations"""
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):
"""Distributive object. Parent object for all distributive."""
mountError = "Cann't mount %s:\n%s"
@ -185,8 +235,8 @@ class Distributive(object):
return newDirectoryName
class DirectoryDistributive(Distributive):
def __init__(self,directory=None,parent=None):
DirectoryDistributive.__init__(self,parent=parent)
def __init__(self,directory,parent=None):
Distributive.__init__(self,parent=parent)
self.directory = directory
if not parent:
self._makeDirectory(self.directory)
@ -206,10 +256,15 @@ class DirectoryDistributive(Distributive):
self.copy(dFrom.directory,self.directory)
class PartitionDistributive(Distributive):
def __init__(self,partition=None,parent=None,mdirectory="/mnt/calculate"):
DirectoryDistributive.__init__(self,parent=parent)
reRightPartition = re.compile(r"^/dev/(sd[a-z]\d+|cciss/c\d+d\d+)$")
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.mdirectory = mdirectory
if not self.reRightPartition.match(partition):
raise DistributiveError("Wrong partition name '%s'"%partition)
def _mountPartition(self,partition,directory):
"""Mount partition to directory"""
@ -235,7 +290,7 @@ class PartitionDistributive(Distributive):
return child
mdirectory = self._getMntDirectory(mdirectory)
self._mountPartition(self.partition,mdirectory)
return DirectoryDistributive(directory=mdirectory,parent=self)
return DirectoryDistributive(mdirectory,parent=self)
def _convertTo(self,typeDistributive):
if typeDistributive == DirectoryDistributive:
@ -251,8 +306,8 @@ class PartitionDistributive(Distributive):
distrTo.installFrom(source)
class ArchiveDistributive(Distributive):
def __init__(self,file=None,parent=None,mdirectory="/var/calculate/tmp/stage"):
DirectoryDistributive.__init__(self,parent=parent)
def __init__(self,file,parent=None,mdirectory="/var/calculate/tmp/stage"):
Distributive.__init__(self,parent=parent)
self.file = file
self.mdirectory = mdirectory
@ -306,7 +361,7 @@ class ArchiveDistributive(Distributive):
return child
# get temporary directory for unpacking
mdirectory = self._getMntDirectory(mdirectory)
dirdist = DirectoryDistributive(directory=mdirectory,parent=self)
dirdist = DirectoryDistributive(mdirectory,parent=self)
self._unpackArchive(self.file,mdirectory)
return dirdist
@ -337,8 +392,8 @@ class ArchiveDistributive(Distributive):
self.packToArchive(dFrom.directory, self.file)
class SquashDistributive(Distributive):
def __init__(self,file=None,parent=None,mdirectory="/mnt/livecd"):
DirectoryDistributive.__init__(self,parent=parent)
def __init__(self,file,parent=None,mdirectory="/mnt/livecd"):
Distributive.__init__(self,parent=parent)
self.file = file
self.mdirectory = mdirectory
@ -359,7 +414,7 @@ class SquashDistributive(Distributive):
return child
mdirectory = self._getMntDirectory(mdirectory)
self._mountSquash(self.file,mdirectory)
return DirectoryDistributive(directory=mdirectory,parent=self)
return DirectoryDistributive(mdirectory,parent=self)
def releaseChild(self,child):
"""Umount child Directory distributive"""
@ -390,9 +445,9 @@ class SquashDistributive(Distributive):
class IsoDistributive(Distributive):
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"):
DirectoryDistributive.__init__(self,parent=parent)
Distributive.__init__(self,parent=parent)
self.file = file
self.mdirectory = mdirectory
self.bdirectory = bdirectory
@ -432,7 +487,7 @@ class IsoDistributive(Distributive):
if not fileLive:
raise DistributiveError("Iso %s doesn't contain live image" %
self.file)
return SquashDistributive(file=pathjoin(mdirectory,fileLive),
return SquashDistributive(pathjoin(mdirectory,fileLive),
parent=self)
def releaseChild(self,child):
@ -446,7 +501,7 @@ class IsoDistributive(Distributive):
return self.convertTo(SquashDistributive).\
convertTo(DirectoryDistributive)
if typeDistributive == SquashDistributive:
return self._Squash()
return self._convertToSquash()
if typeDistributive == IsoDistributive:
return self
@ -487,7 +542,7 @@ class IsoDistributive(Distributive):
else:
distDirectory = source.convertTo(DirectoryDistributive)
squashDistr = SquashDistributive(
file=pathjoin(isoDirectory,"livecd.squashfs"))
pathjoin(isoDirectory,"livecd.squashfs"))
squashDistr.installFrom(distDirectory)
# prepare iso

@ -27,6 +27,7 @@ from cl_template import template
from cl_fill import clLocale
from cl_datavars import DataVars
from cl_print import color_print
from cl_distr import PartitionDistributive,DistributiveRepository
tr = lang()
tr.setGlobalDomain('cl_install')
@ -85,10 +86,13 @@ class cl_install(color_print):
else:
return dirsFiles
def installSystem(self):
def installSystem(self,disk=""):
"""install System by current variable enviroment"""
pass
targetDistr = PartitionDistributive(disk,mdirectory="/mnt/install")
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):
"""Set all locale variable by specified lang"""

@ -44,7 +44,8 @@ class install_cmd(cl_install,opt,share_cmd):
package=__app__,
version=__version__,
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)
cl_install.__init__(self)
@ -103,7 +104,7 @@ class install_cmd(cl_install,opt,share_cmd):
def installSystem(self):
try:
cl_install.installSystem(self,disk=values.d)
cl_install.installSystem(self,disk=self.values.d)
except InstallError,e:
print e
return False

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

Loading…
Cancel
Save