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

  • Open
  • quality assurance status badge
Details
2 participants
  • Adrien 'neox' Bourmault
  • neox
Owner
unassigned
Submitted by
neox
Severity
normal
Merged with
N
[PATCH 0/2] SANE: fix a locking bug for plustek backend
(address . guix-patches@gnu.org)(name . Adrien 'neox' Bourmault)(address . neox@gnu.org)
cover.1726827449.git.neox@gnu.org
From: Adrien 'neox' Bourmault <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-backends-1.3.1/var/lock/LCK..libusb:001:009", O_WRONLY|O_CREAT|O_EXCL, 0644) = -1 EROFS (Read-only file system)
[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.


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 | 9 ++++++++-
gnu/services/desktop.scm | 13 +++++++++++++
2 files changed, 21 insertions(+), 1 deletion(-)

base-commit: 1b6ce1796abdf497f61f426d61339318f4f4f23d
--
2.46.0
N
[PATCH 1/2] gnu: sane-backends-minimal: fix lock path for plustek backend
(address . 73391@debbugs.gnu.org)(name . Adrien 'neox' Bourmault)(address . neox@gnu.org)
5c51a9beba46c7f611fe90cc824f0fcbf2505600.1726827449.git.neox@gnu.org
From: Adrien 'neox' Bourmault <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 | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)

Toggle diff (29 lines)
diff --git a/gnu/packages/scanner.scm b/gnu/packages/scanner.scm
index a2faaa2728..a20d27ad2a 100644
--- a/gnu/packages/scanner.scm
+++ b/gnu/packages/scanner.scm
@@ -136,7 +136,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 +146,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
N
[PATCH 2/2] services: sane-service-type: create lock path for plustek backend
(address . 73391@debbugs.gnu.org)(name . Adrien 'neox' Bourmault)(address . neox@gnu.org)
3ad4ed8a692d86a9bef0b2ea56921ae2bf882957.1726827449.git.neox@gnu.org
From: Adrien 'neox' Bourmault <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 | 13 +++++++++++++
1 file changed, 13 insertions(+)

Toggle diff (33 lines)
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
A
A
Adrien 'neox' Bourmault wrote on 20 Sep 2024 22:02
(address . control@debbugs.gnu.org)
b649a628022ccddaa97d00ffd7e9a8a79dfecf1c.camel@gnu.org
user guix
merge 73391 73392 73393
quit
N
(address . 73391@debbugs.gnu.org)(name . Adrien 'neox' Bourmault)(address . neox@gnu.org)
cover.1726864525.git.neox@gnu.org
From: Adrien 'neox' Bourmault <neox@gnu.org>

Hi, I just 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
N
[PATCH v2 1/2] gnu: sane-backends-minimal: fix lock path for plustek backend
(address . 73391@debbugs.gnu.org)(name . Adrien 'neox' Bourmault)(address . neox@gnu.org)
bc2d915931bfd53462d5eeac7504b04b94ea2d02.1726864525.git.neox@gnu.org
From: Adrien 'neox' Bourmault <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
N
[PATCH v2 2/2] services: sane-service-type: create lock path for plustek backend
(address . 73391@debbugs.gnu.org)(name . Adrien 'neox' Bourmault)(address . neox@gnu.org)
8604617ae2896e2d73d24958aab7ee534c656dfa.1726864525.git.neox@gnu.org
From: Adrien 'neox' Bourmault <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 21 Sep 2024 23:42
(address . control@debbugs.gnu.org)
e3f95f2487dbb48ff89a8b69d16454d457de6ff4.camel@gnu.org
user guix
unmerge 73393
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
A
A
Adrien 'neox' Bourmault wrote on 22 Sep 2024 10:51
(address . control@debbugs.gnu.org)
7b4460cf8c1e715a60e513c256b2b9159662c3c4.camel@a-lec.org
user guix
retitle 73393 [PATCH v2 0/2] SANE: fix a locking bug for plustek backend
quit
?
Your comment

Commenting via the web interface is currently disabled.

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

To respond to this issue using the mumi CLI, first switch to it
mumi current 73391
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