memtest86: 4.3.6 -> 8.0

This updates memtest86 to (almost) the latest version.

memtest86-4.3.6 is the older version.  It was open source, but marked
broken.  memtest86-8.0 is the newer version.  It is no longer open
source, but it is possible to build and use.  There appear to be no
restrictions on its use or redistribution.
This commit is contained in:
(cdep)illabout 2019-05-05 15:42:22 +09:00 committed by Lassulus
parent a71d9bf5af
commit fa6af70ead
1 changed files with 37 additions and 18 deletions

View File

@ -1,32 +1,51 @@
{ stdenv, fetchurl }:
{ lib, stdenv, fetchurl, unzip, utillinux, libguestfs-with-appliance }:
stdenv.mkDerivation rec {
name = "memtest86";
version = "8.0";
stdenv.mkDerivation {
name = "memtest86-4.3.6";
src = fetchurl {
url = https://www.memtest86.com/downloads/memtest86-4.3.6-src.tar.gz;
sha256 = "0qbksyl2hmkm12n7zbmf2m2n3q811skhykxx6a9a7y6r7k8y5qmv";
# TODO: The latest version of memtest86 is actually 8.1, but apparently the
# company has stopped distributing versioned binaries of memtest86:
# https://www.passmark.com/forum/memtest86/44494-version-8-1-distribution-file-is-not-versioned?p=44505#post44505
# However, it does look like redistribution is okay, so if we had
# somewhere to host binaries that we make sure to version, then we could
# probably keep up with the latest versions released by the company.
url = "https://www.memtest86.com/downloads/memtest86-${version}-usb.zip";
sha256 = "147mnd7fnx2wvbzscw7pkg9ljiczhz05nb0cjpmww49a0ms4yknw";
};
preBuild = ''
# Really dirty hack to get Memtest to build without needing a Glibc
# with 32-bit libraries and headers.
if test "$system" = x86_64-linux; then
mkdir gnu
touch gnu/stubs-32.h
fi
nativeBuildInputs = [ libguestfs-with-appliance unzip ];
unpackPhase = ''
unzip -q $src -d .
'';
NIX_CFLAGS_COMPILE = "-I.";
installPhase = ''
mkdir -p $out
cp memtest.bin $out/
# memtest86 is distributed as a bootable USB image. It contains the actual
# memtest86 EFI app.
#
# The following command uses libguestfs to extract the actual EFI app from the
# usb image so that it can be installed directly on the hard drive. This creates
# the ./BOOT/ directory with the memtest86 EFI app.
guestfish --ro --add ./memtest86-usb.img --mount /dev/sda1:/ copy-out /EFI/BOOT .
cp -r BOOT/* $out/
'';
meta = {
meta = with lib; {
homepage = http://memtest86.com/;
downloadPage = https://www.memtest86.com/download.htm;
description = "A tool to detect memory errors, to be run from a bootloader";
broken = true;
# The Memtest86 License for the Free Edition states,
# "MemTest86 Free Edition is free to download with no restrictions on usage".
# However the source code for Memtest86 does not appear to be available.
#
# https://www.memtest86.com/license.htm
license = licenses.unfreeRedistributable;
maintainers = with maintainers; [ cdepillabout ];
platforms = platforms.linux;
};
}