Replace content on master with content from catalyst_2
[catalyst.git] / modules / stage1_target.py
1
2 """
3 Builder class for a stage1 installation tarball build.
4 """
5
6 from catalyst_support import *
7 from generic_stage_target import *
8
9 class stage1_target(generic_stage_target):
10         def __init__(self,spec,addlargs):
11                 self.required_values=[]
12                 self.valid_values=["chost"]
13                 generic_stage_target.__init__(self,spec,addlargs)
14         
15         def set_stage_path(self):
16                 self.settings["stage_path"]=normpath(self.settings["chroot_path"]+self.settings["root_path"])
17                 print "stage1 stage path is "+self.settings["stage_path"]
18         
19         def set_root_path(self):
20                 # sets the root path, relative to 'chroot_path', of the stage1 root
21                 self.settings["root_path"]=normpath("/tmp/stage1root")
22                 print "stage1 root path is "+self.settings["root_path"]
23         
24         def set_cleanables(self):
25                 generic_stage_target.set_cleanables(self)
26                 self.settings["cleanables"].extend(["/usr/share/gettext",\
27                 "/usr/lib/python2.2/test", "/usr/lib/python2.2/email",\
28                 "/usr/lib/python2.2/lib-tk", "/usr/lib/python2.3/test",\
29                 "/usr/lib/python2.3/email", "/usr/lib/python2.3/lib-tk",\
30                 "/usr/lib/python2.4/test", "/usr/lib/python2.4/email",\
31                 "/usr/lib/python2.4/lib-tk", "/usr/share/zoneinfo",\
32                 "/etc/portage"])
33
34         # XXX: How do these override_foo() functions differ from the ones in generic_stage_target and why aren't they in stage3_target?
35
36         def override_chost(self):
37                 if self.settings.has_key("chost"):
38                         self.settings["CHOST"]=list_to_string(self.settings["chost"])
39
40         def override_cflags(self):
41                 if self.settings.has_key("cflags"):
42                         self.settings["CFLAGS"]=list_to_string(self.settings["cflags"])
43
44         def override_cxxflags(self):
45                 if self.settings.has_key("cxxflags"):
46                         self.settings["CXXFLAGS"]=list_to_string(self.settings["cxxflags"])
47
48         def override_ldflags(self):
49                 if self.settings.has_key("ldflags"):
50                         self.settings["LDFLAGS"]=list_to_string(self.settings["ldflags"])
51
52         def set_portage_overlay(self):
53                 generic_stage_target.set_portage_overlay(self)
54                 if self.settings.has_key("portage_overlay"):
55                         print "\nWARNING !!!!!"
56                         print "\tUsing an portage overlay for earlier stages could cause build issues."
57                         print "\tIf you break it, you buy it. Don't complain to us about it."
58                         print "\tDont say we did not warn you\n"
59
60         def base_dirs(self):
61                 if os.uname()[0] == "FreeBSD":
62                         # baselayout no longer creates the .keep files in proc and dev for FreeBSD as it
63                         # would create them too late...we need them earlier before bind mounting filesystems
64                         # since proc and dev are not writeable, so...create them here
65                         if not os.path.exists(self.settings["stage_path"]+"/proc"):
66                                 os.makedirs(self.settings["stage_path"]+"/proc")
67                         if not os.path.exists(self.settings["stage_path"]+"/dev"):
68                                 os.makedirs(self.settings["stage_path"]+"/dev")
69                         if not os.path.isfile(self.settings["stage_path"]+"/proc/.keep"):
70                                 try:
71                                         proc_keepfile = open(self.settings["stage_path"]+"/proc/.keep","w") 
72                                         proc_keepfile.write('')
73                                         proc_keepfile.close()
74                                 except IOError:
75                                         print "!!! Failed to create %s" % (self.settings["stage_path"]+"/dev/.keep")
76                         if not os.path.isfile(self.settings["stage_path"]+"/dev/.keep"):
77                                 try:
78                                         dev_keepfile = open(self.settings["stage_path"]+"/dev/.keep","w")
79                                         dev_keepfile.write('')
80                                         dev_keepfile.close() 
81                                 except IOError:
82                                         print "!!! Failed to create %s" % (self.settings["stage_path"]+"/dev/.keep")
83                 else:
84                         pass
85
86         def set_mounts(self):
87                 # stage_path/proc probably doesn't exist yet, so create it
88                 if not os.path.exists(self.settings["stage_path"]+"/proc"):
89                         os.makedirs(self.settings["stage_path"]+"/proc")
90
91                 # alter the mount mappings to bind mount proc onto it
92                 self.mounts.append("/tmp/stage1root/proc")
93                 self.mountmap["/tmp/stage1root/proc"]="/proc"
94
95
96 def register(foo):
97         foo.update({"stage1":stage1_target})
98         return foo