I would like to have the ability to mount a tmpfs on /var/tmp/portage
when I am building a stage. I have attached a patch that adds this
functionality to catalyst. This patch adds a new option "tmpfs" and
the config value "tmpfs_opts". tempfs_opts can be used to set the size
of the tmpfs. It uses the same syntax as options passed to mount -o.
For example tempfs_opts="size=1G,nr_inodes=10".
-Tom
diff --git a/catalyst b/catalyst
index 82b4dc9..71a842e 100755
--- a/catalyst
+++ b/catalyst
@@ -61,7 +61,7 @@ def parse_config(myconfig):
"sharedir":"/usr/share/catalyst","distdir":"/usr/portage/distfiles",\
"portdir":"/usr/portage","options":"",\
"snapshot_cache":"/var/tmp/catalyst/snapshot_cache",\
- "hash_function":"crc32"}
+ "hash_function":"crc32","tmpfs_opts":""}
# first, try the one passed (presumably from the cmdline)
if myconfig:
@@ -152,6 +152,10 @@ def parse_config(myconfig):
print "Use of metadata_overlay module for portage enabled."
conf_values["METADATA_OVERLAY"]="1"
+ if "tmpfs" in conf_values["options"].split():
+ print "Use of tmpfs enabled."
+ conf_values["TMPFS"]="1"
+
# if "tarball" in string.split(conf_values["options"]):
# print "Tarball creation enabled."
# conf_values["TARBALL"]="1"
diff --git a/files/catalyst.conf b/files/catalyst.conf
index b4e2385..855ce23 100644
--- a/files/catalyst.conf
+++ b/files/catalyst.conf
@@ -58,6 +58,9 @@ hash_function="crc32"
# snapcache = cache the snapshot so that it can be bind-mounted into the
chroot.
# WARNING: moving parts of the portage tree from within fsscript *will*
break
# your cache. The cache is unlinked before any empty or rm processing,
though.
+# tmpfs = Mount tmpfs on /var/tmp/portage to speed up builds. You can set the
+# size of the tmpfs by using tmpfs_opts. If tmpfs_opts is not set the
+# tmpfs will be the default size. EX: tmpfs_opts="size=1G,nr_inodes=10k"
#
# (These options can be used together)
options="autoresume kerncache metadata_overlay pkgcache seedcache snapcache"
diff --git a/modules/generic_stage_target.py b/modules/generic_stage_target.py
index 92ec381..47d9eed 100644
--- a/modules/generic_stage_target.py
+++ b/modules/generic_stage_target.py
@@ -19,7 +19,7 @@ class generic_stage_target(generic_target):
self.valid_values.extend(["version_stamp","target","subarch",\
"rel_type","profile","snapshot","source_subpath","portage_confdir",\
"cflags","cxxflags","ldflags","cbuild","hostuse","portage_overlay",\
-
"distcc_hosts","makeopts","pkgcache_path","kerncache_path"])
+
"distcc_hosts","makeopts","pkgcache_path","kerncache_path","tmpfs_opts"])
self.set_valid_build_kernel_vars(addlargs)
generic_target.__init__(self,myspec,addlargs)
@@ -229,6 +229,10 @@ class generic_stage_target(generic_target):
self.mountmap["/var/cache/icecream"]="/var/cache/icecream"
self.env["PATH"]="/usr/lib/icecc/bin:"+self.env["PATH"]
+ if self.settings.has_key("TMPFS"):
+ self.mounts.append("/var/tmp/portage")
+ self.mountmap["/var/tmp/portage"]="tmpfs"
+
def override_cbuild(self):
if self.makeconf.has_key("CBUILD"):
self.settings["CBUILD"]=self.makeconf["CBUILD"]
@@ -882,6 +886,13 @@ class generic_stage_target(generic_target):
else:
retval=os.system("mount_nullfs "+src+"
"+\
self.settings["chroot_path"]+x)
+ elif src == "tmpfs":
+ tmpfs_o=""
+ if self.settings.has_key("tmpfs_opts"):
+ tmpfs_o="-o
"+self.settings["tmpfs_opts"]
+ retval=os.system("mount " + tmpfs_o +\
+ " -t tmpfs catalyst_tmpfs "+\
+ self.settings["chroot_path"]+x)
else:
retval=os.system("mount --bind "+src+" "+\
self.settings["chroot_path"]+x)