On Thu, May 12, 2022 at 6:43 AM Changqing Li <changqing...@windriver.com> wrote:
>
> From: Changqing Li <changqing...@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...@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...@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.
> +

Reading the upstream issue, I'm not sure this really is an
"Inappropriate" upstream. eudev has dropped this commit, because you
can use systemd-tmpfiles ("as it works without systemd and can be
compiled individually" - presumably using our unsupported musl
patches...) or opentmpfiles (which is dead and points you back to
systemd-tmpfiles).

Feels like this is an engage with upstream rather than carry a patch
forever which just causes us to be perpetually divergent.

> +Signed-off-by: Li Zhou <li.z...@windriver.com>
> +Signed-off-by: Changqing Li <changqing...@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
>
>
> 
>


-- 
Alex Kiernan
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#165535): 
https://lists.openembedded.org/g/openembedded-core/message/165535
Mute This Topic: https://lists.openembedded.org/mt/91052396/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to