Linux Container Development
 help / color / mirror / Atom feed
From: "Serge E. Hallyn" <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
To: Oren Laadan <orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
Cc: Linux Containers <containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org>
Subject: [PATCH user-cr] add -t option to mount new devpts
Date: Thu, 3 Dec 2009 19:43:47 -0600	[thread overview]
Message-ID: <20091204014347.GA17304@us.ibm.com> (raw)

Trivial patch, and I'm not sure whether we want this or want to
do it this way.  But it saves me having to do it during my restart.sh
wrapper shell-script.

Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
---
 restart.c |   35 ++++++++++++++++++++++++++++++++++-
 1 files changed, 34 insertions(+), 1 deletions(-)

diff --git a/restart.c b/restart.c
index 063e973..03c1850 100644
--- a/restart.c
+++ b/restart.c
@@ -30,6 +30,7 @@
 #include <asm/unistd.h>
 #include <sys/syscall.h>
 #include <sys/prctl.h>
+#include <sys/mount.h>
 
 #include <linux/sched.h>
 #include <linux/checkpoint.h>
@@ -79,6 +80,7 @@ static char usage_str[] =
 "  -l,--logfile=FILE     write error and debug data to FILE (default=none)\n"
 "     --logfile-fd=FD    write error and debug data to file desctiptor FD\n"
 "     --inspect          inspect image on-the-fly for error records\n"
+"  -t,--pty		 start in a new devpts namespace to support ptys\n"
 "  -v,--verbose          verbose output\n"
 "  -d,--debug            debugging output\n"
 "     --warn-COND        warn on condition COND, but proceed anyways\n"
@@ -365,6 +367,7 @@ struct args {
 	long warn;
 	long fail;
 	int keep_lsm;
+	int pty;
 };
 
 #define CKPT_COND_PIDZERO  0x1
@@ -444,9 +447,10 @@ static void parse_args(struct args *args, int argc, char *argv[])
 		{ "debug",	no_argument,		NULL, 'd' },
 		{ "warn-pidzero",	no_argument,	NULL, 9 },
 		{ "fail-pidzero",	no_argument,	NULL, 10 },
+		{ "pty", no_argument,			NULL, 't'},
 		{ NULL,		0,			NULL, 0 }
 	};
-	static char optc[] = "hdvkpPwWF:r:i:l:";
+	static char optc[] = "hdvkpPwWF:r:i:l:t";
 
 	int optind;
 	int sig;
@@ -456,6 +460,7 @@ static void parse_args(struct args *args, int argc, char *argv[])
 	args->wait = 1;
 	args->infd = -1;
 	args->logfd = -1;
+	args->pty = 0;
 
 	while (1) {
 		int c = getopt_long(argc, argv, optc, opts, &optind);
@@ -469,6 +474,9 @@ static void parse_args(struct args *args, int argc, char *argv[])
 		case 'v':
 			global_verbose = 1;
 			break;
+		case 't':
+			args->pty = 1;
+			break;
 		case 5:  /* --inspect */
 			args->inspect = 1;
 			break;
@@ -786,6 +794,31 @@ int main(int argc, char *argv[])
 		exit(1);
 	}
 
+	/* private devpts namespace? */
+	if (args.pty) {
+		struct stat ptystat;
+		/* make sure /dev/ptmx is a link else we'll just break */
+		ret = lstat("/dev/ptmx", &ptystat);
+		if (ret) {
+			perror("stat /dev/ptmx");
+			exit(1);
+		}
+		if ((ptystat.st_mode & S_IFMT) != S_IFLNK) {
+			printf("Error: /dev/ptmx must be a link to /dev/pts/ptmx\n");
+			exit(1);
+		}
+		ret = unshare(CLONE_NEWNS);
+		if (ret) {
+			perror("unshare mounts ns (for -pty)");
+			exit(1);
+		}
+		ret = mount("pts", "/dev/pts", "devpts", 0, "newinstance");
+		if (ret) {
+			perror("mount -t devpts -o newinstance");
+			exit(1);
+		}
+	}
+
 	/* self-restart ends here: */
 	if (args.self) {
 		restart(getpid(), STDIN_FILENO, RESTART_TASKSELF, args.logfd);
-- 
1.6.1.1

             reply	other threads:[~2009-12-04  1:43 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-04  1:43 Serge E. Hallyn [this message]
     [not found] ` <20091204014347.GA17304-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-02-12 16:33   ` [PATCH user-cr] add -t option to mount new devpts Oren Laadan
     [not found]     ` <4B7582CD.9070900-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-02-12 17:05       ` Serge E. Hallyn

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=20091204014347.GA17304@us.ibm.com \
    --to=serue-r/jw6+rmf7hqt0dzr+alfa@public.gmane.org \
    --cc=containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org \
    --cc=orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.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