summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu-system.am1
-rw-r--r--gnu/packages/admin.scm8
-rw-r--r--gnu/packages/algebra.scm11
-rw-r--r--gnu/packages/base.scm7
-rw-r--r--gnu/packages/cmake.scm26
-rw-r--r--gnu/packages/gnustep.scm71
-rw-r--r--gnu/packages/imagemagick.scm6
-rw-r--r--gnu/packages/lua.scm4
-rw-r--r--gnu/packages/lynx.scm10
-rw-r--r--gnu/packages/screen.scm8
-rw-r--r--gnu/packages/ssh.scm5
-rw-r--r--gnu/packages/xiph.scm11
-rw-r--r--gnu/packages/xorg.scm14
-rw-r--r--gnu/packages/zip.scm5
-rw-r--r--guix/pk-crypto.scm41
-rw-r--r--guix/scripts/archive.scm18
-rw-r--r--guix/scripts/authenticate.scm9
-rw-r--r--guix/scripts/offload.scm50
-rwxr-xr-xguix/scripts/substitute-binary.scm20
m---------nix-upstream0
-rw-r--r--nix/nix-daemon/guix-daemon.cc9
-rw-r--r--test-env.in2
-rw-r--r--tests/guix-register.sh4
-rw-r--r--tests/pk-crypto.scm42
-rw-r--r--tests/store.scm34
25 files changed, 342 insertions, 74 deletions
diff --git a/gnu-system.am b/gnu-system.am
index 52c58d8c90..b47163c1f4 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -89,6 +89,7 @@ GNU_SYSTEM_MODULES = \
gnu/packages/gnome.scm \
gnu/packages/gnunet.scm \
gnu/packages/gnupg.scm \
+ gnu/packages/gnustep.scm \
gnu/packages/gnutls.scm \
gnu/packages/gnuzilla.scm \
gnu/packages/gnu-pw-mgr.scm \
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index ffedfd3f44..89df1a9148 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
+;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -317,6 +318,13 @@ ONC RPC numbers")
(base32
"1frjcdkhkpzk0f84hx6hmw5l0ynpmji8vcbaxg8h5k2svyxz0nmm"))))
(build-system gnu-build-system)
+ (arguments
+ `(#:configure-flags
+ ;; By default, man and info pages are put in PREFIX/{man,info},
+ ;; but we want them in PREFIX/share/{man,info}.
+ (let ((out (assoc-ref %outputs "out")))
+ (list (string-append "--mandir=" out "/share/man")
+ (string-append "--infodir=" out "/share/info")))))
(home-page "http://netcat.sourceforge.net")
(synopsis "Read and write data over TCP/IP")
(description
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index faab4edc85..a1564e000e 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -179,8 +180,14 @@ GP2C, the GP to C compiler, translates GP scripts to PARI programs.")
(let ((out (assoc-ref outputs "out")))
(setenv "CONFIG_SHELL" (which "bash"))
(zero?
- (system* "./configure"
- (string-append "--prefix=" out)))))
+ (system*
+ "./configure"
+ (string-append "--prefix=" out)
+ ;; By default, man and info pages are put in
+ ;; PREFIX/{man,info}, but we want them in
+ ;; PREFIX/share/{man,info}.
+ (string-append "--mandir=" out "/share/man")
+ (string-append "--infodir=" out "/share/info")))))
%standard-phases)))
(home-page "http://www.gnu.org/software/bc/")
(synopsis "Arbitrary precision numeric processing language")
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 89d90c989b..1f6e86341f 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
+;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -500,7 +501,7 @@ with the Linux kernel.")
(define-public tzdata
(package
(name "tzdata")
- (version "2013d")
+ (version "2014a")
(source (origin
(method url-fetch)
(uri (string-append
@@ -508,7 +509,7 @@ with the Linux kernel.")
version ".tar.gz"))
(sha256
(base32
- "011v63ppr73vhjgxv00inkn5pc7z48i8lhbapkpdq3kfczq9c76d"))))
+ "1cg843ajz4g16axpz56zvalwsbp1s764na2bk4fb44ayx162bzvw"))))
(build-system gnu-build-system)
(arguments
'(#:tests? #f
@@ -555,7 +556,7 @@ with the Linux kernel.")
version ".tar.gz"))
(sha256
(base32
- "1dh7nzmfxs8fps4bzcd2lz5fz24zxy2123a99avxsk34jh6bk7id"))))))
+ "1xfkqi1q8cnxqbv8azdj5pqlzhkjz6xag09f1z0s8rxi86jkpf85"))))))
(home-page "http://www.iana.org/time-zones")
(synopsis "Database of current and historical time zones")
(description "The Time Zone Database (often called tz or zoneinfo)
diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm
index 84873f4a3b..87a70decc7 100644
--- a/gnu/packages/cmake.scm
+++ b/gnu/packages/cmake.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
+;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -22,7 +23,8 @@
#:use-module (guix download)
#:use-module (guix build-system gnu)
#:use-module (gnu packages)
- #:use-module (gnu packages file))
+ #:use-module (gnu packages file)
+ #:use-module (srfi srfi-1))
(define-public cmake
(package
@@ -32,15 +34,15 @@
(method url-fetch)
(uri (string-append
"http://www.cmake.org/files/v"
- (substring version 0
- (string-index version #\. (+ 1 (string-index version #\.))))
+ (string-join (take (string-split version #\.) 2)
+ ".")
"/cmake-" version ".tar.gz"))
(sha256
(base32 "11q21vyrr6c6smyjy81k2k07zmn96ggjia9im9cxwvj0n88bm1fq"))
(patches (list (search-patch "cmake-fix-tests.patch")))))
(build-system gnu-build-system)
(arguments
- '(#:test-target "test"
+ `(#:test-target "test"
#:phases (alist-replace
'configure
(lambda* (#:key outputs #:allow-other-keys)
@@ -61,8 +63,20 @@
"Utilities/cmlibarchive/libarchive/archive_write_set_format_shar.c"
"Tests/CMakeLists.txt")
(("/bin/sh") (which "sh")))
- (zero? (system* "./configure"
- (string-append "--prefix=" out)))))
+ (zero? (system*
+ "./configure"
+ (string-append "--prefix=" out)
+ ;; By default, the man pages and other docs land
+ ;; in PREFIX/man and PREFIX/doc, but we want them
+ ;; in share/{man,doc}. Note that unlike
+ ;; autoconf-generated configure scripts, cmake's
+ ;; configure prepends "PREFIX/" to what we pass
+ ;; to --mandir and --docdir.
+ "--mandir=share/man"
+ ,(string-append
+ "--docdir=share/doc/cmake-"
+ (string-join (take (string-split version #\.) 2)
+ "."))))))
%standard-phases)))
(inputs
`(("file" ,file)))
diff --git a/gnu/packages/gnustep.scm b/gnu/packages/gnustep.scm
new file mode 100644
index 0000000000..8584ba6096
--- /dev/null
+++ b/gnu/packages/gnustep.scm
@@ -0,0 +1,71 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages gnustep)
+ #:use-module (guix download)
+ #:use-module (guix packages)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix licenses)
+ #:use-module (gnu packages xorg)
+ #:use-module (gnu packages fontutils)
+ #:use-module (gnu packages libjpeg)
+ #:use-module (gnu packages pkg-config))
+
+(define-public windowmaker
+ (package
+ (name "windowmaker")
+ (version "0.95.5")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "http://windowmaker.org/pub/source/release/WindowMaker-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1l3hmx4jzf6vp0zclqx9gsqrlwh4rvqm1g1zr5ha0cp0zmsg89ab"))))
+ (build-system gnu-build-system)
+ (arguments
+ '(#:phases (alist-cons-after
+ 'install 'wrap
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin")))
+ ;; 'wmaker' wants to invoke 'wmaker.inst' the first time,
+ ;; which in turn wants to invoke 'wmmenugen' etc., so
+ ;; make sure everything is in $PATH.
+ (wrap-program (string-append bin "/wmaker")
+ `("PATH" ":" prefix (,bin)))))
+ %standard-phases)))
+ (inputs
+ `(("libxmu" ,libxmu)
+ ("libxft" ,libxft)
+ ("libx11" ,libx11)
+ ("fontconfig" ,fontconfig)
+ ("libjpeg" ,libjpeg)))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
+ (home-page "http://windowmaker.org/")
+ (synopsis "NeXTSTEP-like window manager")
+ (description
+ "Window Maker is an X11 window manager originally designed to provide
+integration support for the GNUstep Desktop Environment. In every way
+possible, it reproduces the elegant look and feel of the NeXTSTEP user
+interface. It is fast, feature rich, easy to configure, and easy to use.")
+
+ ;; Artwork is distributed under the WTFPL.
+ (license gpl2+)))
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index a1713273e9..e8869ddfd5 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -37,14 +37,14 @@
(define-public imagemagick
(package
(name "imagemagick")
- (version "6.8.8-4")
+ (version "6.8.8-8")
(source (origin
(method url-fetch)
(uri (string-append "mirror://imagemagick/ImageMagick-"
version ".tar.xz"))
(sha256
(base32
- "0bfxhfymkdbvardlr0nbjfmv53m47lcl9kkycipk4hxawfs927jr"))))
+ "1b1j4j6gyxd02nm7v70d8prjvh09dk9klralrr8avm9ys1wqd7r4"))))
(build-system gnu-build-system)
(arguments
`(#:phases (alist-cons-before
diff --git a/gnu/packages/lua.scm b/gnu/packages/lua.scm
index 81caa263ad..8394afb641 100644
--- a/gnu/packages/lua.scm
+++ b/gnu/packages/lua.scm
@@ -66,13 +66,13 @@ for configuration, scripting, and rapid prototyping.")
(define-public luajit
(package
(name "luajit")
- (version "2.0.2")
+ (version "2.0.3")
(source (origin
(method url-fetch)
(uri (string-append "http://luajit.org/download/LuaJIT-"
version ".tar.gz"))
(sha256
- (base32 "0f3cykihfdn3gi6na9p0xjd4jnv26z18m441n5vyg42q9abh4ln0"))))
+ (base32 "0ydxpqkmsn2c341j4r2v6r5r0ig3kbwv3i9jran3iv81s6r6rgjm"))))
(build-system gnu-build-system)
(arguments
'(#:tests? #f ;luajit is distributed without tests
diff --git a/gnu/packages/lynx.scm b/gnu/packages/lynx.scm
index a87316643d..ebca50d34f 100644
--- a/gnu/packages/lynx.scm
+++ b/gnu/packages/lynx.scm
@@ -33,13 +33,15 @@
(define-public lynx
(package
(name "lynx")
- (version "2.8.8")
+ (version "2.8.8rel.2")
(source (origin
(method url-fetch)
- (uri (string-append "http://lynx.isc.org/lynx" version
- "/lynx" version ".tar.bz2"))
+ (uri (string-append
+ "http://lynx.isc.org/lynx"
+ (substring version 0 (string-index version char-set:letter))
+ "/lynx" version ".tar.bz2"))
(sha256
- (base32 "00jcfmx4bxnrzywzzlllz3z45a2mc4fl91ca5lrzz1pyr1s1qnm2"))))
+ (base32 "1rxysl08acqll5b87368f04kckl8sggy1qhnq59gsxyny1ffg039"))))
(build-system gnu-build-system)
(native-inputs `(("pkg-config" ,pkg-config)
("perl" ,perl)))
diff --git a/gnu/packages/screen.scm b/gnu/packages/screen.scm
index bb11c58fc1..58ee42a2a2 100644
--- a/gnu/packages/screen.scm
+++ b/gnu/packages/screen.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
+;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -39,6 +40,13 @@
(inputs
`(("ncurses", ncurses)
("perl" ,perl)))
+ (arguments
+ `(#:configure-flags
+ ;; By default, man and info pages are put in PREFIX/{man,info},
+ ;; but we want them in PREFIX/share/{man,info}.
+ (let ((out (assoc-ref %outputs "out")))
+ (list (string-append "--mandir=" out "/share/man")
+ (string-append "--infodir=" out "/share/info")))))
(home-page "http://www.gnu.org/software/screen/")
(synopsis "Full-screen window manager providing multiple terminals")
(description
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index 6bf68a916e..43c1b6e90b 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -121,14 +122,14 @@ a server that supports the SSH-2 protocol.")
(define-public openssh
(package
(name "openssh")
- (version "6.5p1")
+ (version "6.6p1")
(source (origin
(method url-fetch)
(uri (string-append
"ftp://ftp.fr.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-"
version ".tar.gz"))
(sha256 (base32
- "09wh7mi65aahyxd2xvq1makckhd5laid8c0pb8njaidrbpamw6d1"))))
+ "1fq3w86q05y5nn6z878wm312k0svaprw8k007188fd259dkg1ha8"))))
(build-system gnu-build-system)
(inputs `(("groff" ,groff)
("openssl" ,openssl)
diff --git a/gnu/packages/xiph.scm b/gnu/packages/xiph.scm
index 0e8cb5fafc..2de9074f28 100644
--- a/gnu/packages/xiph.scm
+++ b/gnu/packages/xiph.scm
@@ -3,6 +3,7 @@
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;; Copyright © 2013 David Thompson <dthompson2@worcester.edu>
;;; Copyright © 2014 Sree Harsha Totakura <sreeharsha@totakura.in>
+;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -80,7 +81,8 @@ periodic timestamps for seeking.")
"1gby6hapz9njx4l9g0pndyk4q83z5fgrgc30mfwfgx7bllspsk43"))))
(build-system gnu-build-system)
(propagated-inputs `(("libogg" ,libogg)))
- (arguments `(#:configure-flags '("LDFLAGS=-lm")))
+ (arguments `(#:configure-flags '("LDFLAGS=-lm")
+ #:parallel-tests? #f))
(synopsis "libvorbis, a library implementing the vorbis audio format")
(description
"The libvorbis library implements the ogg vorbis audio format,
@@ -201,7 +203,12 @@ OpenBSD's sndio.")
(list (search-patch "flac-fix-memcmp-not-declared.patch")))))
(build-system gnu-build-system)
(arguments
- `(#:parallel-tests? #f))
+ `(#:parallel-tests? #f
+ ;; By default, man pages are put in PREFIX/man,
+ ;; but we want them in PREFIX/share/man.
+ #:configure-flags (list (string-append "--mandir="
+ (assoc-ref %outputs "out")
+ "/share/man"))))
;; FIXME: configure also looks for xmms, input could be added once it exists
(inputs `(("libogg" ,libogg)))
(synopsis "flac free lossless audio codec")
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 13da10d7cb..2e1eeda245 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -1260,13 +1260,13 @@ tracking.")
"1gdv6559cdz1lfw73x7wsvax1fkvphmayrymprljhyyb5nwk5kkz"))))
(build-system gnu-build-system)
(propagated-inputs
- ;; xft.pc refers to 'xrender'.
- `(("libxrender" ,libxrender)))
- (inputs
- `(("libx11" ,libx11)
- ("xproto" ,xproto)
+ ;; xft.pc refers to all these.
+ `(("libxrender" ,libxrender)
("freetype" ,freetype)
("fontconfig" ,fontconfig)))
+ (inputs
+ `(("libx11" ,libx11)
+ ("xproto" ,xproto)))
(native-inputs
`(("pkg-config" ,pkg-config)))
(home-page "http://www.x.org/wiki/")
@@ -4731,14 +4731,14 @@ icccm: Both client and window-manager helpers for ICCCM.")
(define-public xterm
(package
(name "xterm")
- (version "301")
+ (version "303")
(source (origin
(method url-fetch)
(uri ; XXX: constant URL!
"http://invisible-island.net/datafiles/release/xterm.tar.gz")
(sha256
(base32
- "040rarvv18zg0lk7qy0m3n7gv10mh40jic708wvng01z4rlbpfhz"))))
+ "0n7hay16aam9kfn642ri0wj5yzilbjm3l8znxc2p5dx9pn3rkwla"))))
(build-system gnu-build-system)
(arguments
'(#:configure-flags '("--enable-wide-chars" "--enable-256-color"
diff --git a/gnu/packages/zip.scm b/gnu/packages/zip.scm
index c0fd8c519e..03f3bc22ea 100644
--- a/gnu/packages/zip.scm
+++ b/gnu/packages/zip.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -89,7 +90,9 @@ Compression ratios of 2:1 to 3:1 are common for text files.")
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out")))
(copy-file "unix/Makefile" "Makefile")
- (substitute* "Makefile" (("/usr/local") out))))
+ (substitute* "Makefile"
+ (("/usr/local") out)
+ (("/man/") "/share/man/"))))
%standard-phases)))
(home-page "http://www.info-zip.org/UnZip.html")
(synopsis "Unzip decompression and file extraction utility")
diff --git a/guix/pk-crypto.scm b/guix/pk-crypto.scm
index 50f709418c..481d3f2463 100644
--- a/guix/pk-crypto.scm
+++ b/guix/pk-crypto.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -24,7 +24,8 @@
#:use-module (system foreign)
#:use-module (rnrs bytevectors)
#:use-module (ice-9 match)
- #:export (canonical-sexp?
+ #:export (gcrypt-version
+ canonical-sexp?
error-source
error-string
string->canonical-sexp
@@ -39,6 +40,7 @@
canonical-sexp-list?
bytevector->hash-data
hash-data->bytevector
+ key-type
sign
verify
generate-key
@@ -85,6 +87,17 @@
"Return a pointer to symbol FUNC in libgcrypt."
(dynamic-func func lib))))
+(define gcrypt-version
+ ;; According to the manual, this function must be called before any other,
+ ;; and it's not clear whether it can be called more than once. So call it
+ ;; right here from the top level.
+ (let* ((ptr (libgcrypt-func "gcry_check_version"))
+ (proc (pointer->procedure '* ptr '(*)))
+ (version (pointer->string (proc %null-pointer))))
+ (lambda ()
+ "Return the version number of libgcrypt as a string."
+ version)))
+
(define finalize-canonical-sexp!
(libgcrypt-func "gcry_sexp_release"))
@@ -232,15 +245,31 @@ Return #f if that element does not exist, or if it's a list."
"Return an s-expression representing NUMBER."
(string->canonical-sexp (string-append "#" (number->string number 16) "#")))
-(define* (bytevector->hash-data bv #:optional (hash-algo "sha256"))
+(define* (bytevector->hash-data bv
+ #:optional
+ (hash-algo "sha256")
+ #:key (key-type 'ecc))
"Given BV, a bytevector containing a hash, return an s-expression suitable
-for use as the data for 'sign'."
+for use as the data for 'sign'. KEY-TYPE must be a symbol: 'dsa, 'ecc, or
+'rsa."
(string->canonical-sexp
- (format #f "(data (flags pkcs1) (hash \"~a\" #~a#))"
+ (format #f "(data (flags ~a) (hash \"~a\" #~a#))"
+ (case key-type
+ ((ecc dsa) "rfc6979")
+ ((rsa) "pkcs1")
+ (else (error "unknown key type" key-type)))
hash-algo
(bytevector->base16-string bv))))
-(define (hash-data->bytevector data)
+(define (key-type sexp)
+ "Return a symbol denoting the type of key representing by SEXP--e.g., 'rsa',
+'ecc'--or #f if SEXP does not denote a valid key."
+ (case (canonical-sexp-nth-data sexp 0)
+ ((public-key private-key)
+ (canonical-sexp-nth-data (canonical-sexp-nth sexp 1) 0))
+ (else #f)))
+
+(define* (hash-data->bytevector data)
"Return two values: the hash value (a bytevector), and the hash algorithm (a
string) extracted from DATA, an sexp as returned by 'bytevector->hash-data'.
Return #f if DATA does not conform."
diff --git a/guix/scripts/archive.scm b/guix/scripts/archive.scm
index 0ab7686585..c900fcecb9 100644
--- a/guix/scripts/archive.scm
+++ b/guix/scripts/archive.scm
@@ -87,6 +87,13 @@ Export/import one or more packages from/to the store.\n"))
(newline)
(show-bug-report-information))
+(define %key-generation-parameters
+ ;; Default key generation parameters. We prefer Ed25519, but it was
+ ;; introduced in libgcrypt 1.6.0.
+ (if (version>? (gcrypt-version) "1.6.0")
+ "(genkey (ecdsa (curve Ed25519) (flags rfc6979)))"
+ "(genkey (rsa (nbits 4:4096)))"))
+
(define %options
;; Specifications of the command-line options.
(cons* (option '(#\h "help") #f #f
@@ -110,13 +117,16 @@ Export/import one or more packages from/to the store.\n"))
(lambda (opt name arg result)
(catch 'gcry-error
(lambda ()
+ ;; XXX: Curve25519 was actually introduced in
+ ;; libgcrypt 1.6.0.
(let ((params
(string->canonical-sexp
- (or arg "(genkey (rsa (nbits 4:4096)))"))))
+ (or arg %key-generation-parameters))))
(alist-cons 'generate-key params result)))
- (lambda args
- (leave (_ "invalid key generation parameters: ~s~%")
- arg)))))
+ (lambda (key err)
+ (leave (_ "invalid key generation parameters: ~a: ~a~%")
+ (error-source err)
+ (error-string err))))))
(option '("authorize") #f #f
(lambda (opt name arg result)
(alist-cons 'authorize #t result)))
diff --git a/guix/scripts/authenticate.scm b/guix/scripts/authenticate.scm
index 27580dedff..927dbe8afc 100644
--- a/guix/scripts/authenticate.scm
+++ b/guix/scripts/authenticate.scm
@@ -39,11 +39,12 @@
(call-with-input-file file
(compose string->canonical-sexp get-string-all)))
-(define (read-hash-data file)
- "Read sha256 hash data from FILE and return it as a gcrypt sexp."
+(define (read-hash-data file key-type)
+ "Read sha256 hash data from FILE and return it as a gcrypt sexp. KEY-TYPE
+is a symbol representing the type of public key algo being used."
(let* ((hex (call-with-input-file file get-string-all))
(bv (base16-string->bytevector (string-trim-both hex))))
- (bytevector->hash-data bv)))
+ (bytevector->hash-data bv #:key-type key-type)))
;;;
@@ -64,7 +65,7 @@
(leave
(_ "cannot find public key for secret key '~a'~%")
key)))
- (data (read-hash-data hash-file))
+ (data (read-hash-data hash-file (key-type public-key)))
(signature (signature-sexp data secret-key public-key)))
(display (canonical-sexp->string signature))
#t))
diff --git a/guix/scripts/offload.scm b/guix/scripts/offload.scm
index 95e35088a1..e078012582 100644
--- a/guix/scripts/offload.scm
+++ b/guix/scripts/offload.scm
@@ -159,19 +159,35 @@ determined."
;; (leave (_ "failed to execute '~a': ~a~%")
;; %lsh-command (strerror (system-error-errno args))))))
-(define (remote-pipe machine mode command)
+(define-syntax with-error-to-port
+ (syntax-rules ()
+ ((_ port exp0 exp ...)
+ (let ((new port)
+ (old (current-error-port)))
+ (dynamic-wind
+ (lambda ()
+ (set-current-error-port new))
+ (lambda ()
+ exp0 exp ...)
+ (lambda ()
+ (set-current-error-port old)))))))
+
+(define* (remote-pipe machine mode command
+ #:key (error-port (current-error-port)))
"Run COMMAND on MACHINE, assuming an lsh gateway has been set up."
(catch 'system-error
(lambda ()
- (apply open-pipe* mode %lshg-command "-z"
- "-l" (build-machine-user machine)
- "-p" (number->string (build-machine-port machine))
+ ;; Let the child inherit ERROR-PORT.
+ (with-error-to-port error-port
+ (apply open-pipe* mode %lshg-command "-z"
+ "-l" (build-machine-user machine)
+ "-p" (number->string (build-machine-port machine))
- ;; XXX: Remove '-i' when %LSHG-COMMAND really is lshg.
- "-i" (build-machine-private-key machine)
+ ;; XXX: Remove '-i' when %LSHG-COMMAND really is lshg.
+ "-i" (build-machine-private-key machine)
- (build-machine-name machine)
- command))
+ (build-machine-name machine)
+ command)))
(lambda args
(warning (_ "failed to execute '~a': ~a~%")
%lshg-command (strerror (system-error-errno args)))
@@ -257,9 +273,18 @@ connections allowed to MACHINE."
;;; Offloading.
;;;
+(define (build-log-port)
+ "Return the default port where build logs should be sent. The default is
+file descriptor 4, which is open by the daemon before running the offload
+hook."
+ (let ((port (fdopen 4 "w0")))
+ ;; Make sure file descriptor 4 isn't closed when PORT is GC'd.
+ (set-port-revealed! port 1)
+ port))
+
(define* (offload drv machine
#:key print-build-trace? (max-silent-time 3600)
- build-timeout (log-port (current-output-port)))
+ build-timeout (log-port (build-log-port)))
"Perform DRV on MACHINE, assuming DRV and its prerequisites are available
there, and write the build log to LOG-PORT. Return the exit status."
(format (current-error-port) "offloading '~a' to '~a'...~%"
@@ -276,7 +301,11 @@ there, and write the build log to LOG-PORT. Return the exit status."
(list (format #f "--timeout=~a"
build-timeout))
'())
- ,(derivation-file-name drv)))))
+ ,(derivation-file-name drv))
+
+ ;; Since 'guix build' writes the build log to its
+ ;; stderr, everything will go directly to LOG-PORT.
+ #:error-port log-port)))
(let loop ((line (read-line pipe)))
(unless (eof-object? line)
(display line log-port)
@@ -597,6 +626,7 @@ This tool is meant to be used internally by 'guix-daemon'.\n"))
;;; Local Variables:
;;; eval: (put 'with-machine-lock 'scheme-indent-function 2)
;;; eval: (put 'with-file-lock 'scheme-indent-function 1)
+;;; eval: (put 'with-error-to-port 'scheme-indent-function 1)
;;; End:
;;; offload.scm ends here
diff --git a/guix/scripts/substitute-binary.scm b/guix/scripts/substitute-binary.scm
index 54f4aaa6c0..7ac12ddef2 100755
--- a/guix/scripts/substitute-binary.scm
+++ b/guix/scripts/substitute-binary.scm
@@ -125,9 +125,10 @@ again."
(sigaction SIGALRM SIG_DFL)
(apply values result)))))
-(define* (fetch uri #:key (buffered? #t) (timeout? #t))
+(define* (fetch uri #:key (buffered? #t) (timeout? #t) (quiet-404? #f))
"Return a binary input port to URI and the number of bytes it's expected to
-provide."
+provide. If QUIET-404? is true, HTTP 404 error conditions are passed through
+to the caller without emitting an error message."
(case (uri-scheme uri)
((file)
(let ((port (open-file (uri-path uri)
@@ -135,10 +136,12 @@ provide."
(values port (stat:size (stat port)))))
((http)
(guard (c ((http-get-error? c)
- (leave (_ "download from '~a' failed: ~a, ~s~%")
- (uri->string (http-get-error-uri c))
- (http-get-error-code c)
- (http-get-error-reason c))))
+ (let ((code (http-get-error-code c)))
+ (if (and (= code 404) quiet-404?)
+ (raise c)
+ (leave (_ "download from '~a' failed: ~a, ~s~%")
+ (uri->string (http-get-error-uri c))
+ code (http-get-error-reason c))))))
;; On Guile 2.0.5, `http-fetch' fetches the whole thing at once. So
;; honor TIMEOUT? to disable the timeout when fetching a nar.
;;
@@ -275,8 +278,9 @@ reading PORT."
"Return the <narinfo> record for PATH, or #f if CACHE does not hold PATH."
(define (download url)
;; Download the .narinfo from URL, and return its contents as a list of
- ;; key/value pairs.
- (false-if-exception (fetch (string->uri url))))
+ ;; key/value pairs. Don't emit an error message upon 404.
+ (false-if-exception (fetch (string->uri url)
+ #:quiet-404? #t)))
(and (string=? (cache-store-directory cache) (%store-prefix))
(and=> (download (string-append (cache-url cache) "/"
diff --git a/nix-upstream b/nix-upstream
-Subproject bf0ad8aabca67b4faabe3a1ac3c57884ae9924f
+Subproject 3fc056927c962ec9778e94528f2f9ae316afca4
diff --git a/nix/nix-daemon/guix-daemon.cc b/nix/nix-daemon/guix-daemon.cc
index 79cd080363..086b846ce1 100644
--- a/nix/nix-daemon/guix-daemon.cc
+++ b/nix/nix-daemon/guix-daemon.cc
@@ -287,10 +287,11 @@ main (int argc, char *argv[])
string subs = getEnv ("NIX_SUBSTITUTERS", "default");
if (subs == "default")
- settings.substituters.push_back (settings.nixLibexecDir
- + "/guix/substitute-binary");
- else
- settings.substituters = tokenizeString<Strings> (subs, ":");
+ {
+ string subst =
+ settings.nixLibexecDir + "/guix/substitute-binary";
+ setenv ("NIX_SUBSTITUTERS", subst.c_str (), 1);
+ }
}
if (geteuid () == 0 && settings.buildUsersGroup.empty ())
diff --git a/test-env.in b/test-env.in
index 9b5817f4ee..3853ce91ef 100644
--- a/test-env.in
+++ b/test-env.in
@@ -30,7 +30,7 @@ then
NIX_IGNORE_SYMLINK_STORE=1 # in case the store is a symlink
NIX_STORE_DIR="@GUIX_TEST_ROOT@/store"
NIX_LOCALSTATE_DIR="@GUIX_TEST_ROOT@/var"
- NIX_LOG_DIR="@GUIX_TEST_ROOT@/var/log/nix"
+ NIX_LOG_DIR="@GUIX_TEST_ROOT@/var/log/guix"
NIX_DB_DIR="@GUIX_TEST_ROOT@/db"
NIX_ROOT_FINDER="@abs_top_builddir@/nix/scripts/list-runtime-roots"
diff --git a/tests/guix-register.sh b/tests/guix-register.sh
index ee633af4f9..019a451b3b 100644
--- a/tests/guix-register.sh
+++ b/tests/guix-register.sh
@@ -84,8 +84,8 @@ guix-register --prefix "$new_store" "$closure"
NIX_IGNORE_SYMLINK_STORE=1
NIX_STORE_DIR="$new_store_dir"
NIX_STATE_DIR="$new_store$localstatedir"
-NIX_LOG_DIR="$new_store$localstatedir/log/nix"
-NIX_DB_DIR="$new_store$localstatedir/nix/db"
+NIX_LOG_DIR="$new_store$localstatedir/log/guix"
+NIX_DB_DIR="$new_store$localstatedir/guix/db"
export NIX_IGNORE_SYMLINK_STORE NIX_STORE_DIR NIX_STATE_DIR \
NIX_LOG_DIR NIX_DB_DIR
diff --git a/tests/pk-crypto.scm b/tests/pk-crypto.scm
index 6774dd4157..294c7f3df8 100644
--- a/tests/pk-crypto.scm
+++ b/tests/pk-crypto.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -31,7 +31,7 @@
;; Test the (guix pk-crypto) module.
(define %key-pair
- ;; Key pair that was generated with:
+ ;; RSA key pair that was generated with:
;; (generate-key (string->canonical-sexp "(genkey (rsa (nbits 4:1024)))"))
;; which takes a bit of time.
"(key-data
@@ -48,6 +48,20 @@
(q #00E9AD22F158060BC9AE3601DA623AFC60FFF3058795802CA92371C00097335CF9A23D7782DE353C9DBA93D7BB99E6A24A411107605E722481C5C191F80D7EB77F#)
(u #59B45B95AE01A7A7370FAFDB08FE73A4793CE37F228961B09B1B1E7DDAD9F8D3E28F5C5E8B4B067E6B8E0BBF3F690B42991A79E46108DDCDA2514323A66964DE#))))")
+(define %ecc-key-pair
+ ;; Ed25519 key pair generated with:
+ ;; (generate-key (string->canonical-sexp "(genkey (ecdsa (curve Ed25519) (flags rfc6979 transient)))"))
+ "(key-data
+ (public-key
+ (ecc
+ (curve Ed25519)
+ (q #94869C1B9E69DB8DD910B7F7F4D6E56A63A964A59AE8F90F6703ACDDF6F50C81#)))
+ (private-key
+ (ecc
+ (curve Ed25519)
+ (q #94869C1B9E69DB8DD910B7F7F4D6E56A63A964A59AE8F90F6703ACDDF6F50C81#)
+ (d #6EFB32D0B4EC6B3237B523539F1979379B82726AAA605EB2FBA6775B2B777B78#))))")
+
(test-begin "pk-crypto")
(let ((sexps '("(foo bar)"
@@ -148,11 +162,35 @@
(and (string=? algo "sha256")
(bytevector=? value bv))))))
+(test-equal "key-type"
+ '(rsa ecc)
+ (map (compose key-type
+ (cut find-sexp-token <> 'public-key)
+ string->canonical-sexp)
+ (list %key-pair %ecc-key-pair)))
+
(test-assert "sign + verify"
(let* ((pair (string->canonical-sexp %key-pair))
(secret (find-sexp-token pair 'private-key))
(public (find-sexp-token pair 'public-key))
(data (bytevector->hash-data
+ (sha256 (string->utf8 "Hello, world."))
+ #:key-type (key-type public)))
+ (sig (sign data secret)))
+ (and (verify sig data public)
+ (not (verify sig
+ (bytevector->hash-data
+ (sha256 (string->utf8 "Hi!"))
+ #:key-type (key-type public))
+ public)))))
+
+;; Ed25519 appeared in libgcrypt 1.6.0.
+(test-skip (if (version>? (gcrypt-version) "1.6.0") 0 1))
+(test-assert "sign + verify, Ed25519"
+ (let* ((pair (string->canonical-sexp %ecc-key-pair))
+ (secret (find-sexp-token pair 'private-key))
+ (public (find-sexp-token pair 'public-key))
+ (data (bytevector->hash-data
(sha256 (string->utf8 "Hello, world."))))
(sig (sign data secret)))
(and (verify sig data public)
diff --git a/tests/store.scm b/tests/store.scm
index 78023a423d..d23024bcbc 100644
--- a/tests/store.scm
+++ b/tests/store.scm
@@ -87,7 +87,39 @@
(%store-prefix)
"/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7/bin/guile")))))
-(test-skip (if %store 0 11))
+(test-skip (if %store 0 13))
+
+(test-assert "valid-path? live"
+ (let ((p (add-text-to-store %store "hello" "hello, world")))
+ (valid-path? %store p)))
+
+(test-assert "valid-path? false"
+ (not (valid-path? %store
+ (string-append (%store-prefix) "/"
+ (make-string 32 #\e) "-foobar"))))
+
+(test-assert "valid-path? error"
+ (with-store s
+ (guard (c ((nix-protocol-error? c) #t))
+ (valid-path? s "foo")
+ #f)))
+
+(test-assert "valid-path? recovery"
+ ;; Prior to Nix commit 51800e0 (18 Mar. 2014), the daemon would immediately
+ ;; close the connection after receiving a 'valid-path?' RPC with a non-store
+ ;; file name. See
+ ;; <http://article.gmane.org/gmane.linux.distributions.nixos/12411> for
+ ;; details.
+ (with-store s
+ (let-syntax ((true-if-error (syntax-rules ()
+ ((_ exp)
+ (guard (c ((nix-protocol-error? c) #t))
+ exp #f)))))
+ (and (true-if-error (valid-path? s "foo"))
+ (true-if-error (valid-path? s "bar"))
+ (true-if-error (valid-path? s "baz"))
+ (true-if-error (valid-path? s "chbouib"))
+ (valid-path? s (add-text-to-store s "valid" "yeah"))))))
(test-assert "hash-part->path"
(let ((p (add-text-to-store %store "hello" "hello, world")))