From: Leo Famulari <leo@famulari.name>
To: 40178@debbugs.gnu.org
Subject: [bug#40178] [PATCH 2/2] gnu: Remove qemu-minimal-2.10.
Date: Sat, 21 Mar 2020 18:24:17 -0400 [thread overview]
Message-ID: <7f0ce820d4edbf883af3ea2d96c23706858a5b34.1584829446.git.leo@famulari.name> (raw)
In-Reply-To: <e0cd89730bd0e7328b810dfc7637da3b62f909fe.1584829446.git.leo@famulari.name>
* gnu/packages/virtualization.scm (qemu-minimal-2.10): Remove variable.
* gnu/packages/debug.scm (qemu-for-american-fuzzy-lop): New variable.
(american-fuzzy-lop)[inputs]: Remove custom-qemu and add
qemu-for-american-fuzzy-lop.
[arguments]: Adjust reference to QEMU in the 'install-qemu' phase.
---
gnu/packages/debug.scm | 246 ++++++++++++++++++++++++--------
gnu/packages/virtualization.scm | 28 ----
2 files changed, 190 insertions(+), 84 deletions(-)
diff --git a/gnu/packages/debug.scm b/gnu/packages/debug.scm
index 1de8ba3677..f389b770df 100644
--- a/gnu/packages/debug.scm
+++ b/gnu/packages/debug.scm
@@ -28,16 +28,23 @@
#:use-module (guix utils)
#:use-module (guix build-system gnu)
#:use-module (guix build-system cmake)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages attr)
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
#:use-module (gnu packages bash)
+ #:use-module (gnu packages bison)
#:use-module (gnu packages code)
+ #:use-module (gnu packages compression)
#:use-module (gnu packages flex)
#:use-module (gnu packages gdb)
#:use-module (gnu packages glib)
#:use-module (gnu packages gtk)
#:use-module (gnu packages golang)
+ #:use-module (gnu packages image)
+ #:use-module (gnu packages linux)
#:use-module (gnu packages llvm)
+ #:use-module (gnu packages ncurses)
#:use-module (gnu packages ninja)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
@@ -46,7 +53,9 @@
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages readline)
#:use-module (gnu packages serialization)
+ #:use-module (gnu packages texinfo)
#:use-module (gnu packages virtualization)
+ #:use-module (gnu packages xdisorg)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1))
@@ -183,61 +192,7 @@ tools that process C/C++ code.")
(file-name (git-file-name name version))))
(build-system gnu-build-system)
(inputs
- `(("custom-qemu"
- ;; The afl-qemu tool builds qemu 2.10.0 with a few patches applied.
- ,(package (inherit qemu-minimal-2.10)
- (name "afl-qemu")
- (inputs
- `(("afl-src" ,source)
- ,@(package-inputs qemu-minimal)))
- ;; afl only supports using a single afl-qemu-trace executable, so
- ;; we only build qemu for the native target.
- (arguments
- `(#:modules ((srfi srfi-1)
- ,@%gnu-build-system-modules)
- ,@(substitute-keyword-arguments (package-arguments qemu-minimal)
- ((#:configure-flags config-flags)
- ``(,(string-append "--target-list=" ,machine "-linux-user")
- ,@(remove (λ (f) (string-prefix? "--target-list=" f))
- ,config-flags)))
- ((#:phases qemu-phases)
- `(modify-phases ,qemu-phases
- (add-after
- 'unpack 'apply-afl-patches
- (lambda* (#:key inputs #:allow-other-keys)
- (let* ((afl-src (assoc-ref inputs "afl-src"))
- (patch-dir "qemu_mode/patches"))
- (copy-recursively (string-append afl-src "/"
- patch-dir)
- patch-dir)
- (install-file
- (string-append patch-dir
- "/afl-qemu-cpu-inl.h")
- ".")
- (copy-file (string-append afl-src "/config.h")
- "./afl-config.h")
- (install-file (string-append afl-src "/types.h")
- ".")
- (substitute* "afl-qemu-cpu-inl.h"
- (("\\.\\./\\.\\./config.h") "afl-config.h"))
- (substitute* (string-append patch-dir
- "/cpu-exec.diff")
- (("\\.\\./patches/") ""))
-
- ;; These were already applied to qemu-minimal-2.10.
- (for-each (lambda (obsolete-patch)
- (delete-file (string-append
- patch-dir "/"
- obsolete-patch)))
- (list "configure.diff"
- "memfd.diff"))
-
- (for-each (lambda (patch-file)
- (invoke "patch" "--force" "-p1"
- "--input" patch-file))
- (find-files patch-dir
- "\\.diff$"))
- #t))))))))))))
+ `(("qemu" ,qemu-for-american-fuzzy-lop)))
(arguments
`(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
(string-append "DOC_PATH=$(PREFIX)/share/doc/"
@@ -267,7 +222,7 @@ tools that process C/C++ code.")
;; TODO: Build and install the afl-llvm tool.
'install 'install-qemu
(lambda* (#:key inputs outputs #:allow-other-keys)
- (let ((qemu (assoc-ref inputs "custom-qemu"))
+ (let ((qemu (assoc-ref inputs "qemu"))
(out (assoc-ref outputs "out")))
(symlink (string-append qemu "/bin/qemu-" ,machine)
(string-append out "/bin/afl-qemu-trace"))
@@ -285,6 +240,185 @@ useful for seeding other, more labor- or resource-intensive testing regimes
down the road.")
(license license:asl2.0))))
+(define-public qemu-for-american-fuzzy-lop
+ (let ((machine (match (or (%current-target-system)
+ (%current-system))
+ ("x86_64-linux" "x86_64")
+ ("i686-linux" "i386")
+ ("aarch64-linux" "aarch64")
+ ("armhf-linux" "arm")
+ ("mips64el-linux" "mips64el")
+ ;; Prevent errors when querying this package on unsupported
+ ;; platforms, e.g. when running "guix package --search="
+ (_ "UNSUPPORTED"))))
+ (hidden-package
+ (package
+ (name "qemu")
+ (version "2.10.2")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://download.qemu.org/qemu-"
+ version ".tar.xz"))
+ (sha256
+ (base32
+ "17w21spvaxaidi2am5lpsln8yjpyp2zi3s3gc6nsxj5arlgamzgw"))
+ (patches
+ (search-patches "qemu-glibc-2.27.patch"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(;; Running tests in parallel can occasionally lead to failures, like:
+ ;; boot_sector_test: assertion failed (signature == SIGNATURE): (0x00000000 == 0x0000dead)
+ #:parallel-tests? #f
+ #:configure-flags
+ (list (string-append "--target-list=" ,machine "-linux-user"))
+ #:make-flags '("V=1")
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'configure
+ (lambda* (#:key inputs outputs (configure-flags '())
+ #:allow-other-keys)
+ ;; The `configure' script doesn't understand some of the
+ ;; GNU options. Thus, add a new phase that's compatible.
+ (let ((out (assoc-ref outputs "out")))
+ (setenv "SHELL" (which "bash"))
+
+ ;; While we're at it, patch for tests.
+ (substitute* "tests/libqtest.c"
+ (("/bin/sh") (which "sh")))
+
+ ;; The binaries need to be linked against -lrt.
+ (setenv "LDFLAGS" "-lrt")
+ (apply invoke
+ `("./configure"
+ ,(string-append "--cc=" (which "gcc"))
+ ;; Some architectures insist on using HOST_CC
+ ,(string-append "--host-cc=" (which "gcc"))
+ "--disable-debug-info" ; save build space
+ "--enable-virtfs" ; just to be sure
+ ,(string-append "--prefix=" out)
+ ,(string-append "--sysconfdir=/etc")
+ ,@configure-flags)))))
+ (add-after
+ 'unpack 'apply-afl-patches
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((afl-src (assoc-ref inputs "afl-source"))
+ (patch-dir "qemu_mode/patches"))
+ (copy-recursively (string-append afl-src "/"
+ patch-dir)
+ patch-dir)
+ (install-file
+ (string-append patch-dir
+ "/afl-qemu-cpu-inl.h")
+ ".")
+ (copy-file (string-append afl-src "/config.h")
+ "./afl-config.h")
+ (install-file (string-append afl-src "/types.h")
+ ".")
+ (substitute* "afl-qemu-cpu-inl.h"
+ (("\\.\\./\\.\\./config.h") "afl-config.h"))
+ (substitute* (string-append patch-dir
+ "/cpu-exec.diff")
+ (("\\.\\./patches/") ""))
+
+ ;; These were already applied to qemu-minimal-2.10.
+ (for-each (lambda (obsolete-patch)
+ (delete-file (string-append
+ patch-dir "/"
+ obsolete-patch)))
+ (list "configure.diff"
+ "memfd.diff"))
+
+ (for-each (lambda (patch-file)
+ (invoke "patch" "--force" "-p1"
+ "--input" patch-file))
+ (find-files patch-dir
+ "\\.diff$"))
+ #t)))
+ (add-after 'install 'install-info
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ ;; Install the Info manual, unless Texinfo is missing.
+ (when (assoc-ref inputs "texinfo")
+ (let* ((out (assoc-ref outputs "out"))
+ (dir (string-append out "/share/info")))
+ (invoke "make" "info")
+ (for-each (lambda (info)
+ (install-file info dir))
+ (find-files "." "\\.info"))))
+ #t))
+ ;; Create a wrapper for Samba. This allows QEMU to use Samba without
+ ;; pulling it in as an input. Note that you need to explicitly install
+ ;; Samba in your Guix profile for Samba support.
+ (add-after 'install-info 'create-samba-wrapper
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref %outputs "out"))
+ (libexec (string-append out "/libexec")))
+ (call-with-output-file "samba-wrapper"
+ (lambda (port)
+ (format port "#!/bin/sh
+exec smbd $@")))
+ (chmod "samba-wrapper" #o755)
+ (install-file "samba-wrapper" libexec))
+ #t))
+ (add-before 'configure 'prevent-network-configuration
+ (lambda _
+ ;; Prevent the build from trying to use git to fetch from the net.
+ (substitute* "Makefile"
+ (("@./config.status")
+ "")) #t))
+ (add-before 'check 'disable-unusable-tests
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (substitute* "tests/Makefile.include"
+ ;; Comment out the test-qga test, which needs /sys and
+ ;; fails within the build environment.
+ (("check-unit-.* tests/test-qga" all)
+ (string-append "# " all)))
+ (substitute* "tests/Makefile.include"
+ ;; Comment out the test-char test, which needs networking and
+ ;; fails within the build environment.
+ (("check-unit-.* tests/test-char" all)
+ (string-append "# " all)))
+ #t)))))
+ (native-inputs
+ `(("python-2" ,python-2) ; QEMU 2 needs Python 2
+ ("glib:bin" ,glib "bin")
+ ("perl" ,perl)
+ ("flex" ,flex)
+ ("bison" ,bison)
+ ("pkg-config" ,pkg-config)
+ ("texinfo" ,texinfo)))
+ (inputs
+ `(("afl-source" ,(package-source american-fuzzy-lop))
+ ("alsa-lib" ,alsa-lib)
+ ("attr" ,attr)
+ ("glib" ,glib)
+ ("libaio" ,libaio)
+ ("libattr" ,attr)
+ ("libcap" ,libcap)
+ ("libjpeg" ,libjpeg-turbo)
+ ("libpng" ,libpng)
+ ("ncurses" ,ncurses)
+ ("pixman" ,pixman)
+ ("util-linux" ,util-linux)
+ ("zlib" ,zlib)))
+ (home-page "https://www.qemu.org")
+ (synopsis "Machine emulator and virtualizer (without GUI)")
+ (description
+ "QEMU is a generic machine emulator and virtualizer.
+
+When used as a machine emulator, QEMU can run OSes and programs made for one
+machine (e.g. an ARM board) on a different machine---e.g., your own PC. By
+using dynamic translation, it achieves very good performance.
+
+When used as a virtualizer, QEMU achieves near native performances by
+executing the guest code directly on the host CPU. QEMU supports
+virtualization when executing under the Xen hypervisor or using
+the KVM kernel module in Linux. When using KVM, QEMU can virtualize x86,
+server and embedded PowerPC, and S390 guests.")
+ ;; Many files are GPLv2+, but some are GPLv2-only---e.g., `memory.c'.
+ (license license:gpl2)
+ ;; Several tests fail on MIPS.
+ (supported-systems (delete "mips64el-linux" %supported-systems))))))
+
(define-public stress-make
(let ((commit "9e92dff8f0157f012aaf31de5b8b8112ad720100")
(revision "1")) ;No official source distribution
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 03f0ceaeee..b7e2c415fe 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -284,34 +284,6 @@ server and embedded PowerPC, and S390 guests.")
'("libusb" "mesa" "sdl2" "spice" "virglrenderer" "gtk+"
"usbredir" "libdrm" "libepoxy" "pulseaudio" "vde2")))))
-;; The GRUB test suite fails with later versions of Qemu, so we
-;; keep it at 2.10 for now. See
-;; <https://lists.gnu.org/archive/html/bug-grub/2018-02/msg00004.html>.
-;; This package is hidden since we do not backport updates to it.
-(define-public qemu-minimal-2.10
- (hidden-package
- (package
- (inherit qemu-minimal)
- (version "2.10.2")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://download.qemu.org/qemu-"
- version ".tar.xz"))
- (sha256
- (base32
- "17w21spvaxaidi2am5lpsln8yjpyp2zi3s3gc6nsxj5arlgamzgw"))
- (patches
- (search-patches "qemu-glibc-2.27.patch"))))
- ;; qemu-minimal-2.10 needs Python 2. Remove below once no longer necessary.
- (native-inputs `(("python-2" ,python-2)
- ,@(fold alist-delete (package-native-inputs qemu-minimal)
- '("python-wrapper" "python-sphinx"))))
- (inputs
- (fold alist-delete (package-inputs qemu-minimal)
- ;; Disable seccomp support, because it's not required for the GRUB
- ;; test suite, and because it fails with libseccomp 2.4.2 and later.
- '("libseccomp"))))))
-
(define-public libosinfo
(package
(name "libosinfo")
--
2.25.1
next prev parent reply other threads:[~2020-03-21 22:25 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-21 22:21 [bug#40178] QEMU for american fuzzy lop Leo Famulari
2020-03-21 22:24 ` [bug#40178] [PATCH 1/2] gnu: Prefix licenses in (gnu packages debug) Leo Famulari
2020-03-21 22:24 ` Leo Famulari [this message]
2020-03-22 13:16 ` [bug#40178] [PATCH 2/2] gnu: Remove qemu-minimal-2.10 Danny Milosavljevic
2020-03-22 14:22 ` Marius Bakke
2020-03-22 18:29 ` Leo Famulari
2020-03-31 21:07 ` bug#40178: " Christopher Baines
2020-03-22 13:12 ` [bug#40178] [PATCH 1/2] gnu: Prefix licenses in (gnu packages debug) Danny Milosavljevic
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7f0ce820d4edbf883af3ea2d96c23706858a5b34.1584829446.git.leo@famulari.name \
--to=leo@famulari.name \
--cc=40178@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).