meaning to not mount some specific parts witch cause trouble. The patch is based on previous work of *containercraft* to combine OpenWrt with lxc[0]. This patch however adds a detection copied from *virt-what* to check /proc/1/environment for "container=lxc".
[0]: https://github.com/containercraft/openwrt-lxd/blob/master/patches/procd-openwrt-18.06/001_lxd_no_mounts.patch Signed-off-by: Paul Spooren <m...@aparcar.org> --- initd/early.c | 19 +++++++++++-------- initd/zram.c | 10 ++++++---- plug/coldplug.c | 13 ++++++++----- procd.c | 7 ++++++- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/initd/early.c b/initd/early.c index 2e15112..4018e63 100644 --- a/initd/early.c +++ b/initd/early.c @@ -56,14 +56,17 @@ early_mounts(void) { unsigned int oldumask = umask(0); - mount("proc", "/proc", "proc", MS_NOATIME | MS_NODEV | MS_NOEXEC | MS_NOSUID, 0); - mount("sysfs", "/sys", "sysfs", MS_NOATIME | MS_NODEV | MS_NOEXEC | MS_NOSUID, 0); - mount("cgroup", "/sys/fs/cgroup", "cgroup", MS_NODEV | MS_NOEXEC | MS_NOSUID, 0); - mount("tmpfs", "/dev", "tmpfs", MS_NOATIME | MS_NOSUID, "mode=0755,size=512K"); - ignore(symlink("/tmp/shm", "/dev/shm")); - mkdir("/dev/pts", 0755); - mount("devpts", "/dev/pts", "devpts", MS_NOATIME | MS_NOEXEC | MS_NOSUID, "mode=600"); - early_dev(); + if (!container) { + mount("proc", "/proc", "proc", MS_NOATIME | MS_NODEV | MS_NOEXEC | MS_NOSUID, 0); + mount("sysfs", "/sys", "sysfs", MS_NOATIME | MS_NODEV | MS_NOEXEC | MS_NOSUID, 0); + mount("cgroup", "/sys/fs/cgroup", "cgroup", MS_NODEV | MS_NOEXEC | MS_NOSUID, 0); + mount("tmpfs", "/dev", "tmpfs", MS_NOATIME | MS_NOSUID, "mode=0755,size=512K"); + ignore(symlink("/tmp/shm", "/dev/shm")); + mkdir("/dev/pts", 0755); + mount("devpts", "/dev/pts", "devpts", MS_NOATIME | MS_NOEXEC | MS_NOSUID, "mode=600"); + + early_dev(); + } early_console("/dev/console"); if (mount_zram_on_tmp()) { diff --git a/initd/zram.c b/initd/zram.c index b41bfd9..e8d71c2 100644 --- a/initd/zram.c +++ b/initd/zram.c @@ -116,10 +116,12 @@ mount_zram_on_tmp(void) waitpid(pid, NULL, 0); } - ret = mount("/dev/zram0", "/tmp", "ext4", MS_NOSUID | MS_NODEV | MS_NOATIME, "errors=continue,noquota"); - if (ret < 0) { - ERROR("Can't mount /dev/zram0 on /tmp: %m\n"); - return errno; + if (!container) { + ret = mount("/dev/zram0", "/tmp", "ext4", MS_NOSUID | MS_NODEV | MS_NOATIME, "errors=continue,noquota"); + if (ret < 0) { + ERROR("Can't mount /dev/zram0 on /tmp: %m\n"); + return errno; + } } LOG("Using up to %ld kB of RAM as ZRAM storage on /mnt\n", zramsize); diff --git a/plug/coldplug.c b/plug/coldplug.c index c6a89c3..aabe379 100644 --- a/plug/coldplug.c +++ b/plug/coldplug.c @@ -43,13 +43,16 @@ void procd_coldplug(void) char *argv[] = { "udevtrigger", NULL }; unsigned int oldumask = umask(0); - umount2("/dev/pts", MNT_DETACH); - umount2("/dev/", MNT_DETACH); - mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755,size=512K"); + if (!container) { + umount2("/dev/pts", MNT_DETACH); + umount2("/dev/", MNT_DETACH); + mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755,size=512K"); + mkdir("/dev/pts", 0755); + mount("devpts", "/dev/pts", "devpts", MS_NOEXEC | MS_NOSUID, 0); + } + ignore(symlink("/tmp/shm", "/dev/shm")); - mkdir("/dev/pts", 0755); umask(oldumask); - mount("devpts", "/dev/pts", "devpts", MS_NOEXEC | MS_NOSUID, 0); udevtrigger.cb = udevtrigger_complete; udevtrigger.pid = fork(); if (!udevtrigger.pid) { diff --git a/procd.c b/procd.c index 3de6208..b938a2f 100644 --- a/procd.c +++ b/procd.c @@ -26,7 +26,7 @@ #include "plug/hotplug.h" unsigned int debug; - +unsigned int container = 0; static int usage(const char *prog) { fprintf(stderr, "Usage: %s [options]\n" @@ -50,6 +50,11 @@ int main(int argc, char **argv) unsetenv("DBGLVL"); } + char *env_container = getenv("container"); + if (strcmp("lxc",env_container) != 0) { + container = 1; + } + while ((ch = getopt(argc, argv, "d:s:h:S")) != -1) { switch (ch) { case 'h': -- 2.20.1 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel