public inbox for openembedded-core@lists.openembedded.org
 help / color / mirror / Atom feed
* [PATCH] eudev: create static nodes from modules
@ 2018-04-19  6:35 Li Zhou
  2018-06-04  2:23 ` Zhou, Li
  0 siblings, 1 reply; 4+ messages in thread
From: Li Zhou @ 2018-04-19  6:35 UTC (permalink / raw)
  To: openembedded-core

Revert commit <src/udev/udevd.c: remove create static nodes from modules>
because /dev/net/tun is usually needed to already been there when system
boots up. With this commit, /dev/net/tun is missing when sysvinit is
used.

Signed-off-by: Li Zhou <li.zhou@windriver.com>
---
 ...01-eudev-create-static-nodes-from-modules.patch | 106 +++++++++++++++++++++
 meta/recipes-core/udev/eudev_3.2.5.bb              |   1 +
 2 files changed, 107 insertions(+)
 create mode 100644 meta/recipes-core/udev/eudev/0001-eudev-create-static-nodes-from-modules.patch

diff --git a/meta/recipes-core/udev/eudev/0001-eudev-create-static-nodes-from-modules.patch b/meta/recipes-core/udev/eudev/0001-eudev-create-static-nodes-from-modules.patch
new file mode 100644
index 0000000..583873e
--- /dev/null
+++ b/meta/recipes-core/udev/eudev/0001-eudev-create-static-nodes-from-modules.patch
@@ -0,0 +1,106 @@
+From 73df4fe0bd6fd2f2600f0d82b3f121c604baf1be Mon Sep 17 00:00:00 2001
+From: Li Zhou <li.zhou@windriver.com>
+Date: Thu, 12 Apr 2018 05:14:27 -0400
+Subject: [PATCH] eudev: create static nodes from modules
+
+Revert commit <src/udev/udevd.c: remove create static nodes from modules>
+
+Upstream-Status: Inappropriate [Just for user's convinence]
+
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ src/udev/udevd.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 71 insertions(+)
+
+diff --git a/src/udev/udevd.c b/src/udev/udevd.c
+index 9c33eba..95774a1 100644
+--- a/src/udev/udevd.c
++++ b/src/udev/udevd.c
+@@ -979,6 +979,76 @@ static void handle_signal(struct udev *udev, int signo) {
+         }
+ }
+ 
++static void static_dev_create_from_modules(struct udev *udev) {
++        struct utsname kernel;
++        char modules[UTIL_PATH_SIZE];
++        char buf[4096];
++        FILE *f;
++
++        if (uname(&kernel) < 0) {
++                log_error("uname failed: %m");
++                return;
++        }
++
++        strscpyl(modules, sizeof(modules), ROOTPREFIX "/lib/modules/", kernel.release, "/modules.devname", NULL);
++        f = fopen(modules, "re");
++        if (f == NULL)
++                return;
++
++        while (fgets(buf, sizeof(buf), f) != NULL) {
++                char *s;
++                const char *modname;
++                const char *devname;
++                const char *devno;
++                int maj, min;
++                char type;
++                mode_t mode;
++                char filename[UTIL_PATH_SIZE];
++
++                if (buf[0] == '#')
++                        continue;
++
++                modname = buf;
++                s = strchr(modname, ' ');
++                if (s == NULL)
++                        continue;
++                s[0] = '\0';
++
++                devname = &s[1];
++                s = strchr(devname, ' ');
++                if (s == NULL)
++                        continue;
++                s[0] = '\0';
++
++                devno = &s[1];
++                s = strchr(devno, ' ');
++                if (s == NULL)
++                        s = strchr(devno, '\n');
++                if (s != NULL)
++                        s[0] = '\0';
++                if (sscanf(devno, "%c%u:%u", &type, &maj, &min) != 3)
++                        continue;
++
++                mode  = 0600;
++                if (type == 'c')
++                        mode |= S_IFCHR;
++                else if (type == 'b')
++                        mode |= S_IFBLK;
++                else
++                        continue;
++
++                strscpyl(filename, sizeof(filename), "/dev/", devname, NULL);
++                mkdir_parents_label(filename, 0755);
++                mac_selinux_create_file_prepare(filename, mode);
++                log_debug("mknod '%s' %c%u:%u", filename, type, maj, min);
++                if (mknod(filename, mode, makedev(maj, min)) < 0 && errno == EEXIST)
++                        utimensat(AT_FDCWD, filename, NULL, 0);
++                mac_selinux_create_file_clear();
++        }
++
++        fclose(f);
++}
++
+ /*
+  * read the kernel command line, in case we need to get into debug mode
+  *   udev.log-priority=<level>                 syslog priority
+@@ -1183,6 +1253,7 @@ int main(int argc, char *argv[]) {
+         }
+ 
+         dev_setup(NULL, UID_INVALID, GID_INVALID);
++        static_dev_create_from_modules(udev);
+ 
+         /* before opening new files, make sure std{in,out,err} fds are in a sane state */
+         if (arg_daemonize) {
+-- 
+2.7.4
+
diff --git a/meta/recipes-core/udev/eudev_3.2.5.bb b/meta/recipes-core/udev/eudev_3.2.5.bb
index 88ad8f1..9237944 100644
--- a/meta/recipes-core/udev/eudev_3.2.5.bb
+++ b/meta/recipes-core/udev/eudev_3.2.5.bb
@@ -18,6 +18,7 @@ SRC_URI = "http://dev.gentoo.org/~blueness/${BPN}/${BP}.tar.gz \
            file://permissions.rules \
            file://run.rules \
            file://udev.rules \
+           file://0001-eudev-create-static-nodes-from-modules.patch \
 "
 
 SRC_URI[md5sum] = "6ca08c0e14380f87df8e8aceac123671"
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 4+ messages in thread
* [PATCH] eudev: create static nodes from modules
@ 2022-05-12  5:43 changqing.li
  0 siblings, 0 replies; 4+ messages in thread
From: changqing.li @ 2022-05-12  5:43 UTC (permalink / raw)
  To: openembedded-core

From: Changqing Li <changqing.li@windriver.com>

dev in modules.devname should be populated in /dev on boot.
remove create static mode from udevd will make these devices
cannot be populated. When use sysVinit, devices like /dev/net/tun
will not be created.

more info:
udevd in systemd also remove create static mode in udevd, but using
service kmod-static-nodes.service and
systemd-tmpfiles-setup-dev.service in systemd to create these node, so
systemd works well.

Signed-off-by: Changqing Li <changqing.li@windriver.com>
---
 ...dev-create-static-nodes-from-modules.patch | 115 ++++++++++++++++++
 meta/recipes-core/udev/eudev_3.2.11.bb        |   1 +
 2 files changed, 116 insertions(+)
 create mode 100644 meta/recipes-core/udev/eudev/0001-eudev-create-static-nodes-from-modules.patch

diff --git a/meta/recipes-core/udev/eudev/0001-eudev-create-static-nodes-from-modules.patch b/meta/recipes-core/udev/eudev/0001-eudev-create-static-nodes-from-modules.patch
new file mode 100644
index 0000000000..19611f4e89
--- /dev/null
+++ b/meta/recipes-core/udev/eudev/0001-eudev-create-static-nodes-from-modules.patch
@@ -0,0 +1,115 @@
+From 573d6c4106d5b3828da43d2843c1d599ae3cd1cd Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Tue, 10 May 2022 14:04:35 +0800
+Subject: [PATCH] eudev: create static nodes from modules
+
+Revert commit <src/udev/udevd.c: remove create static nodes from modules>
+https://gitweb.gentoo.org/proj/eudev.git/commit/?id=2b7abd5ec9cc47a8b895df6db77fb1537c6f1a39
+
+Upstream-Status: Inappropriate [oe-specific]
+
+Upstream intentionally remove create static nodes from modules, it is
+expected handled by tmpfiles services, refer [1].
+[1] https://github.com/eudev-project/eudev/issues/229 
+
+For yocto, when start with sysVinit, to enable systemd distro feature,
+and install systemd-tmpfiles is not proper, so revert this commit.
+
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ src/udev/udevd.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 71 insertions(+)
+
+diff --git a/src/udev/udevd.c b/src/udev/udevd.c
+index 7ffd174..ff53fe4 100644
+--- a/src/udev/udevd.c
++++ b/src/udev/udevd.c
+@@ -993,6 +993,76 @@ static void handle_signal(struct udev *udev, int signo) {
+         }
+ }
+ 
++static void static_dev_create_from_modules(struct udev *udev) {
++        struct utsname kernel;
++        char modules[UTIL_PATH_SIZE];
++        char buf[4096];
++        FILE *f;
++
++        if (uname(&kernel) < 0) {
++                log_error("uname failed: %m");
++                return;
++        }
++
++        strscpyl(modules, sizeof(modules), ROOTPREFIX "/lib/modules/", kernel.release, "/modules.devname", NULL);
++        f = fopen(modules, "re");
++        if (f == NULL)
++                return;
++
++        while (fgets(buf, sizeof(buf), f) != NULL) {
++                char *s;
++                const char *modname;
++                const char *devname;
++                const char *devno;
++                int maj, min;
++                char type;
++                mode_t mode;
++                char filename[UTIL_PATH_SIZE];
++
++                if (buf[0] == '#')
++                        continue;
++
++                modname = buf;
++                s = strchr(modname, ' ');
++                if (s == NULL)
++                        continue;
++                s[0] = '\0';
++
++                devname = &s[1];
++                s = strchr(devname, ' ');
++                if (s == NULL)
++                        continue;
++                s[0] = '\0';
++
++                devno = &s[1];
++                s = strchr(devno, ' ');
++                if (s == NULL)
++                        s = strchr(devno, '\n');
++                if (s != NULL)
++                        s[0] = '\0';
++                if (sscanf(devno, "%c%u:%u", &type, &maj, &min) != 3)
++                        continue;
++
++                mode  = 0600;
++                if (type == 'c')
++                        mode |= S_IFCHR;
++                else if (type == 'b')
++                        mode |= S_IFBLK;
++                else
++                        continue;
++
++                strscpyl(filename, sizeof(filename), "/dev/", devname, NULL);
++                mkdir_parents_label(filename, 0755);
++                mac_selinux_create_file_prepare(filename, mode);
++                log_debug("mknod '%s' %c%u:%u", filename, type, maj, min);
++                if (mknod(filename, mode, makedev(maj, min)) < 0 && errno == EEXIST)
++                        utimensat(AT_FDCWD, filename, NULL, 0);
++                mac_selinux_create_file_clear();
++        }
++
++        fclose(f);
++}
++
+ /*
+  * read the kernel command line, in case we need to get into debug mode
+  *   udev.log-priority=<level>                 syslog priority
+@@ -1199,6 +1269,7 @@ int main(int argc, char *argv[]) {
+         }
+ 
+         dev_setup(NULL, UID_INVALID, GID_INVALID);
++        static_dev_create_from_modules(udev);
+ 
+         /* before opening new files, make sure std{in,out,err} fds are in a sane state */
+         if (arg_daemonize) {
+-- 
+2.25.1
+
diff --git a/meta/recipes-core/udev/eudev_3.2.11.bb b/meta/recipes-core/udev/eudev_3.2.11.bb
index 841039f6d7..deb6c90a82 100644
--- a/meta/recipes-core/udev/eudev_3.2.11.bb
+++ b/meta/recipes-core/udev/eudev_3.2.11.bb
@@ -12,6 +12,7 @@ PROVIDES = "udev"
 SRC_URI = "https://github.com/eudev-project/${BPN}/releases/download/v${PV}/${BP}.tar.gz \
            file://init \
            file://local.rules \
+           file://0001-eudev-create-static-nodes-from-modules.patch \
 "
 
 SRC_URI[sha256sum] = "19847cafec67897da855fde56f9dc7d92e21c50e450aa79068a7e704ed44558b"
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-05-12  5:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-04-19  6:35 [PATCH] eudev: create static nodes from modules Li Zhou
2018-06-04  2:23 ` Zhou, Li
2018-07-12  2:22   ` Changqing Li
  -- strict thread matches above, loose matches on Subject: below --
2022-05-12  5:43 changqing.li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox