aboutsummaryrefslogtreecommitdiff
path: root/gnu/tests/ganeti.scm
blob: f647e9554ca14ccfe7f440ca3e5705ea875e3b08 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
;;;
;;; 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 tests ganeti)
  #:use-module (gnu)
  #:use-module (gnu tests)
  #:use-module (gnu system vm)
  #:use-module (gnu services)
  #:use-module (gnu services ganeti)
  #:use-module (gnu services networking)
  #:use-module (gnu services ssh)
  #:use-module (gnu packages virtualization)
  #:use-module (guix gexp)
  #:use-module (ice-9 format)
  #:export (%test-ganeti-kvm %test-ganeti-lxc))

(define %ganeti-os
  (operating-system
    (host-name "gnt1")
    (timezone "Etc/UTC")
    (locale "en_US.UTF-8")

    (bootloader (bootloader-configuration
                 (bootloader grub-bootloader)
                 (targets '("/dev/vda"))))
    (file-systems (cons (file-system
                          (device (file-system-label "my-root"))
                          (mount-point "/")
                          (type "ext4"))
                        %base-file-systems))
    (firmware '())

    ;; The hosts file must contain a nonlocal IP for host-name.
    ;; In addition, the cluster name must resolve to an IP address that
    ;; is not currently provisioned.
    (hosts-file (plain-file "hosts" (format #f "
127.0.0.1       localhost
::1             localhost
10.0.2.15       gnt1.example.com gnt1
192.168.254.254 ganeti.example.com
")))

    (packages (append (list ganeti-instance-debootstrap ganeti-instance-guix)
                      %base-packages))
    (services
     (append (list (service static-networking-service-type
                            (list %qemu-static-networking))
                   (service openssh-service-type
                            (openssh-configuration
                             (permit-root-login 'prohibit-password)))

                   (service ganeti-service-type
                            (ganeti-configuration
                             (file-storage-paths '("/srv/ganeti/file-storage"))
                             (rapi-configuration
                              (ganeti-rapi-configuration
                               ;; Disable TLS so we can test the RAPI without
                               ;; pulling in GnuTLS.
                               (ssl? #f)))
                             (os %default-ganeti-os))))
             %base-services))))

(define* (run-ganeti-test hypervisor #:key
                          (master-netdev "eth0")
                          (hvparams '())
                          (extra-packages '())
                          (rapi-port 5080))
  "Run tests in %GANETI-OS."
  (define os
    (marionette-operating-system
     (operating-system
       (inherit %ganeti-os)
       (packages (append extra-packages
                         (operating-system-packages %ganeti-os))))
     #:imported-modules '((gnu services herd)
                          (guix combinators))))

  (define %forwarded-rapi-port 5080)

  (define vm
    (virtual-machine
     (operating-system os)
     ;; Some of the daemons are fairly memory-hungry.
     (memory-size 512)
     ;; Forward HTTP ports so we can access them from the "outside".
     (port-forwardings `((,%forwarded-rapi-port . ,rapi-port)))))

  (define test
    (with-imported-modules '((gnu build marionette))
      #~(begin
          (use-modules (srfi srfi-11) (srfi srfi-64)
                       (web uri) (web client) (web response)
                       (ice-9 iconv)
                       (gnu build marionette))

          (define marionette
            (make-marionette (list #$vm)))

          (test-runner-current (system-test-runner #$output))
          (test-begin "ganeti")

          ;; Ganeti uses the Shepherd to start/stop daemons, so make sure
          ;; it is ready before we begin.  It takes a while because all
          ;; Ganeti daemons fail to start initially.
          (test-assert "shepherd is ready"
            (wait-for-unix-socket "/var/run/shepherd/socket" marionette))

          (test-eq "gnt-cluster init"
            0
            (marionette-eval
             '(begin
                (setenv
                 "PATH"
                 ;; Init needs to run 'ssh-keygen', 'ip', etc.
                 "/run/current-system/profile/sbin:/run/current-system/profile/bin")
                (system* #$(file-append ganeti "/sbin/gnt-cluster") "init"
                         (string-append "--master-netdev=" #$master-netdev)
                         ;; TODO: Enable more disk backends.
                         "--enabled-disk-templates=file"
                         (string-append "--enabled-hypervisors="
                                        #$hypervisor)
                         (string-append "--hypervisor-parameters="
                                        #$hypervisor ":"
                                        (string-join '#$hvparams "\n"))
                         ;; Set the default NIC mode to 'routed' to avoid having to
                         ;; configure a full bridge to placate 'gnt-cluster verify'.
                         "--nic-parameters=mode=routed,link=eth0"
                         "ganeti.example.com"))
             marionette))

          ;; Disable the watcher while doing daemon tests to prevent interference.
          (test-eq "watcher pause"
            0
            (marionette-eval
             '(begin
                (system* #$(file-append ganeti "/sbin/gnt-cluster")
                         "watcher" "pause" "1h"))
             marionette))

          (test-assert "force-start wconfd"
            ;; Check that the 'force-start' Shepherd action works, used in a
            ;; master-failover scenario.
            (marionette-eval
             '(begin
                (setenv "PATH" "/run/current-system/profile/bin")
                (invoke "herd" "stop" "ganeti-wconfd")
                (invoke "herd" "disable" "ganeti-wconfd")
                (invoke "herd" "force-start" "ganeti-wconfd"))
             marionette))

          ;; Verify that the cluster is healthy.
          (test-eq "gnt-cluster verify 1"
            0
            (marionette-eval
             '(begin
                (system* #$(file-append ganeti "/sbin/gnt-cluster") "verify"))
             marionette))

          ;; Try stopping and starting daemons with daemon-util like
          ;; 'gnt-node add', 'gnt-cluster init', etc.
          (test-eq "daemon-util stop-all"
            0
            (marionette-eval
             '(begin
                (system* #$(file-append ganeti "/lib/ganeti/daemon-util")
                         "stop-all"))
             marionette))

          (test-eq "daemon-util start-all"
            0
            (marionette-eval
             '(begin
                (system* #$(file-append ganeti "/lib/ganeti/daemon-util")
                         "start-all"))
             marionette))

          ;; Check that the cluster is still healthy after the daemon restarts.
          (test-eq "gnt-cluster verify 2"
            0
            (marionette-eval
             '(begin
                (system* #$(file-append ganeti "/sbin/gnt-cluster") "verify"))
             marionette))

          (test-eq "watcher continue"
            0
            (marionette-eval
             '(begin
                (system* #$(file-append ganeti "/sbin/gnt-cluster")
                         "watcher" "continue"))
             marionette))

          ;; Try accessing the RAPI.
          (test-equal "http-get RAPI version"
            '(200 "2\n")
            (let-values
                (((response text)
                  (http-get #$(simple-format
                               #f "http://localhost:~A/version"
                               %forwarded-rapi-port)
                            #:decode-body? #f)))
              (list (response-code response)
                    ;; The API response lacks a content-type, so
                    ;; (http-client) won't decode it for us.
                    (bytevector->string text "UTF-8"))))

          (test-equal "gnt-os list"
            "debootstrap+default\nguix+default\n"
            (marionette-eval
             '(begin
                (use-modules (ice-9 popen))
                (let* ((port (open-pipe*
                              OPEN_READ
                              #$(file-append ganeti "/sbin/gnt-os")
                              "list" "--no-headers"))
                       (output (get-string-all port)))
                  (close-pipe port)
                  output))
             marionette))

          (test-eq "gnt-cluster destroy"
            0
            (marionette-eval
             '(begin
                (system* #$(file-append ganeti "/sbin/gnt-cluster")
                         "destroy" "--yes-do-it"))
             marionette))

          (test-end))))

  (gexp->derivation (string-append "ganeti-" hypervisor "-test") test))

(define %test-ganeti-kvm
  (system-test
   (name "ganeti-kvm")
   (description "Provision a Ganeti cluster using the KVM hypervisor.")
   (value (run-ganeti-test "kvm"
                           ;; Set kernel_path to an empty string to prevent
                           ;; 'gnt-cluster verify' from testing for its presence.
                           #:hvparams '("kernel_path=")
                           #:extra-packages (list qemu)))))

(define %test-ganeti-lxc
  (system-test
   (name "ganeti-lxc")
   (description "Provision a Ganeti cluster using LXC as the hypervisor.")
   (value (run-ganeti-test "lxc"
                           #:extra-packages (list lxc)))))
class='add'>+ (base32
+ "1y8q7s2bn4gdknw1wjikdnar2b5pgz3nv3220lxrlgpsf23x82vi"))))
+ (build-system haskell-build-system)
+ (arguments
+ `(#:tests? #f)) ; tests require old version of ghc-hunit (0.9)
+ (native-inputs `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
+ ("ghc-puremd5" ,ghc-puremd5)
+ ("ghc-tasty" ,ghc-tasty)
+ ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
+ ("ghc-hunit" ,ghc-hunit)))
+ (home-page "https://github.com/hvr/cryptohash-md5")
+ (synopsis "MD5 implementation for Haskell")
+ (description "This Haskell package provides implementation of MD5.")
+ (license license:bsd-3)))
+
+(define-public ghc-cryptohash-sha1
+ (package
+ (name "ghc-cryptohash-sha1")
+ (version "0.11.100.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://hackage.haskell.org/package/"
+ "cryptohash-sha1-" version "/"
+ "cryptohash-sha1-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1aqdxdhxhl9jldh951djpwxx8z7gzaqspxl7iwpl84i5ahrsyy9w"))))
+ (build-system haskell-build-system)
+ (arguments
+ `(#:tests? #f)) ; tests require old version of ghc-hunit (0.9)
+ (native-inputs `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
+ ("ghc-sha" ,ghc-sha)
+ ("ghc-tasty" ,ghc-tasty)
+ ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
+ ("ghc-hunit" ,ghc-hunit)))
+ (home-page "https://github.com/hvr/cryptohash-sha1")
+ (synopsis "SHA-1 implementation for Haskell")
+ (description "This Haskell package provides an incremental and one-pass,
+pure API to the @uref{https://en.wikipedia.org/wiki/SHA-1, SHA-1 hash algorithm},
+including @uref{https://en.wikipedia.org/wiki/HMAC, HMAC support}, with
+performance close to the fastest implementations available in other languages.
+
+The implementation is made in C with a haskell FFI wrapper that hides
+the C implementation.")
+ (license license:bsd-3)))
+
+(define-public ghc-cryptonite
+ (package
+ (name "ghc-cryptonite")
+ (version "0.19")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://hackage.haskell.org/package/"
+ "cryptonite/cryptonite-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1rw5k34vpn4134yrzdhf0rsshsrkixfbv9ap18di2n00z2cw1shw"))))
+ (build-system haskell-build-system)
+ (inputs
+ `(("ghc-memory" ,ghc-memory)
+ ("ghc-byteable" ,ghc-byteable)))
+ (native-inputs
+ `(("ghc-tasty" ,ghc-tasty)
+ ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
+ ("ghc-tasty-hunit" ,ghc-tasty-hunit)
+ ("ghc-tasty-kat" ,ghc-tasty-kat)))
+ (home-page "https://github.com/haskell-crypto/cryptonite")
+ (synopsis "Cryptography primitives")
+ (description
+ "This package is a repository of cryptographic primitives for Haskell.
+It supports a wide range of symmetric ciphers, cryptographic hash functions,
+public key algorithms, key derivation numbers, cryptographic random number
+generators, and more.")
+ (license license:bsd-3)))
+
+(define-public ghc-digest
+ (package
+ (name "ghc-digest")
+ (version "0.0.1.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://hackage.haskell.org/package/digest/digest-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32
+ "04gy2zp8yzvv7j9bdfvmfzcz3sqyqa6rwslqcn4vyair2vmif5v4"))))
+ (build-system haskell-build-system)
+ (inputs
+ `(("zlib" ,zlib)))
+ (home-page
+ "https://hackage.haskell.org/package/digest")
+ (synopsis
+ "Various cryptographic hashes for bytestrings")
+ (description
+ "This package provides efficient cryptographic hash implementations for
+strict and lazy bytestrings. For now, CRC32 and Adler32 are supported; they
+are implemented as FFI bindings to efficient code from zlib.")
+ (license license:bsd-3)))
+
+(define-public ghc-entropy
+ (package
+ (name "ghc-entropy")
+ (version "0.3.8")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://hackage.haskell.org/package/"
+ "entropy-" version "/"
+ "entropy-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1l3lfigqvdlmxkz1wl7zdkmc0i2r5p6z4xzhiw8xdsbsw7aljfkl"))))
+ (build-system haskell-build-system)
+ (home-page "https://github.com/TomMD/entropy")
+ (synopsis "Provides platform independent entropy source for Haskell")
+ (description "This Haskell package provides a platform independent method
+to obtain cryptographically strong entropy.")
+ (license license:bsd-3)))
+
+(define-public ghc-pem
+ (package
+ (name "ghc-pem")
+ (version "0.2.2")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://hackage.haskell.org/package/"
+ "pem/pem-" version ".tar.gz"))
+ (sha256
+ (base32
+ "162sk5sg22w21wqz5qv8kx6ibxp99v5p20g3nknhm1kddk3hha1p"))))
+ (build-system haskell-build-system)
+ (inputs
+ `(("ghc-mtl" ,ghc-mtl)
+ ("ghc-base64-bytestring" ,ghc-base64-bytestring)))
+ (native-inputs
+ `(("ghc-test-framework" ,ghc-test-framework)
+ ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
+ ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
+ ("ghc-hunit" ,ghc-hunit)
+ ("ghc-quickcheck" ,ghc-quickcheck)))
+ (home-page "https://github.com/vincenthz/hs-pem")
+ (synopsis "Privacy Enhanced Mail (PEM) format reader and writer")
+ (description
+ "This library provides readers and writers for the @dfn{Privacy Enhanced
+Mail} (PEM) format.")
+ (license license:bsd-3)))
+
+(define-public ghc-puremd5
+ (package
+ (name "ghc-puremd5")
+ (version "2.1.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://hackage.haskell.org/package/"
+ "pureMD5-" version "/"
+ "pureMD5-" version ".tar.gz"))
+ (sha256
+ (base32
+ "0zdilz41cla2ck7mcw1a9702gyg2abq94mqahr4vci9sbs53bwxy"))))
+ (build-system haskell-build-system)
+ (inputs `(("ghc-cereal" ,ghc-cereal)
+ ("ghc-crypto-api" ,ghc-crypto-api)
+ ("ghc-tagged" ,ghc-tagged)))
+ (native-inputs `(("ghc-crypto-api-tests" ,ghc-crypto-api-tests)
+ ("ghc-quickcheck" ,ghc-quickcheck)
+ ("ghc-test-framework" ,ghc-test-framework)
+ ("ghc-test-framework-quickcheck2"
+ ,ghc-test-framework-quickcheck2)
+ ("ghc-pretty-hex" ,ghc-pretty-hex)))
+ (home-page "https://github.com/TomMD/pureMD5")
+ (synopsis "Haskell implementation of the MD5 hash algorithm")
+ (description "This package provides a Haskell-only implementation of
+the MD5 digest (hash) algorithm. This now supports the @code{crypto-api} class
+interface.")
+ (license license:bsd-3)))
+
+(define-public ghc-sha
+ (package
+ (name "ghc-sha")
+ (version "1.6.4.2")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://hackage.haskell.org/package/"
+ "SHA/SHA-" version ".tar.gz"))
+ (sha256
+ (base32
+ "134ajm87fm4lpsw86m9q8apv20dw4bpk46raa389zr6bcdpifw64"))))
+ (build-system haskell-build-system)
+ (native-inputs
+ `(("ghc-quickcheck" ,ghc-quickcheck)
+ ("ghc-test-framework" ,ghc-test-framework)
+ ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+ (home-page "https://hackage.haskell.org/package/SHA")
+ (synopsis "SHA suite of message digest functions")
+ (description
+ "This library implements the SHA suite of message digest functions,
+according to NIST FIPS 180-2 (with the SHA-224 addendum), as well as the
+SHA-based HMAC routines. The functions have been tested against most of the
+NIST and RFC test vectors for the various functions. While some attention has
+been paid to performance, these do not presently reach the speed of well-tuned
+libraries, like OpenSSL.")
+ (license license:bsd-3)))
+
+(define-public ghc-x509
+ (package
+ (name "ghc-x509")
+ (version "1.6.3")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://hackage.haskell.org/package/"
+ "x509/x509-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1pmsby29abn485fvnymsgipvb3p1ch9c591xj5ncszkf0ivjiiin"))))
+ (build-system haskell-build-system)
+ (inputs
+ `(("ghc-memory" ,ghc-memory)
+ ("ghc-mtl" ,ghc-mtl)
+ ("ghc-hourglass" ,ghc-hourglass)
+ ("ghc-pem" ,ghc-pem)
+ ("ghc-asn1-types" ,ghc-asn1-types)
+ ("ghc-asn1-encoding" ,ghc-asn1-encoding)
+ ("ghc-asn1-parse" ,ghc-asn1-parse)
+ ("ghc-cryptonite" ,ghc-cryptonite)))
+ (native-inputs
+ `(("ghc-tasty" ,ghc-tasty)
+ ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+ (home-page "https://github.com/vincenthz/hs-certificate")
+ (synopsis "X509 reader and writer")
+ (description
+ "This library provides functions to read and write X509 certificates.")
+ (license license:bsd-3)))
+
+(define-public ghc-x509-store
+ (package
+ (name "ghc-x509-store")
+ (version "1.6.1")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://hackage.haskell.org/package/"
+ "x509-store/x509-store-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "01abx528i9f7djq2772xyna8x2mykrnwqkcfrapcx7z3bhprvml3"))))
+ (build-system haskell-build-system)
+ (inputs
+ `(("ghc-mtl" ,ghc-mtl)
+ ("ghc-pem" ,ghc-pem)
+ ("ghc-asn1-types" ,ghc-asn1-types)
+ ("ghc-asn1-encoding" ,ghc-asn1-encoding)
+ ("ghc-cryptonite" ,ghc-cryptonite)
+ ("ghc-x509" ,ghc-x509)))
+ (home-page "https://github.com/vincenthz/hs-certificate")
+ (synopsis "X.509 collection accessing and storing methods")
+ (description
+ "This package provides functions for accessing and storing X.509
+collections, certificates, revocation lists, and exception lists.")
+ (license license:bsd-3)))
+
+(define-public ghc-x509-validation
+ (package
+ (name "ghc-x509-validation")
+ (version "1.6.3")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://hackage.haskell.org/package/"
+ "x509-validation/x509-validation-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1qr1v561hdlhjgqjv9pj9mbk0q1xf2mr1j67ghy93nlxxyzd7dw0"))))
+ (build-system haskell-build-system)
+ (inputs
+ `(("ghc-memory" ,ghc-memory)
+ ("ghc-byteable" ,ghc-byteable)
+ ("ghc-mtl" ,ghc-mtl)
+ ("ghc-hourglass" ,ghc-hourglass)
+ ("ghc-data-default-class" ,ghc-data-default-class)
+ ("ghc-pem" ,ghc-pem)
+ ("ghc-asn1-types" ,ghc-asn1-types)
+ ("ghc-asn1-encoding" ,ghc-asn1-encoding)
+ ("ghc-x509" ,ghc-x509)
+ ("ghc-x509-store" ,ghc-x509-store)
+ ("ghc-cryptonite" ,ghc-cryptonite)))
+ (home-page "https://github.com/vincenthz/hs-certificate")
+ (synopsis "X.509 certificate and revocation list validation")
+ (description
+ "This package provides functions for X.509 certificate and revocation
+list validation.")
+ (license license:bsd-3)))
+
+(define-public ghc-x509-system
+ (package
+ (name "ghc-x509-system")
+ (version "1.6.1")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://hackage.haskell.org/package/"
+ "x509-system/x509-system-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "10qf60d2f9jqwnbrhsb2cwpi86xg66m6dxndlxw967v1cdb3h6gf"))))
+ (build-system haskell-build-system)
+ (inputs
+ `(("ghc-mtl" ,ghc-mtl)
+ ("ghc-pem" ,ghc-pem)
+ ("ghc-x509" ,ghc-x509)
+ ("ghc-x509-store" ,ghc-x509-store)))
+ (home-page "https://github.com/vincenthz/hs-certificate")
+ (synopsis "Handle system X.509 accessors and storage")
+ (description
+ "This package provides a library to handle system accessors and storage
+for X.509 certificates.")
+ (license license:bsd-3)))
diff --git a/gnu/packages/haskell-web.scm b/gnu/packages/haskell-web.scm
index c1a24b91f9..4e647bf7bc 100644
--- a/gnu/packages/haskell-web.scm
+++ b/gnu/packages/haskell-web.scm
@@ -24,6 +24,7 @@
#:use-module (gnu packages)
#:use-module (gnu packages haskell)
#:use-module (gnu packages haskell-check)
+ #:use-module (gnu packages haskell-crypto)
#:use-module (guix build-system haskell)
#:use-module (guix download)
#:use-module ((guix licenses) #:prefix license:)
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index 23093e318d..89aa62aeaf 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -37,6 +37,7 @@
#:use-module (gnu packages ghostscript)
#:use-module (gnu packages gl)
#:use-module (gnu packages haskell-check)
+ #:use-module (gnu packages haskell-crypto)
#:use-module (gnu packages haskell-web)
#:use-module (gnu packages libffi)
#:use-module (gnu packages lisp)
@@ -3937,33 +3938,6 @@ of getters, folds, isomorphisms, traversals, setters and lenses and their
indexed variants.")
(license license:bsd-3)))
-(define-public ghc-digest
- (package
- (name "ghc-digest")
- (version "0.0.1.2")
- (source
- (origin
- (method url-fetch)
- (uri (string-append
- "https://hackage.haskell.org/package/digest/digest-"
- version
- ".tar.gz"))
- (sha256
- (base32
- "04gy2zp8yzvv7j9bdfvmfzcz3sqyqa6rwslqcn4vyair2vmif5v4"))))
- (build-system haskell-build-system)
- (inputs
- `(("zlib" ,zlib)))
- (home-page
- "https://hackage.haskell.org/package/digest")
- (synopsis
- "Various cryptographic hashes for bytestrings")
- (description
- "This package provides efficient cryptographic hash implementations for
-strict and lazy bytestrings. For now, CRC32 and Adler32 are supported; they
-are implemented as FFI bindings to efficient code from zlib.")
- (license license:bsd-3)))
-
(define-public ghc-cheapskate
(package
(name "ghc-cheapskate")
@@ -5031,33 +5005,6 @@ do on-demand loading.")
TIFF and GIF formats.")
(license license:bsd-3)))
-(define-public ghc-sha
- (package
- (name "ghc-sha")
- (version "1.6.4.2")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "SHA/SHA-" version ".tar.gz"))
- (sha256
- (base32
- "134ajm87fm4lpsw86m9q8apv20dw4bpk46raa389zr6bcdpifw64"))))
- (build-system haskell-build-system)
- (native-inputs
- `(("ghc-quickcheck" ,ghc-quickcheck)
- ("ghc-test-framework" ,ghc-test-framework)
- ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
- (home-page "https://hackage.haskell.org/package/SHA")
- (synopsis "SHA suite of message digest functions")
- (description
- "This library implements the SHA suite of message digest functions,
-according to NIST FIPS 180-2 (with the SHA-224 addendum), as well as the
-SHA-based HMAC routines. The functions have been tested against most of the
-NIST and RFC test vectors for the various functions. While some attention has
-been paid to performance, these do not presently reach the speed of well-tuned
-libraries, like OpenSSL.")
- (license license:bsd-3)))
-
(define-public ghc-hslua
(package
(name "ghc-hslua")
@@ -5138,108 +5085,6 @@ a type that has a @code{Time} instances, and thus are different
representations of current time.")
(license license:bsd-3)))
-(define-public ghc-pem
- (package
- (name "ghc-pem")
- (version "0.2.2")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "pem/pem-" version ".tar.gz"))
- (sha256
- (base32
- "162sk5sg22w21wqz5qv8kx6ibxp99v5p20g3nknhm1kddk3hha1p"))))
- (build-system haskell-build-system)
- (inputs
- `(("ghc-mtl" ,ghc-mtl)
- ("ghc-base64-bytestring" ,ghc-base64-bytestring)))
- (native-inputs
- `(("ghc-test-framework" ,ghc-test-framework)
- ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
- ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
- ("ghc-hunit" ,ghc-hunit)
- ("ghc-quickcheck" ,ghc-quickcheck)))
- (home-page "https://github.com/vincenthz/hs-pem")
- (synopsis "Privacy Enhanced Mail (PEM) format reader and writer")
- (description
- "This library provides readers and writers for the @dfn{Privacy Enhanced
-Mail} (PEM) format.")
- (license license:bsd-3)))
-
-(define-public ghc-asn1-types
- (package
- (name "ghc-asn1-types")
- (version "0.3.1")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "asn1-types/asn1-types-"
- version ".tar.gz"))
- (sha256
- (base32
- "1iif9yrh4mmj249gyvam0zb2vb3jnlz777gahh2z9sx00dsx9rja"))))
- (build-system haskell-build-system)
- (inputs
- `(("ghc-memory" ,ghc-memory)
- ("ghc-hourglass" ,ghc-hourglass)))
- (home-page "https://github.com/vincenthz/hs-asn1-types")
- (synopsis "ASN.1 types for Haskell")
- (description
- "The package provides the standard types for dealing with the ASN.1
-format.")
- (license license:bsd-3)))
-
-(define-public ghc-asn1-encoding
- (package
- (name "ghc-asn1-encoding")
- (version "0.9.3")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "asn1-encoding/asn1-encoding-"
- version ".tar.gz"))
- (sha256
- (base32
- "01ki5msrpccgdbdiaaa5a9zw0icp1hki4hca8qx6hzlp0rcf1mwh"))))
- (build-system haskell-build-system)
- (inputs
- `(("ghc-hourglass" ,ghc-hourglass)
- ("ghc-asn1-types" ,ghc-asn1-types)
- ("ghc-text" ,ghc-text)
- ("ghc-mtl" ,ghc-mtl)))
- (native-inputs
- `(("ghc-tasty" ,ghc-tasty)
- ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
- (home-page "https://github.com/vincenthz/hs-asn1")
- (synopsis "ASN1 data reader and writer in RAW, BER and DER forms")
- (description
- "This package provides a reader and writer for ASN1 data in raw form with
-supports for high level forms of ASN1 (BER, and DER).")
- (license license:bsd-3)))
-
-(define-public ghc-asn1-parse
- (package
- (name "ghc-asn1-parse")
- (version "0.9.4")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "asn1-parse/asn1-parse-"
- version ".tar.gz"))
- (sha256
- (base32
- "025prsihk5g6rdv9xlfmj0zpa0wa3qjzj5i4ilzvg7f6f3sji8y6"))))
- (build-system haskell-build-system)
- (inputs
- `(("ghc-asn1-types" ,ghc-asn1-types)
- ("ghc-asn1-encoding" ,ghc-asn1-encoding)))
- (home-page "https://github.com/vincenthz/hs-asn1")
- (synopsis "Simple monadic parser for ASN1 stream types")
- (description
- "This package provides a simple monadic parser for ASN1 stream types,
-when ASN1 pattern matching is not convenient.")
- (license license:bsd-3)))
-
(define-public ghc-edit-distance
(package
(name "ghc-edit-distance")
@@ -5265,36 +5110,6 @@ distances for fuzzy matching, including Levenshtein and restricted
Damerau-Levenshtein algorithms.")
(license license:bsd-3)))
-(define-public ghc-cryptonite
- (package
- (name "ghc-cryptonite")
- (version "0.19")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "cryptonite/cryptonite-"
- version ".tar.gz"))
- (sha256
- (base32
- "1rw5k34vpn4134yrzdhf0rsshsrkixfbv9ap18di2n00z2cw1shw"))))
- (build-system haskell-build-system)
- (inputs
- `(("ghc-memory" ,ghc-memory)
- ("ghc-byteable" ,ghc-byteable)))
- (native-inputs
- `(("ghc-tasty" ,ghc-tasty)
- ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
- ("ghc-tasty-hunit" ,ghc-tasty-hunit)
- ("ghc-tasty-kat" ,ghc-tasty-kat)))
- (home-page "https://github.com/haskell-crypto/cryptonite")
- (synopsis "Cryptography primitives")
- (description
- "This package is a repository of cryptographic primitives for Haskell.
-It supports a wide range of symmetric ciphers, cryptographic hash functions,
-public key algorithms, key derivation numbers, cryptographic random number
-generators, and more.")
- (license license:bsd-3)))
-
(define-public ghc-memory
(package
(name "ghc-memory")
@@ -5321,120 +5136,6 @@ different type of byte array abstraction, raw memory IO operations (memory
set, memory copy, ..) and more")
(license license:bsd-3)))
-(define-public ghc-x509
- (package
- (name "ghc-x509")
- (version "1.6.3")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "x509/x509-" version ".tar.gz"))
- (sha256
- (base32
- "1pmsby29abn485fvnymsgipvb3p1ch9c591xj5ncszkf0ivjiiin"))))
- (build-system haskell-build-system)
- (inputs
- `(("ghc-memory" ,ghc-memory)
- ("ghc-mtl" ,ghc-mtl)
- ("ghc-hourglass" ,ghc-hourglass)
- ("ghc-pem" ,ghc-pem)
- ("ghc-asn1-types" ,ghc-asn1-types)
- ("ghc-asn1-encoding" ,ghc-asn1-encoding)
- ("ghc-asn1-parse" ,ghc-asn1-parse)
- ("ghc-cryptonite" ,ghc-cryptonite)))
- (native-inputs
- `(("ghc-tasty" ,ghc-tasty)
- ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
- (home-page "https://github.com/vincenthz/hs-certificate")
- (synopsis "X509 reader and writer")
- (description
- "This library provides functions to read and write X509 certificates.")
- (license license:bsd-3)))
-
-(define-public ghc-x509-store
- (package
- (name "ghc-x509-store")
- (version "1.6.1")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "x509-store/x509-store-"
- version ".tar.gz"))
- (sha256
- (base32
- "01abx528i9f7djq2772xyna8x2mykrnwqkcfrapcx7z3bhprvml3"))))
- (build-system haskell-build-system)
- (inputs
- `(("ghc-mtl" ,ghc-mtl)
- ("ghc-pem" ,ghc-pem)
- ("ghc-asn1-types" ,ghc-asn1-types)
- ("ghc-asn1-encoding" ,ghc-asn1-encoding)
- ("ghc-cryptonite" ,ghc-cryptonite)
- ("ghc-x509" ,ghc-x509)))
- (home-page "https://github.com/vincenthz/hs-certificate")
- (synopsis "X.509 collection accessing and storing methods")
- (description
- "This package provides functions for accessing and storing X.509
-collections, certificates, revocation lists, and exception lists.")
- (license license:bsd-3)))
-
-(define-public ghc-x509-validation
- (package
- (name "ghc-x509-validation")
- (version "1.6.3")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "x509-validation/x509-validation-"
- version ".tar.gz"))
- (sha256
- (base32
- "1qr1v561hdlhjgqjv9pj9mbk0q1xf2mr1j67ghy93nlxxyzd7dw0"))))
- (build-system haskell-build-system)
- (inputs
- `(("ghc-memory" ,ghc-memory)
- ("ghc-byteable" ,ghc-byteable)
- ("ghc-mtl" ,ghc-mtl)
- ("ghc-hourglass" ,ghc-hourglass)
- ("ghc-data-default-class" ,ghc-data-default-class)
- ("ghc-pem" ,ghc-pem)
- ("ghc-asn1-types" ,ghc-asn1-types)
- ("ghc-asn1-encoding" ,ghc-asn1-encoding)
- ("ghc-x509" ,ghc-x509)
- ("ghc-x509-store" ,ghc-x509-store)
- ("ghc-cryptonite" ,ghc-cryptonite)))
- (home-page "https://github.com/vincenthz/hs-certificate")
- (synopsis "X.509 certificate and revocation list validation")
- (description
- "This package provides functions for X.509 certificate and revocation
-list validation.")
- (license license:bsd-3)))
-
-(define-public ghc-x509-system
- (package
- (name "ghc-x509-system")
- (version "1.6.1")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "x509-system/x509-system-"
- version ".tar.gz"))
- (sha256
- (base32
- "10qf60d2f9jqwnbrhsb2cwpi86xg66m6dxndlxw967v1cdb3h6gf"))))
- (build-system haskell-build-system)
- (inputs
- `(("ghc-mtl" ,ghc-mtl)
- ("ghc-pem" ,ghc-pem)
- ("ghc-x509" ,ghc-x509)
- ("ghc-x509-store" ,ghc-x509-store)))
- (home-page "https://github.com/vincenthz/hs-certificate")
- (synopsis "Handle system X.509 accessors and storage")
- (description
- "This package provides a library to handle system accessors and storage
-for X.509 certificates.")
- (license license:bsd-3)))
-
(define-public ghc-tls
(package
(name "ghc-tls")
@@ -5878,38 +5579,6 @@ implement a custom format if needed. Serialisation speeds of over 1 G\\/sec hav
been observed, so this library should be suitable for high performance scenarios.")
(license license:bsd-3)))
-(define-public ghc-cryptohash
- (package
- (name "ghc-cryptohash")
- (version "0.11.9")
- (source
- (origin
- (method url-fetch)
- (uri (string-append
- "https://hackage.haskell.org/package/cryptohash/cryptohash-"
- version ".tar.gz"))
- (sha256
- (base32
- "1yr2iyb779znj79j3fq4ky8l1y8a600a2x1fx9p5pmpwq5zq93y2"))))
- (build-system haskell-build-system)
- (inputs
- `(("ghc-byteable" ,ghc-byteable)
- ("ghc-cryptonite" ,ghc-cryptonite)
- ("ghc-memory" ,ghc-memory)
- ("ghc-hunit" ,ghc-hunit)
- ("ghc-quickcheck" ,ghc-quickcheck)
- ("ghc-tasty" ,ghc-tasty)
- ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
- ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
- (home-page "https://github.com/vincenthz/hs-cryptohash")
- (synopsis "Collection of cryptographic hashes in Haskell")
- (description
- "A collection of crypto hashes, with a practical incremental and one-pass,
-pure APIs, with performance close to the fastest implementations available in
-other languages. The implementations are made in C with a haskell FFI wrapper
-that hides the C implementation.")
- (license license:bsd-3)))
-
(define-public ghc-data-ordlist
(package
(name "ghc-data-ordlist")
@@ -8064,85 +7733,6 @@ which consume random values.")
(description "This Haskell package provides an either monad transformer.")
(license license:bsd-3)))
-(define-public ghc-entropy
- (package
- (name "ghc-entropy")
- (version "0.3.8")
- (source
- (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "entropy-" version "/"
- "entropy-" version ".tar.gz"))
- (sha256
- (base32
- "1l3lfigqvdlmxkz1wl7zdkmc0i2r5p6z4xzhiw8xdsbsw7aljfkl"))))
- (build-system haskell-build-system)
- (home-page "https://github.com/TomMD/entropy")
- (synopsis "Provides platform independent entropy source for Haskell")
- (description "This Haskell package provides a platform independent method
-to obtain cryptographically strong entropy.")
- (license license:bsd-3)))
-
-(define-public ghc-crypto-api
- (package
- (name "ghc-crypto-api")
- (version "0.13.2")
- (source
- (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "crypto-api-" version "/"
- "crypto-api-" version ".tar.gz"))
- (sha256
- (base32
- "1vc27qcgbg7hf50rkqhlrs58zn1888ilh4b6wrrm07bnm48xacak"))))
- (build-system haskell-build-system)
- (inputs `(("ghc-cereal" ,ghc-cereal)
- ("ghc-tagged" ,ghc-tagged)
- ("ghc-entropy" ,ghc-entropy)))
- (home-page "https://github.com/TomMD/crypto-api")
- (synopsis "Provides generic interface for cryptographic operations
-for Haskell")
- (description "This Haskell package provides a generic interface for
-cryptographic operations (hashes, ciphers, randomness).
-
-Maintainers of hash and cipher implementations are encouraged to add instances
-for the classes defined in @code{Crypto.Classes}. @code{Crypto} users are
-similarly encouraged to use the interfaces defined in the @code{Classes} module.
-
-Any concepts or functions of general use to more than one cryptographic
-algorithm (ex: padding) is within scope of this package.")
- (license license:bsd-3)))
-
-(define-public ghc-crypto-api-tests
- (package
- (name "ghc-crypto-api-tests")
- (version "0.3")
- (source
- (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "crypto-api-tests-" version "/"
- "crypto-api-tests-" version ".tar.gz"))
- (sha256
- (base32
- "0w3j43jdrlj28jryp18hc6q84nkl2yf4vs1hhgrsk7gb9kfyqjpl"))))
- (build-system haskell-build-system)
- (inputs `(("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
- ("ghc-crypto-api" ,ghc-crypto-api)
- ("ghc-cereal" ,ghc-cereal)
- ("ghc-test-framework" ,ghc-test-framework)
- ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
- ("ghc-hunit" ,ghc-hunit)
- ("ghc-quickcheck" ,ghc-quickcheck)))
- (home-page "https://github.com/TomMD/crypto-api-tests")
- (synopsis "Test framework and KATs for cryptographic operations for Haskell")
- (description "This Haskell package provides a test framework for hash and
-cipher operations using the crypto-api interface. Known answer tests (KATs)
-for common cryptographic algorithms are included.")
- (license license:bsd-3)))
-
(define-public ghc-pretty-hex
(package
(name "ghc-pretty-hex")
@@ -8163,94 +7753,6 @@ for common cryptographic algorithms are included.")
ByteStrings in the style of other common *nix hex dump tools.")
(license license:bsd-3)))
-(define-public ghc-puremd5
- (package
- (name "ghc-puremd5")
- (version "2.1.3")
- (source
- (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "pureMD5-" version "/"
- "pureMD5-" version ".tar.gz"))
- (sha256
- (base32
- "0zdilz41cla2ck7mcw1a9702gyg2abq94mqahr4vci9sbs53bwxy"))))
- (build-system haskell-build-system)
- (inputs `(("ghc-cereal" ,ghc-cereal)
- ("ghc-crypto-api" ,ghc-crypto-api)
- ("ghc-tagged" ,ghc-tagged)))
- (native-inputs `(("ghc-crypto-api-tests" ,ghc-crypto-api-tests)
- ("ghc-quickcheck" ,ghc-quickcheck)
- ("ghc-test-framework" ,ghc-test-framework)
- ("ghc-test-framework-quickcheck2"
- ,ghc-test-framework-quickcheck2)
- ("ghc-pretty-hex" ,ghc-pretty-hex)))
- (home-page "https://github.com/TomMD/pureMD5")
- (synopsis "Haskell implementation of the MD5 hash algorithm")
- (description "This package provides a Haskell-only implementation of
-the MD5 digest (hash) algorithm. This now supports the @code{crypto-api} class
-interface.")
- (license license:bsd-3)))
-
-(define-public ghc-cryptohash-md5
- (package
- (name "ghc-cryptohash-md5")
- (version "0.11.100.1")
- (source
- (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "cryptohash-md5-" version "/"
- "cryptohash-md5-" version ".tar.gz"))
- (sha256
- (base32
- "1y8q7s2bn4gdknw1wjikdnar2b5pgz3nv3220lxrlgpsf23x82vi"))))
- (build-system haskell-build-system)
- (arguments
- `(#:tests? #f)) ; tests require old version of ghc-hunit (0.9)
- (native-inputs `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
- ("ghc-puremd5" ,ghc-puremd5)
- ("ghc-tasty" ,ghc-tasty)
- ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
- ("ghc-hunit" ,ghc-hunit)))
- (home-page "https://github.com/hvr/cryptohash-md5")
- (synopsis "MD5 implementation for Haskell")
- (description "This Haskell package provides implementation of MD5.")
- (license license:bsd-3)))
-
-(define-public ghc-cryptohash-sha1
- (package
- (name "ghc-cryptohash-sha1")
- (version "0.11.100.1")
- (source
- (origin
- (method url-fetch)
- (uri (string-append "https://hackage.haskell.org/package/"
- "cryptohash-sha1-" version "/"
- "cryptohash-sha1-" version ".tar.gz"))
- (sha256
- (base32
- "1aqdxdhxhl9jldh951djpwxx8z7gzaqspxl7iwpl84i5ahrsyy9w"))))
- (build-system haskell-build-system)
- (arguments
- `(#:tests? #f)) ; tests require old version of ghc-hunit (0.9)
- (native-inputs `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
- ("ghc-sha" ,ghc-sha)
- ("ghc-tasty" ,ghc-tasty)
- ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
- ("ghc-hunit" ,ghc-hunit)))
- (home-page "https://github.com/hvr/cryptohash-sha1")
- (synopsis "SHA-1 implementation for Haskell")
- (description "This Haskell package provides an incremental and one-pass,
-pure API to the @uref{https://en.wikipedia.org/wiki/SHA-1, SHA-1 hash algorithm},
-including @uref{https://en.wikipedia.org/wiki/HMAC, HMAC support}, with
-performance close to the fastest implementations available in other languages.
-
-The implementation is made in C with a haskell FFI wrapper that hides
-the C implementation.")
- (license license:bsd-3)))
-
(define-public ghc-network-info
(package
(name "ghc-network-info")
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm