|
|
@ -30,17 +30,22 @@ |
|
|
|
(define-module (gnu packages virtualization) |
|
|
|
#:use-module (gnu packages) |
|
|
|
#:use-module (gnu packages admin) |
|
|
|
#:use-module (gnu packages assembly) |
|
|
|
#:use-module (gnu packages attr) |
|
|
|
#:use-module (gnu packages autotools) |
|
|
|
#:use-module (gnu packages bison) |
|
|
|
#:use-module (gnu packages check) |
|
|
|
#:use-module (gnu packages cmake) |
|
|
|
#:use-module (gnu packages compression) |
|
|
|
#:use-module (gnu packages cross-base) |
|
|
|
#:use-module (gnu packages curl) |
|
|
|
#:use-module (gnu packages cyrus-sasl) |
|
|
|
#:use-module (gnu packages disk) |
|
|
|
#:use-module (gnu packages dns) |
|
|
|
#:use-module (gnu packages docbook) |
|
|
|
#:use-module (gnu packages documentation) |
|
|
|
#:use-module (gnu packages figlet) |
|
|
|
#:use-module (gnu packages firmware) |
|
|
|
#:use-module (gnu packages flex) |
|
|
|
#:use-module (gnu packages fontutils) |
|
|
|
#:use-module (gnu packages gettext) |
|
|
@ -72,6 +77,7 @@ |
|
|
|
#:use-module (gnu packages textutils) |
|
|
|
#:use-module (gnu packages tls) |
|
|
|
#:use-module (gnu packages web) |
|
|
|
#:use-module (gnu packages wget) |
|
|
|
#:use-module (gnu packages xdisorg) |
|
|
|
#:use-module (gnu packages xml) |
|
|
|
#:use-module (gnu packages xorg) |
|
|
@ -1103,3 +1109,211 @@ x86 CPUs, from early 386 to the most recent x86-64 Intel and AMD processors. |
|
|
|
Bochs can run most Operating Systems inside the emulation including Linux, |
|
|
|
DOS or Microsoft Windows.") |
|
|
|
(license license:lgpl2.0+))) |
|
|
|
|
|
|
|
;; TODO: "make world" |
|
|
|
(define-public xen |
|
|
|
(package |
|
|
|
(name "xen") |
|
|
|
(version "4.11.1") |
|
|
|
(source (origin |
|
|
|
(method git-fetch) |
|
|
|
(uri (git-reference |
|
|
|
(url "git://xenbits.xenproject.org/xen.git") |
|
|
|
(commit (string-append "RELEASE-" version)))) |
|
|
|
(file-name (git-file-name name version)) |
|
|
|
(sha256 |
|
|
|
(base32 |
|
|
|
"1wv1hyfii14vi9lfjmnv07h2gpm3b7kvh2p55f4yy2b40simksgk")))) |
|
|
|
(build-system gnu-build-system) |
|
|
|
(arguments |
|
|
|
`(#:configure-flags |
|
|
|
(list "--enable-rpath" |
|
|
|
"--disable-qemu-traditional" ; It tries to do "git clone" |
|
|
|
"--disable-rombios" ; would try to "git clone" via etherboot. |
|
|
|
;"--disable-seabios" ; It tries to do "git clone" |
|
|
|
;; TODO: Re-enable stubdom (it's "more secure" to use it). |
|
|
|
"--disable-stubdom" ; tries to "git clone" old patched newlib. |
|
|
|
(string-append "--with-initddir=" |
|
|
|
(assoc-ref %outputs "out") |
|
|
|
"/etc/init.d") |
|
|
|
(string-append "--with-system-qemu=" |
|
|
|
(assoc-ref %build-inputs "qemu") |
|
|
|
"/bin/qemu-system-i386") |
|
|
|
(string-append "--with-system-seabios=" |
|
|
|
(assoc-ref %build-inputs "seabios") |
|
|
|
"/share/firmware/bios.bin") |
|
|
|
(string-append "--with-system-ovmf=" |
|
|
|
(assoc-ref %build-inputs "ovmf") |
|
|
|
"/share/firmware/ovmf_ia32.bin")) |
|
|
|
#:make-flags (list "-j" "1" |
|
|
|
"XEN_BUILD_DATE=Thu Jan 1 01:00:01 CET 1970" |
|
|
|
"XEN_BUILD_TIME=01:00:01" |
|
|
|
"XEN_BUILD_HOST=" |
|
|
|
"ETHERBOOT_NICS=" |
|
|
|
"SMBIOS_REL_DATE=01/01/1970" |
|
|
|
"VGABIOS_REL_DATE=01 Jan 1970" |
|
|
|
; QEMU_TRADITIONAL_LOC |
|
|
|
; QEMU_UPSTREAM_LOC |
|
|
|
"SYSCONFIG_DIR=/tmp/etc/default" |
|
|
|
(string-append "BASH_COMPLETION_DIR=" |
|
|
|
(assoc-ref %outputs "out") |
|
|
|
"/etc/bash_completion.d") |
|
|
|
(string-append "BOOT_DIR=" |
|
|
|
(assoc-ref %outputs "out") |
|
|
|
"/boot") |
|
|
|
(string-append "DEBUG_DIR=" |
|
|
|
(assoc-ref %outputs "out") |
|
|
|
"/lib/debug") |
|
|
|
(string-append "EFI_DIR=" |
|
|
|
(assoc-ref %outputs "out") |
|
|
|
"/lib/efi") ; TODO lib64 ? |
|
|
|
"MINIOS_UPSTREAM_URL=" |
|
|
|
;(string-append "DISTDIR=" |
|
|
|
; (assoc-ref %outputs "out")) |
|
|
|
) |
|
|
|
#:test-target "test" |
|
|
|
#:phases |
|
|
|
(modify-phases %standard-phases |
|
|
|
(add-after 'unpack 'unpack-mini-os |
|
|
|
(lambda* (#:key inputs #:allow-other-keys) |
|
|
|
(copy-recursively (assoc-ref inputs "mini-os") "extras/mini-os") |
|
|
|
#t)) |
|
|
|
(add-after 'unpack-mini-os 'patch |
|
|
|
(lambda* (#:key inputs outputs #:allow-other-keys) |
|
|
|
(substitute* "tools/firmware/Rules.mk" |
|
|
|
(("override XEN_TARGET_ARCH = x86_32") |
|
|
|
(string-append "override XEN_TARGET_ARCH = x86_32 |
|
|
|
override CC = " (assoc-ref inputs "cross-gcc") "/bin/i686-linux-gnu-gcc")) |
|
|
|
(("^CFLAGS =$") |
|
|
|
(string-append "CFLAGS=-I" (assoc-ref inputs "cross-libc") |
|
|
|
"/include\n"))) |
|
|
|
(substitute* "config/x86_32.mk" |
|
|
|
(("CFLAGS += -m32 -march=i686") |
|
|
|
(string-append "CFLAGS += -march=i686 -I" |
|
|
|
(assoc-ref inputs "cross-libc") |
|
|
|
"/include"))) |
|
|
|
;; Tries to use "git clone". |
|
|
|
(substitute* "tools/firmware/Makefile" |
|
|
|
(("\\+= etherboot") "+=")) |
|
|
|
;; /var is not in /gnu/store , so don't try to create it. |
|
|
|
(substitute* '("tools/Makefile" |
|
|
|
"tools/xenstore/Makefile" |
|
|
|
"tools/xenpaging/Makefile") |
|
|
|
(("\\$\\(INSTALL_DIR\\) .*XEN_(DUMP|LOG|RUN|LIB|PAGING)_DIR.*") |
|
|
|
"\n") |
|
|
|
(("\\$\\(INSTALL_DIR\\) .*XEN_(RUN|LIB)_STORED.*") |
|
|
|
"\n")) |
|
|
|
;; Prevent xen from creating /etc . |
|
|
|
(substitute* "tools/examples/Makefile" |
|
|
|
((" install-readmes") "") |
|
|
|
((" install-configs") "")) |
|
|
|
;; Set rpath. |
|
|
|
(substitute* "tools/pygrub/setup.py" |
|
|
|
(("library_dirs =") |
|
|
|
; TODO: extra_link_args = ['-Wl,-rpath=/opt/foo'], |
|
|
|
(string-append "runtime_library_dirs = ['" |
|
|
|
(assoc-ref outputs "out") |
|
|
|
"/lib'],\nlibrary_dirs ="))) |
|
|
|
#t)) |
|
|
|
(add-before 'configure 'patch-xen-script-directory |
|
|
|
(lambda* (#:key outputs #:allow-other-keys) |
|
|
|
(substitute* '("configure" |
|
|
|
"tools/configure" |
|
|
|
"docs/configure") |
|
|
|
(("XEN_SCRIPT_DIR=.*") |
|
|
|
(string-append "XEN_SCRIPT_DIR=" |
|
|
|
(assoc-ref outputs "out") |
|
|
|
"/etc/xen/scripts"))) |
|
|
|
#t)) |
|
|
|
(add-before 'configure 'set-environment-up |
|
|
|
(lambda* (#:key make-flags #:allow-other-keys) |
|
|
|
(define (cross? x) |
|
|
|
(string-contains x "cross-i686-linux")) |
|
|
|
(define (filter-environment! filter-predicate |
|
|
|
environment-variable-names) |
|
|
|
(for-each |
|
|
|
(lambda (env-name) |
|
|
|
(let* ((env-value (getenv env-name)) |
|
|
|
(search-path (search-path-as-string->list env-value)) |
|
|
|
(new-search-path (filter filter-predicate |
|
|
|
search-path)) |
|
|
|
(new-env-value (list->search-path-as-string |
|
|
|
new-search-path ":"))) |
|
|
|
(setenv env-name new-env-value))) |
|
|
|
environment-variable-names)) |
|
|
|
(setenv "CROSS_C_INCLUDE_PATH" (getenv "C_INCLUDE_PATH")) |
|
|
|
(setenv "CROSS_CPLUS_INCLUDE_PATH" (getenv "CPLUS_INCLUDE_PATH")) |
|
|
|
(setenv "CROSS_LIBRARY_PATH" (getenv "LIBRARY_PATH")) |
|
|
|
(filter-environment! cross? |
|
|
|
'("CROSS_C_INCLUDE_PATH" "CROSS_CPLUS_INCLUDE_PATH" |
|
|
|
"CROSS_LIBRARY_PATH")) |
|
|
|
(filter-environment! (lambda (e) (not (cross? e))) |
|
|
|
'("C_INCLUDE_PATH" "CPLUS_INCLUDE_PATH" |
|
|
|
"LIBRARY_PATH")) |
|
|
|
;; Guix tries to be helpful and automatically adds |
|
|
|
;; mini-os-git-checkout/include to the include path, |
|
|
|
;; but actually we don't want it to be there (yet). |
|
|
|
(filter-environment! (lambda (e) |
|
|
|
(not |
|
|
|
(string-contains e |
|
|
|
"mini-os-git-checkout"))) |
|
|
|
'("C_INCLUDE_PATH" "CPLUS_INCLUDE_PATH" |
|
|
|
"LIBRARY_PATH")) |
|
|
|
(setenv "EFI_VENDOR" "guix") |
|
|
|
#t)) |
|
|
|
(replace 'build |
|
|
|
(lambda* (#:key make-flags #:allow-other-keys) |
|
|
|
(apply invoke "make" "world" make-flags)))))) |
|
|
|
(inputs |
|
|
|
`(("acpica" ,acpica) ; TODO: patch iasl invocation. |
|
|
|
("bridge-utils" ,bridge-utils) ; TODO: patch invocations. |
|
|
|
("glib" ,glib) |
|
|
|
("iproute" ,iproute) ; TODO: patch invocations. |
|
|
|
("libaio" ,libaio) |
|
|
|
("libx11" ,libx11) |
|
|
|
("libyajl" ,libyajl) |
|
|
|
("ncurses" ,ncurses) |
|
|
|
("openssl" ,openssl) |
|
|
|
("ovmf" ,ovmf) |
|
|
|
("pixman" ,pixman) |
|
|
|
("qemu" ,qemu-minimal) |
|
|
|
("seabios" ,seabios) |
|
|
|
("util-linux" ,util-linux) ; uuid |
|
|
|
; TODO: ocaml-findlib, ocaml-nox. |
|
|
|
("xz" ,xz) ; for liblzma |
|
|
|
("zlib" ,zlib))) |
|
|
|
(native-inputs |
|
|
|
`(("dev86" ,dev86) |
|
|
|
("bison" ,bison) |
|
|
|
("cmake" ,cmake) |
|
|
|
("figlet" ,figlet) |
|
|
|
("flex" ,flex) |
|
|
|
("gettext" ,gettext-minimal) |
|
|
|
("libnl" ,libnl) |
|
|
|
("mini-os" |
|
|
|
,(origin |
|
|
|
(method git-fetch) |
|
|
|
(uri (git-reference |
|
|
|
(url "http://xenbits.xen.org/git-http/mini-os.git") |
|
|
|
(commit (string-append "xen-RELEASE-" version)))) |
|
|
|
(sha256 |
|
|
|
(base32 |
|
|
|
"1i8pcl19n60i2m9vlg79q3nknpj209c9ic5x10wxaicx45kc107f")) |
|
|
|
(file-name "mini-os-git-checkout"))) |
|
|
|
("perl" ,perl) |
|
|
|
; TODO: markdown |
|
|
|
("pkg-config" ,pkg-config) |
|
|
|
("python" ,python-2) |
|
|
|
("wget" ,wget) |
|
|
|
("cross-gcc" ,(cross-gcc "i686-linux-gnu" |
|
|
|
#:xbinutils (cross-binutils "i686-linux-gnu") |
|
|
|
#:libc (cross-libc "i686-linux-gnu"))) |
|
|
|
("cross-libc" ,(cross-libc "i686-linux-gnu")) ; header files |
|
|
|
("cross-libc-static" ,(cross-libc "i686-linux-gnu") "static"))) |
|
|
|
(home-page "https://xenproject.org/") |
|
|
|
(synopsis "Xen Virtual Machine Monitor") |
|
|
|
(description "This package provides the Xen Virtual Machine Monitor |
|
|
|
which is a hypervisor.") |
|
|
|
;; TODO: Some files are licensed differently. List those. |
|
|
|
(license license:gpl2) |
|
|
|
(supported-systems '("i686-linux" "x86_64-linux" "armhf-linux")))) |