summary refs log tree commit diff
diff options
context:
space:
mode:
authorTobias Geerinckx-Rice <me@tobias.gr>2018-10-01 16:11:22 +0200
committerTobias Geerinckx-Rice <me@tobias.gr>2018-10-04 04:20:04 +0200
commitfb5412511479c19b3e4c884e9cc65e652ea923e2 (patch)
treead8bfd5ceb10f7a77c773ce831b48929c6427bd4
parent5eff43804eaed5744967f83edbaeb7ffdb77aec1 (diff)
downloadguix-fb5412511479c19b3e4c884e9cc65e652ea923e2.tar.gz
gnu: Add memtester.
* gnu/packages/hardware.scm (memtester): New public variable.
-rw-r--r--gnu/packages/hardware.scm51
1 files changed, 50 insertions, 1 deletions
diff --git a/gnu/packages/hardware.scm b/gnu/packages/hardware.scm
index 62f6316bca..02ab9e2e00 100644
--- a/gnu/packages/hardware.scm
+++ b/gnu/packages/hardware.scm
@@ -116,7 +116,8 @@ calibrated, and restored when the calibration is applied.")
                 (lambda (file)
                   (install-file file doc))
                 (list "FAQ"
-                      "README"))))))))
+                      "README"))
+               #t))))))
     (native-inputs
      ;; Newer GCCs fail with a deluge of "multiple definition of `__foo'" errors.
      `(("gcc" ,gcc-4.9)))
@@ -135,6 +136,54 @@ can scan as much of your RAM as possible for hardware defects.
 Memtest86+ cannot currently be used on computers booted with UEFI.")
     (license license:gpl2)))
 
+(define-public memtester
+  (package
+    (name "memtester")
+    (version "4.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       ;; Even the latest release is available under 'old-versions/'.
+       (uri (string-append "http://pyropus.ca/software/memtester/old-versions/"
+                           "memtester-" version ".tar.gz"))
+       (sha256
+        (base32 "127xymmyzb9r6dxqrwd69v7gf8csv8kv7fjvagbglf3wfgyy5pzr"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags
+       (list "CC=gcc")
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           ;; This is a home-brewed configuration system where the cc/ld command
+           ;; lines are stored in one-line files.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out")))
+               (substitute* (list "conf-cc" "conf-ld")
+                 (("^cc") "gcc"))
+               (substitute* "Makefile"
+                 (("(INSTALLPATH.*=).*" _ assignment)
+                  (string-append assignment out)))
+               #t)))
+         (replace 'check
+           ;; There is no test suite. Test some RAM for a single iteration.
+           (lambda _
+             (invoke "./memtester" "64K" "1"))))))
+    (home-page "http://pyropus.ca/software/memtester/")
+    (synopsis "User-space memory subsystem tester")
+    (description
+     "Memtester stress-tests the memory subsystem of your operating system and
+computer.  It repeatedly writes different patterns to all memory locations,
+reads them back again, and verifies whether the result is the same as what was
+written.  This can help debug even intermittent and non-deterministic errors.
+
+Memtester runs entirely in user space.  This means that you don't need to reboot
+to test your memory, but also that it's not possible to test all of the RAM
+installed in the system.
+
+It can also be told to test memory starting at a particular physical address.")
+    (license license:gpl2)))
+
 (define-public msr-tools
   (package
     (name "msr-tools")