gnu: Remove qemu-minimal-2.10.
* 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.
This commit is contained in:
		
							parent
							
								
									c9164d3098
								
							
						
					
					
						commit
						268efd97c2
					
				
					 2 changed files with 160 additions and 84 deletions
				
			
		|  | @ -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) | ||||
|  | @ -47,6 +54,7 @@ | |||
|   #:use-module (gnu packages readline) | ||||
|   #:use-module (gnu packages serialization) | ||||
|   #:use-module (gnu packages virtualization) | ||||
|   #:use-module (gnu packages xdisorg) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (srfi srfi-1)) | ||||
| 
 | ||||
|  | @ -183,61 +191,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 +221,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 +239,156 @@ 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 | ||||
|   ;; afl only supports using a single afl-qemu-trace executable, so | ||||
|   ;; we only build qemu for the native target. | ||||
|   (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-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))) | ||||
|     (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) for american fuzzy lop") | ||||
|     (description | ||||
|      "QEMU is a generic machine emulator and virtualizer.  This package | ||||
| of QEMU is used only by the american fuzzy lop package. | ||||
| 
 | ||||
| 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 | ||||
|  |  | |||
|  | @ -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") | ||||
|  |  | |||
		Reference in a new issue