public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Rutger Nijlunsing <rutger@nospam.com>
To: linux-kernel@vger.kernel.org, Paul Jakma <paul@clubi.ie>
Subject: Re: namespaces (was Re: [Q] don't allow tmpfs to page out)
Date: Thu, 15 Jul 2004 23:52:44 +0200	[thread overview]
Message-ID: <20040715215244.GA30119@nospam.com> (raw)
In-Reply-To: <20040715171909.GA5518@pclin040.win.tue.nl>

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

On Thu, Jul 15, 2004 at 07:19:09PM +0200, Andries Brouwer wrote:
> On Thu, Jul 15, 2004 at 01:31:08PM +0100, Paul Jakma wrote:
> 
> > speaking of which, how does one use namespaces exactly? The kernel 
> > appears to maintain mount information per process, but how do you set 
> > this up?
> > 
> > neither 'man mount/namespace' nor 'appropos namespace' show up 
> > anything.
> 
> Try "man 2 clone" and look for CLONE_NEWNS.
> 
> Somewhere else I wrote
> 
>   Since 2.4.19/2.5.2, the clone() system call, a generalization of
>   Unix fork() and BSD vfork(), may have the CLONE_NEWNS flag, that
>   says that all mount information must be copied. Afterwards, mount,
>   chroot, pivotroot and similar namespace changing calls done by this
>   new process do influence this process and its children, but not other
>   processes. In particular, the virtual file /proc/mounts that lists the
>   mounted filesystems, is now a symlink to /proc/self/mounts - different
>   processes may live in entirely different file hierarchies.
> 
> Andries

Or your page at

  http://www.win.tue.nl/~aeb/linux/lk/lk-6.html

...which contains a working utility (section 6.3.3).

Attached an adopted version. Call like 'newnamespace /bin/bash' to
start bash in a new namespace.

-- 
Rutger Nijlunsing ---------------------------- rutger ed tux tmfweb nl
never attribute to a conspiracy which can be explained by incompetence
----------------------------------------------------------------------

[-- Attachment #2: newnamespace.c --]
[-- Type: text/plain, Size: 1166 bytes --]

/* newnamespace.c */

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sched.h>
#include <sys/types.h>
#include <sys/wait.h>

typedef struct {
  char *path;
  char **argv;
} FuncInfo;

int childfn(void *p) {
  FuncInfo *fi = (FuncInfo *)p;

  /*  setenv("PS1", "@@ ", 1); */
  execv(fi->path, fi->argv);
  perror("execl");
  fprintf(stderr, "Cannot exec '%s'\n", fi->path);
  exit(1);
}

static char *default_path = "/bin/ash";
static char *default_argv[] = {"ash", NULL};

int main(int argc, char *argv[]) {
  char buf[10000];
  pid_t pid, p;
  
  FuncInfo fi;

  if (argc == 1) {
    /* No arguments given */
    fi.path = default_path;
    fi.argv = default_argv;
  } else {
    int i;
    argc--; argv++;
    fi.path = *argv;
    fi.argv = (char **)malloc(sizeof(char *) * (argc + 1));
    for (i = 0; i < argc; i++) {
      fi.argv[i] = argv[i];
    }
    fi.argv[argc] = NULL;
  }

  pid = clone(childfn, buf + 5000, CLONE_NEWNS | SIGCHLD, &fi);
  if ((int) pid == -1) {
    perror("clone");
    exit(1);
  }
  
  p = waitpid(pid, NULL, 0);
  if ((int) p == -1) {
    perror("waitpid");
    exit(1);
  }
  
  exit(0);
}

      reply	other threads:[~2004-07-15 21:52 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-07-15  7:58 [Q] don't allow tmpfs to page out christophe.varoqui
2004-07-15  8:00 ` Arjan van de Ven
2004-07-15 10:00   ` christophe.varoqui
2004-07-15 12:31   ` namespaces (was Re: [Q] don't allow tmpfs to page out) Paul Jakma
2004-07-15 12:31     ` Arjan van de Ven
2004-07-15 12:50       ` Paul Jakma
2004-07-15 22:35       ` [dm-devel] " christophe varoqui
2004-07-15 23:00         ` Chris Wedgwood
2004-07-15 17:19     ` Andries Brouwer
2004-07-15 21:52       ` Rutger Nijlunsing [this message]

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=20040715215244.GA30119@nospam.com \
    --to=rutger@nospam.com \
    --cc=linux-kernel@tux.tmfweb.nl \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paul@clubi.ie \
    /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