From b8f3366ec70a350d6206fc8d3bcd6061263d3d77 Mon Sep 17 00:00:00 2001 From: Mike Hiretsky Date: Mon, 25 Oct 2010 18:18:32 +0400 Subject: [PATCH] Add creating iso for calculate-assemble. --- i18n/cl_builder_ru.mo | Bin 10766 -> 11002 bytes pym/cl_builder.py | 27 ++++++++++++++++++++++++++- pym/cl_fill_builder.py | 14 ++++++++++++++ pym/cl_image_cmd.py | 17 +++++++++++++++++ scripts/cl-image | 2 +- 5 files changed, 58 insertions(+), 2 deletions(-) diff --git a/i18n/cl_builder_ru.mo b/i18n/cl_builder_ru.mo index a31c597a38200867c1dd507ddff3697c89b18dc4..fb7542d1d6f8f8d66741dcffd714a4b5f9a82d81 100644 GIT binary patch delta 2208 zcmXxke@s2-W zF`2Seb58%TA8RY}N-|4oHf(EiJ7-jD{b6jj7LB$xYi-q9@6WmSKI3~|=f}f&p6C00 z&KYX?yES?{%R6Fd`-%GqZ>lj-oSnlD?H8Xhg*bz?==B?O57yx(+=Au!8s_6w%tae5 z{25EpmlnTYfyJEHW2T1cnP*HE22cakV-2?B5*$k0zl@sj zBo^T`7T|xV|I44xv#=72wA4lpwDKO*z=OCH$50)ANZkK7VZnlU|5a#lzZtcn2x{Q7 zsDVDh#W_Gm^GyG`cA-o@lQ3GGW9Q+N-(L)`h8n}uBo@pBJUfhe6+q{4e;SpSk=dlXEK@H%g zvocnO%dinOz%f)Qhp+-~peFn~YC%5gseX$x$-f?4%>|X96RYtRRO+svGBSl4U>3_T zm*pxGYf=4zsOR*dGW7{+pzqMaUr`yI&qW?#N>FDaLf6YB0BOk%M!%0&k;c zmd%ze!5Y*`n{fyB;#$0kdSEKEZNdtC7^Aobuc0RPN8)-Jb>72y5Y=xSH)HfJ2YT=t z@-GKao8w#503K!|%TW{AgWK>pDl?O){xkRp=1~vz-;G-N3Do=lC2H@?pe9g2ohW70 zv~ZwQ9!F*1L(~fIB+e}>zLHjC3^RZa;3Z`4<`(LKGpOrJN!vc$j@te2;$Hk3+jO6c zRKfJ&a=rg=a=^wkH*h;n;W4yWo>KHS25=g+q8!rjIJO}xFc=65H_v z4x(OLKeN!pS70k1M3ra)Q;@x`^~ak^pr%@CGWCRJn?@v?%93oF$Q*)XxlN@|)8tcn{qH4 zh!#SbQ+t%)gXcC9<~EgCZD(@*Ih^q7x*s9E1!UaaEZVWVi7X)@1&@oTygKgxXeOC83?F)<9@iZy`1l$>vKO zsNUM;$;M~I_=#d-7omN%o={8GPwC+!p)RW}_J!}|l(|Q{Lq~fevD&m#-lAYQ+|m8) zq33(Lte1jet0xq(4urZ7AL@v7JXaYTO<$klDGkT&WQ_PTC!CY^HTzR%$QiK5os-V% zv8NX<@dqy2AKMd7AGby=r=L6h^c%B3a|SK@x;zvOVVXIj?g4x;nq|Yx*f50swYD&GDPzXw_Q0cN zv!7g>2cGc26PGdM^1$$*CoDEB^ZuMp&UXHgh zG-`LaF(K?6$PeXCgfS_27xVB1#$bfsn1z^#*;t23co;|EWengg9E-2q^q&fZ|mJ?ATD4+gj%JEU(Vd8ijJN4;npj>2Yl{VL9){}2`7 zKd6Z%4K*fJq0XbB&{d)a*o4FJASzU?n1DA>D|?Ju@n?+2U#JQD>15(W)C(&x9$PRQ zFJLM@#$osgLu{w{L1Pm3;tb4UgLAMRHSkGPgl^yje2W^`$0*vmWSoo@sEO`JEual` z-!;^@_fZk}hEp**miQ}Fg>1AUupae-Jva_8qqgJ`>b`E&Kv67TktssGXafdtH!6Z> zky}kWDq;`Z|6RB@%$V<}E!!GT{8!LuVVX*&H`s)KaVs8Tv^?y_Tuf(q3$PkXunlzz zUb}u;qA{iP8?Xx7u?Tx{Iu^1@O=uTpU|WcWR(KOD@HH0TcrrvG--y+C0_WgIoQqG6I8bM;3~{y`F6$FLcas&VF7~`VIwZWP7I<3SqR0L%lpj{8mI6c zGNxI=5txEI@Bm&y9nUnDrxEgnE^$ukT?lKOv9Zm8%v6-}Uq8mW#edRFhZMdxuK zm1x3ErxtHd~t2jcJb->U!wGW^2{a>i?j)q zi~%Z(vPGe+rYe;EWvFWqFk2K2l_h=HZvrRQ=21Bkd9#|Ts4k<%Qk5fi{R=<|IE1Rg zw%ekt)jp?FQMAIzAJ&l=7?G3F;^) z8Tw0vYbfD#p8HE84L_ArWV3oc7I^O>TEo0Uk&QktJ$h!Cw=w3Z-%Csy>_0sqX}Gr~ MkP_})$gKDO1L&=|RR910 diff --git a/pym/cl_builder.py b/pym/cl_builder.py index 72a3304..cbe6263 100644 --- a/pym/cl_builder.py +++ b/pym/cl_builder.py @@ -22,7 +22,8 @@ import re import sys import traceback from os import path -from cl_utils import process,pathJoin,getRunCommands,getTupleVersion +from cl_utils import process,pathJoin,getRunCommands,getTupleVersion,\ + childMounts from subprocess import STDOUT,PIPE from cl_print import color_print from cl_datavars import DataVars @@ -153,6 +154,15 @@ class cl_builder(color_print): self.startMessage = "" def prepareSourceDistributive(self,distr): + """Unmount all bind,proc mount points from source distribute""" + mp = self.clVars.Get('cl_builder_path') + mps = filter(lambda x:x!=mp,map(lambda x:x[1],childMounts(mp))) + for target in sorted(mps, reverse=True): + self.printMessageForTest(_("Unmounting %s")%(target[len(mp):])) + umountProcess = process("umount",target) + if umountProcess.failed(): + raise AssembleError(_("Can not umount %s")%target) + self.printByResult(True) self.applyTemplatesForSquash(distr.convertToDirectory().getDirectory()) def isoPrepacking(self,directory): @@ -311,8 +321,23 @@ class cl_builder(color_print): self.printMessageForTest(_("Creating squash image")) self.targetDistr.installFrom(self.sourceDistr) self.printByResult(True) + + self.targetDistr = PartitionDistributive(rootPartdev,flagRemoveDir=False) + dd = DirectoryDistributive(mp,parent=self.targetDistr) + self.removeVars('os_assemble_linux_ver', 'os_assemble_linux_shortname', + 'cl_assemble_image', 'cl_assemble_step_system', + 'cl_assemble_make', 'cl_assemble_step_world', + 'cl_assemble_step_newuse', 'cl_assemble_step_update', + 'cl_assemble_path') return True + def removeVars(self,*varsname): + """Remove vars specified by varsname""" + res = True + for var in varsname: + res = res and self.clVars.Delete(var,True,'default','assemble') + return bool(res) + def _rescratchLogic(self,force=False): self.clVars.Set('cl_builder_iso_path','/mnt/flash',True) self.clVars.Get('cl_builder_remove_squash') diff --git a/pym/cl_fill_builder.py b/pym/cl_fill_builder.py index ac643a9..42886a5 100644 --- a/pym/cl_fill_builder.py +++ b/pym/cl_fill_builder.py @@ -25,6 +25,8 @@ from cl_distr import Distributive from cl_utils import getTupleVersion,genpassword,pathJoin from operator import itemgetter from types import ListType +from cl_datavars import iniParser +from cl_vars import Data as libData class fillVars(object, varsShare): @@ -136,6 +138,18 @@ class fillVars(object, varsShare): return "up" return "" + def get_cl_builder_path(self): + """Get path for image""" + paths = map(lambda x:x[1],reversed(libData.cl_env_data['value'])) + for inifile in paths: + if os.access(inifile,os.R_OK): + inidata = iniParser(inifile) + res = inidata.getVar("assemble","cl_assemble_path", + checkExistVar=True) + if res[0]: + return _toUNICODE(res[1]).encode('utf-8') + return "/mnt/builder" + def get_cl_builder_kernel(self): """Kernel image""" bootdir = path.join(self.Get('cl_builder_path'),'boot') diff --git a/pym/cl_image_cmd.py b/pym/cl_image_cmd.py index 53a9a0c..154577a 100644 --- a/pym/cl_image_cmd.py +++ b/pym/cl_image_cmd.py @@ -23,10 +23,12 @@ from os import access,R_OK import re import sys from types import ListType +from cl_template import iniParser from cl_lang import lang lang().setLanguage(sys.modules[__name__]) + DESCRIPTION = _("The Calculate Linux image builder") CMD_OPTIONS = [{'shortOption':"f", 'longOption':"force", @@ -58,6 +60,21 @@ class image_cmd(share_cmd): self.printERROR(_("You should load system in the builder mode.")) return False + def isAssemble(self): + """Detect system assembling""" + detectAssemble = re.compile("^\[assemble\]",re.S) + if filter(detectAssemble.search, + open("/etc/calculate/calculate2.env",'r')): + inidata = iniParser(inifile) + res = inidata.getVar("assemble","cl_assemble_step_world", + checkExistVar=True) + if not res[0] or not "finish" in _toUNICODE(res[1]).encode('utf-8'): + self.printERROR(_("System assembling was not completed.")) + return False + return True + else: + return False + def checkOpts(self, values, args): """Check values all specified options.""" if len(args) > 1: diff --git a/scripts/cl-image b/scripts/cl-image index afa2cc6..75f46dd 100644 --- a/scripts/cl-image +++ b/scripts/cl-image @@ -53,7 +53,7 @@ if __name__ == "__main__": # check root if not image.isRoot(): sys.exit(1) - if not image.isScratch(): + if not image.isAssemble() and not image.isScratch(): sys.exit(1) if not image.performActionByCommand(options,args): sys.exit(1)