Re: [PATCH] lxc: Bind mount container TTYs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

Attachment: signature.asc
Description: PGP signature

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]