1 # Copyright 1999-2004 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo/src/catalyst/modules/embedded_target.py,v 1.3 2004/11/23 00:02:57 zhen Exp $
6 This class works like a 'stage3'. A stage2 tarball is unpacked, but instead
7 of building a stage3, it emerges a 'system' into another directory
8 inside the 'stage2' system. This way we do not have to emerge gcc/portage
9 into the staged system.
11 It sounds real complicated but basically it runs
12 ROOT=/tmp/submerge emerge --blahblah foo bar
15 import os,string,imp,types,shutil
16 from catalyst_support import *
17 from generic_stage_target import *
20 class embedded_target(generic_stage_target):
22 def __init__(self,spec,addlargs):
23 self.required_values=[]
25 self.valid_values.extend(["embedded/empty","embedded/rm","embedded/unmerge","embedded/runscript","embedded/mergeroot","embedded/packages","embedded/use","embedded/fstype"])
27 if addlargs.has_key("embedded/fstype"):
28 self.valid_values.append("embedded/fsops")
30 generic_stage_target.__init__(self,spec,addlargs)
31 self.settings["image_path"]=self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+"/image"
33 # taken from livecd-stage3 code
35 print "Unmerging packages"
36 if self.settings.has_key("embedded/unmerge"):
37 if type(self.settings["embedded/unmerge"])==types.StringType:
38 self.settings["embedded/unmerge"]=[self.settings["embedded/unmerge"]]
39 myunmerge=self.settings["embedded/unmerge"][:]
41 for x in range(0,len(myunmerge)):
42 myunmerge[x]="'"+myunmerge[x]+"'"
43 myunmerge=string.join(myunmerge)
44 # before cleaning unmerge stuff
45 cmd("/bin/bash "+self.settings["sharedir"]+"/targets/"+self.settings["target"]+"/unmerge.sh "+myunmerge,"unmerge script failed.")
48 if self.settings.has_key("embedded/rm"):
49 if type(self.settings["embedded/rm"])==types.StringType:
50 self.settings["embedded/rm"]=[self.settings["embedded/rm"]]
51 print "Removing directories from image"
52 for x in self.settings["embedded/rm"]:
54 os.system("rm -rf "+self.settings["chroot_path"]+"/tmp/mergeroot"+x)
58 if self.settings.has_key("embedded/fstype"):
59 cmd("/bin/bash "+self.settings["sharedir"]+"/targets/embedded/embedded.sh package","filesystem packaging failed")
62 raise CatalystError, "embedded filesystem created aborting due to error."
66 mypackages=list_bashify(self.settings["embedded/packages"])
67 print "Merging embedded image"
69 cmd("/bin/bash "+self.settings["sharedir"]+"/targets/embedded/embedded.sh run")
72 raise CatalystError, "Embedded build aborted due to error."
78 foo.update({"embedded":embedded_target})