From 78e8a943c7ebe5f2cce5eb3d3bcaae9d4fc0b40f Mon Sep 17 00:00:00 2001 From: Mike Hiretsky Date: Thu, 3 Feb 2011 11:59:30 +0300 Subject: [PATCH] Add exclude portage tree from image. --- i18n/cl_builder_ru.mo | Bin 14046 -> 14443 bytes pym/cl_builder.py | 44 +++++++++++++++++++++++++++++++++++++++-- pym/cl_image_cmd.py | 6 ++++++ pym/cl_vars_builder.py | 3 +++ 4 files changed, 51 insertions(+), 2 deletions(-) diff --git a/i18n/cl_builder_ru.mo b/i18n/cl_builder_ru.mo index 236c52c872668888fa72808b8300f8a5e9660cbb..5b0ad741e9ff66e00e76b7b20debf9bf9398ccdd 100644 GIT binary patch delta 3012 zcmZA2Yfw~W9LMoTfs{q#u7b#}CgBZaA@7!}B}jl5yyY#gi=ZNisHoU#V>**gYOABp zSZTeenaV*|2g|hNRXPqGD(j8o)EG^pz9@61Oltc6&N-O&4FB_a&Sjs=|9Q^gM)mF5 z(2b<%Lx$2wWDp%u#=MW$yK$g2c#KKM%{TxL;y`T1es~@8@h{YKIdRVU6pZJ5D^9{a zI1F2{4?e(DV?rjShcP}b3~?>NEY8=U9(>ci{vmofzlw=?$G!d!(vb1?G^PMY;9#tB z4WsT~K>h9;R6FgMME@q{N#}t+=;uZ*K7~s#33sAqb{I9|)0l=9s^MGMA2nUwAArha z05y~m1O)1b$-)*;6C=^Jc%^O!Kmi~sE%f#W>)XsKZ?pg z6Y^(TIglLlBdWt+Q5lG(5$&a+$>d)noyvt2+>OKV7;2=Kk!3RN$fV5gs7yrju=b}H zhhR1i#c~{huiz*=gTwI-s^bi1rzLp~2VrF@`PWPia6uzIg*kb@eytAD za0X7pv3LSC@aw37cc2Cq$3pwii;Ud_kX1BuP)k#Z%Iq%pe&}5)4PA^mhf1xVyA!Y! zC*odIhpjjTW0|HhQjRlmJL+xu7I)yExEi<6TR#4beoSL_0W86BxEBlc{(nhDABcFS zGak#48)hGBt-eEbtZ6A_#W)>nQ3Je$&tO!4XCR|dGhK*9xCQw$EgY2TpRf#L*@5Hr z{?DbNjt-(yd=WL{1g13xOHea-4RyU4=ipuUyqH!ebG{R2;T0@FFJCcj=GCb7kGQs= z266{;>E9$WtzrxyZJO6nGdhWC;3g_%3E9qjT#9P20t<0J(w6xiwcGzj4K#AfF^C0L53cmy|NJ1)e< zxy}-NhI(zgk_KgFB))*#P)pf@e1l8}s{Qyp@?S}1BrmNRdIvRw4%EoAnJ#^pX*d_R zp=NdscVPl~eHIVnL|sSPHoY0e^H_u$z#g207V=Y*OghVOa)`=EDq-A@SMU%n;H6h) zenTxq84oGtb;u;mer&|gk!+grqnw#n;%v^3p_cA0YVQmm&9?-3+3Zr}8j7K!k*oA1 zo*)8*8hMe3BQ_8!D;?~k2BC~?aj$8RD)EGtM$4rXE8TpX%toS)=qyoGn2`3r^M$f2 z9A*(3vC_AS=tgWJR3;Ew#}z~@!8Wmr-kKVsn5ZJkiN3@fVjj^zsLXV*H(>(x!EXQd zCp4W4+NJBgf{6Cq6fkE#xBb^vbtt1v6#^M zPu2Vj2@j!-qN0tWHJzaox3F*Qjo5i!Ph~l=)V-ihsCU{&tRW^7+Gr{)y}g-L&(MLg zh*(X8=5o+R=`8Er3j4)#YgfZ<@#XwsVpn$?^oc_NuPg81&WF)YUIt8T8fH1%qRKS?fKK`90EOlDSv4 zcI9Jt!|M|LspY}-^)+?>yA?T}I5Wx{Y*@Z#!-~gS^i|Z=RQsx`=^=7ATBjIQlhtfBMb_rlcK;V;P=kg5 delta 2688 zcmZwIeN5F=9LMpmJSbieN%w3n&bSraF{egewA7QM`TDaP*RZGLU-XHD{|LTnI?{$8U=bZ03hx=>i zSi67B9X4Q;ZX$`e5^6StZ_MC8$#j_|U>2s~GMtB7@g95`3-BcBxgVVK8yLfRcBEN3 z7Gnv3O-nlDV#TBEWU_d>_t9cAL2s1h*@~UF>O}x z{tDE48&TiciEiwlyze)Ak4iol&SN@WcOHm~4vr`THPSM?8#kaD?!i<%;@m%t%HSnb zM}9+PDxNgxxnk7)#~ojgv~Pn{ym$uH!|xpbMy1p#&t-tY!~XieYgmR zaB?b99lnW)7)KhE`aINkYS14?WxaD_JH~T<2zC7g>cbzSMsnG?KY_}Kn>;F&J`N1l zDo_oqM2)x&wPt!z9s3C9;5E#_+ivDxJpUfoD;f8$&%GIyX4gX~>^d_&KV9W^BY)un4cBQlHG%)$=8& zj@6+TTamulUSu}xRn(N6L}m1A=l)OFJ$AhmSQg!;|Nxvi(za3H=@q_QByODwCA^QhN)E5V*_@f zdiE9Gj}hKr2TG7{S}RtgA5(D{mEvnyhtXVo2wPAMy@tx{m#BeySdojd0rP3!4pPyL zbGQcoan9=*b|vQra5Y}STAW8~TD_g92HtcWM*i#%4ht}z|6d-M%M$V$1 z`wKN?Sv2NXN}H+hj`bkZZEvHt+j-Q7#-01=TvP+KNRsSbd=$UIW=v;qvTn_fykdi> zj(&mK*5g=DsdZXf1biByo$?kK6&MThjpMnyceIs_fhY= zNfUjs4%C2NM_#oHxE6m$4XB1aydU@Z$bShH7x^gD4dfX+h!yx5s^QyMjuqsas_n-* z`~)As>Gbv}mf!%6pfa+Fd}|6mM`ikFq^}mro_`4o{8Y$>okERx6q_)HuWHUVqqfrt zoQ7M7sj`O365>hcf}ZDf+eBzkDjSIDM3PP@8iYzj5Uu}U2V_05lkgH#C5nnhTt#@C zi&_K9N(b>QK@!YGXpS}N5F&xl)XX6=2u;h=L?fY0YdS);|CR3lD_S742+d=s^8nei zFe1e{*W!EFsXvD?L^#pzTw|K=lqaY?L$o?qx-mI8etwfVSxv+fHH22Tww_7@q3t&~!tcYKvXxpo@rZLp zdwM(3Ml2@Wgtk$iFEJzVmTPWE;Br(P=%l%|<|$ytMeU$RES1Gn-zBK`w!4*u-` diff --git a/pym/cl_builder.py b/pym/cl_builder.py index a266486..305be8b 100644 --- a/pym/cl_builder.py +++ b/pym/cl_builder.py @@ -24,7 +24,7 @@ import traceback from os import path from cl_utils import process,pathJoin,getRunCommands,getTupleVersion,\ childMounts,_toUNICODE,isMount,typeFile, \ - removeDir, pathJoin + removeDir, pathJoin,listDirectory from subprocess import STDOUT,PIPE from cl_print import color_print from cl_datavars import DataVars @@ -87,7 +87,6 @@ class cl_builder(color_print): def __init__(self): self.clVars = None self.startMessage = "" - self.startMessage = "" self.clTempl = None self.force = False self.assembleIso = False @@ -213,6 +212,38 @@ class cl_builder(color_print): removeKernelSources) self.printByResult(True) + def restorePortageTree(self,distrPath): + """Move {distrPath}/usr/portage/EXCLUDE/* to /usr/portage/""" + try: + portagePath = pathJoin(distrPath,'usr/portage') + excludeDir = pathJoin(portagePath,"EXCLUDE") + if path.exists(excludeDir): + mvList = listDirectory(excludeDir) + for obj in mvList: + os.rename(pathJoin(excludeDir,obj), + pathJoin(portagePath,obj)) + os.rmdir(excludeDir) + except OSError,e: + return False + return True + + def movePortageTree(self,distrPath): + """Move {distrPath}/usr/portage/* to /usr/portage/EXCLUDE""" + try: + portagePath = pathJoin(distrPath,'usr/portage') + excludeDir = pathJoin(portagePath,"EXCLUDE") + if not path.exists(excludeDir): + os.makedirs(excludeDir) + mvList = filter(lambda x: not x in + ('eclass','licenses','profiles','EXCLUDE'), + listDirectory(portagePath)) + for obj in mvList: + os.rename(pathJoin(portagePath,obj), + pathJoin(excludeDir,obj)) + except OSError,e: + raise BuilderError(_("Can not remove portage tree: %s\n")%e) + + def prepareSourceDistributive(self,distr): """Unmount all bind,proc mount points from source distribute""" mp = self.clVars.Get('cl_builder_path') @@ -231,6 +262,11 @@ class cl_builder(color_print): updateLayman = self.runChroot(distrPath,"layman -s calculate") self.printByResult(updateLayman.success()) + # move portage to EXCLUDE directory + if self.clVars.Get('cl_builder_tree') == 'off': + self.printMessageForTest(_("Removing portage tree")) + self.movePortageTree(distrPath) + self.applyTemplatesForSquash(distrPath) # change make.profile builderPath = self.clVars.Get('cl_builder_path') @@ -569,6 +605,10 @@ class cl_builder(color_print): if self.clTempl: self.clTempl.closeFiles() if self.sourceDistr: + if self.clVars.Get('cl_builder_tree') == 'off': + self.printMessageForTest(_("Restoring portage tree")) + distrPath = self.sourceDistr.convertToDirectory().getDirectory() + self.printByResult(self.restorePortageTree(distrPath)) self.printMessageForTest(_("Releasing source data")) self.sourceDistr.close() self.printByResult(True) diff --git a/pym/cl_image_cmd.py b/pym/cl_image_cmd.py index e946235..28d4070 100644 --- a/pym/cl_image_cmd.py +++ b/pym/cl_image_cmd.py @@ -38,6 +38,9 @@ CMD_OPTIONS = [{'shortOption':"p", 'optVal':"PROFILE", 'help':_("system profile") }, + {'longOption':'notree', + 'help':_("exclude portage tree from image") + }, {'longOption':"set"}, {'shortOption':"f", 'longOption':"force", @@ -122,6 +125,9 @@ class image_cmd(share_cmd): if not self.logicObj.setAssembleData(values.p,values.v): sys.exit(1) + if values.notree: + self.logicObj.clVars.Set('cl_builder_tree','off',True) + if args and args[0] == "squash": self.logicObj.clVars.Set('cl_builder_iso_path','/mnt/flash',True) self.optobj.checkVarSyntax(values) diff --git a/pym/cl_vars_builder.py b/pym/cl_vars_builder.py index 9bfa419..b079a50 100644 --- a/pym/cl_vars_builder.py +++ b/pym/cl_vars_builder.py @@ -97,6 +97,9 @@ class Data: # kernel suffix for builder cl_builder_kernel_suffix = {} + # include portage directory from image + cl_builder_tree = {'value':'on'} + # build system name os_builder_linux_name = {}