GNU bug report logs - #73393
[PATCH v2 0/2] SANE: fix a locking bug for plustek backend

Previous Next

Package: guix-patches;

Reported by: neox <neox <at> gnu.org>

Date: Fri, 20 Sep 2024 19:05:04 UTC

Severity: normal

Tags: patch

Merged with 73391, 73392, 73406

To reply to this bug, email your comments to 73393 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#73393; Package guix-patches. (Fri, 20 Sep 2024 19:05:04 GMT) Full text and rfc822 format available.

Acknowledgement sent to neox <neox <at> gnu.org>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Fri, 20 Sep 2024 19:05:04 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: neox <neox <at> gnu.org>
To: guix-patches <at> gnu.org
Cc: Adrien 'neox' Bourmault <neox <at> gnu.org>
Subject: [PATCH 2/2] services: sane-service-type: create lock path for plustek
 backend
Date: Fri, 20 Sep 2024 21:03:33 +0200
From: Adrien 'neox' Bourmault <neox <at> gnu.org>

* gnu/services/desktop.scm (sane-service-type): extend with an activation
 service to create the lockpath and give the right permissions


Change-Id: I187886d12b5f0b4fe21b03de178ea2187205387a
Signed-off-by: Adrien 'neox' Bourmault <neox <at> gnu.org>
---
 gnu/services/desktop.scm | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 274aeeef9b..9eae4178fb 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -1408,6 +1408,17 @@ (define %sane-accounts
   ;; The '60-libsane.rules' udev rules refers to the "scanner" group.
   (list (user-group (name "scanner") (system? #t))))
 
+(define %sane-activation
+  #~(begin
+      (use-modules (guix build utils))
+      (let ((lockpath "/var/lock/sane")
+            (gid (vector-ref (getgrnam "scanner") 2)))
+        ;; Create the lock directory at runtime and give right perms
+        (mkdir-p lockpath)
+        (chown lockpath -1 gid)
+        (chmod lockpath #o770))
+      #t))
+
 (define sane-service-type
   (service-type
    (name 'sane)
@@ -1418,6 +1429,8 @@ (define sane-service-type
    (default-value sane-backends-minimal)
    (extensions
     (list (service-extension udev-service-type list)
+          (service-extension activation-service-type
+                             (const %sane-activation))
           (service-extension account-service-type
                              (const %sane-accounts))))))
 
-- 
2.46.0





Information forwarded to guix-patches <at> gnu.org:
bug#73393; Package guix-patches. (Fri, 20 Sep 2024 19:23:02 GMT) Full text and rfc822 format available.

Message #8 received at 73393 <at> debbugs.gnu.org (full text, mbox):

From: Adrien 'neox' Bourmault <neox <at> gnu.org>
To: 73392 <at> debbugs.gnu.org, 73393 <at> debbugs.gnu.org
Subject: Re: bug#73392: Acknowledgement ([PATCH 1/2] gnu:
 sane-backends-minimal: fix lock path for plustek backend)
Date: Fri, 20 Sep 2024 21:21:43 +0200
Hi, please close as this is a duplicate of #73391 due to a
misconfiguration on my part. Thanks a lot and sorry about this.




Merged 73391 73392 73393. Request was from Adrien 'neox' Bourmault <neox <at> gnu.org> to control <at> debbugs.gnu.org. (Fri, 20 Sep 2024 20:03:01 GMT) Full text and rfc822 format available.

Merged 73391 73392 73393 73406. Request was from Adrien 'neox' Bourmault <neox <at> gnu.org> to control <at> debbugs.gnu.org. (Sat, 21 Sep 2024 08:07:02 GMT) Full text and rfc822 format available.

Disconnected #73406 from all other report(s). Request was from Adrien 'neox' Bourmault <neox <at> a-lec.org> to control <at> debbugs.gnu.org. (Sat, 21 Sep 2024 08:38:02 GMT) Full text and rfc822 format available.

Disconnected #73393 from all other report(s). Request was from Adrien 'neox' Bourmault <neox <at> a-lec.org> to control <at> debbugs.gnu.org. (Sat, 21 Sep 2024 08:38:02 GMT) Full text and rfc822 format available.

Merged 73391 73392 73393 73406. Request was from Adrien 'neox' Bourmault <neox <at> a-lec.org> to control <at> debbugs.gnu.org. (Sat, 21 Sep 2024 08:38:03 GMT) Full text and rfc822 format available.

Disconnected #73406 from all other report(s). Request was from Adrien 'neox' Bourmault <neox <at> a-lec.org> to control <at> debbugs.gnu.org. (Sat, 21 Sep 2024 17:00:02 GMT) Full text and rfc822 format available.

Disconnected #73393 from all other report(s). Request was from Adrien 'neox' Bourmault <neox <at> gnu.org> to control <at> debbugs.gnu.org. (Sat, 21 Sep 2024 21:46:02 GMT) Full text and rfc822 format available.

Merged 73391 73392 73393 73406. Request was from Adrien 'neox' Bourmault <neox <at> gnu.org> to control <at> debbugs.gnu.org. (Sat, 21 Sep 2024 22:58:02 GMT) Full text and rfc822 format available.

Changed bug title to '[PATCH v2 0/2] SANE: fix a locking bug for plustek backend' from '[PATCH 2/2] services: sane-service-type: create lock path for plustek backend' Request was from Adrien 'neox' Bourmault <neox <at> a-lec.org> to control <at> debbugs.gnu.org. (Sun, 22 Sep 2024 08:53:02 GMT) Full text and rfc822 format available.

Information forwarded to guix-patches <at> gnu.org:
bug#73393; Package guix-patches. (Sun, 22 Sep 2024 08:57:01 GMT) Full text and rfc822 format available.

Message #29 received at 73393 <at> debbugs.gnu.org (full text, mbox):

From: Adrien 'neox' Bourmault <neox <at> gnu.org>
To: 73393 <at> debbugs.gnu.org
Subject: [PATCH 2/2] services: sane-service-type: create lock path for
 plustek backend
Date: Sun, 22 Sep 2024 10:55:55 +0200
Sorry for all that noise, that's my first time using Debbugs and I got
a little lost here, trying to obtain a clear merge...




Information forwarded to guix-patches <at> gnu.org:
bug#73393; Package guix-patches. (Sun, 22 Sep 2024 09:09:01 GMT) Full text and rfc822 format available.

Message #32 received at 73393 <at> debbugs.gnu.org (full text, mbox):

From: Adrien 'neox' Bourmault <neox <at> gnu.org>
To: 73393 <at> debbugs.gnu.org
Cc: Adrien 'neox' Bourmault <neox <at> gnu.org>
Subject: [PATCH v2 0/2] SANE: fix a locking bug for plustek backend
Date: Sun, 22 Sep 2024 11:07:56 +0200
Hi.
While attempting to use a Canon LiDE 30 scanner, which is supported by SANE in
its current version, I noticed a malfunction with the plustek backend. No
application seemed capable of detecting the scanner, even though the
`sane-find-scanner` command indicated its presence, and the device IDs matched
those in the plustek backend configuration.

I investigated further using the following command:

  SANE_DEBUG_SANEI_USB=128 SANE_DEBUG_PLUSTEK=255 strace -fye open,openat scanimage -L

Here is a summary of the output:

  [23:00:21.688008] [plustek] usbDev_open(auto,) - 0x1c1e5630
  [pid 1209-20241] openat(AT_FDCWD</home/neox>, "/gnu/store/gzc1m4n79d1fgby8l58dsaq7nrzyhc14-sane-backend>
  [23:00:21.688089] [plustek] sanei_access_lock failed: 11
  [23:00:21.688131] [plustek] open failed: -1

It seems that the issue is the attempt to open a lock file in the store, which
is not possible due to the read-only nature of the file system.

To address this, there were two possible approaches: either move the lock file
to another location or disable the locking mechanism altogether.

After some research, I found that this bug has been resolved in both Debian [1]
and nixOS [2], and it has also been reported to the upstream project [3]. Debian
opted to disable the locking mechanism, while nixOS moved the lock file to a
runtime-generated location using systemd (by patching the install phase to
prevent the creation of the lock directory). However, since the locking
mechanism allows the use of multiple devices simultaneously[4], which can be
useful, nixOS's solution appears to be the better approach. I followed this
method, proposing to create the lock directory during the activation of the
sane service.

I tested these patch with my Canon LiDE 30 and have been able to (finally)
scan with it.

I realized I forgot to add my copyright notice in the files I
modified. This v2 fixes this.

[1] Debian bug report: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=973490
[2] nixOS bug report: https://github.com/NixOS/nixpkgs/issues/273280
[3] Upstream issue: https://gitlab.com/sane-project/backends/-/issues/363
[4] https://gitlab.com/sane-project/backends/-/issues/363#note_443142177

Adrien 'neox' Bourmault (2):
  gnu: sane-backends-minimal: fix lock path for plustek backend
  services: sane-service-type: create lock path for plustek backend

 gnu/packages/scanner.scm | 10 +++++++++-
 gnu/services/desktop.scm | 14 ++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)


base-commit: 1b6ce1796abdf497f61f426d61339318f4f4f23d
-- 
2.46.0





Information forwarded to guix-patches <at> gnu.org:
bug#73393; Package guix-patches. (Sun, 22 Sep 2024 09:09:02 GMT) Full text and rfc822 format available.

Message #35 received at 73393 <at> debbugs.gnu.org (full text, mbox):

From: Adrien 'neox' Bourmault <neox <at> gnu.org>
To: 73393 <at> debbugs.gnu.org
Cc: Adrien 'neox' Bourmault <neox <at> gnu.org>
Subject: [PATCH v2 1/2] gnu: sane-backends-minimal: fix lock path for plustek
 backend
Date: Sun, 22 Sep 2024 11:07:57 +0200
* gnu/packages/scanner.scm (sane-backends-minimal)
[arguments]<#:configure-flags>: add "--with-lockdir=/var/lock/sane"
[arguments]<#:phases>: add disable-lockdir-creation to prevent creating the
 lockpath during install

Change-Id: I338c16cd4c0bfa0d165c9906b0f1f87ab79a4f75
Signed-off-by: Adrien 'neox' Bourmault <neox <at> gnu.org>
---
 gnu/packages/scanner.scm | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/scanner.scm b/gnu/packages/scanner.scm
index a2faaa2728..a346f004ae 100644
--- a/gnu/packages/scanner.scm
+++ b/gnu/packages/scanner.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2017, 2019, 2020, 2022 Tobias Geerinckx-Rice <me <at> tobias.gr>
 ;;; Copyright © 2018 Efraim Flashner <efraim <at> flashner.co.il>
 ;;; Copyright © 2022 João Gabriel <joaog.bastos <at> protonmail.ch>
+;;; Copyright © 2024 Adrien Bourmault <neox <at> gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -136,7 +137,8 @@ (define-public sane-backends-minimal
     (inputs
      (list libusb))
     (arguments
-     `(#:phases
+     `(#:configure-flags '("--with-lockdir=/var/lock/sane") ;; Avoid errors with plustek
+       #:phases
        (modify-phases %standard-phases
          (add-before 'bootstrap 'zap-unnecessary-git-dependency
            (lambda _
@@ -145,6 +147,12 @@ (define-public sane-backends-minimal
                (("/bin/sh") (which "sh")))
              (with-output-to-file ".tarball-version"
                (lambda _ (format #t ,version)))))
+         (add-before 'configure 'disable-lockdir-creation
+           (lambda _
+             ;; Modify the Makefile.am to prevent the creation of the lock dir
+             (substitute* "backend/Makefile.am"
+               (("^install-lockpath:.*$")
+                "install-lockpath: # pass"))))
          (add-before 'configure 'disable-backends
            (lambda _
              (setenv "BACKENDS" " ")
-- 
2.46.0





Information forwarded to guix-patches <at> gnu.org:
bug#73393; Package guix-patches. (Sun, 22 Sep 2024 09:09:02 GMT) Full text and rfc822 format available.

Message #38 received at 73393 <at> debbugs.gnu.org (full text, mbox):

From: Adrien 'neox' Bourmault <neox <at> gnu.org>
To: 73393 <at> debbugs.gnu.org
Cc: Adrien 'neox' Bourmault <neox <at> gnu.org>
Subject: [PATCH v2 2/2] services: sane-service-type: create lock path for
 plustek backend
Date: Sun, 22 Sep 2024 11:07:58 +0200
* gnu/services/desktop.scm (sane-service-type): extend with an activation
 service to create the lockpath and give the right permissions

Change-Id: I187886d12b5f0b4fe21b03de178ea2187205387a
Signed-off-by: Adrien 'neox' Bourmault <neox <at> gnu.org>
---
 gnu/services/desktop.scm | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 274aeeef9b..500527cb50 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2021, 2022 muradm <mail <at> muradm.net>
 ;;; Copyright © 2023 Bruno Victal <mirai <at> makinata.eu>
 ;;; Copyright © 2023 Zheng Junjie <873216071 <at> qq.com>
+;;; Copyright © 2024 Adrien Bourmault <neox <at> gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1408,6 +1409,17 @@ (define %sane-accounts
   ;; The '60-libsane.rules' udev rules refers to the "scanner" group.
   (list (user-group (name "scanner") (system? #t))))
 
+(define %sane-activation
+  #~(begin
+      (use-modules (guix build utils))
+      (let ((lockpath "/var/lock/sane")
+            (gid (vector-ref (getgrnam "scanner") 2)))
+        ;; Create the lock directory at runtime and give right perms
+        (mkdir-p lockpath)
+        (chown lockpath -1 gid)
+        (chmod lockpath #o770))
+      #t))
+
 (define sane-service-type
   (service-type
    (name 'sane)
@@ -1418,6 +1430,8 @@ (define sane-service-type
    (default-value sane-backends-minimal)
    (extensions
     (list (service-extension udev-service-type list)
+          (service-extension activation-service-type
+                             (const %sane-activation))
           (service-extension account-service-type
                              (const %sane-accounts))))))
 
-- 
2.46.0





Information forwarded to guix-patches <at> gnu.org:
bug#73393; Package guix-patches. (Tue, 24 Sep 2024 18:54:01 GMT) Full text and rfc822 format available.

Message #41 received at 73393 <at> debbugs.gnu.org (full text, mbox):

From: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
To: Adrien 'neox' Bourmault <neox <at> gnu.org>, 73393 <at> debbugs.gnu.org
Subject: Re: [PATCH v2 0/2] SANE: fix a locking bug for plustek backend
Date: Tue, 24 Sep 2024 20:51:51 +0200
Hi Adrien,

Mumi appears to have this thing again where clicking on some button to
retrieve a message retrieves the wrong message.  Thus, I will answer to
this one while referencing the stuff in the patches.

Am Sonntag, dem 22.09.2024 um 11:07 +0200 schrieb Adrien 'neox'
Bourmault:
>   gnu: sane-backends-minimal: fix lock path for plustek backend
It would be nice if we had an actual patch here rather than a crude
substitute*.  I know it's a sed script on Nix, but that feels kinda
weird to say the least.

>   services: sane-service-type: create lock path for plustek backend
You should look into making this atomic.  It's currently three syscalls
in a row, which would make this vulnerable to race conditions. 
Consider passing a mode to mkdir.

Cheers




This bug report was last modified 268 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.