From: Brian Dolbec <dolsen@gentoo.org>
To: gentoo-catalyst@lists.gentoo.org
Cc: Brian Dolbec <dolsen@gentoo.org>
Subject: [gentoo-catalyst] [PATCH v3 5/6] modules/generic_stage_target.py, modules/stage1_target.py: Add a target_mounts dictionary
Date: Thu, 2 Jan 2014 20:16:21 -0800 [thread overview]
Message-ID: <1388722582-27657-6-git-send-email-dolsen@gentoo.org> (raw)
In-Reply-To: <1388722582-27657-1-git-send-email-dolsen@gentoo.org>
Temporary location to define TARGET_MOUNTS_DEFAULTS.
It will be moved to a new defaults.py file in a later commit.
I also plan to make them configurable.
Also:
* Clean up all self.mounts, self.mountmap usage.
* Replace multiple path additions with one instance at the
beginning of the function, reuse the result multiple times.
* Add some extra debug prints (to be converted to logging later)
---
modules/generic_stage_target.py | 83 ++++++++++++++++++++++++++---------------
modules/stage1_target.py | 5 ++-
2 files changed, 55 insertions(+), 33 deletions(-)
diff --git a/modules/generic_stage_target.py b/modules/generic_stage_target.py
index 55b336f..c57c504 100644
--- a/modules/generic_stage_target.py
+++ b/modules/generic_stage_target.py
@@ -8,6 +8,20 @@ import catalyst_lock
PORT_LOGDIR_CLEAN = \
'find "${PORT_LOGDIR}" -type f ! -name "summary.log*" -mtime +30 -delete'
+TARGET_MOUNTS_DEFAULTS = {
+ "ccache": "/var/tmp/ccache",
+ "dev": "/dev",
+ "devpts": "/dev/pts",
+ "distdir": "/usr/portage/distfiles",
+ "icecream": "/usr/lib/icecc/bin",
+ "kerncache": "/tmp/kerncache",
+ "packagedir": "/usr/portage/packages",
+ "portdir": "/usr/portage",
+ "port_tmpdir": "/var/tmp/portage",
+ "port_logdir": "/var/log/portage",
+ "proc": "/proc",
+ }
+
class generic_stage_target(generic_target):
"""
@@ -178,6 +192,8 @@ class generic_stage_target(generic_target):
file_locate(self.settings,["portage_confdir"],expand=0)
""" Setup our mount points """
+ # initialize our target mounts.
+ self.target_mounts = TARGET_MOUNTS_DEFAULTS.copy()
if "SNAPCACHE" in self.settings:
self.mounts = ["proc", "dev", "portdir", "distdir", "port_tmpdir"]
self.mountmap = {
@@ -230,12 +246,13 @@ class generic_stage_target(generic_target):
self.mounts.append("ccache")
self.mountmap["ccache"] = ccdir
""" for the chroot: """
- self.env["CCACHE_DIR"]="/var/tmp/ccache"
+ self.env["CCACHE_DIR"] = self.target_mounts["ccache"]
if "ICECREAM" in self.settings:
self.mounts.append("/var/cache/icecream")
self.mountmap["/var/cache/icecream"]="/var/cache/icecream"
- self.env["PATH"]="/usr/lib/icecc/bin:"+self.env["PATH"]
+ self.env["PATH"] = self.target_mounts["icecream"] + ":" + \
+ self.env["PATH"]
if "port_logdir" in self.settings:
self.mounts.append("port_logdir")
@@ -614,33 +631,34 @@ class generic_stage_target(generic_target):
"kill-chroot-pids script failed.",env=self.env)
def mount_safety_check(self):
- mypath=self.settings["chroot_path"]
-
"""
Check and verify that none of our paths in mypath are mounted. We don't
want to clean up with things still mounted, and this allows us to check.
Returns 1 on ok, 0 on "something is still mounted" case.
"""
- if not os.path.exists(mypath):
+ if not os.path.exists(self.settings["chroot_path"]):
return
+ print "self.mounts =", self.mounts
for x in self.mounts:
- if not os.path.exists(mypath + self.mountmap[x]):
+ target = normpath(self.settings["chroot_path"] + self.target_mounts[x])
+ print "mount_safety_check() x =", x, target
+ if not os.path.exists(target):
continue
- if ismount(mypath + self.mountmap[x]):
+ if ismount(target):
""" Something is still mounted "" """
try:
- print self.mountmap[x] + " is still mounted; performing auto-bind-umount...",
+ print target + " is still mounted; performing auto-bind-umount...",
""" Try to umount stuff ourselves """
self.unbind()
- if ismount(mypath + self.mountmap[x]):
- raise CatalystError, "Auto-unbind failed for " + self.mountmap[x]
+ if ismount(target):
+ raise CatalystError, "Auto-unbind failed for " + target
else:
print "Auto-unbind successful..."
except CatalystError:
- raise CatalystError, "Unable to auto-unbind " + self.mountmap[x]
+ raise CatalystError, "Unable to auto-unbind " + target
def unpack(self):
unpack=True
@@ -908,12 +926,14 @@ class generic_stage_target(generic_target):
def bind(self):
for x in self.mounts:
- if not os.path.exists(self.settings["chroot_path"] + self.mountmap[x]):
- os.makedirs(self.settings["chroot_path"]+x,0755)
+ #print "bind(); x =", x
+ target = normpath(self.settings["chroot_path"] + self.target_mounts[x])
+ if not os.path.exists(target):
+ os.makedirs(target, 0755)
if not os.path.exists(self.mountmap[x]):
if not self.mountmap[x] == "tmpfs":
- os.makedirs(self.mountmap[x],0755)
+ os.makedirs(self.mountmap[x], 0755)
src=self.mountmap[x]
#print "bind(); src =", src
@@ -921,20 +941,22 @@ class generic_stage_target(generic_target):
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"] + src)
+ cmd = "mount -t devfs none " + target
+ retval=os.system(cmd)
else:
- retval = os.system("mount_nullfs " + src + " " +
- self.settings["chroot_path"] + src)
+ cmd = "mount_nullfs " + src + " " + target
+ retval=os.system(cmd)
else:
if src == "tmpfs":
if "var_tmpfs_portage" in self.settings:
- retval=os.system("mount -t tmpfs -o size="+\
- self.settings["var_tmpfs_portage"]+"G "+src+" "+\
- self.settings["chroot_path"]+x)
+ cmd = "mount -t tmpfs -o size=" + \
+ self.settings["var_tmpfs_portage"] + "G " + \
+ src + " " + target
+ retval=os.system(cmd)
else:
- retval = os.system("mount --bind " + src + " " +
- self.settings["chroot_path"] + src)
+ cmd = "mount --bind " + src + " " + target
+ #print "bind(); cmd =", cmd
+ retval=os.system(cmd)
if retval!=0:
self.unbind()
raise CatalystError,"Couldn't bind mount " + src
@@ -946,26 +968,25 @@ 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 + self.mountmap[x]):
+ target = normpath(mypath + self.target_mounts[x])
+ if not os.path.exists(target):
continue
- if not ismount(mypath + self.mountmap[x]):
+ if not ismount(target):
continue
- retval=os.system("umount "+\
- os.path.join(mypath, self.mountmap[x].lstrip(os.path.sep)))
+ retval=os.system("umount " + target)
if retval!=0:
- warn("First attempt to unmount: " + mypath +
- self.mountmap[x] +" failed.")
+ warn("First attempt to unmount: " + target + " failed.")
warn("Killing any pids still running in the chroot")
self.kill_chroot_pids()
- retval2 = os.system("umount " + mypath + self.mountmap[x])
+ retval2 = os.system("umount " + target)
if retval2!=0:
ouch=1
- warn("Couldn't umount bind mount: " + mypath + self.mountmap[x])
+ warn("Couldn't umount bind mount: " + target)
if "SNAPCACHE" in self.settings and x == "/usr/portage":
try:
diff --git a/modules/stage1_target.py b/modules/stage1_target.py
index aa43926..5f4ffa0 100644
--- a/modules/stage1_target.py
+++ b/modules/stage1_target.py
@@ -88,8 +88,9 @@ class stage1_target(generic_stage_target):
os.makedirs(self.settings["stage_path"]+"/proc")
# alter the mount mappings to bind mount proc onto it
- self.mounts.append("/tmp/stage1root/proc")
- self.mountmap["/tmp/stage1root/proc"]="/proc"
+ self.mounts.append("stage1root/proc")
+ self.target_mounts["stage1root/proc"] = "/tmp/stage1root/proc"
+ self.mountmap["stage1root/proc"] = "/proc"
def register(foo):
foo.update({"stage1":stage1_target})
--
1.8.3.2
next prev parent reply other threads:[~2014-01-03 4:16 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-29 1:57 [gentoo-catalyst] Patches to fix rebased patches already applied to current master Brian Dolbec
2013-12-29 1:57 ` [gentoo-catalyst] [PATCH 1/6] modules/generic_stage_target.py: USE portdir, distdir,... instead of paths for keys Brian Dolbec
2013-12-29 2:16 ` W. Trevor King
2013-12-29 1:57 ` [gentoo-catalyst] [PATCH 2/6] Fix a missed self.settings["repo_name"] migration Brian Dolbec
2013-12-29 2:19 ` W. Trevor King
2013-12-29 5:08 ` Brian Dolbec
2013-12-29 1:57 ` [gentoo-catalyst] [PATCH 3/6] Add "local_overlay" to configdefaults Brian Dolbec
2013-12-29 2:24 ` W. Trevor King
2013-12-29 1:57 ` [gentoo-catalyst] [PATCH 4/6] Fix a missed self.mounts key change from a path as key Brian Dolbec
2013-12-29 2:30 ` W. Trevor King
2013-12-29 1:57 ` [gentoo-catalyst] [PATCH 5/6] modules/generic_stage_target.py, modules/stage1_target.py: Add a target_mounts dictionary Brian Dolbec
2013-12-29 2:49 ` W. Trevor King
2013-12-29 3:52 ` W. Trevor King
2013-12-29 4:58 ` Brian Dolbec
2013-12-31 2:54 ` [gentoo-catalyst] mounts changes was: " Brian Dolbec
2013-12-31 3:06 ` [gentoo-catalyst] Re: mounts changes W. Trevor King
2014-01-01 6:05 ` [gentoo-catalyst] mounts changes was: [PATCH 5/6] modules/generic_stage_target.py, modules/stage1_target.py: Add a target_mounts dictionary Jorge Manuel B. S. Vicetto
2014-01-01 18:53 ` W. Trevor King
2014-01-02 2:50 ` Jorge Manuel B. S. Vicetto
2013-12-29 5:02 ` [gentoo-catalyst] " Brian Dolbec
2013-12-29 5:26 ` Alec Warner
2013-12-29 6:01 ` Brian Dolbec
2013-12-29 1:57 ` [gentoo-catalyst] [PATCH 6/6] Set mountmap["icecream"] from settings for now Brian Dolbec
2013-12-29 2:53 ` W. Trevor King
2013-12-29 3:00 ` W. Trevor King
2013-12-30 1:50 ` [gentoo-catalyst] Patches to fix rebased patches already applied to current master. Version-2 Brian Dolbec
2013-12-30 1:50 ` [gentoo-catalyst] [PATCH 1/6] modules/generic_stage_target.py: Use portdir, distdir,... instead of paths for keys Brian Dolbec
2013-12-30 3:54 ` W. Trevor King
2013-12-30 1:50 ` [gentoo-catalyst] [PATCH 2/6] Fix a missed self.settings["repo_name"] migration Brian Dolbec
2013-12-30 3:58 ` W. Trevor King
2013-12-30 1:50 ` [gentoo-catalyst] [PATCH 3/6] Fixes commit 463d98f (modules/generic_stage_target.py: Use a 'local_overlay' setting instead of hard-coding '/usr/local/portage', 2012-12-19).Add "local_overlay" to configdefaults Brian Dolbec
2013-12-30 4:02 ` W. Trevor King
2013-12-30 5:32 ` Brian Dolbec
2013-12-30 6:35 ` W. Trevor King
2013-12-30 6:48 ` Brian Dolbec
2013-12-30 1:50 ` [gentoo-catalyst] [PATCH 4/6] Fix mounts and mountmap port_logdir code block Brian Dolbec
2013-12-30 4:09 ` W. Trevor King
2013-12-30 5:46 ` Brian Dolbec
2013-12-30 1:50 ` [gentoo-catalyst] [PATCH 5/6] modules/generic_stage_target.py, modules/stage1_target.py: Add a target_mounts dictionary Brian Dolbec
2013-12-30 4:16 ` W. Trevor King
2013-12-30 1:50 ` [gentoo-catalyst] [PATCH 6/6] Set mountmap["icecream"] from settings for now Brian Dolbec
2013-12-30 4:19 ` W. Trevor King
2013-12-30 3:33 ` [gentoo-catalyst] Patches to fix rebased patches already applied to current master. Version-2 W. Trevor King
2014-01-03 4:16 ` [PATCH v3 0/6] "Re: " Brian Dolbec
2014-01-03 4:16 ` [gentoo-catalyst] [PATCH v3 1/6] modules/generic_stage_target.py: Use portdir, distdir, ... instead of paths for keys Brian Dolbec
2014-01-03 4:30 ` [gentoo-catalyst] " W. Trevor King
2014-01-03 4:16 ` [gentoo-catalyst] [PATCH v3 2/6] Fix a missed self.settings["repo_name"] migration Brian Dolbec
2014-01-03 4:33 ` W. Trevor King
2014-01-03 4:53 ` [gentoo-catalyst] [PATCH v4 1/1] " Brian Dolbec
2014-01-03 5:02 ` Brian Dolbec
2014-01-03 5:09 ` [gentoo-catalyst] [PATCH v5 " Brian Dolbec
2014-01-03 4:16 ` [gentoo-catalyst] [PATCH v3 3/6] Add "local_overlay" to configdefaults Brian Dolbec
2014-01-03 4:36 ` W. Trevor King
2014-01-03 4:16 ` [gentoo-catalyst] [PATCH v3 4/6] Fix mounts and mountmap port_logdir code block Brian Dolbec
2014-01-03 4:40 ` W. Trevor King
2014-01-03 4:16 ` Brian Dolbec [this message]
2014-01-03 4:47 ` [gentoo-catalyst] [PATCH v3 5/6] modules/generic_stage_target.py, modules/stage1_target.py: Add a target_mounts dictionary W. Trevor King
2014-01-03 6:08 ` W. Trevor King
2014-01-03 6:55 ` Brian Dolbec
2014-01-03 4:16 ` [gentoo-catalyst] [PATCH v3 6/6] Set mountmap["icecream"] from settings for now Brian Dolbec
2014-01-03 4:48 ` W. Trevor King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1388722582-27657-6-git-send-email-dolsen@gentoo.org \
--to=dolsen@gentoo.org \
--cc=gentoo-catalyst@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox