GNU bug report logs - #35776
Test guix-pack-localstatedir.sh and guix-pack-relocatable.sh crash when /gnu/store doesn't exist

Previous Next

Package: guix;

Reported by: Ting-Wei Lan <lantw44 <at> gmail.com>

Date: Fri, 17 May 2019 13:48:01 UTC

Severity: normal

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 35776 in the body.
You can then email your comments to 35776 AT debbugs.gnu.org in the normal way.

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

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


Report forwarded to bug-guix <at> gnu.org:
bug#35776; Package guix. (Fri, 17 May 2019 13:48:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Ting-Wei Lan <lantw44 <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-guix <at> gnu.org. (Fri, 17 May 2019 13:48:02 GMT) Full text and rfc822 format available.

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

From: Ting-Wei Lan <lantw44 <at> gmail.com>
To: bug-guix <at> gnu.org
Subject: Test guix-pack-localstatedir.sh and guix-pack-relocatable.sh crash
 when /gnu/store doesn't exist
Date: Fri, 17 May 2019 21:47:17 +0800
[Message part 1 (text/plain, inline)]
When running these two tests in a clean environment without having Guix
installed first, they crash when trying to obtain the value of
localstatedir.
+ guix pack --version
guix pack (GNU Guix) 1.0.0.711-f52e8-dirty
Copyright (C) 2019 the Guix authors
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
++ guile2.2 -c '(use-modules (guix config))(display %storedir)'
+ NIX_STORE_DIR=/gnu/store
++ guile2.2 -c '(use-modules (guix config))(display %localstatedir)'
Backtrace:
In ice-9/eval.scm:
    619:8 19 (_ #(#(#<directory (guile-user) 564bef205140>)))
In ice-9/command-line.scm:
   181:18 18 (_ #<input: string 564bef21ca80>)
In unknown file:
          17 (eval (use-modules (guix config)) #<directory (guile-us…>)
In ice-9/eval.scm:
   721:20 16 (primitive-eval (use-modules (guix config)))
In ice-9/psyntax.scm:
  1235:36 15 (expand-top-sequence ((use-modules (guix config))) _ _ # …)
  1182:24 14 (parse _ (("placeholder" placeholder)) ((top) #(# # …)) …)
   285:10 13 (parse _ (("placeholder" placeholder)) (()) _ c&e (eval) …)
In ice-9/boot-9.scm:
  3377:20 12 (process-use-modules _)
   222:17 11 (map1 (((guix config))))
  3378:31 10 (_ ((guix config)))
  2800:17  9 (resolve-interface (guix config) #:select _ #:hide _ # _ …)
In ice-9/threads.scm:
    390:8  8 (_ _)
In ice-9/boot-9.scm:
  2726:13  7 (_)
In ice-9/threads.scm:
    390:8  6 (_ _)
In ice-9/boot-9.scm:
  2994:20  5 (_)
   2312:4  4 (save-module-excursion #<procedure 564bef1bf1b0 at ice-…>)
  3014:26  3 (_)
In unknown file:
           2 (primitive-load-path "guix/config" #<procedure 564bef15…>)
In guix/config.scm:
     71:6  1 (_)
In unknown file:
           0 (canonicalize-path "/gnu/store")
ERROR: In procedure canonicalize-path:
In procedure canonicalize-path: No such file or directory
+ localstatedir=
FAIL tests/guix-pack-localstatedir.sh (exit status: 1)
It seems to me that the reason is that NIX_STORE_DIR is exported by
test-env script, so the line
NIX_STORE_DIR="`guile -c '(use-modules (guix config))(display %storedir)'`"
not only changes the value of shell variable NIX_STORE_DIR but also
exports it to the environment.
Therefore, the next line
localstatedir="`guile -c '(use-modules (guix config))(display
%localstatedir)'`"
crashes at guix/config.scm when running the code
(define %store-directory
  (or (and=> (getenv "NIX_STORE_DIR") canonicalize-path)
      %storedir))
because NIX_STORE_DIR points to a non-existent path /gnu/store.
I attached a patch to avoid the crash by delaying the modification
to NIX_STORE_DIR, but I am not sure if it is correct to do so.
[guix-1.0.0-tests-guix-pack-localstatedir.patch (text/x-patch, attachment)]

Reply sent to Ludovic Courtès <ludo <at> gnu.org>:
You have taken responsibility. (Sat, 18 May 2019 10:30:02 GMT) Full text and rfc822 format available.

Notification sent to Ting-Wei Lan <lantw44 <at> gmail.com>:
bug acknowledged by developer. (Sat, 18 May 2019 10:30:03 GMT) Full text and rfc822 format available.

Message #10 received at 35776-done <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Ting-Wei Lan <lantw44 <at> gmail.com>
Cc: 35776-done <at> debbugs.gnu.org
Subject: Re: bug#35776: Test guix-pack-localstatedir.sh and
 guix-pack-relocatable.sh crash when /gnu/store doesn't exist
Date: Sat, 18 May 2019 12:29:18 +0200
Ting-Wei Lan <lantw44 <at> gmail.com> skribis:

> It seems to me that the reason is that NIX_STORE_DIR is exported by
> test-env script, so the line
> NIX_STORE_DIR="`guile -c '(use-modules (guix config))(display %storedir)'`"
> not only changes the value of shell variable NIX_STORE_DIR but also
> exports it to the environment.
> Therefore, the next line
> localstatedir="`guile -c '(use-modules (guix config))(display
> %localstatedir)'`"
> crashes at guix/config.scm when running the code
> (define %store-directory
>   (or (and=> (getenv "NIX_STORE_DIR") canonicalize-path)
>       %storedir))
> because NIX_STORE_DIR points to a non-existent path /gnu/store.
> I attached a patch to avoid the crash by delaying the modification
> to NIX_STORE_DIR, but I am not sure if it is correct to do so.

Indeed.  Pushed as baab87ac49e3f0f873e17eb16db9781189b1f2d1, thanks!

Ludo’.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sat, 15 Jun 2019 11:24:05 GMT) Full text and rfc822 format available.

This bug report was last modified 4 years and 311 days ago.

Previous Next


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