--- Begin Message ---
Subject: |
Can't install packages after guix pull |
Date: |
Fri, 17 Feb 2017 11:04:07 -0500 |
Hi,
I've been using the binary installation of Guix on Debian 8 for some time now. However, after a "guix pull", I can't install packages anymore.
Steps to reproduce
===============
- Run "guix pull" as a user
- Run "guix package -i guile"
Expected result
============
The latest stable version of GNU Guile is installed correctly.
Unexpected result
==============
I get the following error:
warning: failed to install locale: Invalid argument
Backtrace:
In guix/packages.scm:
982: 19 [bag-grafts # #]
966: 18 [fold-bag-dependencies #<procedure bbfa4f0 at guix/packages.scm:982:29 (package grafts)> ...]
983: 17 [#<procedure bbfa4f0 at guix/packages.scm:982:29 (package grafts)> # ()]
786: 16 [cache! #<weak-key-hash-table a01b060 0/223> # "i686-linux" ...]
910: 15 [thunk]
786: 14 [cache! #<weak-key-hash-table a01b280 167/223> # # ...]
1092: 13 [thunk]
1024: 12 [bag->derivation # # #]
In srfi/srfi-1.scm:
578: 11 [map #<procedure b73c510 at guix/packages.scm:1026:30 (t-1321339)> #]
In guix/packages.scm:
846: 10 [expand-input # # # ...]
In guix/store.scm:
1249: 9 [run-with-store # ...]
In guix/packages.scm:
480: 8 [#<procedure b7591e0 at guix/packages.scm:480:2 (state)> #]
485: 7 [#<procedure bbc9a80 at guix/packages.scm:485:34 (state)> #]
In gnu/packages/bash.scm:
249: 6 [#<procedure bbc9aa0 at gnu/packages/bash.scm:249:2 (state)> #]
In guix/download.scm:
421: 5 [#<procedure bafce38 at guix/download.scm:421:2 (state)> #]
In guix/store.scm:
1169: 4 [#<procedure b759138 at guix/store.scm:1168:28 (store)> #]
In guix/packages.scm:
786: 3 [cache! #<weak-key-hash-table a01b280 167/223> #f ...]
1092: 2 [thunk]
786: 1 [cache! #<weak-key-hash-table a01b100 169/223> #f ...]
871: 0 [thunk]
guix/packages.scm:871:27: In procedure thunk:
guix/packages.scm:871:27: In procedure struct_vtable: Wrong type argument in position 1 (expecting struct): #f
System information
===============
Guix (after pull): guix (GNU Guix) 20170216.20
Foreign distro:
Debian 8 (Linux makina 3.16.0-4-686-pae #1 SMP Debian 3.16.39-1 (2016-12-30) i686 GNU/Linux)
Additional notes
=============
It was suggested by lfam in the same conversation that the problem might be due to a very old guix-daemon, which is true for my system. However, there was no way for me to update the daemon because I get the same error described above when I run the second step of the following procedure (run as root):
- Run "guix pull"
- Run "guix package --upgrade"
- Restart guix-daemon
---
https://sirgazil.bitbucket.io/
--- End Message ---
--- Begin Message ---
Subject: |
Re: bug#25775: Attempts to fix bootstrap Guile bug |
Date: |
Wed, 08 Mar 2017 00:02:39 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) |
Hello,
Thanks Andy & Ricardo for the detailed explanations!
Andy Wingo <address@hidden> skribis:
> It seems that this bug is related to the introduction of
> url-fetch/reset-patch-level. It takes a #:guile kwarg but defaults to
> #f; if not given #:guile, that #f propagates through instead of a
> package object.
Nasty.
To reproduce the problem reported here, one can:
1. Revert the “band-aid commit”
9f05908fb1e3707cae593d94688748294717a546.
2. Change download.scm to force it to behave as when talking to an old
daemon.
This gives this:
diff --git a/guix/download.scm b/guix/download.scm
index 86f859881..811abe27b 100644
--- a/guix/download.scm
+++ b/guix/download.scm
@@ -418,10 +418,7 @@ GnuTLS itself and its dependencies. See
<http://bugs.gnu.org/22774>."
;; hash of the expected result.
#:verify-certificate? #f)))))
- (mlet %store-monad ((guile (package->derivation
- (or guile
- (@@ (gnu packages bootstrap)
%bootstrap-guile))
- system)))
+ (mlet %store-monad ((guile (package->derivation guile system)))
(gexp->derivation file-name builder
#:guile-for-build guile
#:system system
@@ -472,7 +469,7 @@ in the store."
(and uri (memq (uri-scheme uri) '(#f file))))
(interned-file (if uri (uri-path uri) url)
(or name file-name))
- (mlet* %store-monad ((builtins (built-in-builders*))
+ (mlet* %store-monad ((builtins -> '())
(download -> (if (member "download" builtins)
built-in-download
in-band-download)))
Then run something like:
guix gc -d /gnu/store/*-bash-4.4.tar.xz
./pre-inst-env guix build bash -S --no-substitutes
~~~~~~
To mirror what ‘url-fetch’ does, we should change the default value of
#:guile here:
diff --git a/gnu/packages/bash.scm b/gnu/packages/bash.scm
index c3b94391e..b4d0b6777 100644
--- a/gnu/packages/bash.scm
+++ b/gnu/packages/bash.scm
@@ -243,7 +243,8 @@ without modification.")
(define* (url-fetch/reset-patch-level url hash-algo hash
#:optional name
- #:key (system (%current-system)) guile)
+ #:key (system (%current-system))
+ (guile (default-guile)))
"Fetch the Bash patch from URL and reset its 'PATCHLEVEL' definition so it
can apply to a patch-level 0 Bash."
(mlet* %store-monad ((name -> (or name (basename url)))
However that leads to a stack overflow unless we patch
‘bootstrap-origin’ the way Andy suggests (which is not desirable IMO).
So, instead, we can simply force the use of the bootstrap Guile for
these derivations, which doesn’t make any difference functionally:
--- a/gnu/packages/bash.scm
+++ b/gnu/packages/bash.scm
@@ -21,6 +21,7 @@
(define-module (gnu packages bash)
#:use-module (guix licenses)
#:use-module (gnu packages)
+ #:use-module (gnu packages bootstrap)
#:use-module (gnu packages ncurses)
#:use-module (gnu packages readline)
#:use-module (gnu packages bison)
@@ -243,14 +244,17 @@ without modification.")
(define* (url-fetch/reset-patch-level url hash-algo hash
#:optional name
- #:key (system (%current-system)) guile)
+ #:key (system (%current-system)))
"Fetch the Bash patch from URL and reset its 'PATCHLEVEL' definition so it
can apply to a patch-level 0 Bash."
+ ;; Note: Forcefully use %BOOTSTRAP-GUILE here to work around bootstrapping
+ ;; issues when using a daemon that lacks the "download" built-in. See
+ ;; <https://bugs.gnu.org/25775>.
(mlet* %store-monad ((name -> (or name (basename url)))
(patch (url-fetch url hash-algo hash
(string-append name ".orig")
#:system system
- #:guile guile)))
+ #:guile %bootstrap-guile)))
(gexp->derivation name
(with-imported-modules '((guix build utils))
#~(begin
@@ -259,7 +263,6 @@ can apply to a patch-level 0 Bash."
(substitute* #$output
(("PATCHLEVEL [0-6]+")
"PATCHLEVEL 0"))))
- #:guile-for-build guile
#:system system)))
(define bash/fixed ;CVE-2017-5932 (RCE with completion)
And it does the job.
Pushed as 6c5b56f9fa01b7fe9034bac47b20e08a2fdb2629. Let me know if
there are still fishy things!
Ludo’.
--- End Message ---