[lxc-devel] [PATCH] create fd, stdin, stdout, stderr symlinks in /dev

Stéphane Graber stgraber at ubuntu.com
Thu Feb 13 21:32:26 UTC 2014


On Thu, Feb 13, 2014 at 04:13:03PM -0500, Dwight Engen wrote:
> The kernel's Documentation/devices.txt says that these symlinks should
> exist in /dev (they are listed in the "Compulsory" section). I'm not
> currently adding nfsd and X0R since they are required for iBCS, but
> they can be easily added to the array later if need be.
> 
> Signed-off-by: Dwight Engen <dwight.engen at oracle.com>

Acked-by: Stéphane Graber <stgraber at ubuntu.com>

> ---
>  src/lxc/conf.c | 37 +++++++++++++++++++++++++++++++++++++
>  1 file changed, 37 insertions(+)
> 
> diff --git a/src/lxc/conf.c b/src/lxc/conf.c
> index 6fa3db9..0de189f 100644
> --- a/src/lxc/conf.c
> +++ b/src/lxc/conf.c
> @@ -812,6 +812,38 @@ static int setup_utsname(struct utsname *utsname)
>  	return 0;
>  }
>  
> +struct dev_symlinks {
> +	const char *oldpath;
> +	const char *name;
> +};
> +
> +static const struct dev_symlinks dev_symlinks[] = {
> +	{"/proc/self/fd",	"fd"},
> +	{"/proc/self/fd/0",	"stdin"},
> +	{"/proc/self/fd/1",	"stdout"},
> +	{"/proc/self/fd/2",	"stderr"},
> +};
> +
> +static int setup_dev_symlinks(const struct lxc_rootfs *rootfs)
> +{
> +	char path[MAXPATHLEN];
> +	int ret,i;
> +
> +
> +	for (i = 0; i < sizeof(dev_symlinks) / sizeof(dev_symlinks[0]); i++) {
> +		const struct dev_symlinks *d = &dev_symlinks[i];
> +		ret = snprintf(path, sizeof(path), "%s/dev/%s", rootfs->mount, d->name);
> +		if (ret < 0 || ret >= MAXPATHLEN)
> +			return -1;
> +		ret = symlink(d->oldpath, path);
> +		if (ret && errno != EEXIST) {
> +			SYSERROR("Error creating %s", path);
> +			return -1;
> +		}
> +	}
> +	return 0;
> +}
> +
>  static int setup_tty(const struct lxc_rootfs *rootfs,
>  		     const struct lxc_tty_info *tty_info, char *ttydir)
>  {
> @@ -3616,6 +3648,11 @@ int lxc_setup(struct lxc_handler *handler)
>  		return -1;
>  	}
>  
> +	if (!lxc_conf->is_execute && setup_dev_symlinks(&lxc_conf->rootfs)) {
> +		ERROR("failed to setup /dev symlinks for '%s'", name);
> +		return -1;
> +	}
> +
>  	/* mount /proc if needed for LSM transition */
>  	if (lsm_proc_mount(lxc_conf) < 0) {
>  		ERROR("failed to LSM mount proc for '%s'", name);
> -- 
> 1.8.5.3
> 
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel

-- 
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20140213/4af72098/attachment.pgp>


More information about the lxc-devel mailing list