[PATCH]: Fix mysql activation, and add a basic test.

  • Done
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Christopher Baines
Owner
unassigned
Submitted by
Christopher Baines
Severity
normal
C
C
Christopher Baines wrote on 9 Sep 2017 16:39
(address . guix-patches@gnu.org)
20170909153905.087c013f@cbaines.net
Christopher Baines (2):
services: mysql: Fix missing modules on activation.
tests: databases: Add a simple test for MySQL.

gnu/services/databases.scm | 92 +++++++++++++++++++++++-----------------------
gnu/tests/databases.scm | 61 +++++++++++++++++++++++++++++-
2 files changed, 107 insertions(+), 46 deletions(-)
-----BEGIN PGP SIGNATURE-----

iQKTBAEBCgB9FiEEPonu50WOcg2XVOCyXiijOwuE9XcFAlmz/QlfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcACgkQXiijOwuE
9XcVxA/+KOGjKbnbDqZQeZws5PLs4uv88p8ZkdOV5E20GggCrXx9TeYkNmCV3R8M
OI7yZlwZWEVuYYVhuZa2qmtY70bA85H+adYneKSALWgcEIZJu0MzrDd9sI66oJ/w
fFkn4LEpat9KinsWVmrvC5XjHRlpO8trHEngCktX98+UwmXM9sKJC4nad1x4jLnI
VdEwzdrhM5SbTIC7iAlkBzSolJrT8OCTW1Lp0OsCeyhtu71ILSCz2V+8eHfFrITR
NRVYVkGDPP17F2b5P9E6lXBe5uOXmPxbE51nohcXsEL5BVJkcd2T7RibYCQv05s9
aZOg/8GGDi1zKM/shNxVus1uVifAohYsE+yLUyEVWF8tQn1Fi5qWxeU3O2ryQ44p
GOMWK/ywRO8ZN+WhIjnp6BG0OZlyvR/W1jroCcEWHME/MatMo66qeniEsY8Q8XWU
3WpIkXOEUUXKF3quSFu516S4sWI0Xn67bWzKo6VeXHhHepz/yWrkvlE8hQx2YiVz
sz7vSwp7h7rMe0Py9ddY474R6vmVUQ4XmRah5n3AFDL5SHtB66LQXkA60v/h+tJk
/nf2BMnn1ircSdpAvMhQHJv3l0ZN0qLzvFIGgmoLENReSCRMw+LQxslz+/sPiPMY
espK3M+RFYFM+e1/TE+RKLMh5N/9VBRkemgLQJOOcymfKaQw0jo=
=U+rK
-----END PGP SIGNATURE-----


C
C
Christopher Baines wrote on 9 Sep 2017 16:53
[PATCH 2/2] tests: databases: Add a simple test for MySQL.
(address . 28399@debbugs.gnu.org)
20170909145343.14851-2-mail@cbaines.net
Previously, the activation phase for this service caused some systems using it
to not boot. This test checks that it's possible to boot a system using it,
and at least start the service.

* gnu/tests/databases.scm (%mysql-os, %test-mysql): New variables.
(run-mysql-test): New procedure.
---
gnu/tests/databases.scm | 61 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 60 insertions(+), 1 deletion(-)

