[PATCH v2 0/2] SANE: fix a locking bug for plustek backend

  • Open
  • quality assurance status badge
Details
2 participants
  • Adrien 'neox' Bourmault
  • Adrien 'neox' Bourmault
Owner
unassigned
Submitted by
Adrien 'neox' Bourmault
Severity
normal
Merged with
A
A
Adrien 'neox' Bourmault wrote on 21 Sep 2024 10:01
(address . guix-patches@gnu.org)(name . Adrien 'neox' Bourmault)(address . neox@gnu.org)
cover.1726864525.git.neox@gnu.org
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.


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
A
A
Adrien 'neox' Bourmault wrote on 21 Sep 2024 10:03
[PATCH v2 1/2] gnu: sane-backends-minimal: fix lock path for plustek backend
(address . 73406@debbugs.gnu.org)(name . Adrien 'neox' Bourmault)(address . neox@gnu.org)
bc2d915931bfd53462d5eeac7504b04b94ea2d02.1726864525.git.neox@gnu.org
* 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@gnu.org>
---
gnu/packages/scanner.scm | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)

Toggle diff (37 lines)
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@tobias.gr>
;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2022 João Gabriel <joaog.bastos@protonmail.ch>
+;;; Copyright © 2024 Adrien Bourmault <neox@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
A
A
Adrien 'neox' Bourmault wrote on 21 Sep 2024 10:03
[PATCH v2 2/2] services: sane-service-type: create lock path for plustek backend
(address . 73406@debbugs.gnu.org)(name . Adrien 'neox' Bourmault)(address . neox@gnu.org)
8604617ae2896e2d73d24958aab7ee534c656dfa.1726864525.git.neox@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@gnu.org>
---
gnu/services/desktop.scm | 14 ++++++++++++++
1 file changed, 14 insertions(+)

Toggle diff (41 lines)
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@muradm.net>
;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2024 Adrien Bourmault <neox@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
A
A
Adrien 'neox' Bourmault wrote on 21 Sep 2024 10:06
(address . control@debbugs.gnu.org)
66ec29ed5356fb6d9c9d75789eb7875b67031b6f.camel@gnu.org
user guix
merge 73393 73406
quit
A
A
Adrien 'neox' Bourmault wrote on 21 Sep 2024 10:36
(address . control@debbugs.gnu.org)
1e13b19de7a66164e901100842803696de3cefc4.camel@a-lec.org
user guix
unmerge 73406
unmerge 73393
merge 73391 73392 73393 73406
quit
A
A
Adrien 'neox' Bourmault wrote on 21 Sep 2024 18:58
(address . control@debbugs.gnu.org)
97c2dacdb82edc04cae8a610b9a510d2cb977130.camel@a-lec.org
user guix
unmerge 73406
thanks
A
A
Adrien 'neox' Bourmault wrote on 22 Sep 2024 00:56
(address . control@debbugs.gnu.org)
7bc43cd9449d5b1b8f80c90fc4a4e54234364d5d.camel@gnu.org
user guix
merge 73391 73392 73393 73406
quit
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 73406@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 73406
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch