From 45a504d83e6fd41becfb422788b8539bd6375d06 Mon Sep 17 00:00:00 2001 From: Brian Dolbec <dolsen@gentoo.org> Date: Wed, 19 Dec 2012 18:56:04 -0800 Subject: [PATCH] Remove self.mounts and self.mountmap's use of paths for keys and paths. Migrate more hardcoded paths to use settings. --- modules/generic_stage_target.py | 116 ++++++++++++++++++++-------------------- 1 file changed, 59 insertions(+), 57 deletions(-) diff --git a/modules/generic_stage_target.py b/modules/generic_stage_target.py index 3597680..44256fc 100644 --- a/modules/generic_stage_target.py +++ b/modules/generic_stage_target.py @@ -174,16 +174,16 @@ class generic_stage_target(generic_target): """ Setup our mount points """ if self.settings.has_key("SNAPCACHE"): - self.mounts=["/proc","/dev","/usr/portage","/usr/portage/distfiles","/var/tmp/portage"] - self.mountmap={"/proc":"/proc","/dev":"/dev","/dev/pts":"/dev/pts",\ - "/usr/portage":self.settings["snapshot_cache_path"]+"/portage",\ - "/usr/portage/distfiles":self.settings["distdir"],"/var/tmp/portage":"tmpfs"} + self.mounts=["proc", "dev", 'portdir', 'distdir', 'port_tmpdir'] + self.mountmap={"proc":"proc", "dev":"/dev", "pts":"/dev/pts", + "portdir":self.settings["snapshot_cache_path"]+"/" + self.settings["repo_name"], + "distdir":self.settings["distdir"],"port_tmpdir":"tmpfs"} else: - self.mounts=["/proc","/dev","/usr/portage/distfiles","/var/tmp/portage"] - self.mountmap={"/proc":"/proc","/dev":"/dev","/dev/pts":"/dev/pts",\ - "/usr/portage/distfiles":self.settings["distdir"],"/var/tmp/portage":"tmpfs"} + self.mounts=["proc","dev", "distdir", "port_tmpdir"] + self.mountmap={"proc":"/proc", "dev":"/dev", "pts":"/dev/pts", + "distdir":self.settings["distdir"], "port_tmpdir":"tmpfs"} if os.uname()[0] == "Linux": - self.mounts.append("/dev/pts") + self.mounts.append("pts") self.set_mounts() @@ -195,16 +195,15 @@ class generic_stage_target(generic_target): self.set_pkgcache_path() print "Location of the package cache is "+\ self.settings["pkgcache_path"] - self.mounts.append("/usr/portage/packages") - self.mountmap["/usr/portage/packages"]=\ - self.settings["pkgcache_path"] + self.mounts.append("packagedir") + self.mountmap["packagedir"] = self.settings["pkgcache_path"] if self.settings.has_key("KERNCACHE"): self.set_kerncache_path() print "Location of the kerncache is "+\ self.settings["kerncache_path"] - self.mounts.append("/tmp/kerncache") - self.mountmap["/tmp/kerncache"]=self.settings["kerncache_path"] + self.mounts.append("kerncache") + self.mountmap["kerncache"]=self.settings["kerncache_path"] if self.settings.has_key("CCACHE"): if os.environ.has_key("CCACHE_DIR"): @@ -216,20 +215,20 @@ class generic_stage_target(generic_target): raise CatalystError,\ "Compiler cache support can't be enabled (can't find "+\ ccdir+")" - self.mounts.append("/var/tmp/ccache") - self.mountmap["/var/tmp/ccache"]=ccdir + self.mounts.append("ccache") + self.mountmap["ccache"]=ccdir """ for the chroot: """ self.env["CCACHE_DIR"]="/var/tmp/ccache" if self.settings.has_key("ICECREAM"): - self.mounts.append("/var/cache/icecream") - self.mountmap["/var/cache/icecream"]="/var/cache/icecream" + self.mounts.append("icecream") + self.mountmap["icecream"]="/var/cache/icecream" self.env["PATH"]="/usr/lib/icecc/bin:"+self.env["PATH"] if self.settings.has_key("port_logdir"): - self.mounts.append("/var/log/portage") - self.mountmap["/var/log/portage"]=self.settings["port_logdir"] - self.env["PORT_LOGDIR"]="/var/log/portage" + self.mounts.append("port_logdir") + self.mountmap["port_logdir"]=self.settings["port_logdir"] + self.env["PORT_LOGDIR"]=self.settings["port_logdir"] self.env["PORT_LOGDIR_CLEAN"]='find "${PORT_LOGDIR}" -type f ! -name "summary.log*" -mtime +30 -delete' def override_cbuild(self): @@ -406,11 +405,12 @@ class generic_stage_target(generic_target): def set_cleanables(self): self.settings["cleanables"]=["/etc/resolv.conf","/var/tmp/*","/tmp/*",\ - "/root/*","/usr/portage"] + "/root/*", self.settings["portdir"]] def set_snapshot_path(self): self.settings["snapshot_path"]=normpath(self.settings["storedir"]+\ - "/snapshots/portage-"+self.settings["snapshot"]+".tar.xz") + "/snapshots/" + self.settings["snapshot_name"] + + self.settings["snapshot"]+".tar.xz") if os.path.exists(self.settings["snapshot_path"]): self.settings["snapshot_path_hash"]=\ @@ -612,21 +612,21 @@ class generic_stage_target(generic_target): return for x in self.mounts: - if not os.path.exists(mypath+x): + if not os.path.exists(mypath + self.mountmap[x]): continue - if ismount(mypath+x): + if ismount(mypath +self.mountmap[x]): """ Something is still mounted "" """ try: - print x+" is still mounted; performing auto-bind-umount...", + print self.mountmap[x] + " is still mounted; performing auto-bind-umount...", """ Try to umount stuff ourselves """ self.unbind() - if ismount(mypath+x): - raise CatalystError, "Auto-unbind failed for "+x + if ismount(mypath + self.mountmap[x]): + raise CatalystError, "Auto-unbind failed for " + self.mountmap[x] else: print "Auto-unbind successful..." except CatalystError: - raise CatalystError, "Unable to auto-unbind "+x + raise CatalystError, "Unable to auto-unbind " + self.mountmap[x] def unpack(self): unpack=True @@ -784,7 +784,7 @@ class generic_stage_target(generic_target): print "Valid snapshot cache, skipping unpack of portage tree..." unpack=False else: - destdir=normpath(self.settings["chroot_path"]+"/usr/portage") + destdir=normpath(self.settings["chroot_path"] + self.settings["portdir"]) cleanup_errmsg="Error removing existing snapshot directory." cleanup_msg=\ "Cleaning up existing portage tree (This can take a long time)..." @@ -798,7 +798,7 @@ class generic_stage_target(generic_target): if self.settings.has_key("AUTORESUME") \ and os.path.exists(self.settings["chroot_path"]+\ - "/usr/portage/") \ + self.settings["portdir"]) \ and os.path.exists(self.settings["autoresume_path"]\ +"unpack_portage") \ and self.settings["snapshot_path_hash"] == snapshot_hash: @@ -845,7 +845,7 @@ class generic_stage_target(generic_target): cmd("rm -f "+self.settings["chroot_path"]+"/etc/portage/make.profile",\ "Error zapping profile link",env=self.env) cmd("mkdir -p "+self.settings["chroot_path"]+"/etc/portage/") - cmd("ln -sf ../../usr/portage/profiles/"+\ + cmd("ln -sf ../.." + self.settings["portdir"] + "/profiles/"+\ self.settings["target_profile"]+" "+\ self.settings["chroot_path"]+"/etc/portage/make.profile",\ "Error creating profile link",env=self.env) @@ -865,16 +865,16 @@ class generic_stage_target(generic_target): touch(self.settings["autoresume_path"]+"setup_confdir") def portage_overlay(self): - """ We copy the contents of our overlays to /usr/local/portage """ + """ We copy the contents of our overlays to local_overlay setting """ if self.settings.has_key("portage_overlay"): for x in self.settings["portage_overlay"]: if os.path.exists(x): print "Copying overlay dir " +x cmd("mkdir -p "+self.settings["chroot_path"]+\ - "/usr/local/portage",\ + self.settings["local_overlay"],\ "Could not make portage_overlay dir",env=self.env) cmd("cp -R "+x+"/* "+self.settings["chroot_path"]+\ - "/usr/local/portage",\ + self.settings["local_overlay"],\ "Could not copy portage_overlay",env=self.env) def root_overlay(self): @@ -894,7 +894,7 @@ class generic_stage_target(generic_target): def bind(self): for x in self.mounts: - if not os.path.exists(self.settings["chroot_path"]+x): + if not os.path.exists(self.settings["chroot_path"] + self.mountmap[x]): os.makedirs(self.settings["chroot_path"]+x,0755) if not os.path.exists(self.mountmap[x]): @@ -902,27 +902,28 @@ class generic_stage_target(generic_target): os.makedirs(self.mountmap[x],0755) src=self.mountmap[x] - if self.settings.has_key("SNAPCACHE") and x == "/usr/portage": + if self.settings.has_key("SNAPCACHE") and x == "portdir": self.snapshot_lock_object.read_lock() if os.uname()[0] == "FreeBSD": if src == "/dev": - retval=os.system("mount -t devfs none "+\ - self.settings["chroot_path"]+x) + retval=os.system("mount -t devfs none " + + self.settings["chroot_path"] + src) else: - retval=os.system("mount_nullfs "+src+" "+\ - self.settings["chroot_path"]+x) + retval=os.system("mount_nullfs " + src + " " + + self.settings["chroot_path"] + src) else: if src == "tmpfs": if self.settings.has_key("var_tmpfs_portage"): - retval=os.system("mount -t tmpfs -o size="+\ - self.settings["var_tmpfs_portage"]+"G "+src+" "+\ - self.settings["chroot_path"]+x) + retval=os.system("mount -t tmpfs -o size=" + + self.settings["var_tmpfs_portage"] + "G " + + src + " " + self.settings["chroot_path"] + + self.settings["port_tmp_dir"]) else: - retval=os.system("mount --bind "+src+" "+\ - self.settings["chroot_path"]+x) + retval=os.system("mount --bind " + src + " " + + self.settings["chroot_path"] + src) if retval!=0: self.unbind() - raise CatalystError,"Couldn't bind mount "+src + raise CatalystError,"Couldn't bind mount " + src def unbind(self): ouch=0 @@ -931,27 +932,28 @@ class generic_stage_target(generic_target): myrevmounts.reverse() """ Unmount in reverse order for nested bind-mounts """ for x in myrevmounts: - if not os.path.exists(mypath+x): + if not os.path.exists(mypath + self.mountmap[x]): continue - if not ismount(mypath+x): + if not ismount(mypath + self.mountmap[x]): continue retval=os.system("umount "+\ - os.path.join(mypath,x.lstrip(os.path.sep))) + os.path.join(mypath, self.mountmap[x].lstrip(os.path.sep))) if retval!=0: - warn("First attempt to unmount: "+mypath+x+" failed.") + warn("First attempt to unmount: " + mypath + + self.mountmap[x] +" failed.") warn("Killing any pids still running in the chroot") self.kill_chroot_pids() - retval2=os.system("umount "+mypath+x) + retval2=os.system("umount " + mypath + self.mountmap[x]) if retval2!=0: ouch=1 - warn("Couldn't umount bind mount: "+mypath+x) + warn("Couldn't umount bind mount: " + mypath + self.mountmap[x]) - if self.settings.has_key("SNAPCACHE") and x == "/usr/portage": + if self.settings.has_key("SNAPCACHE") and x == "portdir": try: """ It's possible the snapshot lock object isn't created yet. @@ -1065,7 +1067,7 @@ class generic_stage_target(generic_target): """ Setup the portage overlay """ if self.settings.has_key("portage_overlay"): - myf.write('PORTDIR_OVERLAY="/usr/local/portage"\n') + myf.write('PORTDIR_OVERLAY="%s"\n' % self.settings["local_overlay"]) myf.close() cmd("cp "+self.settings["chroot_path"]+"/etc/portage/make.conf "+\ @@ -1111,9 +1113,9 @@ class generic_stage_target(generic_target): "Could not replace /etc/hosts",env=self.env) """ Remove our overlay """ - if os.path.exists(self.settings["chroot_path"]+"/usr/local/portage"): - cmd("rm -rf "+self.settings["chroot_path"]+"/usr/local/portage",\ - "Could not remove /usr/local/portage",env=self.env) + if os.path.exists(self.settings["chroot_path"] + self.settings["local_overlay"]): + cmd("rm -rf " + self.settings["chroot_path"] + self.settings["local_overlay"], + "Could not remove " + self.settings["local_overlay"], env=self.env) cmd("sed -i '/^PORTDIR_OVERLAY/d' "+self.settings["chroot_path"]+\ "/etc/portage/make.conf",\ "Could not remove PORTDIR_OVERLAY from make.conf",env=self.env) -- 1.8.0