Toggle diff (78 lines)
diff --git a/gnu/tests/databases.scm b/gnu/tests/databases.scm
index 9d9a75374..6791c561a 100644
--- a/gnu/tests/databases.scm
+++ b/gnu/tests/databases.scm
@@ -27,7 +27,8 @@
#:use-module (gnu services networking)
#:use-module (guix gexp)
#:use-module (guix store)
- #:export (%test-memcached))
+ #:export (%test-memcached
+ %test-mysql))
(define %memcached-os
(simple-operating-system
@@ -121,3 +122,61 @@
(name "memcached")
(description "Connect to a running MEMCACHED server.")
(value (run-memcached-test))))
+
+
+;;;
+;;; The MySQL service.
+;;;
+
+(define %mysql-os
+ (simple-operating-system
+ (mysql-service)))
+
+(define* (run-mysql-test)
+ "Run tests in %MYSQL-OS."
+ (define os
+ (marionette-operating-system
+ %mysql-os
+ #:imported-modules '((gnu services herd)
+ (guix combinators))))
+
+ (define vm
+ (virtual-machine
+ (operating-system os)
+ (memory-size 512)))
+
+ (define test
+ (with-imported-modules '((gnu build marionette))
+ #~(begin
+ (use-modules (srfi srfi-11) (srfi srfi-64)
+ (gnu build marionette))
+
+ (define marionette
+ (make-marionette (list #$vm)))
+
+ (mkdir #$output)
+ (chdir #$output)
+
+ (test-begin "mysql")
+
+ (test-assert "service running"
+ (marionette-eval
+ '(begin
+ (use-modules (gnu services herd))
+ (match (start-service 'mysql)
+ (#f #f)
+ (('service response-parts ...)
+ (match (assq-ref response-parts 'running)
+ ((pid) (number? pid))))))
+ marionette))
+
+ (test-end)
+ (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+
+ (gexp->derivation "mysql-test" test))
+
+(define %test-mysql
+ (system-test
+ (name "mysql")
+ (description "Start the MySQL service.")
+ (value (run-mysql-test))))
--
2.14.1
C
C
Christopher Baines wrote on 9 Sep 2017 16:53
[PATCH 1/2] services: mysql: Fix missing modules on activation.
(address . 28399@debbugs.gnu.org)
20170909145343.14851-1-mail@cbaines.net
Some systems using the MySQL service would fail to boot, giving the error:

ERROR: no code for module (ice-9 popen)

* gnu/services/databases.scm (%mysql-activation): Wrap the gexp using
with-imported-modules, to ensure that the required modules are available.
---
gnu/services/databases.scm | 92 +++++++++++++++++++++++-----------------------
1 file changed, 47 insertions(+), 45 deletions(-)

Toggle diff (110 lines)
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index de1f6b841..6b4e6e706 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -297,56 +297,58 @@ port=" (number->string port) "
"Return an activation gexp for the MySQL or MariaDB database server."
(let ((mysql (mysql-configuration-mysql config))
(my.cnf (mysql-configuration-file config)))
- #~(begin
- (use-modules (ice-9 popen)
- (guix build utils))
- (let* ((mysqld (string-append #$mysql "/bin/mysqld"))
- (user (getpwnam "mysql"))
- (uid (passwd:uid user))
- (gid (passwd:gid user))
- (datadir "/var/lib/mysql")
- (rundir "/run/mysqld"))
- (mkdir-p datadir)
- (chown datadir uid gid)
- (mkdir-p rundir)
- (chown rundir uid gid)
- ;; Initialize the database when it doesn't exist.
- (when (not (file-exists? (string-append datadir "/mysql")))
- (if (string-prefix? "mysql-" (strip-store-file-name #$mysql))
- ;; For MySQL.
- (system* mysqld
- (string-append "--defaults-file=" #$my.cnf)
- "--initialize"
- "--user=mysql")
- ;; For MariaDB.
- ;; XXX: The 'mysql_install_db' script doesn't work directly
- ;; due to missing 'mkdir' in PATH.
- (let ((p (open-pipe* OPEN_WRITE mysqld
- (string-append
- "--defaults-file=" #$my.cnf)
- "--bootstrap"
- "--user=mysql")))
- ;; Create the system database, as does by 'mysql_install_db'.
- (display "create database mysql;\n" p)
- (display "use mysql;\n" p)
- (for-each
- (lambda (sql)
- (call-with-input-file
- (string-append #$mysql "/share/mysql/" sql)
- (lambda (in) (dump-port in p))))
- '("mysql_system_tables.sql"
- "mysql_performance_tables.sql"
- "mysql_system_tables_data.sql"
- "fill_help_tables.sql"))
- ;; Remove the anonymous user and disable root access from
- ;; remote machines, as does by 'mysql_secure_installation'.
- (display "
+ (with-imported-modules '((ice-9 popen)
+ (guix build utils))
+ #~(begin
+ (use-modules (ice-9 popen)
+ (guix build utils))
+ (let* ((mysqld (string-append #$mysql "/bin/mysqld"))
+ (user (getpwnam "mysql"))
+ (uid (passwd:uid user))
+ (gid (passwd:gid user))
+ (datadir "/var/lib/mysql")
+ (rundir "/run/mysqld"))
+ (mkdir-p datadir)
+ (chown datadir uid gid)
+ (mkdir-p rundir)
+ (chown rundir uid gid)
+ ;; Initialize the database when it doesn't exist.
+ (when (not (file-exists? (string-append datadir "/mysql")))
+ (if (string-prefix? "mysql-" (strip-store-file-name #$mysql))
+ ;; For MySQL.
+ (system* mysqld
+ (string-append "--defaults-file=" #$my.cnf)
+ "--initialize"
+ "--user=mysql")
+ ;; For MariaDB.
+ ;; XXX: The 'mysql_install_db' script doesn't work directly
+ ;; due to missing 'mkdir' in PATH.
+ (let ((p (open-pipe* OPEN_WRITE mysqld
+ (string-append
+ "--defaults-file=" #$my.cnf)
+ "--bootstrap"
+ "--user=mysql")))
+ ;; Create the system database, as does by 'mysql_install_db'.
+ (display "create database mysql;\n" p)
+ (display "use mysql;\n" p)
+ (for-each
+ (lambda (sql)
+ (call-with-input-file
+ (string-append #$mysql "/share/mysql/" sql)
+ (lambda (in) (dump-port in p))))
+ '("mysql_system_tables.sql"
+ "mysql_performance_tables.sql"
+ "mysql_system_tables_data.sql"
+ "fill_help_tables.sql"))
+ ;; Remove the anonymous user and disable root access from
+ ;; remote machines, as does by 'mysql_secure_installation'.
+ (display "
DELETE FROM user WHERE User='';
DELETE FROM user WHERE User='root' AND
Host NOT IN ('localhost', '127.0.0.1', '::1');
FLUSH PRIVILEGES;
" p)
- (close-pipe p))))))))
+ (close-pipe p)))))))))
(define (mysql-shepherd-service config)
(list (shepherd-service
--
2.14.1
L
L
Ludovic Courtès wrote on 11 Sep 2017 09:50
(name . Christopher Baines)(address . mail@cbaines.net)(address . 28399@debbugs.gnu.org)
87shftd67d.fsf@gnu.org
Hi Chris,

Christopher Baines <mail@cbaines.net> skribis:

Toggle quote (7 lines)
> Some systems using the MySQL service would fail to boot, giving the error:
>
> ERROR: no code for module (ice-9 popen)
>
> * gnu/services/databases.scm (%mysql-activation): Wrap the gexp using
> with-imported-modules, to ensure that the required modules are available.

[...]

Toggle quote (3 lines)
> + (with-imported-modules '((ice-9 popen)
> + (guix build utils))

The effect of this would be to import (ice-9 popen) from the host Guile
in the build side. Thus someone running Guile 2.2.2 on the host would
get a slightly different file from someone running Guile 2.0.14, and so
on, which hinders reproducibility.

The ‘use-modules’ form should be enough. Does the test you sent
reproduce the original problem?

Thanks,
Ludo’.
C
C
Christopher Baines wrote on 12 Sep 2017 20:48
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 28399@debbugs.gnu.org)
20170912194825.70eb4436@cbaines.net
On Mon, 11 Sep 2017 09:50:46 +0200
ludo@gnu.org (Ludovic Courtès) wrote:

Toggle quote (23 lines)
> Hi Chris,
>
> Christopher Baines <mail@cbaines.net> skribis:
>
> > Some systems using the MySQL service would fail to boot, giving the
> > error:
> >
> > ERROR: no code for module (ice-9 popen)
> >
> > * gnu/services/databases.scm (%mysql-activation): Wrap the gexp
> > using with-imported-modules, to ensure that the required modules
> > are available.
>
> [...]
>
> > + (with-imported-modules '((ice-9 popen)
> > + (guix build utils))
>
> The effect of this would be to import (ice-9 popen) from the host
> Guile in the build side. Thus someone running Guile 2.2.2 on the
> host would get a slightly different file from someone running Guile
> 2.0.14, and so on, which hinders reproducibility.

That makes sense.

Toggle quote (3 lines)
> The ‘use-modules’ form should be enough. Does the test you sent
> reproduce the original problem?

It does for me. If you just revert the commit adding in the
with-imported-modules bit, running the mysql system test then fails:

ERROR: In procedure scm-error:
ERROR: no code for module (ice-9 popen)
-----BEGIN PGP SIGNATURE-----

iQKTBAEBCgB9FiEEPonu50WOcg2XVOCyXiijOwuE9XcFAlm4K/lfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcACgkQXiijOwuE
9XdCaw/+Irg6VIE57/ojKDiBNdxlNBTEXnCqL0qlU7ngWCdZ5t4Y5wGqTmZZpOO8
x4wzvGMq5aaN5zGfDo1+8xJfIdlyMVT+fWav7iebCs7gqqnFLHaexWdxdj1y46tr
VQBoSCgbEQ+leOEXqNxhwDYLHcSt1cMQJFW0negPdqBUqFryi5uJZSc1t/ILV88T
MRu9h0gKpiwcH2it8K5v6rSEFs+ua6t/51jn6NQP64GdMhIHMHDmrGw2lbTc4LHp
a5PYjHc1uAX/L3joUp6O03AiouSffti4sGmV5jvx6YVNS0UCAztJnEL/eW2H0AHn
wXSKieM+vTQU7hzLZTnUKQlsxN/6VErYRVyMvMY6kn9qy9FbyRO4vhgV2VO6NjyE
j3/xBpvsS5yE5IXmOdk59BqpyxdWW4BYUh+XnkkLx5wFu0muE/yhuUkH7zacub5p
B905iMNmTbWCYrXAflPti93nIXH55MYNZx5n+rEeWByn1vAYx+s4eaowq434835Y
DNrHbo6Di3sB+3n3Sz6j7l59DcJ+qm2OL5zL1Einvjks+tSXg86Cgdnrs2gF5SXD
IpLF7u6/x8bUxL/Glt5yJiUeIyc5VuzG/+qN1YPS3ZicFFpTvSoRww/mGXzfFLiy
qmvZpr3YzXjF6sRQNGReWK0AAzUGY/m20EK7ncdYIjWXYxEt0/4=
=0mFO
-----END PGP SIGNATURE-----


L
L
Ludovic Courtès wrote on 16 Sep 2017 00:02
(name . Christopher Baines)(address . mail@cbaines.net)(address . 28399@debbugs.gnu.org)
87377nlixr.fsf@gnu.org
Heya,

Christopher Baines <mail@cbaines.net> skribis:

Toggle quote (12 lines)
> On Mon, 11 Sep 2017 09:50:46 +0200
> ludo@gnu.org (Ludovic Courtès) wrote:
>
>> Hi Chris,
>>
>> Christopher Baines <mail@cbaines.net> skribis:
>>
>> > Some systems using the MySQL service would fail to boot, giving the
>> > error:
>> >
>> > ERROR: no code for module (ice-9 popen)

[...]

Toggle quote (9 lines)
>> The ‘use-modules’ form should be enough. Does the test you sent
>> reproduce the original problem?
>
> It does for me. If you just revert the commit adding in the
> with-imported-modules bit, running the mysql system test then fails:
>
> ERROR: In procedure scm-error:
> ERROR: no code for module (ice-9 popen)

The activation script is run by the “boot” script before it spawns
shepherd. The boot script runs over the initrd’s Guile, which is
statically linked.

However, (ice-9 popen) starts by dynamically loading libguile and
calling a function therein:

(eval-when (expand load eval)
(load-extension (string-append "libguile-" (effective-version))
"scm_init_popen"))

Dynamic loading is not supposed to work in the statically-linked Guile,
but apparently it does work sometimes:

Toggle snippet (18 lines)
$ sudo chroot /gnu/store/3ir873f4dsdl3aaj48iqykn6437ilk0p-guile-static-stripped-2.2.2 /bin/guile
guile: warning: failed to install locale
GC Warning: pthread_getattr_np or pthread_attr_getstack failed for main thread
GC Warning: Couldn't read /proc/stat
warning: failed to install locale: Invalid argument
GNU Guile 2.2.2
Copyright (C) 1995-2017 Free Software Foundation, Inc.

Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.

Enter `,help' for help.
scheme@(guile-user)> ,use(ice-9 popen)
scheme@(guile-user)> open-pipe*
$1 = #<procedure open-pipe* (mode command . args)>

Perhaps it’s due to the libtool/ltdl preload feature.

What’s more puzzling though, is that it works in some cases (like above)
and not in others (in the test VM).

Needs more thought…

Ludo’.
C
C
Christopher Baines wrote on 16 Sep 2017 12:38
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 28399@debbugs.gnu.org)
20170916113811.3c7d1b33@cbaines.net
On Sat, 16 Sep 2017 00:02:08 +0200
ludo@gnu.org (Ludovic Courtès) wrote:

Toggle quote (67 lines)
> Heya,
>
> Christopher Baines <mail@cbaines.net> skribis:
>
> > On Mon, 11 Sep 2017 09:50:46 +0200
> > ludo@gnu.org (Ludovic Courtès) wrote:
> >
> >> Hi Chris,
> >>
> >> Christopher Baines <mail@cbaines.net> skribis:
> >>
> >> > Some systems using the MySQL service would fail to boot, giving
> >> > the error:
> >> >
> >> > ERROR: no code for module (ice-9 popen)
>
> [...]
>
> >> The ‘use-modules’ form should be enough. Does the test you sent
> >> reproduce the original problem?
> >
> > It does for me. If you just revert the commit adding in the
> > with-imported-modules bit, running the mysql system test then fails:
> >
> > ERROR: In procedure scm-error:
> > ERROR: no code for module (ice-9 popen)
>
> The activation script is run by the “boot” script before it spawns
> shepherd. The boot script runs over the initrd’s Guile, which is
> statically linked.
>
> However, (ice-9 popen) starts by dynamically loading libguile and
> calling a function therein:
>
> (eval-when (expand load eval)
> (load-extension (string-append "libguile-" (effective-version))
> "scm_init_popen"))
>
> Dynamic loading is not supposed to work in the statically-linked
> Guile, but apparently it does work sometimes:
>
> --8<---------------cut here---------------start------------->8---
> $ sudo
> chroot /gnu/store/3ir873f4dsdl3aaj48iqykn6437ilk0p-guile-static-stripped-2.2.2 /bin/guile
> guile: warning: failed to install locale GC Warning:
> pthread_getattr_np or pthread_attr_getstack failed for main thread GC
> Warning: Couldn't read /proc/stat warning: failed to install locale:
> Invalid argument GNU Guile 2.2.2
> Copyright (C) 1995-2017 Free Software Foundation, Inc.
>
> Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
> This program is free software, and you are welcome to redistribute it
> under certain conditions; type `,show c' for details.
>
> Enter `,help' for help.
> scheme@(guile-user)> ,use(ice-9 popen)
> scheme@(guile-user)> open-pipe*
> $1 = #<procedure open-pipe* (mode command . args)>
> --8<---------------cut here---------------end--------------->8---
>
> Perhaps it’s due to the libtool/ltdl preload feature.
>
> What’s more puzzling though, is that it works in some cases (like
> above) and not in others (in the test VM).
>
> Needs more thought…

Interesting, thanks for looking in to this Ludo. I've just thought that
this could be the cause of my problems in booting one of my GuixSD
machines, as I am using the mysql service (with MariaDB).

When you say dynamic loading is supposed not to work with a statically
linked guile, does this mean that activation scripts should avoid using
(ice-9 popen)? Or, given that it works some of the time, it could be
made to work reliably...?
-----BEGIN PGP SIGNATURE-----

iQKTBAEBCgB9FiEEPonu50WOcg2XVOCyXiijOwuE9XcFAlm8/xRfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcACgkQXiijOwuE
9XddVg/+Oj5cZHL7s/lXKs6V/IP2RJxCISZAOQKKPbCJhHw1T7QGFlHzoRle5uJ3
3YUlLkV+I/gGsCshPsl5pm3s0x4kXEJSGCE2Va8MZe83D3zve3WJaUKzpY2+zpeM
wKk+Y2MDnq1qGNiF+AYgyxZ4jO4vn3AO0JEtEtTot2NfTLFzh3+Gx7mtesf7/BKl
KKD5ZgZcjko8WOmbwUCn8Wtl6UAwsJET3yFhNRUqjSAcRvYgChHoN8eLw8Y5FlVh
P2UabIpYKOGh/eMfoJd4b6X6HcZAJWGlT6ktGWB1VdZSxTslkSvPHUN/cuBlxXhL
azu7kiL1q6t7+ehQOZMhKNW6C56aeSrRQ44g43NpKQBRBCvX/9hBAD1Inw7a1RVu
I52f+ONZnIZt51DEDj3wjBBKR+HRzTM6Sd+gUDNFFuwPldArE9/kHiUpRgoAxTYK
p4wiwI8Snasujuy72KrAVTOBMUInYGWHLH5lgtFOMShyNQj8n7z/Mhz3712aMFf9
yqI9GjjC7+SCZQHHUjsgSU4LZS/5ogjeUHpCuFptrCgP5n4L5023zlPhR0/4AS+3
BiV+jg+0BnXTb42u9lU7oXUrOPNB8pl/o9fOmcI5KtOO3f+RmANJxUmbo/ckPIty
//lhOe2OfrKAX6pYsW96zxebKuvx7UOLdIzzX+EDxtcnCdReTuk=
=4qOt
-----END PGP SIGNATURE-----


L
L
Ludovic Courtès wrote on 20 Sep 2017 11:21
(name . Christopher Baines)(address . mail@cbaines.net)(address . 28399@debbugs.gnu.org)
87tvzxu3m8.fsf@gnu.org
Hi Chris,

Christopher Baines <mail@cbaines.net> skribis:

Toggle quote (3 lines)
> On Sat, 16 Sep 2017 00:02:08 +0200
> ludo@gnu.org (Ludovic Courtès) wrote:

[...]

Toggle quote (16 lines)
>> Perhaps it’s due to the libtool/ltdl preload feature.
>>
>> What’s more puzzling though, is that it works in some cases (like
>> above) and not in others (in the test VM).
>>
>> Needs more thought…
>
> Interesting, thanks for looking in to this Ludo. I've just thought that
> this could be the cause of my problems in booting one of my GuixSD
> machines, as I am using the mysql service (with MariaDB).
>
> When you say dynamic loading is supposed not to work with a statically
> linked guile, does this mean that activation scripts should avoid using
> (ice-9 popen)? Or, given that it works some of the time, it could be
> made to work reliably...?

No I was completely on the wrong track (libguile/extensions.c, which
implements ‘load-extension’, has a mechanism to load pre-registered
extensions without going through ‘dlopen’.)

The problem is simpler: the ‘guile-static-stripped’ that’s on the store
in the initrd is not necessarily in the store on the real root file
system. Thus, once we’ve switched roots, we look for “ice-9/popen.scm”
in a load path that’s no longer valid.

I debugged this with:
Toggle diff (19 lines)
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index de1f6b841..13c235059 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -298,6 +298,14 @@ port=" (number->string port) "
(let ((mysql (mysql-configuration-mysql config))
(my.cnf (mysql-configuration-file config)))
#~(begin
+ (eval-when (expand load eval)
+ (use-modules (ice-9 ftw))
+ (setvbuf (current-output-port) _IONBF)
+ (pk %load-path (search-path %load-path "ice-9/popen.scm"))
+ (let ((dir (car (last-pair %load-path))))
+ (pk dir 'exits? (file-exists? dir)))
+ (pk 'popen (resolve-module '(ice-9 popen) #:ensure #f))
+ (pk 'scan (scandir "/gnu/store")))
(use-modules (ice-9 popen)
(guix build utils))
(let* ((mysqld (string-append #$mysql "/bin/mysqld"))
… and then run your test.

It shows this:

Toggle snippet (18 lines)
[…]

adding user 'guixbuilder09'...
adding user 'guixbuilder10'...
adding user 'mysql'...
registering public key '/gnu/store/zh0lb2g15hirq7zw2477w7s5ww7dxkv0-guix-0.13.0-6.a9468b4/share/guix/hydra.gnu.org.pub'...

;;; (("/gnu/store/dsbc8lh9zav2ghb7gi1zm608igbgg1jv-module-import" "/gnu/store/dsbc8lh9zav2ghb7gi1zm608igbgg1jv-module-import" "/gnu/store/m843zdvsv2p3glz91y8icv3qwkr9mnzs-module-import" "/gnu/store/m843zdvsv2p3glz91y8icv3qwkr9mnzs-module-import" "/gnu/store/dr6706rm053d9b6h4rhi29l2ipxcd9jf-module-import" "/gnu/store/dr6706rm053d9b6h4rhi29l2ipxcd9jf-module-import" "/gnu/store/9whwwppmb2sjfsy0967s627bzgdfl8bc-guile-static-stripped-2.2.2/share/guile/2.2") #f)

;;; ("/gnu/store/9whwwppmb2sjfsy0967s627bzgdfl8bc-guile-static-stripped-2.2.2/share/guile/2.2" exits? #f)

;;; (popen #f)

;;; (scan ("." ".." "028jn2qq6b0a5wgfs84jfmkmhpbl015r-module-import-compiled" "03zy9bapqgv9y0q82c3szmzmhghj4h6b-virglrenderer-0.6.0" "09j7scnl3hahcmql986fsjpzj6gqsmzv-ncurses-6.0" "0b83kwl6lbqz9r4kfsblcil25fkmxzd1-activate-service" "0f76ak4jn36qs7syhfaw5ag9958yabzh-libatomic-ops-7.4.4" "0j18kgj0bwlfqnnj78vjib0ax66ndb50-shepherd-syslogd.scm" "0p4gxh2xiz31v2zx8mg43nv2djjyfwmn-libpciaccess-0.13.5" "0s5manjvfa0gmsv2r71rchky7ab70g1d-icu4c-58.2" "0yfji7ibkkz7yh7vfgbm2fvic7lxg71l-groff-1.22.3" "0zqip50gq1ch8hdvlixi9mpkpslvgh7r-shepherd-console-font-tty1.scm" "1287jbyyjydgypzs3r85q9hj6sahq2wx-login.defs" "1542yabm3kaf0ybrn77r5z31icxw7zq2-shepherd-file-system--sys-fs-cgroup-hugetlb.scm" "1dbpiip53l3zmwdcgbpz5cjhgfijl4jn-shepherd-file-system--sys-fs-cgroup.scm" "1dminyi7iq203492l4p8dz0wwagkpsb4-llvm-3.8.1" "1glb29skkvp128a0yizqv1kyillk9a7n-lsof-4.89" "1jcq4fc07bngc5q1cy44j0glv1vrjz52-libffi-3.2.1" "1jp44pfmqcj3zycclvmmva3xcwinyg7l-freetype-2.8" "1kx3sq1lfcz37r6w08bdii5fkw20sk35-shepherd-root-file-system.scm" "1mw2mir3whl20hcx366rk3rcn8ykvdaf-shepherd-term-tty4.scm" "1q0r9idvqjw9s4b6hxa8jklxc3ngy5lq-system" "1skx99scjpm591ixmhpnw17zxcllpqm9-utils.scm" "1xc97akbdcisrid2n8djpkn09f8bkl5f-libxdmcp-1.1.2" "261xd9zwg479rn7yha0k2i97p63flhfg-activate-service" "27hw80d0nn2a5p56vk91qn6jvn036dla-libxshmfence-1.2" "2ayx2b08id7xid0s4ykhfvr1irl2qi7l-elf.scm" "2c37li6qgq031dq4agg9zbb68iw39igx-bdb-5.3.28" "2n80sdqh39y3sgrfyd97ag0sjx5bx9dl-lz4-1.8.0" "33ln3zh2cwchgbf4xv6j9qlxari3w74w-shepherd-guix-daemon.scm" "35rydx7qm4jn3jx6qbj92lvc4p8g3cn4-activation.scm" "36m5h559ikrnp96c6r2zk2p8cn07xjwb-libssh2-1.8.0" "3amb8hw38k2jv604pb87am8v9r17fczi-pcre-8.41" "3b5acw40ls4xvs54ia9cmp0fjx9vryq8-libepoxy-1.4.1" "3c0l9d5fg73lpvrc8d29k5irpwp215dh-activate-service" "3qw66pxqm316r9spl7w1wxbj2q0wa8m1-shishi-1.0.2" "3s6vjw0979hn5i4v4bqa8ybdmb0kn00l-flac-1.3.2" "3wdxwi446k6bbx3r4kfgn2hh754n7ab7-grub.cfg" "3x53yv4v144c9xp02rs64z7j597kkqax-gcc-5.4.0-lib" "3xjvwgzm6bhqc0rn3nwbdczjh4383mpk-libnftnl-1.0.7" "3z94sy8lig6zbwna4j8plmar70jmqyxn-login" "42d5rjrdkln6nwvzwdc8dyd4w6iy3n5j-coreutils-8.27" "47jgabf5wx296alb06pb5iig6cqbmx0v-gdbm-1.13" "4i4bx0434kbpcl9xl5a2xfl2rx52hdzx-linux-modules.scm" "4iqyh8xqjxazza3lx2iz5v39ipzifsfj-gzip-1.8" "4wm6z6dh5gkqbvxj7995lvr2bjwhqq25-libxxf86vm-1.1.4" "4wngzd4rvm3lcchmigajw9jhi2vrgdf0-passwd" "577gkxcv1va0jc33vs0yv9nl3lyg0410-parameters" "57dcsqa95nqjyak02pzpk3lf64j1jnnw-qemu-image" "5889hfnp2vpsnyfwqvknx3649vwx2m7b-pulseaudio-10.0" "5f4vz29llmqa1i9wl02pkilws6dbr2l6-qemu-2.10.0" "5jl21csvr3jmsa4a7d08sqa2waks3f09-gmp-6.1.2" "5kglffwm1gsjhsy5wn7cv0kgmj7asif7-e2fsprogs-1.43.5" "5khzrsqs0bgr2hyrl3yvamwk745wmkql-shepherd-term-tty2.scm" "5kydkrla0c58kpy44ibzmcq0nhpnk8k6-linux-pam-1.3.0" "5lrk6d5cjsv2s29vfji6j59gyf18rb5m-acl-2.2.52" "5mykz9b6whh8pjrpb5yfz6cyip2iaxzg-shepherd-console-font-tty4.scm" "5rhk61dq276h7cdyn6ks112iahn4f8m8-libogg-1.3.2" "5s19lin8dm65aygm85s8cwqsq41hym6d-libxdamage-1.1.4" "5sv5zy2kgg6iaqyv8zw49w4243j0xkd0-gcc-5.4.0" "5z6zqh3cdrix3hq2qxrnh4v59vz2hssc-groupdel" "5zcspv2mjn85nzhk6my4af067nm4vs8g-sudo" "62b4225h7vkpy0xzqlpyp1kx5ik3kiy7-expat-2.2.2" "649641qx9p4y0vz77ss1w8dd50l2yw2b-module-import" "66dp9mxn43jkhhrpcy6v5cdqibbl4bjc-gnutls-3.5.13" "6hicns85s8ddp0y539wdspwx22ac2kmv-bzip2-1.0.6" "72wjwil96zh5f370gnqq7hg2biavbwdx-shepherd-loopback.scm" "73n8primzbqhpzirnmbc2qwzg7f07bz7-psmisc-22.21" "75r85h8krngg7nydp76njyihq774m0dz-environment" "795majdgan135s40l10wbdjs8lqmpifs-useradd" "7gsvp98rssbwy7l4c2gs40bblfvr1yyl-uuid.scm" "7ljjhfz6p14xlnwnmzmg6hi01wfvz9vb-cyrus-sasl-2.1.26" "7nywh80c5mgy80d08x9y6w48ipngn47s-module-import" "7r3ps2rv079kqkh8i8ddgcj29wqzbck1-module-import" "7sq353nilxwwnk983xz38457bp3sv633-libaio-0.3.110" "7v2w3506q0gf96rsf6wf3gdr2iv5frmm-libgpg-error-1.27" "7v8369lgnqvpphcw06hg59hb8hxmkr8x-sed-4.4" "7zbscp5r0djsalcnvfrm7g0mp70mhrkd-diffutils-3.6" "85n2gzncy1dl6cbnky79nih4qhcwibds-libxfixes-5.0.3" "8ba1dina18nqzbx1p4x9i8i88nh1y238-libjpeg-turbo-1.5.2" "8bizb3mkkhh2zgzd59jp9qm1r71fb7ar-libgit2-0.26.0" "8brbpj0jdy3g0za14q18s2cj3w360yxk-mingetty-1.08" "8h3mq2d4s483gsykwgdw0iw2mfngk1ki-guile-ssh-0.11.2" "8k6f3wjk1f3qcigrrvhwmhy0026j0y06-opus-1.2.1" "8v2mhpzfbp88zvb5zgikbz6lbi229y64-shepherd-udev.scm" "8vr17x1cjznibkw4yrgv6gp948ya8qqs-module-import-compiled" "92a6ykqvxzzjzbjb2y4ggsiwnz25m57a-alsa-utils-1.1.4" "965dw3smmsvj6jyfxrkapp0gn9jh9djn-libunistring-0.9.7" "9b0nh58q1dwxli80xj15gv2037az96xw-patch-2.7.5" "9blidf28xz0a0glnv6a4xcw6nxadg427-libgc-7.6.0" "9fcql0sfia5cnfqxk73vdxd0lb87g2b3-wireless-tools-30.pre9" "9kq6xk66zzwdq12kaj7kl96zgy8g50m5-file-systems.scm" "9m4vk172625vlrj62id8a40brbm9prrd-info-reader-6.3" "9pq16kfcldqqcbd58mmfp37g3awhg4sd-gawk-4.1.4" "9s6bag7qk4k2jzx9q1pfrhqrgqrji7x9-shepherd-term-tty1.scm" "9x9229j1sramg64qppmn87m2vy2jq4im-glib-2.52.2" "9xl0lbprkkn4k3b8v5bcz6sq125dlwb5-bashrc" "a1h9c5rxw5r580z4xrshf834dg4c1fh8-activate" "a2n7lmcnkiwb8ix9d9q74a1866dv0a1w-profile" "a8914da78vi7glxyinpap2z7xlr32pli-net-tools-1.60-0.479bb4a" "af581ygb1d9bvpmfmlpwzlmsb1xjgycw-herd.scm" "agy6mpi2ay6rx0sy3plia9xwh7sj1zsl-module-import-compiled" "aj23g4a2kk4nj5rbx0nixybxp9gx5zr5-shepherd-console-font-tty3.scm" "akc3nsnksgv6256jm1ariljb1c7zh8x2-libgc-7.6.0" "b4a7g2xm26yr9pha9k8rj9bmvk4dz9mq-libssh-0.7.5" "b7y66db86k57vbb03nr4bfn9svmks4gf-bash-4.4.12" "b9ww6qv1ii9v6n45kin7543vkf6jfnd3-libpng-1.6.29" "bcmf06k2n1pfwqkzpclvvc3w9jdfi71a-guile-json-0.6.0" "bgv2yzvdvmxjmsvmg5fxaw1id2r2c3sr-libgit2-0.26.0" "bh1f92ij80j4fd4jzlfwlq6kg9hd1kh4-raw-initrd" "bhawz0mpfdjhwq423q6kk2jz34dpcsx5-libnl-3.3.0" "bixk1s0kr8lbpw2m4fhqsncfifwysjj9-iw-4.9" "bl5v4l5c3yibr2mmbx9lxr2qjd65wa9i-shepherd-term-tty3.scm" "bm16lyhdl6h5fxfi0iqjcv5dscqrickv-libsamplerate-0.1.9" "bmc8gv57qj6y5qdiymhaqii8dg51rjdk-marionette.scm" "bpr6szv5g3nwpa2xhj288n68bmsbrv6a-activate-service" "bxdl4knknaigm9s45szb9nqqln8cnbsk-file-5.30" "byx7df0jdaw8941qijp3p4l46q141ss3-libusb-1.0.21" "bzj472nmnnj5hcfd5yvfiqip1wzw84p9-tzdata-2017b" "bzn4wyrbdmfc1bd7lq05db5psfl5f8x8-perl-5.26.0" "c07im5yl6f5360lv623kp50mmq97naz8-mesa-17.1.4" "c44mijwrxm3zgzxf89g9nf8fdhz5vqqz-info-dir" "c6vpfgm9n7jzgr0llax0x7szqk9a5bfm-nettle-3.3" "c7asfsjiyd5p71h6338j3kkvy96k88id-man-db-2.7.6.1" "clrddh6a60b31anv7a9hrk3i9id0k5zs-libxcb-1.12" "cmn75vdszsm2404w0vwhrn2br7ib8508-zile-2.4.13" "cvaa538nkgrkspcpnnbzwqn9dxhxxv7f-curl-7.55.0-doc" "d2cyal3q1dfxcdz4gz8rpkdl1j3zwq2q-usbutils-008" "d7c4kdc4qkwkg9j6jwfxjqi3pxfznaqa-issue" "d7i58hy90961pahsnvjirifn6djmm24s-groupadd" "d8gkn84yqacjr80pzicz1ka3y2s1f2x0-guile-2.2.2" "dbhv0yay7p63v9xfn4s82pwrj43ij32b-bournish.scm" "dgyan2zawxw7qnxrmf9yp3ll954c9sxm-libdaemon-0.14" "dj5273vl9adm1vvjipqajk3lxkpir6yh-shepherd-nscd.scm" "dsbc8lh9zav2ghb7gi1zm608igbgg1jv-module-import" "dv4mr7k5gdi50wvqkhvahb05i905fi17-activate-service" "dy81cx0yshq8vban59vjsdl4rvxnwxab-util-linux-2.30" "f3rjpkrj5129m2rgyknl67pc3kwz782p-libdrm-2.4.81" "f4x2r28lkkr9bc5angw2bm6d922pidsj-guile-ssh-0.11.2" "fcglq7xj6yz2cmn86p14rzd25cnn7kia-hostname" "fjvh70n2iijzd28p1cxxkg234c203k2p-my.cnf" "fjzyz9rww401m5m5517zrqnfmqpk8aa0-libsndfile-1.0.28" "flj8k68s4igx1x03qia9dzkfsdqpf8dc-spice-0.12.8" "fpmp5299w8965xrbwbdbcvqxl89j9vp4-grub-image.png" "frfq5i5bxwwrz1vr04g9kcaz39g4w2ng-shepherd-console-font-tty6.scm" "g1hpcah5jqd665zl3040d4nhqgzzbbhk-libvorbis-1.3.5" "g1x4hnw3qafrwbcbpz4za1sw7pvwrwq6-fstab" "g3nari57wcfnm00kv9bnpyzdzfq4h8pk-xz-5.2.2" "gd4dx9pa04djv5ng2rrjjkj3ym70d0cj-module-import" "gfcfwr1i5kl6vy4p7zfvd87izd2b9dwq-guile-git-0.0-3.e156a10" "gfjnmqvw2ah9dkgv59w26a8bp9k61ra3-shepherd-user-file-systems.scm" "gh3xhwgh927md5ifzdmg0cgpqc0as1sh-nscd.conf" "ghcaayvl03ac7giilm5s4bcvb32nspzp-gnutls-3.5.13" "gj9w0cm9inhwi9iiipapq0xgvqyky7xq-module-import-compiled" "gr98ykgw5d3wr6mh98y20fia18rla83g-bash-completion-2.7" "gyi8x9c8gm5l3sqhvmqpy1n4xvlj62qj-shepherd-file-system--sys-fs-cgroup-memory.scm" "hwygv5jwd47amhp1m67iy3bkvxqjlbhm-libgcrypt-1.8.1" "hxn2viwl04nwswpjkfg0iyyhm815yaza-libcap-2.25" "i4bfsmgzmajbrv9p9cqz60id2j2hvwcz-usermod" "icfpiql578wzx55hkr0fqbzpxwvdymcp-nano-2.8.7" "icmna62bzyjpkx2qlvpa4mbgxyr00slj-shepherd-file-system--dev-pts.scm" "insr5wrif9pn1mlqa5rl9k3sr5qf2q1y-kmod-24" "jcsysx67d8y66n66hi856nfm2f92ws91-sbc-1.3" "jhmb3brgpavi4zx77zr4lrfdbndvw1l5-shepherd-file-system--dev-shm.scm" "jjna4ivyidxfq40mq78g97yzg0wfzcqy-shadow-4.5" "jk0hvcmysjjksi5csyznrhs27k1vc0sc-shepherd-term-tty5.scm" "jlj4f90m36bawbf8jp55j0mbldajm5va-kbd-2.0.4" "jnbb8ffxxvrw2b4z18zn0g08kqk9rsgl-libffi-3.2.1" "jv9hv3sqajrxnmx6ar03lxqk4laf03wj-su" "jz6k6rc0vhqfz1hpn92z8zf0rh19c2vc-alsa-lib-1.1.4.1" "jz7wvy930liqjvm95lhdv9i1dr1xxvxp-libxext-1.3.3" "k0xlmnz27cjyyhwjbc4lg1zkvid3d7jp-shepherd-mysql.scm" "k5zs3rw80aly6inhgvl8icpq9iabrdb2-bdb-6.2.23" "kdfwwd2r5ppdy8kd3yzl1sxibw3ahffq-fftwf-3.3.5" "kdwlvs51isdfbl61jdishzhly8h139zf-libbsd-0.8.3" "kgy00x8jl7q965sngq1yyihbczxj15wk-libxrender-0.9.10" "khjxh5dvx955qid1863j25swz926si2h-less-487" "kj7zjysiyf2d6v92wg5sm0yvbfala4mz-etc" "kpxi8h3669afr9r1bgvaf9ij3y4wdyyn-bash-minimal-4.4.12" "l1w1z627jsn93ilvjqhji96ccc95x0hy-shepherd-console-font-tty5.scm" "l6gb9kk5i9bskgpbsjmba8z794yvdlzw-shepherd-file-system--sys-fs-cgroup-devices.scm" "l7306lcxgapca9348qk6hakgycwkrmfs-libelf-0.8.13" "l8da5k5ji0idb1f36lyzangirnljabr0-activate-service" "lb0z3dkv73p6n7g736zj5zxhv4x28f6l-shepherd-0.3.2" "lh1hwa0i061lwzyvk9brcsjb6h1gyhrg-ncurses-6.0" "lhxswhrz1y69q0zpx76gjimzg3d7sn4h-libtasn1-4.12" "ljzqi3ajkc6l5r8hwdz7kr1zwbli3i7y-pciutils-3.5.5" "lk9axww17rh6jid5nrps0jf869kcrbcw-wireless-regdb-2017.03.07" "lp16q4gjhcpsjw6vhkkb84j8arzwksj6-shepherd-file-system--sys-fs-cgroup-freezer.scm" "m0m6bwzi8lx7kv8zbn3hjrim6flmgnf4-openssl-1.0.2l" "m3xhykrwad33a105zpgi494v4i8js4dl-wayland-1.13.0" "m843zdvsv2p3glz91y8icv3qwkr9mnzs-module-import" "m9zxvfv4ka26732485whl1cbaahf0ff9-avahi-0.6.31" "mhqwkrml6k7ylca5bnsmc467mlj2zdv8-shepherd-user-processes.scm" "mi0bpcbmz94n7wl282xcw12y81zj02ys-manual-database" "mipizipnr4y2hly9b429j8id1albbgqi-readline-7.0" "mk9wvrd5m7fqf328mf37241wkrkw75xa-libidn2-2.0.4" "mpl9b9w60gjzsq470zka5l8p2bmy7r8v-sqlite-3.19.3" "mrk0km6gqw4zn20az2bqidvajps7yy93-motd" "mxnh7py7gl5lfm2825hijgqjh7rvb0gm-sudoers" "mymwcnr619kprab0divalx38s5paw29y-linux-boot.scm" "n1fjxdw7ca00r0qnfk2a5gddv098rsy7-shepherd.conf" "n3b29mh561flznsciaylj4q2a78dmlp3-guile-git-0.0-3.e156a10" "n419gkq8p5l2392v0xy0wz7i69fxgp96-mariadb-10.1.26" "n6nvxlk2j8ysffjh3jphn1k5silnakh6-glibc-2.25" "n7hfr87kb69pbcz9cfy00yi4jvwk9n4s-iproute2-4.13.0" "nhm602hbfi0vw82377nvfy9kxqm6amb0-hosts" "njx3j0kd26blpdz3q1kcqxh80hiyby3b-syscalls.scm" "nlb440z8pz5wq2s2pggbvzxq0nsd96lj-module-import-compiled" "np05q8mf1y9y4bk5y4ssj99m0dss2b1q-libx11-1.6.5" "nqmzxcsay0flwxi22vb9hzdi9qnkgkhr-fuse-2.9.7" "nwklgz6m8nzmd6568jackkffjjsski8y-module-import" "nx8blr0a248ahbl092h7acyb44lp8f0m-libunistring-0.9.7" "nykcm5wlw8fjsi28nm01gg1as2znh8nf-gmp-6.1.2" "nzv180i3z33vnb9krmc73mazhf626384-findutils-4.6.0" "p204lx246gf8lzx0262d53j6vk4rdip4-boot" "p4cv5l3pbympjdjs2yga8cbp1ghbg4hj-isc-dhcp-4.3.5" "paps5r9hcpszhv8hc3n0s2m2i4a2378i-ed-1.14.2" "pbqal5rp859kfacaj9f8hvwwhlb4zikf-mysql-test-builder" "pf1xr3i3pf7k1b3lr59gffzy891y1yv3-libxvmc-1.0.10" "phyir52lwvndlpw1b30i6vhkyfh5bxgr-dbus-1.10.18" "pp5vlnkh99d9ab4xc3ggrk6mvc961fkx-lzip-1.18" "ps0m5mqdyh1pjdn31dxlbv51ysfhf860-lvm2-2.02.171" "q24zahl037lf2f4152g94v1zhrmbzsj6-libxml2-2.9.4" "q36avjw4lflscxvbmmamlgchdwq70cym-which-2.21" "q6f9samd6m36pyfg8xpzmkljc3vavrnh-activate-service" "qc4avwlbwyprz6gq9fcqwp043r8063f6-libltdl-2.4.6" "qh1fri7qppqi8bhyzbiw7h8knmk4cb3q-libltdl-2.4.6" "qj1kg8kws7fakn7g7zd4pqi59cy42hhp-crda-3.18" "qjal4sb770mjfd05w0fq72zkqpv4mcil-sudo-1.8.21p2" "qkkg7kyv1v828ixc70nngma55wn974li-udev.conf" "qp5cipyqsll9ddgdhxny65cxpvan61ha-procps-3.3.12" "r362f8p4y0xj7sm2jfqysry086lxy91v-zlib-1.2.11" "ra8iaqrk5lc8nzld75a3mv05x9wl4w96-shepherd-file-systems.scm" "rdq9cxcqka2cswqpv4s848a247zvgl93-mdadm-4.0" "rf6b68gjfrcsgc31w6zs5dgmnyschj8r-module-import-compiled" "rp8lfy4yfj08dk41m4ia9b80yy93mzf6-libjpeg-8d" "rqpi1zg82y0h6ic4nlw50x6irv5mgqhs-locale-2.25" "rs7y82hlgdfs1m7h5xr8y2vx7m96qc4v-shepherd-file-system--sys-fs-cgroup-perf_event.scm" "ryqd73alrlq5djsr18xjjihi735592im-pkg-config-0.29.2" "s16wxqjqvqjf49lkmbv3ai3dsjzxjfw6-shepherd-user-homes.scm" "s21q8rx5y9kzdpaia2zqwfbr0b9hn2fv-shepherd-file-system--sys-fs-cgroup-blkio.scm" "s2g2446j1wl1zy4d23vs3a7dc3zzl2c2-libxv-1.0.11" "s3d34jlrpcdbv1xm3y1nwihw1i6xmwrc-run-vm.sh" "scs7siybrjl5bb7sxqaskysf8n1ld718-gmp-6.1.2" "sfx1wh27i6gsrk21p87rdyikc64v7d51-zlib-1.2.11" "sil49ljqkxi6aw0rdiiqnl70jx6hicsx-s2tc-1.0" "sjrcmzr2jdas2zb4b5h8lgglgjlcyy9c-firmware" "skfbvr0wc2va1b2fdvaxbdmqnmji19jx-groupmod" "sngyhm974sbmljknwb1xrni1ggzhpm4d-grep-3.0" "sq26apxpvka5n46xkza1l5lrz5s4w8v2-libxrandr-1.5.1" "sv4p3sn3mp88xlpwl54p4r4gf06rjzlz-combinators.scm" "syzpw2s6s3jk3hj67vq52wfphlwfip2g-gss-1.0.3" "v4jl22k8gmfhw2ly8im5273y7xkby1bd-module-import" "v6ljdrjwh42h7bssk24yjdma5rl43jkr-profile" "v6wgl8g3l6d1zrylf4b9h43qszpklphk-shepherd-urandom-seed.scm" "viz3c2xq5ddl733q55am01fqz2dqiz34-skel" "vm8w2j5qjlan4dl64x8jplfih2dnrn9c-module-import-compiled" "w150ql3qy0di4dnp4c95hpaw6m1aafwc-pkg-config-0.29.2" "w1hj0572wg91blbmsyk83zsnjl6j47ap-grub-2.02" "w26fyfbic9n8fljmgacf5gy8x7y5yn39-udev-rules" "w31zw2chff41x6q6kpa2wrkgx8agr0an-libidn-1.33" "w7p84w2drhdy19j8dyv715i574lj40s9-readline-7.0" "w85rbll51r86mclkmp1bxa774b36jy1q-mit-krb5-1.15.1" "w87pvr1vf0cnbd3w6gzlamz17s761bq3-activate-service" "w8kii3hjvmh50yxs52gkdywkq9jc7s19-pixman-0.34.0" "wjj289vqkjf767xq0b3ldaskbl95vs5s-shepherd-marionette.scm" "wsjnmk2liiav4rqbhf6kxaim0fyvrn39-other" "wzzpvjk9ghhyjqn23lszkjh6pgbayj5x-shepherd-console-font-tty2.scm" "x0kbk8igm6gkkfb45gnnq66m6mswwirn-userdel" "x3b4dsmry7p2r9n30q2myj7ql0h74kqz-libmnl-1.0.4" "x8cwg5bm9y2dk1mrhisr63b5q98mbhhz-guile-bytestructures-20170402.91d042e" "xpqv6vdrxwvnl2545vcmra9gwhlvfzny-linux-libre-4.13.2" "xv8bp0zxbr9iphr38wy0ll4lzkbh9i87-libxau-1.0.8" "xxfwxc0xm748n6y9lrc5338nfpvjxqak-inetutils-1.9.4" "xy9k7k14p20jll9hiy6pj37kb8g23vbj-rfkill-0.5" "y2vyxss0pc603qqh3wmlv7yrgmjf0iam-libpipeline-1.4.2" "y5f4rfh9f8p5cm9kch4pafgmj3vhvqrx-openldap-2.4.45" "y5nrfbj52vlnj77iyki9hbji8qjwk86d-syslog.conf" "yfzdqhy08vygnssg8r69sx1i4i6jh682-sdl-1.2.15" "ygb6jg6qq36wxjcnkq4r9wrfikl754dy-shepherd-file-system--sys-fs-cgroup-cpu.scm" "ygrwcxrx5bhxzm0jilg54dsnwrxs0vci-nsswitch.conf" "yihvhxv3xyyvl1m2cy1lnf1lyi9h76fk-guile-2.2.2" "ylzyjnlsfz08xf1d74mpawvadnihsxx0-iptables-1.6.1" "ynp950nlaj0xx39gf5a10fq7rnsx1672-libatomic-ops-7.4.4" "ypqscsag2fs4j9jnwfqq5kzfyw1k30ls-mysql-test" "yz1lf55ag0904w9ib0q2kcjpdx33y7wm-attr-2.4.47" "yzlmd2nlcyjhx0ydbap7x32zjqxc3hz9-libcap-2.25" "z1lii251cy0y660910hsfc55cy82dk9i-net-base-5.3" "z77nhww8zh96w6lb5ak6h3jb4niain3b-eudev-3.2.2" "zaf2lb18xns27pkbfrm0f27qkkzxdxq2-shepherd-term-tty6.scm" "zb5gqhaj2sb1gy6imgsnhvxxcbzljg90-shepherd-file-system--sys-fs-cgroup-cpuacct.scm" "zh0lb2g15hirq7zw2477w7s5ww7dxkv0-guix-0.13.0-6.a9468b4" "zhhdii9mjckb6c2f7abmdsx39khv6dla-tar-1.29" "zhrajv6qf2hzn9c3g2bb07559hyrz5xp-bash-static-4.4.12" "zikv0zk3y5q2qx65r1xjxawm3ha97zdk-shells" "zs6zn16qbm53f1dda75ywl2gsd7m4xbn-activate-service" "zspi375jsb1076khqr3bbf5pg0vfgj65-shepherd-host-name.scm" "zvakcs6x3zzlx95wypz9dl3k908bc6lc-shepherd-file-system--sys-fs-cgroup-cpuset.scm" "zwhrh2429r7y13nd3bnfihswxdflb4ih-curl-7.55.0" "zwvgwl1yjfbh5k1255jvia6q331ib3m1-pam.d" "zxm6qadad3vc7asy1q0xp9dld012kxgk-90-kvm.rules" "zyya6pd6hg2zvcbqpzavqjv4wagms03c-module-import-compiled" "zzaxsv4jp0k9nhbvxm2al5c8b6l6nxyv-modprobe"))
ERROR: In procedure scm-error:
ERROR: no code for module (ice-9 popen)

As you can see,
/gnu/store/9whwwppmb2sjfsy0967s627bzgdfl8bc-guile-static-stripped-2.2.2/share/guile/2.2, which is at
the tail of %load-path, is missing from the root file system, hence the
failure.

To work around it, we’d have to either ensure that
‘guile-static-stripped’ is on the root file system, or adjust the load
path when we switch roots, or (simplest solution) pre-load (ice-9 popen)
before ‘switch-root’.

To be continued…

Ludo’.
C
C
Christopher Baines wrote on 8 Oct 2017 11:06
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 28399@debbugs.gnu.org)
20171008100607.5c175cf8@cbaines.net
On Wed, 20 Sep 2017 11:21:51 +0200
ludo@gnu.org (Ludovic Courtès) wrote:

Toggle quote (12 lines)
> As you can see,
> /gnu/store/9whwwppmb2sjfsy0967s627bzgdfl8bc-guile-static-stripped-2.2.2/share/guile/2.2,
> which is at the tail of %load-path, is missing from the root file
> system, hence the failure.
>
> To work around it, we’d have to either ensure that
> ‘guile-static-stripped’ is on the root file system, or adjust the load
> path when we switch roots, or (simplest solution) pre-load (ice-9
> popen) before ‘switch-root’.
>
> To be continued…

Awesome investigation Ludo. This explanation could match what I was
experiencing when using the mysql service on GuixSD. Sometimes after
running guix gc, the system wouldn't boot. This could have been because
the guile package needed by the initrd was removed from the store.

Given that the initrd has a dependency on this guile, but it doesn't
reference it because its compressed, how about adding a explicit
reference to the guile used? I've attached a patch, and this looks to
fix the issue as far as the mysql service is concerned.
From f313f80407039efb215c18de99ee36696528e98a Mon Sep 17 00:00:00 2001
From: Christopher Baines <mail@cbaines.net>
Date: Sun, 8 Oct 2017 09:52:24 +0100
Subject: [PATCH] linux-initrd: Ensure that the guile used in the initrd
referenced.

By referencing guile from the initrd, it will be present in the store when
this initrd is used. If the exact guile used within the initrd isn't present
in the store, then after root is switched during the boot process, loading
modules (such as (ice-9 popen)) won't work.

* gnu/system/linux-initrd.scm (expression->initrd)[builder]: Write out a file
called references in to the initrd derivation, which includes the store path
for guile.
---
gnu/system/linux-initrd.scm | 13 +++++++++++++
1 file changed, 13 insertions(+)

Toggle diff (26 lines)
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index 5a7aec5c8..c869bba5f 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -78,6 +78,19 @@ the derivations referenced by EXP are automatically copied to the initrd."
(use-modules (gnu build linux-initrd))
(mkdir #$output)
+
+ ;; Due to the compression, the references to the dependencies are
+ ;; obscured, so write them out uncompressed to a file.
+ (call-with-output-file (string-append #$ output "/references")
+ (lambda (port)
+ (map (lambda (reference)
+ (simple-format port "~A\n" reference))
+ (list
+ ;; The guile used in the initrd must be present in the
+ ;; store, so that module loading works once the root is
+ ;; switched.
+ #$guile))))
+
(build-initrd (string-append #$output "/initrd")
#:guile #$guile
#:init #$init
--
2.14.2
-----BEGIN PGP SIGNATURE-----

iQKTBAEBCgB9FiEEPonu50WOcg2XVOCyXiijOwuE9XcFAlnZ6n9fFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcACgkQXiijOwuE
9XfLZw//V7b0kGXkQpiDCY88mb+V+JudPveQDRXjM8YjhbNEjuczx49piaS93wVN
zHE/VtePzszworbHtDjlC+iqD8PSzzDKamS6HwmVHMbYt86W6vqAOSxPvqBnHIpS
zUfbv2NzMPBUDRElulT8JECxZEPj45W5kk28v8yya5DhSszowMgZfTwsA+yyEglQ
lt/cE8ZgjWSbCv/cI0iFXhmWXObnDXPJJfG9iBrMcVBNZy+AkzzwYniJhMvuq+sF
h7cGmg1lG1PXy9AgySwaDGtGzyuDzRV/fjXatId4rrkrDyW0emtg0CxpnnS3qbA1
ZrGUN3j/Lvm/1d88iwIsKR3DRcP2SXPVP5O37+Euz9ZxacwTC/2J+E00n/hXPQCv
Np2b+8tODJ51hIWtiTlgOH+ikiUD9hOELbwFm4QD2gL2Gix/3jTgUbhLJqUXTZ1g
B4IlfkCNqVHItAV98zaYwZeytNIqMvp3Xfgdebpq9Uc8sLxMmPf3ModwzPVeQk/m
UC4bz/733l3cTwl5PNQM4EfYxb6jpq6v2NmNirzIGhjM3T035hjFXGyzalpCk6pj
f8U0zQDE/N9hOD5749lyz8PhSTrDSJBdzbuns5WJ3HwyeLiHq8QLr3dkSh6OmZIr
Fyrzmq5e2Mx6sToc3mtxwFvIQYfSk8KbwR25J5pn9ATq9xUq3mk=
=HT04
-----END PGP SIGNATURE-----


L
L
Ludovic Courtès wrote on 8 Oct 2017 17:26
(name . Christopher Baines)(address . mail@cbaines.net)(address . 28399@debbugs.gnu.org)
87po9xek4y.fsf@gnu.org
Heya,

Christopher Baines <mail@cbaines.net> skribis:

Toggle quote (23 lines)
> On Wed, 20 Sep 2017 11:21:51 +0200
> ludo@gnu.org (Ludovic Courtès) wrote:
>
>> As you can see,
>> /gnu/store/9whwwppmb2sjfsy0967s627bzgdfl8bc-guile-static-stripped-2.2.2/share/guile/2.2,
>> which is at the tail of %load-path, is missing from the root file
>> system, hence the failure.
>>
>> To work around it, we’d have to either ensure that
>> ‘guile-static-stripped’ is on the root file system, or adjust the load
>> path when we switch roots, or (simplest solution) pre-load (ice-9
>> popen) before ‘switch-root’.
>>
>> To be continued…
>
> Awesome investigation Ludo. This explanation could match what I was
> experiencing when using the mysql service on GuixSD. Sometimes after
> running guix gc, the system wouldn't boot. This could have been because
> the guile package needed by the initrd was removed from the store.
>
> Given that the initrd has a dependency on this guile, but it doesn't
> reference it because its compressed,

It’s not just that: the initrd embeds a self-contained store; it does
not contain references to the “outer” store.

Toggle quote (4 lines)
> how about adding a explicit reference to the guile used? I've attached
> a patch, and this looks to fix the issue as far as the mysql service
> is concerned.

[…]

Toggle quote (15 lines)
> From f313f80407039efb215c18de99ee36696528e98a Mon Sep 17 00:00:00 2001
> From: Christopher Baines <mail@cbaines.net>
> Date: Sun, 8 Oct 2017 09:52:24 +0100
> Subject: [PATCH] linux-initrd: Ensure that the guile used in the initrd
> referenced.
>
> By referencing guile from the initrd, it will be present in the store when
> this initrd is used. If the exact guile used within the initrd isn't present
> in the store, then after root is switched during the boot process, loading
> modules (such as (ice-9 popen)) won't work.
>
> * gnu/system/linux-initrd.scm (expression->initrd)[builder]: Write out a file
> called references in to the initrd derivation, which includes the store path
> for guile.

[...]

Toggle quote (12 lines)
> + ;; Due to the compression, the references to the dependencies are
> + ;; obscured, so write them out uncompressed to a file.
> + (call-with-output-file (string-append #$ output "/references")
> + (lambda (port)
> + (map (lambda (reference)
> + (simple-format port "~A\n" reference))
> + (list
> + ;; The guile used in the initrd must be present in the
> + ;; store, so that module loading works once the root is
> + ;; switched.
> + #$guile))))

That’s very smart!

I think you can remove ‘map’ here since Guile will probably be the only
thing we want to refer to.

Make sure to refer to this bug in the commit message and in the comment.

OK to push with these changes, thank you!

Ludo’.
C
C
Christopher Baines wrote on 8 Oct 2017 18:34
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 28399-done@debbugs.gnu.org)
20171008173431.0ff3299f@cbaines.net
On Sun, 08 Oct 2017 17:26:05 +0200
ludo@gnu.org (Ludovic Courtès) wrote:

Toggle quote (81 lines)
> Heya,
>
> Christopher Baines <mail@cbaines.net> skribis:
>
> > On Wed, 20 Sep 2017 11:21:51 +0200
> > ludo@gnu.org (Ludovic Courtès) wrote:
> >
> >> As you can see,
> >> /gnu/store/9whwwppmb2sjfsy0967s627bzgdfl8bc-guile-static-stripped-2.2.2/share/guile/2.2,
> >> which is at the tail of %load-path, is missing from the root file
> >> system, hence the failure.
> >>
> >> To work around it, we’d have to either ensure that
> >> ‘guile-static-stripped’ is on the root file system, or adjust the
> >> load path when we switch roots, or (simplest solution) pre-load
> >> (ice-9 popen) before ‘switch-root’.
> >>
> >> To be continued…
> >
> > Awesome investigation Ludo. This explanation could match what I was
> > experiencing when using the mysql service on GuixSD. Sometimes after
> > running guix gc, the system wouldn't boot. This could have been
> > because the guile package needed by the initrd was removed from the
> > store.
> >
> > Given that the initrd has a dependency on this guile, but it doesn't
> > reference it because its compressed,
>
> It’s not just that: the initrd embeds a self-contained store; it does
> not contain references to the “outer” store.
>
> > how about adding a explicit reference to the guile used? I've
> > attached a patch, and this looks to fix the issue as far as the
> > mysql service is concerned.
>
> […]
>
> > From f313f80407039efb215c18de99ee36696528e98a Mon Sep 17 00:00:00
> > 2001 From: Christopher Baines <mail@cbaines.net>
> > Date: Sun, 8 Oct 2017 09:52:24 +0100
> > Subject: [PATCH] linux-initrd: Ensure that the guile used in the
> > initrd referenced.
> >
> > By referencing guile from the initrd, it will be present in the
> > store when this initrd is used. If the exact guile used within the
> > initrd isn't present in the store, then after root is switched
> > during the boot process, loading modules (such as (ice-9 popen))
> > won't work.
> >
> > * gnu/system/linux-initrd.scm (expression->initrd)[builder]: Write
> > out a file called references in to the initrd derivation, which
> > includes the store path for guile.
>
> [...]
>
> > + ;; Due to the compression, the references to the
> > dependencies are
> > + ;; obscured, so write them out uncompressed to a file.
> > + (call-with-output-file (string-append #$ output
> > "/references")
> > + (lambda (port)
> > + (map (lambda (reference)
> > + (simple-format port "~A\n" reference))
> > + (list
> > + ;; The guile used in the initrd must be
> > present in the
> > + ;; store, so that module loading works once
> > the root is
> > + ;; switched.
> > + #$guile))))
>
> That’s very smart!
>
> I think you can remove ‘map’ here since Guile will probably be the
> only thing we want to refer to.
>
> Make sure to refer to this bug in the commit message and in the
> comment.
>
> OK to push with these changes, thank you!

Awesome :) I think I've made these changes, and I've now pushed this
change, along with the simple MySQL test that now passes.

I'm very glad that this issue should be resolved now.
-----BEGIN PGP SIGNATURE-----

iQKTBAEBCgB9FiEEPonu50WOcg2XVOCyXiijOwuE9XcFAlnaU5dfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcACgkQXiijOwuE
9Xc5DA//YQs81RGSADdLH3taTKyrkUtkUeg6xf1jRXcfvAIlmjh7Ezn9GjdKWN6f
GH3sqb4ajFMviH185ZYfuu2cn8URBMKUc/cqytImXeqXBtd4od09dKARb9eiMNqY
Tyj5pU6g66FVTszZI/8yY5VgquVfghWFc++WBFpBBIZ5eNULyVy8C5RaMKEHmbp9
0jzIFbUzAMr3Y9w9JHiM/jjnrfQchsAFxRppS7sVHlIRk2/cJ4X9lmdZz/bzXUY3
WRcFPKH77EJT6gNW4eYrF0uNYD64T2aW21iO3BvdO29CUYQpGviwdN/yPPdlAr2O
c3I7y3XLqj3Qcd8NmFpix13tJ7+XK37jEO2g+derdkLC4UNL1NF/8eUBAx5c0Uld
de973iIeqMz3WduAcscQ2eh+96qjcZ8UC15d1JGkuso1XbE467A2hLQfVa4fo0C1
v+Zad/BszqEqRQm4BqWbNEmKWjJu0JXfCFMKWJ78eeRSwdwctOF/zAiRzVMVtiq4
FKRFPyoF2RUYzn8Uyh/tk6+VW6OINYlRuIa5qaPvzD2/HGubGEcWwgdgCEJqTET6
OrSL8v0135zGHsuzQpyxyD0eBdl4RlOjhCyTmMeptE067vLfqLjPnOXJNx9/uLdh
VDRmpQPBc3LszCxj7Rve33sqW3cucAd+aewUIERqcT2BuDGs+kg=
=+Wzr
-----END PGP SIGNATURE-----


Closed
L
L
Ludovic Courtès wrote on 8 Oct 2017 21:19
(name . Christopher Baines)(address . mail@cbaines.net)(address . 28399-done@debbugs.gnu.org)
87o9phcusb.fsf@gnu.org
Christopher Baines <mail@cbaines.net> skribis:

Toggle quote (5 lines)
> Awesome :) I think I've made these changes, and I've now pushed this
> change, along with the simple MySQL test that now passes.
>
> I'm very glad that this issue should be resolved now.

Ditto, thank you!

Ludo’.
Closed
?