On Fri, Jul 3, 2015 at 1:55 PM, Martin Kletzander <mkletzan@xxxxxxxxxx> wrote: > On Tue, Jun 23, 2015 at 04:38:57PM +0200, Richard Weinberger wrote: >> >> Instead of creating symlinks, bind mount the devices to >> /dev/pts/XY. >> Using bind mounts it is no longer needed to add pts devices >> to files like /dev/securetty. >> >> Signed-off-by: Richard Weinberger <richard@xxxxxx> >> --- >> src/lxc/lxc_container.c | 38 +++++++++++++++++++++----------------- >> 1 file changed, 21 insertions(+), 17 deletions(-) >> > > I spent ridiculously excessive time on this not working for me, but I > just figured out that simple check whether that file is a symlink or > not (inside the container) is enough. Ant it works. > > ACK then, sorry for wasting your time with this as well. > > >> diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c >> index 7d531e2..ea76370 100644 >> --- a/src/lxc/lxc_container.c >> +++ b/src/lxc/lxc_container.c >> @@ -1141,6 +1141,20 @@ static int >> lxcContainerMountFSDevPTS(virDomainDefPtr def, >> return ret; >> } >> >> +static int lxcContainerBindMountDevice(const char *src, const char *dst) >> +{ >> + if (virFileTouch(dst, 0666) < 0) >> + return -1; >> + >> + if (mount(src, dst, "none", MS_BIND, NULL) < 0) { >> + virReportSystemError(errno, _("Failed to bind %s on to %s"), src, >> + dst); >> + return -1; >> + } >> + >> + return 0; >> +} >> + >> static int lxcContainerSetupDevices(char **ttyPaths, size_t nttyPaths) >> { >> size_t i; >> @@ -1164,34 +1178,24 @@ static int lxcContainerSetupDevices(char >> **ttyPaths, size_t nttyPaths) >> } >> >> /* We have private devpts capability, so bind that */ >> - if (virFileTouch("/dev/ptmx", 0666) < 0) >> + if (lxcContainerBindMountDevice("/dev/pts/ptmx", "/dev/ptmx") < 0) >> return -1; >> >> - if (mount("/dev/pts/ptmx", "/dev/ptmx", "ptmx", MS_BIND, NULL) < 0) { >> - virReportSystemError(errno, "%s", >> - _("Failed to bind /dev/pts/ptmx on to >> /dev/ptmx")); >> - return -1; >> - } >> - >> for (i = 0; i < nttyPaths; i++) { >> char *tty; >> if (virAsprintf(&tty, "/dev/tty%zu", i+1) < 0) >> return -1; >> - if (symlink(ttyPaths[i], tty) < 0) { >> - virReportSystemError(errno, >> - _("Failed to symlink %s to %s"), >> - ttyPaths[i], tty); >> - VIR_FREE(tty); >> + >> + if (lxcContainerBindMountDevice(ttyPaths[i], tty) < 0) { >> return -1; >> + VIR_FREE(tty); >> } >> + >> VIR_FREE(tty); >> + >> if (i == 0 && >> - symlink(ttyPaths[i], "/dev/console") < 0) { >> - virReportSystemError(errno, >> - _("Failed to symlink %s to >> /dev/console"), >> - ttyPaths[i]); >> + lxcContainerBindMountDevice(ttyPaths[i], "/dev/console") < 0) >> return -1; >> - } >> } >> return 0; >> } >> -- >> 2.4.2 >> >> -- >> libvir-list mailing list >> libvir-list@xxxxxxxxxx >> https://www.redhat.com/mailman/listinfo/libvir-list Ping? -- Thanks, //richard -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list