public inbox for gentoo-catalyst@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-catalyst] Fix the recent python sem_open failure
@ 2014-01-03  6:00 Brian Dolbec
  2014-01-03  6:00 ` [gentoo-catalyst] [PATCH 1/2] modules/generic_stage_target.py, Create SOURCE_MOUNTS_DEFAULTS Brian Dolbec
  2014-01-03  6:00 ` [gentoo-catalyst] [PATCH 2/2] catalyst/targets/generic_stage_target.py: mount /dev/shm on linux Brian Dolbec
  0 siblings, 2 replies; 7+ messages in thread
From: Brian Dolbec @ 2014-01-03  6:00 UTC (permalink / raw
  To: gentoo-catalyst


These 2 patches I've just bumped up in the pending branch order.  They are needed
to fix recent changes to python build system.

The SOURCE_MOUNTS_DEFAULTS is to compliment the TARGET_MOUNTS_DEFAULTS and
simplifies it's use through the code.  It also is one step closer to having them 
configurable.

The shm patch is a merge of 3 patches into this final one.
The changes have all been tested.   These jsut need testing due to the rebase.

I hope to merge these patches this weekend along with teh previous 6 that fix
other commits already applied.  They have had lots of scrutiny and review already.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [gentoo-catalyst] [PATCH 1/2] modules/generic_stage_target.py, Create SOURCE_MOUNTS_DEFAULTS
  2014-01-03  6:00 [gentoo-catalyst] Fix the recent python sem_open failure Brian Dolbec
@ 2014-01-03  6:00 ` Brian Dolbec
  2014-01-03  6:20   ` W. Trevor King
  2014-01-03  6:00 ` [gentoo-catalyst] [PATCH 2/2] catalyst/targets/generic_stage_target.py: mount /dev/shm on linux Brian Dolbec
  1 sibling, 1 reply; 7+ messages in thread
From: Brian Dolbec @ 2014-01-03  6:00 UTC (permalink / raw
  To: gentoo-catalyst; +Cc: Brian Dolbec

Similarly to TARGET_MOUNTS_DEFAULTS this is a temporary location.
This will simplify the migration to being fully configurable.
It also simplifies initialization somewhat.
---
 modules/generic_stage_target.py | 39 ++++++++++++++++++++++-----------------
 1 file changed, 22 insertions(+), 17 deletions(-)

diff --git a/modules/generic_stage_target.py b/modules/generic_stage_target.py
index 7919f07..790e4da 100644
--- a/modules/generic_stage_target.py
+++ b/modules/generic_stage_target.py
@@ -22,6 +22,15 @@ TARGET_MOUNTS_DEFAULTS = {
 	"proc": "/proc",
 	}
 
+SOURCE_MOUNTS_DEFAULTS = {
+	"dev": "/dev",
+	"devpts": "/dev/pts",
+	"distdir": "/usr/portage/distfiles",
+	"portdir": "/usr/portage",
+	"port_tmpdir": "tmpfs",
+	"proc": "/proc",
+	}
+
 
 class generic_stage_target(generic_target):
 	"""
@@ -194,23 +203,19 @@ class generic_stage_target(generic_target):
 		""" 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 = {
-				"dev": "/dev",
-				"devpts": "/dev/pts",
-				"distdir": self.settings["distdir"],
-				"portdir": normpath("/".join([
-					self.settings["snapshot_cache_path"],
-					self.settings["repo_name"],
-					])),
-				"port_tmpdir": "tmpfs",
-				"proc": "/proc",
-				}
-		else:
-			self.mounts = ["proc", "dev", "distdir", "port_tmpdir"]
-			self.mountmap = {"proc":"/proc", "dev":"/dev", "devpts":"/dev/pts",
-				"distdir":self.settings["distdir"], "port_tmpdir":"tmpfs"}
+
+		self.mounts = ["proc", "dev", "portdir", "distdir", "port_tmpdir"]
+		# initialize our source mounts
+		self.mountmap = SOURCE_MOUNTS_DEFAULTS.copy()
+		# update them from settings
+		self.mountmap["distdir"] = self.settings["distdir"]
+		self.mountmap["portdir"] = normpath("/".join([
+			self.settings["snapshot_cache_path"],
+			self.settings["repo_name"],
+			]))
+		if "SNAPCACHE" not in self.settings:
+			self.mounts.remove("portdir")
+			#self.mountmap["portdir"] = None
 		if os.uname()[0] == "Linux":
 			self.mounts.append("devpts")
 
-- 
1.8.3.2



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [gentoo-catalyst] [PATCH 2/2] catalyst/targets/generic_stage_target.py: mount /dev/shm on linux
  2014-01-03  6:00 [gentoo-catalyst] Fix the recent python sem_open failure Brian Dolbec
  2014-01-03  6:00 ` [gentoo-catalyst] [PATCH 1/2] modules/generic_stage_target.py, Create SOURCE_MOUNTS_DEFAULTS Brian Dolbec
@ 2014-01-03  6:00 ` Brian Dolbec
  2014-01-03  6:33   ` W. Trevor King
  1 sibling, 1 reply; 7+ messages in thread
From: Brian Dolbec @ 2014-01-03  6:00 UTC (permalink / raw
  To: gentoo-catalyst; +Cc: Brian Dolbec

Add shm targets defaults. Anthony G. Basile <blueness@gentoo.org>
Some build systems require /dev/shm to be mounted, like python's
build system.  We make sure that on Linux systems, /dev/shm is
mounted in the stage chroots.  See bug #496328.

Douglas Freed <dwfreed@mtu.edu> :
Mount /dev/shm in the chroot with the right options
Bind mounting /dev/shm into the chroot isn't a good idea, as there may
be collisions and result in weird side effects.  Instead, we can just
mount a new tmpfs there, with the right options to ensure security.

(Forward ported to pending branch from 2.X Brian Dolbec)
Conflicts:
	catalyst/targets/generic_stage_target.py
---
 modules/generic_stage_target.py | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/modules/generic_stage_target.py b/modules/generic_stage_target.py
index 790e4da..3d66231 100644
--- a/modules/generic_stage_target.py
+++ b/modules/generic_stage_target.py
@@ -20,6 +20,7 @@ TARGET_MOUNTS_DEFAULTS = {
 	"port_tmpdir": "/var/tmp/portage",
 	"port_logdir": "/var/log/portage",
 	"proc": "/proc",
+	"shm": "/dev/shm",
 	}
 
 SOURCE_MOUNTS_DEFAULTS = {
@@ -29,6 +30,7 @@ SOURCE_MOUNTS_DEFAULTS = {
 	"portdir": "/usr/portage",
 	"port_tmpdir": "tmpfs",
 	"proc": "/proc",
+	"shm": "shmfs",
 	}
 
 
@@ -218,6 +220,7 @@ class generic_stage_target(generic_target):
 			#self.mountmap["portdir"] = None
 		if os.uname()[0] == "Linux":
 			self.mounts.append("devpts")
+			self.mounts.append("shm")
 
 		self.set_mounts()
 
@@ -938,7 +941,7 @@ class generic_stage_target(generic_target):
 				os.makedirs(target, 0755)
 
 			if not os.path.exists(self.mountmap[x]):
-				if not self.mountmap[x] == "tmpfs":
+				if self.mountmap[x] not in ["tmpfs", "shmfs"]:
 					os.makedirs(self.mountmap[x], 0755)
 
 			src=self.mountmap[x]
@@ -959,6 +962,9 @@ class generic_stage_target(generic_target):
 							self.settings["var_tmpfs_portage"] + "G " + \
 							src + " " + target
 						retval=os.system(cmd)
+				elif src == "shmfs":
+					cmd = "mount -t tmpfs -o noexec,nosuid,nodev shm " + target
+					retval=os.system(cmd)
 				else:
 					cmd = "mount --bind " + src + " " + target
 					#print "bind(); cmd =", cmd
-- 
1.8.3.2



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [gentoo-catalyst] [PATCH 1/2] modules/generic_stage_target.py, Create SOURCE_MOUNTS_DEFAULTS
  2014-01-03  6:00 ` [gentoo-catalyst] [PATCH 1/2] modules/generic_stage_target.py, Create SOURCE_MOUNTS_DEFAULTS Brian Dolbec
@ 2014-01-03  6:20   ` W. Trevor King
  2014-01-03  6:52     ` Brian Dolbec
  0 siblings, 1 reply; 7+ messages in thread
From: W. Trevor King @ 2014-01-03  6:20 UTC (permalink / raw
  To: gentoo-catalyst

[-- Attachment #1: Type: text/plain, Size: 1856 bytes --]

I shift quoted lines around for easier comparison.

On Thu, Jan 02, 2014 at 10:00:43PM -0800, Brian Dolbec wrote:
> +SOURCE_MOUNTS_DEFAULTS = {
> …
> +	"distdir": "/usr/portage/distfiles",
> +	"portdir": "/usr/portage",
> …
> -				"distdir": self.settings["distdir"],
> -				"portdir": normpath("/".join([
> -					self.settings["snapshot_cache_path"],
> -					self.settings["repo_name"],
> -					])),
> …
> +		# initialize our source mounts
> +		self.mountmap = SOURCE_MOUNTS_DEFAULTS.copy()
> +		# update them from settings
> +		self.mountmap["distdir"] = self.settings["distdir"]
> +		self.mountmap["portdir"] = normpath("/".join([
> +			self.settings["snapshot_cache_path"],
> +			self.settings["repo_name"],
> +			]))

Why create dummy initial values and then blow them away?  Wouldn't:

  SOURCE_MOUNTS_DEFAULTS = {
    …
    'distdir': None,  # initialized from settings
    'portdir': None,  # initialized from settings
    }

make more sense?  We'll blow away this default dict once we're loading
it via ConfigParser, so this doesn't have to be super elegant, but
adding values just to clobber them seems misleading.

> -		if "SNAPCACHE" in self.settings:
> -			self.mounts = ["proc", "dev", "portdir", "distdir", "port_tmpdir"]
> …
> -		else:
> -			self.mounts = ["proc", "dev", "distdir", "port_tmpdir"]
> …
> +		self.mounts = ["proc", "dev", "portdir", "distdir", "port_tmpdir"]
> …
> +		if "SNAPCACHE" not in self.settings:
> +			self.mounts.remove("portdir")

I'd prefer:

  self.mounts = ["proc", "dev", "distdir", "port_tmpdir"]
  if "SNAPCACHE" in self.settings:
      self.mounts.append("portdir")

Cheers,
Trevor

-- 
This email may be signed or encrypted with GnuPG (http://www.gnupg.org).
For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [gentoo-catalyst] [PATCH 2/2] catalyst/targets/generic_stage_target.py: mount /dev/shm on linux
  2014-01-03  6:00 ` [gentoo-catalyst] [PATCH 2/2] catalyst/targets/generic_stage_target.py: mount /dev/shm on linux Brian Dolbec
@ 2014-01-03  6:33   ` W. Trevor King
  0 siblings, 0 replies; 7+ messages in thread
From: W. Trevor King @ 2014-01-03  6:33 UTC (permalink / raw
  To: gentoo-catalyst

[-- Attachment #1: Type: text/plain, Size: 688 bytes --]

>  		if os.uname()[0] == "Linux":
>  			self.mounts.append("devpts")
> +			self.mounts.append("shm")

Besides avoiding collisions, a fresh mount is better than --bind
mounting for Debian-based distributions which symlink into /run:

  # ls -ld /dev/shm
  lrwxrwxrwx 1 root root 8 Jan  1 16:42 /dev/shm -> /run/shm
  # cat /etc/os-release 
  PRETTY_NAME="Debian GNU/Linux jessie/sid"
  …

Since binding the host's /run into the container would clearly be
crazy ;).

The patch looks good to me.

Cheers,
Trevor

-- 
This email may be signed or encrypted with GnuPG (http://www.gnupg.org).
For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [gentoo-catalyst] [PATCH 1/2] modules/generic_stage_target.py, Create SOURCE_MOUNTS_DEFAULTS
  2014-01-03  6:20   ` W. Trevor King
@ 2014-01-03  6:52     ` Brian Dolbec
  2014-01-03 16:11       ` W. Trevor King
  0 siblings, 1 reply; 7+ messages in thread
From: Brian Dolbec @ 2014-01-03  6:52 UTC (permalink / raw
  To: gentoo-catalyst

[-- Attachment #1: Type: text/plain, Size: 2218 bytes --]

On Thu, 2014-01-02 at 22:20 -0800, W. Trevor King wrote:
> I shift quoted lines around for easier comparison.
> 
> On Thu, Jan 02, 2014 at 10:00:43PM -0800, Brian Dolbec wrote:
> > +SOURCE_MOUNTS_DEFAULTS = {
> > …
> > +	"distdir": "/usr/portage/distfiles",
> > +	"portdir": "/usr/portage",
> > …
> > -				"distdir": self.settings["distdir"],
> > -				"portdir": normpath("/".join([
> > -					self.settings["snapshot_cache_path"],
> > -					self.settings["repo_name"],
> > -					])),
> > …
> > +		# initialize our source mounts
> > +		self.mountmap = SOURCE_MOUNTS_DEFAULTS.copy()
> > +		# update them from settings
> > +		self.mountmap["distdir"] = self.settings["distdir"]
> > +		self.mountmap["portdir"] = normpath("/".join([
> > +			self.settings["snapshot_cache_path"],
> > +			self.settings["repo_name"],
> > +			]))
> 
> Why create dummy initial values and then blow them away?  Wouldn't:
> 
>   SOURCE_MOUNTS_DEFAULTS = {
>     …
>     'distdir': None,  # initialized from settings
>     'portdir': None,  # initialized from settings
>     }
> 
> make more sense?  We'll blow away this default dict once we're loading
> it via ConfigParser, so this doesn't have to be super elegant, but
> adding values just to clobber them seems misleading.
> 

We probably could, they are defaulted in config_defaults.  But at the
time I was just thinking that catalyst.conf or a spec file may not have
the value declared, so was better to give it a default here, just in
case.


> > -		if "SNAPCACHE" in self.settings:
> > -			self.mounts = ["proc", "dev", "portdir", "distdir", "port_tmpdir"]
> > …
> > -		else:
> > -			self.mounts = ["proc", "dev", "distdir", "port_tmpdir"]
> > …
> > +		self.mounts = ["proc", "dev", "portdir", "distdir", "port_tmpdir"]
> > …
> > +		if "SNAPCACHE" not in self.settings:
> > +			self.mounts.remove("portdir")
> 
> I'd prefer:
> 
>   self.mounts = ["proc", "dev", "distdir", "port_tmpdir"]
>   if "SNAPCACHE" in self.settings:
>       self.mounts.append("portdir")
> 
> Cheers,
> Trevor
> 

I didn't do that because I didn't know if the mount order was important,
so erred on the side of the current order.


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 620 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [gentoo-catalyst] [PATCH 1/2] modules/generic_stage_target.py, Create SOURCE_MOUNTS_DEFAULTS
  2014-01-03  6:52     ` Brian Dolbec
@ 2014-01-03 16:11       ` W. Trevor King
  0 siblings, 0 replies; 7+ messages in thread
From: W. Trevor King @ 2014-01-03 16:11 UTC (permalink / raw
  To: gentoo-catalyst

[-- Attachment #1: Type: text/plain, Size: 2972 bytes --]

On Thu, Jan 02, 2014 at 10:52:00PM -0800, Brian Dolbec wrote:
> On Thu, 2014-01-02 at 22:20 -0800, W. Trevor King wrote:
> > On Thu, Jan 02, 2014 at 10:00:43PM -0800, Brian Dolbec wrote:
> > > +SOURCE_MOUNTS_DEFAULTS = {
> > > …
> > > +	"distdir": "/usr/portage/distfiles",
> > > +	"portdir": "/usr/portage",
> > > …
> > > -				"distdir": self.settings["distdir"],
> > > -				"portdir": normpath("/".join([
> > > -					self.settings["snapshot_cache_path"],
> > > -					self.settings["repo_name"],
> > > -					])),
> > > …
> > > +		# initialize our source mounts
> > > +		self.mountmap = SOURCE_MOUNTS_DEFAULTS.copy()
> > > +		# update them from settings
> > > +		self.mountmap["distdir"] = self.settings["distdir"]
> > > +		self.mountmap["portdir"] = normpath("/".join([
> > > +			self.settings["snapshot_cache_path"],
> > > +			self.settings["repo_name"],
> > > +			]))
> > 
> > Why create dummy initial values and then blow them away?  Wouldn't:
> > 
> >   SOURCE_MOUNTS_DEFAULTS = {
> >     …
> >     'distdir': None,  # initialized from settings
> >     'portdir': None,  # initialized from settings
> >     }
> > 
> > make more sense?  We'll blow away this default dict once we're loading
> > it via ConfigParser, so this doesn't have to be super elegant, but
> > adding values just to clobber them seems misleading.
> 
> We probably could, they are defaulted in config_defaults.  But at the
> time I was just thinking that catalyst.conf or a spec file may not have
> the value declared, so was better to give it a default here, just in
> case.

I'm fine with that, but then we should either use this to setup
settings' defaults, or check to make sure the key is in settings
before clobbering the version from SOURCE_MOUNTS_DEFAULTS.

> > > -		if "SNAPCACHE" in self.settings:
> > > -			self.mounts = ["proc", "dev", "portdir", "distdir", "port_tmpdir"]
> > > …
> > > -		else:
> > > -			self.mounts = ["proc", "dev", "distdir", "port_tmpdir"]
> > > …
> > > +		self.mounts = ["proc", "dev", "portdir", "distdir", "port_tmpdir"]
> > > …
> > > +		if "SNAPCACHE" not in self.settings:
> > > +			self.mounts.remove("portdir")
> > 
> > I'd prefer:
> > 
> >   self.mounts = ["proc", "dev", "distdir", "port_tmpdir"]
> >   if "SNAPCACHE" in self.settings:
> >       self.mounts.append("portdir")
> 
> I didn't do that because I didn't know if the mount order was important,
> so erred on the side of the current order.

Ah, good point.  Mounting portdir after distdir would probably not
work well ;).  I now think the preloaded mounts is a good idea, and
that we should fill in the missing keys here too for consistency
('devpts', 'ccache', 'icecream', …).  Then remove entries as
appropriate for the OS/settings.

Cheers,
Trevor

-- 
This email may be signed or encrypted with GnuPG (http://www.gnupg.org).
For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-01-03 16:11 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-01-03  6:00 [gentoo-catalyst] Fix the recent python sem_open failure Brian Dolbec
2014-01-03  6:00 ` [gentoo-catalyst] [PATCH 1/2] modules/generic_stage_target.py, Create SOURCE_MOUNTS_DEFAULTS Brian Dolbec
2014-01-03  6:20   ` W. Trevor King
2014-01-03  6:52     ` Brian Dolbec
2014-01-03 16:11       ` W. Trevor King
2014-01-03  6:00 ` [gentoo-catalyst] [PATCH 2/2] catalyst/targets/generic_stage_target.py: mount /dev/shm on linux Brian Dolbec
2014-01-03  6:33   ` W. Trevor King

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox