XZ compression.

master
Mike Hiretsky 13 years ago
parent 6ff8c9271c
commit 7f9ecc3354

Binary file not shown.

@ -24,7 +24,7 @@ import traceback
from os import path
from cl_utils import process,pathJoin,getRunCommands,getTupleVersion,\
childMounts,_toUNICODE,isMount,typeFile, \
removeDir, pathJoin,listDirectory
removeDir, pathJoin,listDirectory, getSquashList
from subprocess import STDOUT,PIPE
from cl_print import color_print
from cl_datavars import DataVars
@ -92,6 +92,7 @@ class cl_builder(color_print):
self.assembleIso = False
self.envFile = '/etc/calculate/assemble.env'
self.curProfile = None
self.compression = "gzip"
def setNoColor(self):
self.color = False
@ -443,7 +444,8 @@ class cl_builder(color_print):
return False
excludeList = self._excludeList(sourceDirectory)
self.targetDistr = IsoDistributive(isoFile,bdirectory=buildDirectory,
exclude=excludeList)
exclude=excludeList,
compress=self.compression)
self.sourceDistr = DirectoryDistributive(sourceDirectory,
mdirectory=bindDirectory)
if not force:
@ -524,7 +526,8 @@ class cl_builder(color_print):
excludeList = self._excludeList(sourceDirectory)
self.targetDistr = IsoDistributive(buildDirectory,
bdirectory=buildDirectory,
exclude=excludeList)
exclude=excludeList,
compress=self.compression)
self.sourceDistr = DirectoryDistributive(sourceDirectory,
mdirectory=bindDirectory)
if not force:
@ -715,3 +718,13 @@ class cl_builder(color_print):
except:
return False
return True
def setCompression(self,compress):
"""Set compression for squashsf in iso livecd"""
compress_methods=getSquashList()
if compress in compress_methods:
self.compression = compress
return True
self.printERROR(_("'{0}' is not supported by {1}")\
.format(compress,"squashfs"))
return False

@ -18,7 +18,7 @@ from cl_builder import cl_builder, __app__, __version__
from cl_opt import opt
from cl_share_cmd import share_cmd
from cl_vars_share import varsShare
from cl_utils import _toUNICODE
from cl_utils import _toUNICODE, getSquashList
import os
from os import path
from os import access,R_OK
@ -31,6 +31,8 @@ from cl_lang import lang
lang().setLanguage(sys.modules[__name__])
OSSYSTEM_LIST=sorted(varsShare.dictNameSystem.keys())
COMPRESS_METHODS=getSquashList()
DEFAULT_COMPRESS="xz" if "xz" in COMPRESS_METHODS else "gzip"
DESCRIPTION = _("The Calculate Linux image builder")
CMD_OPTIONS = [{'shortOption':"p",
@ -38,6 +40,21 @@ CMD_OPTIONS = [{'shortOption':"p",
'optVal':"PROFILE",
'help':_("system profile")
},
{'longOption':"compress",
'optVal':"COMPRESS",
'type':'choice',
'choices':COMPRESS_METHODS,
'default':DEFAULT_COMPRESS,
'help':_("squashfs compress method. "
"{varname} may be {values}.")\
.format(varname="COMPRESS",
values=_("{list} or {last}. %default by default")\
.format(
list=", ".join(COMPRESS_METHODS[:-1]),
last=COMPRESS_METHODS[-1])
if len(COMPRESS_METHODS)>1
else _("only {0}").format(COMPRESS_METHODS[0]))
},
{'longOption':'notree',
'help':_("exclude portage tree from image")
},
@ -124,6 +141,11 @@ class image_cmd(share_cmd):
if self.isScratch(False):
self.optobj.error(_("'--profile' not used in scratch mode"))
# set compression for squashfs
if values.compress:
if not self.logicObj.setCompression(values.compress):
sys.exit(1)
if not self.isScratch(False) \
and self.logicObj.clVars.Get('cl_builder_distro'):
if not self.logicObj.setAssembleData(values.p,values.v):

@ -21,7 +21,8 @@ import sys
import traceback
from os import path
from cl_builder import DataVarsBuilder, printNoColor, __version__, __app__
from cl_utils import process,listDirectory,cmpVersion,reVerSplitToPV,reVerSplit
from cl_utils import process,listDirectory,cmpVersion,reVerSplitToPV, \
reVerSplit
from subprocess import STDOUT,PIPE
from cl_print import color_print
from shutil import copy2 as copy_with_perm
@ -32,6 +33,20 @@ from cl_lang import lang
lang().setLanguage(sys.modules[__name__])
class changer:
"""Reducer for change block by condition
def up(self,y) - condition to start change
def drop(self,y) - condition to stop change
def change(self,y) - perform string change.
Using:
class changer:
up = lambda self,y: "test" in y
drop = lambda self,y: "stop" in y
change = lambda self,y: y.replace("abc","zxc")
listing = changer().reduce(listing)
"""
initReduce = [False,[]]
def __call__(self,x,y):
if self.drop(y):
@ -43,6 +58,7 @@ class changer:
return [x[0],x[1] + [y]]
def reduce(self,obj):
"""Perform reduce"""
return reduce(self,obj,self.initReduce)[1]
class cl_kernel(color_print):
@ -351,8 +367,8 @@ class cl_kernel(color_print):
up = lambda self,y: y.startswith('kernel') and \
"root=%s"%rootdev in y
def change(self,y):
y = reChangeKernel.sub("\\1-%s\\2 "%clKernelUid,y)
y = reChangeInitrd.sub("\\1initrd-%s\\2"%clKernelUid,y)
y = self.reChangeKernel.sub("\\1-%s\\2 "%clKernelUid,y)
return self.reChangeInitrd.sub("\\1initrd-%s\\2"%clKernelUid,y)
class grubchangeCONSOLE(grubsetUID):
up = lambda self,y: y.startswith('kernel') and \
@ -486,3 +502,4 @@ class cl_kernel(color_print):
except (OSError,IOError),e:
self.printERROR(str(e))
return False

Loading…
Cancel
Save