Subject: [PATCH 0/3] offload to Childhurd fails: setting synchronous mode: locking protocol

From: "Jan (janneke) Nieuwenhuizen" <[email-masked]>
Date: Wed, 1 Jul 2020 16:29:29 +0200

Hello Guix!

I configured my system with a childhurd service and added

--8<---------------cut here---------------start------------->8---
 (build-machine
  (name "childhurd")
  (system "i586-gnu")
  (host-key "ssh-ed25519 ... root@childhurd")
  (user "root")
  (private-key "/home/janneke/.ssh/id_rsa_childhurd"))
--8<---------------cut here---------------end--------------->8---

to /etc/guix/machines.  Sadly, running guix offload test gives

--8<---------------cut here---------------start------------->8---
$ guix offload test
guix offload: testing 1 build machines defined in '/etc/guix/machines.scm'...
guix offload: Guix is usable on 'childhurd' (test returned "/gnu/store/883yjkl46dxw9mzykykmbs0yzwyxm17z-test")
guix offload: 'childhurd' is running GNU Guile 3.0.4
guix offload: error: exception occurred on remote host 'localhost': (%exception #<inferior-object #<&store-protocol-error message: "setting synchronous mode: locking protocol" status: 1>>)
--8<---------------cut here---------------end--------------->8---

So, I looked into the Debian/Hurd sqlite3 package for inspiration and found
debian/patches/20-hurd-locking-style.patch...well, that should fix it, right?

Sadly, this patch seems to break sqlite3 altogether.

--8<---------------cut here---------------start------------->8---
$ guix offload test
guix offload: testing 1 build machines defined in '/etc/guix/machines.scm'...
Backtrace:
In ice-9/boot-9.scm:
  1736:10 11 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
In unknown file:
          10 (apply-smob/0 #<thunk 7f3c99b1f480>)
In ice-9/boot-9.scm:
    718:2  9 (call-with-prompt _ _ #<procedure default-prompt-handler (k proc)>)
In ice-9/eval.scm:
    619:8  8 (_ #(#(#<directory (guile-user) 7f3c99743f00>)))
In guix/ui.scm:
  1949:12  7 (run-guix-command _ . _)
    663:2  6 (call-with-error-handling _)
In ice-9/boot-9.scm:
  1736:10  5 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
  1731:15  4 (with-exception-handler #<procedure 7f3c9546d3f0 at ice-9/boot-9.scm:1815:7 (exn)> _ #:unwind? _ # …)
In guix/scripts/offload.scm:
    647:6  3 (check-machine-availability _ _)
In srfi/srfi-1.scm:
   650:11  2 (for-each #<procedure assert-node-has-guix (node name)> (#<<inferior> pid: pipe socket: #<input…>) …)
In guix/scripts/offload.scm:
    582:2  1 (assert-node-has-guix #<<inferior> pid: pipe socket: #<input-output: channel (open) 7f3c954a2500…> …)
In ice-9/boot-9.scm:
  1669:16  0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1669:16: In procedure raise-exception:
ERROR:
  1. &inferior-exception:
      arguments: (%exception #<inferior-object #<&store-protocol-error message: "setting synchronous mode: unable to open database file" status: 1>>)
      inferior: #<<inferior> pid: pipe socket: #<input-output: channel (open) 7f3c954a2500> close: #<procedure close-port (_)> version: (0 1 1) packages: #<promise #<procedure 7f3c954a8000 at guix/inferior.scm:161:32 ()>> table: #<promise #<procedure 7f3c954a56f0 at guix/inferior.scm:162:32 ()>>>
      stack: ((#f ("ice-9/boot-9.scm" 1763 13)) (raise-exception ("ice-9/boot-9.scm" 1666 16)) (raise-exception ("ice-9/boot-9.scm" 1668 16)) (#f ("guix/store.scm" 582 42)) (with-exception-handler ("ice-9/boot-9.scm" 1735 10)) (open-connection ("guix/store.scm" 545 2)) (call-with-store ("guix/store.scm" 626 15)) (#f (#f #f #f)) (#f ("guix/repl.scm" 92 21)) (with-exception-handler ("ice-9/boot-9.scm" 1735 10)) (with-exception-handler ("ice-9/boot-9.scm" 1730 15)) (#f ("guix/repl.scm" 119 7)))
--8<---------------cut here---------------end--------------->8---

Maybe we're missing some file_lock patch that Debian has?  Where to look,
glibc, hurd, ...?  Ideas?

Greetings,
Janneke

Jan (janneke) Nieuwenhuizen (3):
  gnu: Add sqlite/hurd with locking fix.
  gnu: guile-sqlite3: Use sqlite/hurd for locking on the Hurd.
  gnu: guix: Use sqlite/hurd for locking on the Hurd.

 gnu/local.mk                            |  1 +
 gnu/packages/guile.scm                  |  2 +-
 gnu/packages/package-management.scm     |  2 +-
 gnu/packages/patches/sqlite3-hurd.patch | 51 +++++++++++++++++++++++++
 gnu/packages/sqlite.scm                 |  9 +++++
 5 files changed, 63 insertions(+), 2 deletions(-)
 create mode 100644 gnu/packages/patches/sqlite3-hurd.patch

-- 
Jan Nieuwenhuizen <[email-masked]> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com