diff mbox series

[bug#48984] gnu: ddcutil: Patch kernel modules paths.

Message ID 20210612212422.13271-1-brice@waegenei.re
State Accepted
Headers show
Series [bug#48984] gnu: ddcutil: Patch kernel modules paths. | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch success View Laminar job
cbaines/issue success View issue

Commit Message

Brice Waegeneire June 12, 2021, 9:24 p.m. UTC
Without it "ddcutil detect" complain: “Module i2c-dev is not loaded and
ddcutil can't determine if it is built into the kernel”.

* gnu/packages/patches/ddcutil-modules-location.patch: New patch.
* gnu/local.mk (dist_patch_DATA): Register it.
* gnu/packages/hardware.scm (ddcutil)[source]: Apply it.
---
 gnu/local.mk                                  |  1 +
 gnu/packages/hardware.scm                     |  6 ++--
 .../patches/ddcutil-modules-location.patch    | 32 +++++++++++++++++++
 3 files changed, 37 insertions(+), 2 deletions(-)
 create mode 100644 gnu/packages/patches/ddcutil-modules-location.patch

Comments

Tobias Geerinckx-Rice June 13, 2021, 10:35 a.m. UTC | #1
Brice,

Thanks for the patch!  Does it affect more than ‘ddcutil 
detect/environment’?  Anything ‘real’?

Working around one of many bugs in a broken diagnostic subtool 
isn't worth maintaining a 32-line patch.

Brice Waegeneire 写道:
> Without it "ddcutil detect" complain: “Module i2c-dev is not 
> loaded and
> ddcutil can't determine if it is built into the kernel”.

With it, it still complains:

  ~ λ ddcutil detect
  Module i2c-dev is not loaded and not built into the kernel.
  ddcutil requires module i2c-dev

It doesn't address the built-in case either, AFAICS.

The very idea of ddcutil's linux_util.c is flawed and can't be 
fixed: you don't look in /etc for the running kernel version; you 
don't use that ill-gotten string to start scanning random system 
directories for .ko files; you don't check for built-in modules by 
looking for possibly installed build leftovers.  None of that 
makes sense.  You ask kmod.  You ask the kernel!

Kind regards,

T G-R
Brice Waegeneire June 13, 2021, 1:07 p.m. UTC | #2
Tobias,

Thank you for the review!

Tobias Geerinckx-Rice <me@tobias.gr> writes:
> Thanks for the patch!  Does it affect more than ‘ddcutil
> detect/environment’?  Anything ‘real’?

AFAIK no, this patch only get rid off that error message.

> Working around one of many bugs in a broken diagnostic subtool isn't worth
> maintaining a 32-line patch.

Fair enough, it's just a stop gap until 1.1.1 is released tho.

> Brice Waegeneire 写道:
>> Without it "ddcutil detect" complain: “Module i2c-dev is not loaded and
>> ddcutil can't determine if it is built into the kernel”.
>
> With it, it still complains:
>
>  ~ λ ddcutil detect
>  Module i2c-dev is not loaded and not built into the kernel.
>  ddcutil requires module i2c-dev

It's not the same error.

> It doesn't address the built-in case either, AFAICS.

I wasn't clear enough in the git message.  Here is the output wihtout
that patch and with it:

--8<---------------cut here---------------start------------->8---
$ modinfo i2c-dev | grep '^filename:'
filename:       (builtin)

$ guix environment --ad-hoc ddcutil -- ddcutil detect
Unable to read modules.builtin
Module i2c-dev is not loaded and ddcutil can't determine if it is built into the kernel
Display 1
[...]
$ ./pre-inst-env guix environment --ad-hoc ddcutil -- ddcutil detect
Display 1
[...]
--8<---------------cut here---------------end--------------->8--

With a built-in i2c-dev module, this patch remove that pesky error
message.

> The very idea of ddcutil's linux_util.c is flawed and can't be fixed: you
> don't look in /etc for the running kernel version; you don't use that
> ill-gotten string to start scanning random system directories for .ko
> files; you don't check for built-in modules by looking for possibly
> installed build leftovers.  None of that makes sense.  You ask kmod.  You
> ask the kernel!

I agreed it is flawed, but it was fixed by upstream in the 1.1.1-dev
branch¹ by using libkmod as you are suggesting.  I proposed that solution
to upstream some days ago in inssue #178²; he implementeded right away.

Since it's a development branch I tought it wasn't wise to update the
package to the latest commit.  Maybe you would you prefer such patch
instead?

¹ https://github.com/rockowitz/ddcutil/tree/1.1.1-dev
² https://github.com/rockowitz/ddcutil/issues/178#issuecomment-856297112

Cheers,
- Brice
Brice Waegeneire Jan. 21, 2022, 11:21 p.m. UTC | #3
Brice Waegeneire <brice@waegenei.re> writes:

> * gnu/packages/patches/ddcutil-modules-location.patch: New patch.
> * gnu/local.mk (dist_patch_DATA): Register it.
> * gnu/packages/hardware.scm (ddcutil)[source]: Apply it.

Upstream released a new version. This patch is superseded by <https://bugs.gnu.org/48984>.
diff mbox series

Patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 26b3e86e22..aa06cac37f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -941,6 +941,7 @@  dist_patch_DATA =						\
   %D%/packages/patches/dbus-CVE-2020-12049.patch		\
   %D%/packages/patches/dbus-c++-gcc-compat.patch		\
   %D%/packages/patches/dbus-c++-threading-mutex.patch		\
+  %D%/packages/patches/ddcutil-modules-location.patch		\
   %D%/packages/patches/dbxfs-remove-sentry-sdk.patch		\
   %D%/packages/patches/debops-constants-for-external-program-names.patch \
   %D%/packages/patches/debops-debops-defaults-fall-back-to-less.patch \
diff --git a/gnu/packages/hardware.scm b/gnu/packages/hardware.scm
index ecbcca79b1..0612e4a068 100644
--- a/gnu/packages/hardware.scm
+++ b/gnu/packages/hardware.scm
@@ -1,7 +1,7 @@ 
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Evgeny Pisemsky <evgeny@pisemsky.com>
 ;;; Copyright © 2021 Léo Le Bouter <lle-bout@zaclys.net>
 ;;;
@@ -21,6 +21,7 @@ 
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages hardware)
+  #:use-module (gnu packages)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bash)
@@ -68,7 +69,8 @@ 
        (uri (string-append "https://www.ddcutil.com/tarballs/"
                            "ddcutil-" version ".tar.gz"))
        (sha256
-        (base32 "19kkwb9ijzn6ya3mvjanggh1c96fcc0lkbk7xnyi2qp6wsr4nhxp"))))
+        (base32 "19kkwb9ijzn6ya3mvjanggh1c96fcc0lkbk7xnyi2qp6wsr4nhxp"))
+       (patches (search-patches "ddcutil-modules-location.patch"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/patches/ddcutil-modules-location.patch b/gnu/packages/patches/ddcutil-modules-location.patch
new file mode 100644
index 0000000000..c36fe5f2d7
--- /dev/null
+++ b/gnu/packages/patches/ddcutil-modules-location.patch
@@ -0,0 +1,32 @@ 
+From https://github.com/NixOS/nixpkgs/blob/nixos-21.05/pkgs/tools/misc/ddcutil/nixos-paths.diff
+
+--- a/src/util/linux_util.c
++++ b/src/util/linux_util.c
+@@ -125,6 +125,7 @@
+                   "lib64",
+                   "lib32",
+                   "usr/lib",  // needed for arch?
++                  "run/booted-system/kernel/lib",  // Guix System
+                   NULL};
+    int result = -1;
+    int ndx = 0;
+@@ -204,14 +205,15 @@
+    if (debug)
+       printf("(%s) machine: %s", __func__, utsbuf.machine);
+
+-   char * libdirs[3];
++   char * libdirs[4];
+    libdirs[0] = "lib";
++   libdirs[1] = "run/booted-system/kernel/lib";
+    if (streq(utsbuf.machine, "amd_64")){
+-      libdirs[1] = "lib64";
+-      libdirs[2] = NULL;
++      libdirs[2] = "lib64";
++      libdirs[3] = NULL;
+    }
+    else
+-      libdirs[1] = NULL;
++      libdirs[2] = NULL;
+
+    int libsndx = 0;
+    bool found = false;