From 6f34caf845c72f95040ef2b862bf645def9b04f6 Mon Sep 17 00:00:00 2001 From: Fendy Date: Thu, 23 Jul 2026 14:52:32 +0800 Subject: [PATCH] update gitignore fix: localize the code for current system environment --- .gitignore | 7 +++++++ container-from-scratch.c | 41 +++++++++++++++++++++++++++------------- 2 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d660847 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +rootfs/ + +*.exe +*.out + +container-from-scratch + diff --git a/container-from-scratch.c b/container-from-scratch.c index 977caf4..54a5362 100644 --- a/container-from-scratch.c +++ b/container-from-scratch.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -142,6 +143,31 @@ int mounts(struct child_config *config) return -1; } fprintf(stderr, "done.\n"); + + fprintf(stderr, "=> mounting /proc..."); + if (mount("proc", "/proc", "proc", 0, NULL)) { + fprintf(stderr, "failed: %m\n"); + return -1; + } + fprintf(stderr, "done.\n"); + + fprintf(stderr, "=> mounting /dev..."); + if (mount("tmpfs", "/dev", "tmpfs", MS_NOSUID | MS_STRICTATIME, "mode=755,size=65536k")) { + fprintf(stderr, "failed: %m\n"); + return -1; + } + umask(0); + if (mknod("/dev/null", S_IFCHR | 0666, makedev(1, 3))) { + fprintf(stderr, "mknod null failed: %m\n"); + } + if (mknod("/dev/zero", S_IFCHR | 0666, makedev(1, 5))) { + fprintf(stderr, "mknod zero failed: %m\n"); + } + if (mknod("/dev/urandom", S_IFCHR | 0666, makedev(1, 9))) { + fprintf(stderr, "mknod urandom failed: %m\n"); + } + fprintf(stderr, "done.\n"); + return 0; } @@ -248,17 +274,6 @@ struct cgrp_control *cgrps[] = { NULL } }, - & (struct cgrp_control) { - .control = "blkio", - .settings = (struct cgrp_setting *[]) { - & (struct cgrp_setting) { - .name = "blkio.weight", - .value = PIDS - }, - &add_to_tasks, - NULL - } - }, NULL }; int resources(struct child_config *config) @@ -504,8 +519,8 @@ finish_options: fprintf(stderr, "weird release format: %s\n", host.release); goto cleanup; } - if (major != 4 || (minor != 7 && minor != 8)) { - fprintf(stderr, "expected 4.7.x or 4.8.x: %s\n", host.release); + if (major < 4 || (major == 4 && minor < 7)) { + fprintf(stderr, "kernel too old: %s (need >= 4.7)\n", host.release); goto cleanup; } if (strcmp("x86_64", host.machine)) {