Coder Social home page Coder Social logo

mirage-skeleton's Introduction

mirage-skeleton

This repository is a collection of tutorial code referred to from the Mirage website, example code for using specific devices like filesystems and networks, and higher-level applications like DHCP, DNS, and Web servers.

  • tutorial/ contains the tutorial content.
  • device-usage/ contains examples showing specific devices.
  • applications/ contains the higher-level examples, which may use several different devices.

Prerequisites

  • Install latest OPAM (at least 2.1.0), following instructions at https://opam.ocaml.org/

  • Install the mirage package with OPAM, updating your package first if necessary:

    $ opam update -u
    $ opam install mirage
    $ eval `opam config env`
  • Please ensure that your Mirage command-line version is at least 4.5.0 before proceeding:
    $ mirage --version
    4.5.0

Trivial example

You can check that your build environment is working and get a feel for the normal workflow by trying to compile the noop application.

    $ cd tutorials/noop
    $ mirage configure -t unix # initial setup for UNIX backend
    $ make depend # install dependencies
    $ make # build the program
    $ ./noop # run the program

Note that in the general case, you may need to specify more options at the mirage configure stage. You can find out about them with mirage configure --help. For example, you may need to specify what networking method should be used, with, e.g., --net socket or --net direct at the mirage configure stage.

Configure, Build, Run

Each unikernel lives in its own directory, and can be configured, built, and run from that location. For example:

    $ cd applications/static_website_tls
    $ mirage configure -t unix # initial setup for UNIX backend
    $ make depend # install dependencies
    $ make # build the program
    $ ./https # run the program

If you want to clean up mirage's artifacts after building, mirage clean will do the trick:

    $ cd applications/static_website_tls
    $ mirage clean

There is also a top-level Makefile at the root of this repository with convenience functions for configuring, building, and running all of the examples in one step.

    $ make all                   ## equivalent to ...
    $ make configure build
    $ make clean

Details

The Makefile simply invokes sample-specific sample/Makefile. Each of those invokes the mirage command-line tool to configure, build and run the sample, passing flags and environment as directed. The mirage command-line tool assumes that the OPAM package manager is present and is used to manage installation of an OCaml dependencies.

The mirage command-line tool supports four commands, each of which either uses config.ml in the current directory or supports passing a config.ml directly.

To configure a unikernel before building:

    $ mirage configure -t [hvt|virtio|qubes|macosx|unix|xen|genode|muen|spt]

The boot target is selected via the -t flag. The default target is unix. Depending on what devices are present in config.ml, there may be additional configuration options for the unikernel. To list the options,

    $ mirage help configure

and see the section labeled UNIKERNEL PARAMETERS.

To install dependencies

After running mirage configure:

    $ make depend

to install the list of dependencies discovered in the mirage configure phase.

To build a unikernel:

    $ make

The output will be created next to the config.ml file used.

To run a unikernel:

The mechanics of running the generated artifact will be dependent on the backend used. For details, see solo5's readme for hvt, virtio, etc., the qubes-test-mirage repository's readme for Qubes, or the MirageOS website instructions on booting Xen unikernels.

For the Macosx and Unix backends, running as a normal process should suffice.

For summaries by backend that assume the hello example, see below:

Unix:

    $ cd hello
    $ mirage configure -t unix
    $ make depend
    $ make
    $ ./hello

Xen:

    $ cd hello
    $ mirage configure -t xen
    $ make depend
    $ make
    $ sudo xl create xen.xl -c

Hvt:

    $ cd hello
    $ mirage configure -t hvt
    $ make depend
    $ make
    $ solo5-hvt hello.hvt

Virtio:

    $ cd hello
    $ mirage configure -t virtio
    $ make depend
    $ make
    $ solo5-virtio-run ./https.virtio

Macosx:

    $ cd hello
    $ mirage configure -t macosx
    $ make depend
    $ make
    $ ./hello

Qubes:

Some specific setup in the QubesOS manager is necessary to be able to easily run MirageOS unikernels -- please see the qubes-test-mirage readme for details.

    $ cd hello
    $ mirage configure -t qubes
    $ make depend
    $ make
    $ ~/test-unikernel hello.xen unikernel-test-vm

To clean up after building a unikernel:

    $ make clean

mirage-skeleton's People

Contributors

amirmc avatar anuragsoni avatar avsm avatar azul avatar dinosaure avatar djs55 avatar drup avatar dsheets avatar garethr avatar haesbaert avatar hannesm avatar jonludlam avatar lnmx avatar mato avatar mattgray avatar mk270 avatar mmaker avatar mor1 avatar nojb avatar oemmerson avatar olleolleolle avatar philtomson avatar reynir avatar samoht avatar srenatus avatar talex5 avatar thelortex avatar vbmithr avatar yallop avatar yomimono avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mirage-skeleton's Issues

Compiling `static_website_tls` on Mac OS X fails

The final step in compiling (linking) the tls website fails on this command:

$ ocamlfind ocamlopt -g -linkpkg -g -thread -package uri -package tls.mirage -package tls -package tcpip.udp -package tcpip.tcp -package tcpip.stack-direct -package tcpip.ipv4 -package tcpip.icmpv4 -package tcpip.ethif -package tcpip.arpv4 -package tcpip -package nocrypto.lwt -package nocrypto -package mirage-unix -package mirage-types-lwt -package mirage-types -package mirage-runtime -package mirage-random -package mirage-net-macosx -package mirage-logs -package mirage-kv-lwt -package mirage-http -package mirage-flow-lwt -package mirage-clock-unix -package mirage-clock -package magic-mime -package lwt -package io-page.unix -package io-page -package functoria-runtime -package conduit.mirage -package conduit -predicates mirage_unix key_gen.cmx dispatch.cmx static1.cmx static2.cmx main.cmx -o main.native
# [... yields output ...]
Undefined symbols for architecture x86_64:
  "_caml_tcpip_ones_complement_checksum", referenced from:
      _camlIpv4_common__adjust_output_header_1199 in tcpip_ipv4.a(ipv4_common.o)
      _camlIpv4_packet__unsafe_fill_1727 in tcpip_ipv4.a(ipv4_packet.o)
      _camlTcpip_checksum__fun_1274 in tcpip.a(tcpip_checksum.o)
      _camlTcpip_checksum__2 in tcpip.a(tcpip_checksum.o)
  "_caml_tcpip_ones_complement_checksum_list", referenced from:
      _camlIcmpv4_packet__unsafe_fill_1855 in tcpip_icmpv4.a(icmpv4_packet.o)
      _camlIpv4_common__checksum_1660 in tcpip_ipv4.a(ipv4_common.o)
      _camlIpv4_packet__check_1871 in tcpip_ipv4.a(ipv4_packet.o)
      _camlTcp__Tcp_packet__unsafe_fill_1648 in tcp.a(tcp__Tcp_packet.o)
      _camlTcpip_checksum__fun_1272 in tcpip.a(tcpip_checksum.o)
      _camlTcpip_checksum__2 in tcpip.a(tcpip_checksum.o)
      _camlUdp_packet__unsafe_fill_1539 in tcpip_udpv4.a(udp_packet.o)
      ...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
File "caml_startup", line 1:
Error: Error during linking

Am I missing some standard library or something? Any tips or pointers would be appreciated. Thanks!


Steps to reproduce:

$ mirage configure -t macosx
$ make depend
$ make

Some other details:

$ ocaml --version
The OCaml toplevel, version 4.04.2
$ opam --version
1.2.2
$ system_profiler SPSoftwareDataType | grep System
    System Software Overview:
      System Version: OS X 10.10.5 (14F2411)

http-fetch fails with DNS resovle error.

My system:
Ubuntu 16.04
I use the public google dns(8.8.8.8) for my computer
Ocaml version: 4.02.3
Mirage version: 2.9.1
Run as unix

Steps I did:

mirage configure
make
sudo ip tuntap add name tap0 mode tap
sudo ifconfig tap0 10.0.0.1 up
sudo ./mir-http-fetch

The console log

Netif: plugging into tap0 with mac b2:e8:30:5f:e2:1b
Netif: connect tap0
Manager: connect
Manager: configuring
Manager: Interface to 10.0.0.2 nm 255.255.255.0 gw [10.0.0.1]

ARP: sending gratuitous from 10.0.0.2
Manager: configuration done
Resolving in 1s using DNS server 8.8.8.8
Fetching https://www.google.hu with Cohttp:
ARP: transmitting probe -> 10.0.0.1
ARP: updating 10.0.0.1 -> d6:69:f4:63:e0:e1
Fatal error: exception Protocol.Dns_resolve_error(_)
Raised at file "src/core/lwt.ml", line 789, characters 22-23
Called from file "src/unix/lwt_main.ml", line 34, characters 8-18
Called from file "main.ml", line 281, characters 5-10

FAT kv_ro example failure (fat-filesystem compilation error)

Trying the command
$ env FS=fat mirage configure
I get the following compilation error from fat-filesystem:

# opam-version 1.2.0
# os           linux
# command      make
# compiler     system (4.01.0)
# exit-code    2
### stdout ###
# ...[truncated]
# Error: Signature mismatch:
#        ...
#        Type declarations do not match:
#          type t = Io_page.t
#        is not included in
#          type t =
#              (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
#              Bigarray.Array1.t
# Command exited with code 2.
# Makefile:19: recipe for target 'build' failed
### stderr ###
# W: Cannot find source file matching module 'fat' in library fat
# E: Failure("Command ''/usr/bin/ocamlbuild' lib/fat.cma lib/fat.cmxa lib/fat.a lib/fat.cmxs fat/main.native shell/main.native lib_test/test.native -tag debug -j 4' terminated with error code 10")

Any idea?

The path to htdocs seems to be wrong when configured for unix

When configuring for unix, the main.ml seems to end up with an absolute path to the htdocs location.

This means that if you move the unikernel to a different machine then it will not work - cannot find the htdocs, because that absolute path does not exist.

To make it work, I have to modify main.ml from:

Kvro_fs_unix.connect "/home/ubuntu/mirage-skeleton/static_website/htdocs"

to:

Kvro_fs_unix.connect "./htdocs"

and then have the htdocs directory in the current directory that the unikernel is run from, and it seems to work.

Block example not working with Xen 4.6

Hello,

The example in the block folder is not working for me with Xen stable-4.6 (Ubuntu 14.04 x86_64). The Unix version is working fine.

Building the unikernel seems to be working fine, the problem is at runtime. It seems to be related to the virtual disk.

For the Xen guest version, here is how I get the error:

$ cd block
$ ./generate_disk_img.sh
$ mirage configure --xen
$ make
$ sudo xl create block_test.xl -c
Parsing config from block_test.xl
libxl: error: libxl_device.c:283:libxl__device_disk_set_backend: Disk vdev=xvdc failed to stat: /home/pierre/mirage-skeleton/block/xvda1: No such file or directory
libxl: error: libxl_create.c:906:initiate_domain_create: Unable to set disk defaults for disk 1
libxl: error: libxl.c:1591:libxl__destroy_domid: non-existant domain 7
libxl: error: libxl.c:1549:domain_destroy_callback: unable to destroy guest with domid 7
libxl: error: libxl.c:1476:domain_destroy_cb: destruction of domain 7 failed

I was able to fix the problem by changing config.ml to:

open Mirage

let main = foreign "Unikernel.Main" (console @-> block @-> job)

let img =
  if_impl Key.is_xen
    (block_of_file "disk.img") (*The change is here, replaced "xvda1" by "disk.img" *)
    (block_of_file "disk.img")

let () =
  register "block_test" [main $ default_console $ img]

With that modification the Xen guest start and the read / write tests are successful.

Cannot configure stackv4 for xen after update to mirage 2.7.0

After upgrading to mirage 2.7.0 I found myself unable to configure the stackv4 skeleton for Xen. This is what I've done:

[jermar@gorgo mirage-skeleton]$ cd stackv4/
[jermar@gorgo stackv4]$ ls
_build  config.ml  key_gen.ml  log  main.ml  main.native  Makefile  mir-stackv4  mir-stackv4.xen  stackv4_libvirt.xml  stackv4.xe  stackv4.xl  stackv4.xl.in  unikernel.ml
[jermar@gorgo stackv4]$ make clean
ocamlbuild -clean
Finished, 0 targets (0 cached) in 00:00:00.
[jermar@gorgo stackv4]$ ls
config.ml  key_gen.ml  log  main.ml  Makefile  mir-stackv4.xen  stackv4_libvirt.xml  stackv4.xe  stackv4.xl  stackv4.xl.in  unikernel.ml
[jermar@gorgo stackv4]$ env DHCP=true mirage configure --xen
# Detecting depexts using flags: x86_64 linux fedora
# The following system packages are needed:
#  - m4
#  - pkgconfig
Name        : m4
Version     : 1.4.17
Release     : 6.fc21
Architecture: x86_64
Install Date: Tue 06 Jan 2015 09:11:37 PM CET
Group       : Applications/Text
Size        : 534915
License     : GPLv3+
Signature   : RSA/SHA256, Sun 17 Aug 2014 06:07:38 PM CEST, Key ID 89ad4e8795a43f54
Source RPM  : m4-1.4.17-6.fc21.src.rpm
Build Date  : Sun 17 Aug 2014 06:05:39 PM CEST
Build Host  : buildvm-06.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : http://www.gnu.org/software/m4/
Summary     : The GNU macro processor
Description :
A GNU implementation of the traditional UNIX macro processor.  M4 is
useful for writing text files which can be logically parsed, and is used
by many programs as part of their build process.  M4 has built-in
functions for including files, running shell commands, doing arithmetic,
etc.  The autoconf program needs m4 for generating configure scripts, but
not for running configure scripts.

Install m4 if you need a macro processor.
Name        : pkgconfig
Epoch       : 1
Version     : 0.28
Release     : 8.fc21
Architecture: x86_64
Install Date: Tue 23 Feb 2016 10:33:40 PM CET
Group       : Development/Tools
Size        : 107904
License     : GPLv2+
Signature   : RSA/SHA256, Sun 19 Apr 2015 08:31:15 PM CEST, Key ID 89ad4e8795a43f54
Source RPM  : pkgconfig-0.28-8.fc21.src.rpm
Build Date  : Fri 17 Apr 2015 09:46:12 PM CEST
Build Host  : buildhw-10.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : http://pkgconfig.freedesktop.org
Summary     : A tool for determining compilation options
Description :
The pkgconfig tool determines compilation options. For each required
library, it reads the configuration file and outputs the necessary
compiler and linker flags.
# All required OS packages found.
[NOTE] Package functoria is already installed (current version is 1.0.0).
[NOTE] Package lwt is already installed (current version is 2.5.1).
[NOTE] Package mirage-bootvar-xen is already installed (current version is 0.3.1).
[NOTE] Package mirage-clock-xen is already installed (current version is 1.1).
[NOTE] Package mirage-console is already installed (current version is 2.1.3).
[NOTE] Package mirage-xen is already installed (current version is 2.3.3).
[NOTE] Package sexplib is already installed (current version is 113.24.00).
[NOTE] Package tcpip is already installed (current version is 2.6.1).
[NOTE] Package xen-evtchn is already installed (current version is 1.0.6).
[NOTE] Package xen-gnt is already installed (current version is 2.2.1).
[NOTE] Package xenstore is already installed (current version is 1.2.5).
The following actions will be performed:
  - install mirage-net-xen 1.5.0

=-=- Gathering sources =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[mirage-net-xen] Archive in cache

=-=- Processing actions -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[ERROR] The compilation of mirage-net-xen failed at "make".
Processing  1/1: [mirage-net-xen: ocamlfind remove]
#=== ERROR while installing mirage-net-xen.1.5.0 ==============================#
# opam-version 1.2.2
# os           linux
# command      make
# path         /home/jermar/.opam/system/build/mirage-net-xen.1.5.0
# compiler     system (4.02.3)
# exit-code    2
# env-file     /home/jermar/.opam/system/build/mirage-net-xen.1.5.0/mirage-net-xen-7033-ffb3fd.env
# stdout-file  /home/jermar/.opam/system/build/mirage-net-xen.1.5.0/mirage-net-xen-7033-ffb3fd.out
# stderr-file  /home/jermar/.opam/system/build/mirage-net-xen.1.5.0/mirage-net-xen-7033-ffb3fd.err
### stdout ###
# [...]
# /home/jermar/.opam/system/bin/ocamlfind ocamldep -package cstruct -syntax camlp4o -package cstruct.syntax -package ipaddr -syntax camlp4o -package lwt.syntax -package mirage-profile -package mirage-xen -package result -package xen-evtchn -package xen-gnt -modules lib/s.ml > lib/s.ml.depends
# + /home/jermar/.opam/system/bin/ocamlfind ocamldep -package cstruct -syntax camlp4o -package cstruct.syntax -package ipaddr -syntax camlp4o -package lwt.syntax -package mirage-profile -package mirage-xen -package result -package xen-evtchn -package xen-gnt -modules lib/s.ml > lib/s.ml.depends
# File "lib/s.ml", line 21, characters 0-1:
# Parse error: [semi] expected after [str_item] (in [implem])
# File "lib/s.ml", line 1:
# Error: Error while running external preprocessor
# Command line: camlp4 '-I' '/usr/lib64/ocaml/camlp4' '-I' '/home/jermar/.opam/system/lib/cstruct' '-I' '/home/jermar/.opam/system/lib/lwt' '-I' '/home/jermar/.opam/system/lib/lwt' '-parser' 'o' '-parser' 'op' '-printer' 'p' 'cstruct-syntax.cma' 'lwt-syntax-options.cma' 'lwt-syntax.cma'  'lib/s.ml' > /tmp/ocamlppa1e9de
# 
# Command exited with code 2.
# Makefile:7: recipe for target 'build' failed
### stderr ###
# W: Cannot find source file matching module 'netchannel' in library netchannel
# E: Failure("Command ''/usr/bin/ocamlbuild' lib/netchannel.cma lib/netchannel.cmxa lib/netchannel.a lib/netchannel.cmxs compat/mirage-net-xen.cma compat/mirage-net-xen.cmxa compat/mirage-net-xen.a compat/mirage-net-xen.cmxs -tag debug' terminated with error code 10")
# make: *** [build] Error 1



=-=- Error report -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
The following actions failed
  - install mirage-net-xen 1.5.0
No changes have been performed
[ERROR]
  The command "opam install --yes  functoria lwt mirage-bootvar-xen mirage-clock-xen mirage-console mirage-net-xen mirage-xen sexplib tcpip xen-evtchn xen-gnt xenstore" exited with code 4.
[jermar@gorgo stackv4]$ mirage --version
2.7.0

Networking relented example fails to run (unix & ukvm)

Both the conduit and static website examples fail to boot for me, I tried unix and ukvm, the output respectively:

2017-08-15 21:40:55 +01:00: ERR [application] main: (Failure "tun[TUNSETIFF]: Operation not permitted")
Raised by primitive operation at file "lib/tuntap.ml", line 34, characters 2-53
Called from file "src/netif.ml", line 61, characters 22-58
ukvm-bin: Module `net' setup failed
ukvm-bin: Please check you have correctly specified:
    --net=TAP (host tap device for guest network interface or @NN tap fd)
    [ --net-mac=HWADDR ] (guest MAC address)

I'm running this on Ubuntu 16.04 on VMware VM, the hello example runs fine.

error with fresh install: "ocamlfind: Package `lwt.unix' not found"

Hello, I'm attempting to follow these instructions with a fresh install of opam:

% pwd
/mydir/mirage-skeleton/basic

% mirage configure --unix
MIRAGE      Using the scanned config file: config.ml
MIRAGE      Compiling and dynlinkg /mydir/mirage/mirage-skeleton/basic/config.ml
MIRAGE      + Executing: rm -rf /mydir/mirage/mirage-skeleton/basic/_build/config.*
Finished, 4 targets (0 cached) in 00:00:00.

MIRAGE      CONFIGURE: /mydir/mirage/mirage-skeleton/basic/config.ml
MIRAGE      1 job [job1]
MIRAGE      Installing OPAM packages.
MIRAGE      + Executing: opam install --yes mirage-console-unix mirage-unix[WARNING] unknown package "mirage-xen"
[WARNING] unknown package "mirage-xen"
[WARNING] unknown package "mirage-xen"
[WARNING] unknown package "mirage-xen"
[WARNING] unknown package "mirage-xen"
[WARNING] unknown package "mirage-xen"
[WARNING] unknown package "mirage-xen"
[WARNING] unknown package "mirage-xen"
The following actions will be performed:
 - install mirage-clock-unix.1.0.0 [required by mirage-console-unix]
 - install ounit.2.0.0 [required by mirage-console-unix]
 - install shared-memory-ring.1.0.0 [required by mirage-console-unix]
 - install mirage-unix.1.0.0 [required by mirage-console-unix]
 - install mirage-console-unix.1.0.0
5 to install | 0 to reinstall | 0 to upgrade | 0 to downgrade | 0 to remove

=-=-= Installing mirage-clock-unix.1.0.0 =-=-=
mirage-clock-unix.1.0.0 Downloading https://github.com/mirage/mirage-clock/archive/v1.0.0.tar.gz
Building mirage-clock-unix.1.0.0:
  make unix-build
  make unix-install
Installing mirage-clock-unix.1.0.0.

=-=-= Installing ounit.2.0.0 =-=-=
ounit.2.0.0 Downloading http://opam.ocamlpro.com/archives/ounit.2.0.0+opam.tar.gz
Building ounit.2.0.0:
  make build
  make install
Installing ounit.2.0.0.

=-=-= Installing shared-memory-ring.1.0.0 =-=-=
shared-memory-ring.1.0.0 Downloading https://github.com/mirage/shared-memory-ring/archive/1.0.0.tar.gz
Building shared-memory-ring.1.0.0:
  make all
  make install
[ERROR] The compilation of shared-memory-ring.1.0.0 failed.
Removing shared-memory-ring.1.0.0.
  ocamlfind remove shared-memory-ring

[ERROR] Due to some errors while processing shared-memory-ring.1.0.0, the following actions will NOT proceed:
 - install mirage-console-unix.1.0.0
 - install mirage-unix.1.0.0

===== ERROR while installing shared-memory-ring.1.0.0 =====
# opam-version 1.1.0
# os           darwin
# command      make all
# path         /Users/username/.opam/system/build/shared-memory-ring.1.0.0
# compiler     system (4.01.0)
# exit-code    2
# env-file     /Users/username/.opam/system/build/shared-memory-ring.1.0.0/shared-memory-ring-29476-d8a4ae.env
# stdout-file  /Users/username/.opam/system/build/shared-memory-ring.1.0.0/shared-memory-ring-29476-d8a4ae.out
# stderr-file  /Users/username/.opam/system/build/shared-memory-ring.1.0.0/shared-memory-ring-29476-d8a4ae.err
### stderr ###
# ocamlfind: Package `lwt.unix' not found
# W: Field 'pkg_lwt_unix' is not set: Command ''/Users/username/.opam/system/bin/ocamlfind' query -format %d lwt.unix > '/var/folders/c7/x50yt2jd4d79k9h99tqg_7040000gn/T/oasis-68253b.txt'' terminated with error code 2
# ocamlfind: Package `lwt.unix' not found
# W: Failure("Command ''/Users/username/.opam/system/bin/ocamlfind' query -format %d lwt.unix > '/var/folders/c7/x50yt2jd4d79k9h99tqg_7040000gn/T/oasis-43d38c.txt'' terminated with error code 2")
# ocamlfind: Package `lwt.unix' not found
# W: Failure("Command ''/Users/username/.opam/system/bin/ocamlfind' query -format %d lwt.unix > '/var/folders/c7/x50yt2jd4d79k9h99tqg_7040000gn/T/oasis-5816d1.txt'' terminated with error code 2")
# E: Cannot find findlib package lwt.unix
# E: Failure("1 configuration error")
# make: *** [setup.data] Error 1

The former state can be restored with opam switch import -f "/Users/username/.opam/system/backup/state-20140027061459.export"
'opam install --yes mirage-console-unix mirage-unix' failed.
[ERROR]      The command "opam install --yes mirage-console-unix mirage-unix" exited with code 4.

travis CI tests sometimes fail on tracing

Tests are sometimes failing on trying to build the tracing example. See https://travis-ci.org/mirage/mirage-skeleton/jobs/120923478 .

cd tracing && make

make[1]: Entering directory `/home/travis/build/mirage/mirage-skeleton/tracing'

ocamlbuild -use-ocamlfind -pkgs functoria.runtime,mirage-clock-unix,mirage-console.unix,mirage-net-unix,mirage-profile.unix,mirage-types.lwt,mirage-unix,mirage.runtime,tcpip.arpv4,tcpip.ethif,tcpip.ipv4,tcpip.stack-direct,tcpip.tcp,tcpip.udp -tags "warn(A-4-41-44),debug,bin_annot,strict_sequence,principal,safe_string" -tag-line "<static*.*>: warn(-32-34)" -cflag -g -lflags -g,-linkpkg main.native

+ ocamlfind ocamlopt -g -linkpkg -linkpkg -g -package tcpip.udp -package tcpip.tcp -package tcpip.stack-direct -package tcpip.ipv4 -package tcpip.ethif -package tcpip.arpv4 -package mirage.runtime -package mirage-unix -package mirage-types.lwt -package mirage-profile.unix -package mirage-net-unix -package mirage-console.unix -package mirage-clock-unix -package functoria.runtime key_gen.cmx unikernel.cmx main.cmx -o main.native

/home/travis/.opam/system/lib/mirage-profile/libmProf_unix_stubs.a(time_stubs.o): In function `stub_mprof_get_monotonic_time':

/home/travis/.opam/system/build/mirage-profile.0.7.0/_build/unix/time_stubs.c:31: undefined reference to `clock_gettime'

collect2: ld returned 1 exit status

File "caml_startup", line 1:

Error: Error during linking

Command exited with code 2.

Hint: Recursive traversal of subdirectories was not enabled for this build,

  as the working directory does not look like an ocamlbuild project (no

  '_tags' or 'myocamlbuild.ml' file). If you have modules in subdirectories,

  you should add the option "-r" or create an empty '_tags' file.



  To enable recursive traversal for some subdirectories only, you can use the

  following '_tags' file:



      true: -traverse

      <dir1> or <dir2>: traverse



Compilation unsuccessful after building 10 targets (0 cached) in 00:00:00.

make[1]: *** [main.native] Error 10

make[1]: Leaving directory `/home/travis/build/mirage/mirage-skeleton/tracing'

make: *** [tracing-build] Error 2

'unset TESTS; OPAMYES=1 export OPAMYES; set -ue; make MODE=unix && make testrun SUDO=sudo && make clean' exited 2. Terminating with 2

Inconsistencies with documentation

At least some examples are out-of-date (at least stackv4) with respect to the wiki/hello-world documentation.

All samples should be checked through on a release to make sure they're current, and to make sure documentation is up-to-date.

stackv4 refuses to build due to type error.

When doing make configure in a freshly pulled clone of this repo, my build fails with:

...
[snip]
mirage build stackv4/config.ml
MIRAGE      Using the specified config file: stackv4/config.ml
MIRAGE      Compiling and dynlinking /home/t/hacking/mirage/mirage-skeleton/stackv4/config.ml
MIRAGE      + Executing: rm -rf /home/t/hacking/mirage/mirage-skeleton/stackv4/_build/config.*
MIRAGE      + Executing: cd /home/t/hacking/mirage/mirage-skeleton/stackv4 && ocamlbuild -use-ocamlfind -tags annot,bin_annot -pkg mirage config.cmxs
stackv4     BUILD: /home/t/hacking/mirage/mirage-skeleton/stackv4/config.ml
stackv4     + Executing: make build
stackv4      make[1]: Entering directory '/home/t/hacking/mirage/mirage-skeleton/stackv4'
stackv4      ocamlbuild -classic-display -use-ocamlfind -pkgs lwt.syntax,mirage-clock-unix,mirage-console-unix,mirage-http,mirage-net-unix,mirage-types.lwt,tcpip.stack-direct,tcpip.stack-socket -tags "syntax(camlp4o),annot,bin_annot,strict_sequence,principal" -cflag -g -lflags -g,-linkpkg main.native
stackv4      ocamlfind ocamldep -package tcpip.stack-socket -package tcpip.stack-direct -package mirage-types.lwt -package mirage-net-unix -package mirage-http -package mirage-console-unix -package mirage-clock-unix -package lwt.syntax -syntax camlp4o -modules main.ml > main.ml.depends
stackv4      ocamlfind ocamldep -package tcpip.stack-socket -package tcpip.stack-direct -package mirage-types.lwt -package mirage-net-unix -package mirage-http -package mirage-console-unix -package mirage-clock-unix -package lwt.syntax -syntax camlp4o -modules unikernel.ml > unikernel.ml.depends
stackv4      ocamlfind ocamlc -c -g -annot -bin-annot -principal -strict-sequence -package tcpip.stack-socket -package tcpip.stack-direct -package mirage-types.lwt -package mirage-net-unix -package mirage-http -package mirage-console-unix -package mirage-clock-unix -package lwt.syntax -syntax camlp4o -o unikernel.cmo unikernel.ml
stackv4      + ocamlfind ocamlc -c -g -annot -bin-annot -principal -strict-sequence -package tcpip.stack-socket -package tcpip.stack-direct -package mirage-types.lwt -package mirage-net-unix -package mirage-http -package mirage-console-unix -package mirage-clock-unix -package lwt.syntax -syntax camlp4o -o unikernel.cmo unikernel.ml
stackv4      File "unikernel.ml", line 26, characters 26-39:
stackv4      Error: This expression has type
stackv4               Cohttp.Connection.t ->
stackv4               ?body:'a ->
stackv4               H.Server.Request.t ->
stackv4               (H.Server.Response.t * Cohttp_lwt_body.t) Lwt.t
stackv4             but an expression was expected of type
stackv4               Cohttp.Connection.t ->
stackv4               Cohttp.Request.t ->
stackv4               Cohttp_lwt_body.t -> (Cohttp.Response.t * Cohttp_lwt_body.t) Lwt.t
stackv4             Type
stackv4               ?body:'a ->
stackv4               H.Server.Request.t ->
stackv4               (H.Server.Response.t * Cohttp_lwt_body.t) Lwt.t
stackv4             is not compatible with type
stackv4               Cohttp.Request.t ->
stackv4               Cohttp_lwt_body.t -> (Cohttp.Response.t * Cohttp_lwt_body.t) Lwt.t 
stackv4      Command exited with code 2.
stackv4      Makefile:19: recipe for target 'main.native' failed
stackv4      make[1]: *** [main.native] Error 10
stackv4      make[1]: Leaving directory '/home/t/hacking/mirage/mirage-skeleton/stackv4'
[ERROR]      The command "make build" exited with code 2.
Makefile:33: recipe for target 'stackv4-build' failed
make: *** [stackv4-build] Error 1

opam list gives me

% opam list             
Installed packages for system:
base-bigarray             base  Bigarray library distributed with the OCaml compiler
base-threads              base  Threads library distributed with the OCaml compiler
base-unix                 base  Unix library distributed with the OCaml compiler
cmdliner                 0.9.4  Declarative definition of command line interfaces for OCaml
cohttp                  0.10.0  HTTP library for Lwt, Async and Mirage
crunch                   1.2.3  Convert a filesystem into a static OCaml module
cstruct                  1.1.0  access C structures via a camlp4 extension
fieldslib            109.20.03  Syntax extension to define first class values representing record fields, to get and set record fields, iterate and fold over 
io-page                  1.1.1  Allocate memory pages suitable for aligned I/O
ipaddr                   2.4.0  IP (and MAC) address representation library
lwt                      2.4.4  A cooperative threads library for OCaml
mirage                   1.1.1  The Mirage library operating system
mirage-clock-unix        1.0.0  A Mirage-compatible Clock library for Unix
mirage-console-unix      1.0.0  A Mirage-compatible Console library for Unix
mirage-http              1.1.0  Mirage HTTP client and server driver for Unix
mirage-net-unix          1.1.0  Ethernet network driver for Mirage, using tuntap
mirage-types             1.1.1  Module type definitions for Mirage-compatible applications
mirage-unix              1.1.0  Mirage OS library for Unix compilation
ocamlfind                1.4.0  A library manager for OCaml
ocplib-endian              0.4  Optimised functions to read and write int16/32/64 from strings and bigarrays, based on new primitives added in version 4.01.
optcomp                    1.5  Optional compilation with cpp-like directives
ounit                    2.0.0  Unit testing framework loosely based on HUnit. It is similar to JUnit, and other XUnit testing frameworks
re                       1.2.1  RE is a regular expression library for OCaml
sexplib              110.01.00  Library for serializing OCaml values to and from S-expressions
shared-memory-ring       1.0.0  Shared memory rings for RPC and bytestream communications.
ssl                      0.4.6  Bindings for the libssl
tcpip                    1.1.1  Userlevel TCP/IP stack
tuntap                   1.0.0  TUN/TAP bindings
type_conv            109.60.01  Library for building type-driven syntax extensions
uri                      1.4.0  RFC3986 URI parsing library

My ocaml stack is about 1 hour old at this point, I have installed:

  • ocaml (v. 4.01.0)
  • ocaml-findlib (v. 1.4-1)
  • opam (v. 1.1.1)

Earlier, I did opam install mirage and eval opam config env`` which succeeded without any errors.

What is the expected ouput of mir-block_test ?

I get 6/10 success. Is it expected ?

./mir-block_test 
sectors = 100001
read_write=true
sector_size=512
writing 1 sectors at 0
writing 1 sectors at 100000
writing 2 sectors at 0
writing 2 sectors at 99999
writing 12 sectors at 0
writing 12 sectors at 99989
writing 1 sectors at 100001
-- expected failure; got success
writing 12 sectors at 99990
-- expected failure; got success
reading 1 sectors at 100001
-- expected failure; got success
reading 12 sectors at 99990
-- expected failure; got success
Test sequence finished
Total tests started: 10
Total tests passed:  6
Total tests failed:  4

xen examples do not build due to pkg-config issues

I have the unix examples working but with a xen build it is expecting to find mirage-xen via pkg-config but the mirage-xen package doesnt have a .pc file anywhere that I can see:

On Ubuntu 14.04.1 x86_64

justin@zander:~/mirage/mirage-skeleton/console$ make depend
opam install mirage-console mirage-xen xen-evtchn xen-gnt xenstore --verbose
[NOTE] Package xenstore is already installed (current version is 1.2.5).
[NOTE] Package xen-gnt is already installed (current version is 2.0.0).
[NOTE] Package xen-evtchn is already installed (current version is 1.0.5).
[NOTE] Package mirage-xen is already installed (current version is 2.0.1).
[NOTE] Package mirage-console is already installed (current version is 2.1.0).
justin@zander:~/mirage/mirage-skeleton/console$ make
ocamlbuild -classic-display -use-ocamlfind -pkgs lwt.syntax,mirage-console.xen,mirage-types.lwt -tags "syntax(camlp4o),annot,bin_annot,strict_sequence,principal" -tag-line "<static*.*>: -syntax(camlp4o)" -cflag -g -lflags -g,-linkpkg,-dontlink,unix main.native.o
ocamlfind ocamldep -package mirage-types.lwt -package mirage-console.xen -package lwt.syntax -syntax camlp4o -modules main.ml > main.ml.depends
ocamlfind ocamlc -c -g -annot -bin-annot -principal -strict-sequence -package mirage-types.lwt -package mirage-console.xen -package lwt.syntax -syntax camlp4o -o main.cmo main.ml
ocamlfind ocamlopt -c -g -annot -bin-annot -principal -strict-sequence -package mirage-types.lwt -package mirage-console.xen -package lwt.syntax -syntax camlp4o -o main.cmx main.ml
pkg-config --print-errors --exists mirage-xen
Package mirage-xen was not found in the pkg-config search path.
Perhaps you should add the directory containing `mirage-xen.pc'
to the PKG_CONFIG_PATH environment variable
No package 'mirage-xen' found
make: *** [build] Error 1

opam list shows mirage-xen was installed by make depend:

Installed packages for system:
base-bigarray             base  Bigarray library distributed with the OCaml compiler
base-bytes              legacy  Bytes compatibility library distributed with ocamlfind
base-no-ppx               base  A pseudo-library to indicate lack of extension points support
base-threads              base  Threads library distributed with the OCaml compiler
base-unix                 base  Unix library distributed with the OCaml compiler
camlp4                  4.01.0  Camlp4 is a system for writing extensible parsers for programming languages
cmdliner                 0.9.5  Declarative definition of command line interfaces for OCaml
conf-pkg-config            1.0  Virtual package relying on pkg-config installation.
crunch                   1.3.0  Convert a filesystem into a static OCaml module
cstruct                  1.4.0  access C structures via a camlp4 extension
io-page                  1.1.1  Allocate memory pages suitable for aligned I/O
ipaddr                   2.5.0  IP (and MAC) address representation library
lwt                      2.4.7  A cooperative threads library for OCaml
mirage                   2.2.0  The Mirage library operating system
mirage-clock-unix        1.0.0  A Mirage-compatible Clock library for Unix
mirage-clock-xen         1.0.0  A Mirage-compatible Clock library for Xen
mirage-console           2.1.0  A Mirage-compatible Console library for Xen and Unix
mirage-types             2.2.0  Module type definitions for Mirage-compatible applications
mirage-types-lwt         2.2.0  Lwt module type definitions for Mirage-compatible applications
mirage-unix              2.0.1  Mirage OS library for Unix compilation
mirage-xen               2.0.1  Mirage OS library for Xen compilation
mirage-xen-minios        0.6.0  Xen MiniOS guest operating system library
oasis                    0.4.5  Architecture for building OCaml libraries and applications
ocaml-data-notation     0.0.11  Store data using OCaml notation
ocamlfind                1.5.5  A library manager for OCaml
ocamlify                 0.0.1  Include files in OCaml code
ocamlmod                 0.0.7  Generate OCaml modules from source files
ocplib-endian              0.7  Optimised functions to read and write int16/32/64 from strings and bigarrays, based on new primitives 
optcomp                    1.6  Optional compilation with cpp-like directives
ounit                    2.0.0  Unit testing framework loosely based on HUnit. It is similar to JUnit, and other XUnit testing framewo
re                       1.2.2  RE is a regular expression library for OCaml
sexplib              111.25.00  Library for serializing OCaml values to and from S-expressions
shared-memory-ring       1.1.0  Shared memory rings for RPC and bytestream communications.
type_conv            111.13.00  Library for building type-driven syntax extensions
xen-evtchn               1.0.5  Xen event channel bindings.
xen-gnt                  2.0.0  Xen grant table bindings
xenstore                 1.2.5  Xenstore protocol clients and server

cant find a mirage-xen.pc file anywhere to point PKG_CONFIG_PATH at...

block_test tests fail on Mac OSX Yosemite

Following the Hello MirageOS Guide, the block_test example fails the tests with the following trace:

sectors = 100000
read_write=true
sector_size=512
writing 1 sectors at 0
writing 1 sectors at 99999
writing 2 sectors at 0
writing 2 sectors at 99998
writing 12 sectors at 0
writing 12 sectors at 99988
writing 1 sectors at 100000
-- expected failure; got success
writing 12 sectors at 99989
-- expected failure; got success
reading 1 sectors at 100000
-- expected failure; got success
reading 12 sectors at 99989
-- expected failure; got success
Test sequence finished
Total tests started: 10
Total tests passed:  6
Total tests failed:  4

So sectors are being written that are meant to be out-of-bounds. On running the command again we get sectors = 100001, so a sector has been added to the disk image as expected. I'm not sure that this is much of an issue, but it would be good if the tests were adapted to work in this environment.

Build errors

File "unikernel.ml", line 15, characters 25-28:
Error: Signature mismatch:
       Modules do not match:
         functor (V : Conduit_mirage.ENDPOINT) ->
           sig
             module Flow :
               sig
                 type 'a io = 'a Lwt.t
                 type buffer = Cstruct.t
                 type flow = Conduit_mirage.Make(S)(V).Flow.flow
                 type error = Conduit_mirage.Make(S)(V).Flow.error
                 val read :
                   flow -> [ `Eof | `Error of error | `Ok of buffer ] io
                 val write :
                   flow ->
                   buffer -> [ `Eof | `Error of error | `Ok of unit ] io
                 val writev :
                   flow ->
                   buffer list -> [ `Eof | `Error of error | `Ok of unit ] io
                 val close : flow -> unit io
               end
             type 'a io = 'a Lwt.t
             type ic = Flow.flow
             type oc = Flow.flow
             type flow = Flow.flow
             type stack = S.t
             type ctx = Conduit_mirage.Make(S)(V).ctx
             val default_ctx : ctx
             val init : stack -> ctx io
             val connect :
               ctx:ctx -> Conduit_mirage.client -> (flow * ic * oc) io
             val serve :
               ?timeout:int ->
               ?stop:unit io ->
               ctx:ctx ->
               mode:Conduit_mirage.server ->
               (flow -> ic -> oc -> unit io) -> unit io
             val endp_to_client :
               ctx:ctx -> Conduit.endp -> Conduit_mirage.client io
             val endp_to_server :
               ctx:ctx -> Conduit.endp -> Conduit_mirage.server io
           end
       is not included in
         Conduit_mirage.S
Command exited with code 2.
make[1]: *** [main.native] Error 10
make[1]: Leaving directory `/home/travis/build/mirage/mirage-dev/mirage-skeleton/conduit_server_manual'

(see https://travis-ci.org/mirage/mirage-dev/jobs/39193148)

static_website example fails to compile with "Unbound record field S.callback"

Hi, I had some trouble getting the static_website example to compile so I had a look at the mirage-www repository and managed to get it working with the following change. Is this correct?

diff --git a/static_website/dispatch.ml b/static_website/dispatch.ml
index 5c5be54..1b91007 100644
--- a/static_website/dispatch.ml
+++ b/static_website/dispatch.ml
@@ -46,10 +46,10 @@ module Main (C:CONSOLE) (FS:KV_RO) (S:Cohttp_lwt.Server) = struct
       let uri = S.Request.uri request in
       dispatcher (split_path uri)
     in
-    let conn_closed (_,conn_id) () =
+    let conn_closed (_,conn_id) =
       let cid = Cohttp.Connection.to_string conn_id in
       C.log c (Printf.sprintf "conn %s closed" cid)
     in
-    http { S.callback; conn_closed }
+    http (S.make ~callback ~conn_closed ())

 end

Http-fetch - Continuous DHCP discovery

Tried to launch Http-fetch in XEN mode but apparently there is something wrong. Logs follow:

 Parsing config from http-fetch.xl
Xen Minimal OS!
Initialising console ... done.
getenv(OCAMLRUNPARAM) -> null
getenv(CAMLRUNPARAM) -> null
getenv(PATH) -> null
Unsupported function lseek called in Mini-OS kernel
Unsupported function lseek called in Mini-OS kernel
Unsupported function lseek called in Mini-OS kernel
getenv(OCAMLRUNPARAM) -> null
getenv(CAMLRUNPARAM) -> null
getenv(TMPDIR) -> null
getenv(TEMP) -> null
Netif: add resume hook
Netif.connect 0
Netfront.create: id=0 domid=0
 sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
MAC: 00:16:3e:14:3e:1c
Attempt to open(/dev/urandom)!
Unsupported function getpid called in Mini-OS kernel
Unsupported function getppid called in Mini-OS kernel
Manager: connect
Manager: configuring
DHCP: start discovery

Sending DHCP broadcast (length 552)
DHCP response:
input ciaddr 0.0.0.0 yiaddr 131.159.24.177
siaddr 131.159.24.167 giaddr 0.0.0.0
chaddr 00163e143e1c00000000000000000000 sname  file
DHCP: offer received: 131.159.24.177
DHCP options: Offer : DNS servers(131.159.24.167), Routers(131.159.24.167), Broadcast(131.159.25.255), Subnet mask(255.255.254.0), Unknown(59[4]), Unknown(58[4]), Lease time(3600), Server identifer(131.159.24.167)
Sending DHCP broadcast (length 552)
DHCP response:
input ciaddr 0.0.0.0 yiaddr 131.159.24.177
siaddr 131.159.24.167 giaddr 0.0.0.0
chaddr 00163e143e1c00000000000000000000 sname  file
DHCP: offer received
                    IPv4: 131.159.24.177
                                        Netmask: 255.255.254.0
Gateways: [131.159.24.167]
ARP: sending gratuitous from 131.159.24.177
DHCP offer received and bound to 131.159.24.177 nm 255.255.254.0 gw [131.159.24.167]
Manager: configuration done
Attempt to open(/dev/urandom)!
Unsupported function getpid called in Mini-OS kernel
Unsupported function getppid called in Mini-OS kernel
Manager: connect
Manager: configuring
DHCP: start discovery

Sending DHCP broadcast (length 552)
DHCP response:
input ciaddr 0.0.0.0 yiaddr 131.159.24.177
siaddr 131.159.24.167 giaddr 0.0.0.0
chaddr 00163e143e1c00000000000000000000 sname  file
DHCP input: lease already held
ARP responding to: who-has 131.159.24.177?
DHCP: start discovery

Sending DHCP broadcast (length 552)
DHCP response:
input ciaddr 0.0.0.0 yiaddr 131.159.24.177
siaddr 131.159.24.167 giaddr 0.0.0.0
chaddr 00163e143e1c00000000000000000000 sname  file
DHCP input: lease already held
DHCP: start discovery

Sending DHCP broadcast (length 552)
DHCP response:
input ciaddr 0.0.0.0 yiaddr 131.159.24.177
siaddr 131.159.24.167 giaddr 0.0.0.0
chaddr 00163e143e1c00000000000000000000 sname  file
DHCP input: lease already held
DHCP: start discovery

Sending DHCP broadcast (length 552)
DHCP response:
input ciaddr 0.0.0.0 yiaddr 131.159.24.177
siaddr 131.159.24.167 giaddr 0.0.0.0
chaddr 00163e143e1c00000000000000000000 sname  file
DHCP input: lease already held 

It's like it keeps starting all over again the DHCP discovery phase. Normally it should stop after getting the IP address (the first iteration).

kv_ro examples not working when passed --kv_ro=archive

When executing make I get following error:

ocamlfind: Package `tar.mirage' not found
ocamlfind ocamldep -package tar.mirage -package mirage-unix -package mirage-types-lwt -package mirage-types -package mirage-runtime -package mirage-
logs -package mirage-clock-unix -package mirage-block-unix -package lwt -package functoria-runtime -predicates mirage_unix -modules main.ml > main.m
l.depends
+ ocamlfind ocamldep -package tar.mirage -package mirage-unix -package mirage-types-lwt -package mirage-types -package mirage-runtime -package mirag
e-logs -package mirage-clock-unix -package mirage-block-unix -package lwt -package functoria-runtime -predicates mirage_unix -modules main.ml > main
.ml.depends
ocamlfind: Package `tar.mirage' not found
Command exited with code 2.
run ['ocamlbuild' '-use-ocamlfind' '-classic-display' '-tags'
     'predicate(mirage_unix),warn(A-4-41-42-44),debug,bin_annot,strict_sequence,principal,safe_string,color(always)'
     '-pkgs'
     'functoria-runtime,lwt,mirage-block-unix,mirage-clock-unix,mirage-logs,mirage-runtime,mirage-types,mirage-types-lwt,mirage-unix,tar.mirage'
     '-cflags' '-g' '-lflags' '-g' '-tag-line' '<static*.*>: warn(-32-34)'
     '-X' '_build-ukvm' 'main.native']: exited with 10
Makefile:18: recipe for target 'build' failed
make: *** [build] Error 1

I then rather naively emptied the list for ~ocamlfind here: https://github.com/mirage/mirage/blob/188aa887cc8707c39472af58acf5a85ad8dbed54/lib/mirage.ml#L424

which leads to another error:

File "main.ml", line 10, characters 21-42:
Error: Unbound module Tar_mirage
Command exited with code 2.
run ['ocamlbuild' '-use-ocamlfind' '-classic-display' '-tags'
     'predicate(mirage_unix),warn(A-4-41-42-44),debug,bin_annot,strict_sequence,principal,safe_string,color(always)'
     '-pkgs'
     'functoria-runtime,lwt,mirage-block-unix,mirage-clock-unix,mirage-logs,mirage-runtime,mirage-types,mirage-types-lwt,mirage-unix'
     '-cflags' '-g' '-lflags' '-g' '-tag-line' '<static*.*>: warn(-32-34)'
     '-X' '_build-ukvm' 'main.native']: exited with 10
Makefile:18: recipe for target 'build' failed
make: *** [build] Error 1

Just started playing around with the mirage examples so I'm not sure if I'm missing some specifics for the Archive key here. Also I'm not sure if the main repo for mirage would be more appropriate for the issue. If requested I can open up the issue there of course.

License file for this repo?

I've just realised that these examples may be copied out and used in other people's code. That's literally what I've done for my unkernel deployment -- the static_website dir had everything I needed. As such, should there be a license file? Unlicense or ISC?

"ping" example is a subset of "ethifv4"

I gather that the "ping" example used to ping stuff, but it doesn't anymore; it just sets up part of the stack and prints messages to console when it gets relevant-looking packets. ethifv4 does this too for ipv4 stacks. ping6 is the ipv6 version, which doesn't have a corresponding ethifv6 example.

We should either figure out something more illuminating and less redundant for these examples to do, or remove them.

tcp fails to build under unix/socket

on OSX. builds fine under unix/direct.

...
+ ocamlfind ocamlc -c -package mirage-net -package fd-send-recv -package lwt.syntax -syntax camlp4o -o iperf_self.cmo iperf_self.ml
File "iperf_self.ml", line 104, characters 28-49:
Error: Unbound value Net.Manager.get_intfs
Command exited with code 2.
make[1]: *** [main.native] Error 10
[mirari] ERROR: The command "make build" exited with code 2.
make: *** [build-tcp] Error 1

Page fault in running "hello world"

When I run the hello world example under xen, it stops with page fault:

$ sudo xl create -c console.xl
Parsing config from console.xl
Xen Minimal OS!
  start_info: 0000000000202000(VA)
    nr_pages: 0x10000
  shared_inf: 0xdbc7c000(MA)
     pt_base: 0000000000205000(VA)
nr_pt_frames: 0x5
    mfn_list: 0000000000182000(VA)
   mod_start: 0x0(VA)
     mod_len: 0
       flags: 0x0
    cmd_line: 
       stack: 00000000001618c0-00000000001818c0
MM: Init
      _text: 0000000000000000(VA)
     _etext: 00000000000b589f(VA)
   _erodata: 00000000000d8000(VA)
     _edata: 0000000000128220(VA)
stack start: 00000000001618c0(VA)
       _end: 00000000001818c0(VA)
  start_pfn: 20d
    max_pfn: 10000
Mapping memory range 0x400000 - 0x10000000
setting 0000000000000000-00000000000d8000 readonly
skipped 1000
MM: Initialise page allocator for 28b000(28b000)-10000000(10000000)
MM: done
Demand map pfns at 10001000-0000002010001000.
Initialising timer interface
Initialising console ... done.
gnttab_table mapped at 0000000010001000.
getenv(OCAMLRUNPARAM) -> null
getenv(CAMLRUNPARAM) -> null
getenv(PATH) -> null
Unsupported function lseek called in Mini-OS kernel
Unsupported function lseek called in Mini-OS kernel
Unsupported function lseek called in Mini-OS kernel
getenv(OCAMLRUNPARAM) -> null
getenv(CAMLRUNPARAM) -> null
getenv(TMPDIR) -> null
getenv(TEMP) -> null
Page fault at linear address 28, rip 90cd9, regs 000000000017fd48, sp 17fdf0, our_sp 000000000017fd08, code 0
Page fault in pagetable walk (access to invalid memory?).

It seems like the same error in mirage/mirage-tcpip#80.
I use Xen 4.4 with Ubuntu 14.04.

DNS example fails with the socket network target

When building the DNS example with the socket network target, like this:

$ mirage configure -f dns/config.ml --unix --net socket
$ make -C dns

the program fails at runtime:

# ./dns/mir-dns 
Manager: connect
Manager: configuring
2016-07-13 14:07.49: INF [client] Starting client resolver
Fatal error: exception Unix.Unix_error(Unix.EUNKNOWNERR 126, "send", "")
Raised by primitive operation at file "src/unix/lwt_bytes.ml", line 215, characters 37-92
Called from file "src/unix/lwt_unix.ml", line 549, characters 17-28

It works fine when compiled to work with a tap interface (mirage configure --unix --net direct).

Configure should be configurable for xen/unix

Thank you for these great samples.

I was using the console example and it by default uses mirage-configure --unix, is there a clean way to do --xen via the build system rather than doing it by hand?

Example from README: mirage: unknown option --unix

After installing mirage 2.7.3 from OPAM on a Debian X86, examples given in the README result in:

:mirage-skeleton $ make sample-configure
mirage configure -f sample/config.ml --unix 
mirage: unknown option `--unix'.
Usage: mirage configure [OPTION]... 
Try `mirage configure --help' or `mirage --help' for more information.
Makefile:41: recipe for target 'sample-configure' failed
make: *** [sample-configure] Error 1

I also noticed that there is no file sample/config.ml file. Maybe sample refers to hello and so on but this isn't obvious. At this point I have no idea how to go on.

Unexpected TCP RST during handshake with stackv4 unikernal

I've compiled the stackv4 unikernal from mirage-skeleton and am running it on cubieboard2. The only change made to the config.ml is to force use of DHCP. The unikernel connects happily to bridge called br0 and responds to ARP requests. However curl request fail with curl: (52) Empty reply from server, on closer inspection the unikernal (192.168.2.4) is responding to my(192.168.2.1) TCP SYN with a ACK with the RST flag set.

Any suggestions ? in particular is the issue in the unikernel or my bridge setup

wireshark screenshot showing the packet exchange
screen shot 2015-01-25 at 11 54 47

unikernel console output

$ sudo xl create -c stackv4.xl
Parsing config from stackv4.xl
Console is on port 2
Console ring is at mfn 90000
Found GIC: gicd_base = ac401000, gicc_base = ac402000
Mirage: start_kernel
MM: Init
    _text: 00408000(VA)
    _etext: 004cddf0(VA)
    _erodata: 004f5000(VA)
    _edata: 00553000(VA)
    stack start: 00400000(VA)
    _end: 005642d0(VA)
Found memory at 0x80000000 (len 0x10000000)
Mapping 1 MB section at 8ff00000 as extra stack space.
Using pages 524645 to 589568 as free space for heap.
MM: Initialise page allocator for 565000(80165000)-102ff000(8feff000)
MM: done
Next pfn = 0x8ff00 (== 10300000 VA)
Demand map memory at 0x10300000-0x103a0000.
Initialising timer interface
Virtual Count register is 11a01e3, freq = 24000000 Hz
Initialising console ... done.
FDT suggests grant table base b0000000
gnttab_table mapped at 30400000.
xencaml: app_main_thread
getenv(OCAMLRUNPARAM) -> null
getenv(CAMLRUNPARAM) -> null
Unsupported function lseek called in Mini-OS kernel
Unsupported function lseek called in Mini-OS kernel
Unsupported function lseek called in Mini-OS kernel
getenv(OCAMLRUNPARAM) -> null
getenv(CAMLRUNPARAM) -> null
getenv(TMPDIR) -> null
getenv(TEMP) -> null
Netif: add resume hook
Netif.connect 0
Netfront.create: id=0 domid=0
MAC: 00:16:3e:11:08:08
Manager: connect
Attempt to open(/dev/urandom)!
Manager: configuring
DHCP: start discovery

Sending DHCP broadcast (length 552)
DHCP response:
input ciaddr 0.0.0.0 yiaddr 192.168.2.4
siaddr 192.168.2.1 giaddr 0.0.0.0
chaddr 00163e11080800000000000000000000 sname heidiann file
DHCP: offer received: 192.168.2.4
DHCP options: Offer : DNS servers(192.168.2.1), Routers(192.168.2.1), Subnet mask(255.255.255.0), Lease time(85536), Server identifer(192.168.2.1)
Sending DHCP broadcast (length 552)
DHCP response:
input ciaddr 0.0.0.0 yiaddr 192.168.2.4
siaddr 192.168.2.1 giaddr 0.0.0.0
chaddr 00163e11080800000000000000000000 sname heidiann file
DHCP: offer received
                    IPv4: 192.168.2.4
                                     Netmask: 255.255.255.0
                                                           Gateways: [192.168.2.1]
 sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
ARP: sending gratuitous from 192.168.2.4
DHCP offer received and bound to 192.168.2.4 nm 255.255.255.0 gw [192.168.2.1]
Manager: configuration done
IP address: 192.168.2.4

ARP responding to: who-has 192.168.2.4?
ARP: transmitting probe -> 192.168.2.1
ARP: updating 192.168.2.1 -> 62:03:08:4a:65:64
ARP: transmitting probe -> 192.168.2.2
ARP: updating 192.168.2.2 -> 02:41:06:42:c9:75
ARP responding to: who-has 192.168.2.4?
ARP responding to: who-has 192.168.2.4?
ARP responding to: who-has 192.168.2.4?
ARP responding to: who-has 192.168.2.4?
ARP responding to: who-has 192.168.2.4?

vif from stackv4.xl

vif = [ 'bridge=br0' ]

setup in /etc/network/interfaces in dom0

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual
  up ip link set eth0 up

auto br0
iface br0 inet dhcp
  bridge_ports eth0

`xen` examples are very bitrotted

It looks like the examples in the xen subdirectory aren't included in the default build and have become bitrotted. @mmaker discovered this when trying to create a FAT filesystem from a directory based on the example in xen/static_website+ip.

We should either remove these examples (perhaps they are redundant with some in the higher-level directory?) or update them.

[Opam] dns -> uri < 1.9.4 unmet dependency

I am trying to setup the static website application but fail to install the dependencies with opam. Following the Readme instructions the problem occurs during make prepend. Following unmet dependency error is listed:

The following dependencies couldn't be met:
  - dns -> uri < 1.9.4
Your request can't be satisfied:
  - No package matches uri<1.9.4.

I have checked the dependencies for mirage-dns and found no upper version boundary like that. So why thinks opam that uri is only valid between (>= 1.7.0 & < 1.9.4) but the opam metadata only lists following version boundary "uri" {>= "1.7.0"}

Is there a way to ship around that problem?

Some stats:
ocaml: 4.03.0
opam: 1.2.2

Hello world not working for virtio, ukvm and xen

I used a brand new installation of ubuntu 17.04 with ocaml version 4.05.1 (The OCaml toplevel, version 4.05.1+dev0-2017-07-12, compiled from sources).

After checking out mirage-skeleton and trying to compile hello world (tutorial/hello) using:

  1. cd tutorial/hello
  2. mirage configure -t virtio
  3. make depend

I get the following error:

[mirage-unikernel-hello-virtio] /home/ubuntu/devel/mirage-skeleton/tutorial/hello/ already up-to-date
Sorry, no solution found: there seems to be a problem with your request.

image

The output of:
opam install --debug --yes --deps-only mirage-unikernel-hello-ukvm is:

00:00.002  SYSTEM                  locking /home/ubuntu/.opam/lock
00:00.002  STATE                   LOAD-STATE(switch-lock)
00:00.004  CUDF                    Checking version of criteria accepted by the external solver
00:00.006  SYSTEM                  [log-31227-4438d8] (in 0.000s) aspcud -v
00:00.007  CUDF                    Solver is aspcud > 1.9: using latest version criteria
00:00.041  STATE                   Loaded /home/ubuntu/.opam/state.cache in 0.032s
00:00.118  STATE                   ROOT      : /home/ubuntu/.opam
00:00.118  STATE                   SWITCH    : system
00:00.118  STATE                   COMPILER  : system
00:00.119  STATE                   COMPILERS : { 3.07, 3.07+1, 3.07+2, 3.08.0, 3.08.1, 3.08.2, 3.08.3, 3.08.4, 3.09.0, 3.09.1, 3.09.1+metaocaml, 3.09.2, 3.09.3, 3.10.0, 3.10.1, 3.10.2, 3.11.0, 3.11.1, 3.11.2, 3.12.0, 3.12.1, 4.00.0, 4.00.0+debug-runtime, 4.00.0+fp, 4.00.1, 4.00.1+BER, 4.00.1+PIC, 4.00.1+annot, 4.00.1+debug-runtime, 4.00.1+french, 4.00.1+mirage-unix, 4.00.1+mirage-xen, 4.00.1+open-types, 4.00.1+raspberrypi, 4.00.1+short-types, 4.01.0, 4.01.0+32bit, 4.01.0+BER, 4.01.0+PIC, 4.01.0+armv6-freebsd, 4.01.0+bin-ocp, 4.01.0+fp, 4.01.0+lsb, 4.01.0+musl, 4.01.0+musl+static, 4.01.0+open-types, 4.01.0+profile, 4.02.0, 4.02.0+PIC, 4.02.0+improved-errors, 4.02.0+modular-implicits, 4.02.0+rc1, 4.02.0+trunk, 4.02.1, 4.02.1+32bit, 4.02.1+BER, 4.02.1+PIC, 4.02.1+fp, 4.02.1+modular-implicits-ber, 4.02.1+musl, 4.02.1+musl+static, 4.02.2, 4.02.2+improved-errors, 4.02.2+rc1, 4.02.3, 4.02.3+32bit, 4.02.3+PIC, 4.02.3+buckle-1, 4.02.3+buckle-master, 4.02.3+bytecode-only, 4.02.3+curried-constr, 4.02.3+fp, 4.02.3+musl, 4.02.3+musl+static, 4.02.3+termux, 4.03.0, 4.03.0+32bit, 4.03.0+beta1, 4.03.0+beta1+flambda, 4.03.0+beta1-no-debug, 4.03.0+beta2, 4.03.0+beta2+flambda, 4.03.0+beta2-no-debug, 4.03.0+fPIC, 4.03.0+flambda, 4.03.0+fp, 4.03.0+fp+flambda, 4.03.0+statistical-memprof, 4.03.0+termux, 4.03.0+trunk, 4.03.0+trunk+flambda, 4.03.0+trunk+fp, 4.03.0+trunk+fp+flambda, 4.04.0, 4.04.0+32bit, 4.04.0+BER, 4.04.0+afl, 4.04.0+beta1, 4.04.0+beta1+flambda, 4.04.0+beta2, 4.04.0+beta2+flambda, 4.04.0+bytecode-only, 4.04.0+copatterns, 4.04.0+fPIC, 4.04.0+flambda, 4.04.0+fp, 4.04.0+fp+flambda, 4.04.0+safe-string, 4.04.0+spacetime, 4.04.0+termux, 4.04.0+trunk+forced_lto, 4.04.1, 4.04.1+32bit, 4.04.1+bytecode-only, 4.04.1+fPIC, 4.04.1+flambda, 4.04.1+fp, 4.04.1+fp+flambda, 4.04.1+safe-string, 4.04.1+spacetime, 4.04.2, 4.04.2+32bit, 4.04.2+bytecode-only, 4.04.2+fPIC, 4.04.2+flambda, 4.04.2+fp, 4.04.2+fp+flambda, 4.04.2+safe-string, 4.04.2+spacetime, 4.05.0, 4.05.0+afl, 4.05.0+beta1, 4.05.0+beta1+flambda, 4.05.0+beta2, 4.05.0+beta2+flambda, 4.05.0+beta3, 4.05.0+flambda, 4.05.0+musl+static+flambda, 4.05.0+rc1, 4.05.0+rc1+flambda, 4.05.0+safe-string, 4.05.0+spacetime, 4.05.0+trunk, 4.05.0+trunk+afl, 4.05.0+trunk+flambda, 4.05.0+trunk+fp, 4.05.0+trunk+fp+flambda, 4.05.0+trunk+lto, 4.05.0+trunk+safe-string, 4.06.0+pr100, 4.06.0+pr1002, 4.06.0+pr1003, 4.06.0+pr1010, 4.06.0+pr102, 4.06.0+pr1020, 4.06.0+pr1024, 4.06.0+pr1029, 4.06.0+pr1061, 4.06.0+pr1062, 4.06.0+pr1063, 4.06.0+pr1071, 4.06.0+pr1084, 4.06.0+pr1110, 4.06.0+pr1120, 4.06.0+pr1128, 4.06.0+pr113, 4.06.0+pr1132, 4.06.0+pr1148, 4.06.0+pr1154, 4.06.0+pr1156, 4.06.0+pr1166, 4.06.0+pr1168, 4.06.0+pr1176, 4.06.0+pr1182, 4.06.0+pr1185, 4.06.0+pr1192, 4.06.0+pr1193, 4.06.0+pr1201, 4.06.0+pr1207, 4.06.0+pr1209, 4.06.0+pr1229, 4.06.0+pr126, 4.06.0+pr1261, 4.06.0+pr1262, 4.06.0+pr1268, 4.06.0+pr1287, 4.06.0+pr1288, 4.06.0+pr1311, 4.06.0+pr1322, 4.06.0+pr1326, 4.06.0+pr1331, 4.06.0+pr1334, 4.06.0+pr1335, 4.06.0+pr1338, 4.06.0+pr1340, 4.06.0+pr1342, 4.06.0+pr1343, 4.06.0+pr1344, 4.06.0+pr1345, 4.06.0+pr1346, 4.06.0+pr1349, 4.06.0+pr1351, 4.06.0+pr181, 4.06.0+pr203, 4.06.0+pr232, 4.06.0+pr24, 4.06.0+pr246, 4.06.0+pr285, 4.06.0+pr292, 4.06.0+pr293, 4.06.0+pr367, 4.06.0+pr374, 4.06.0+pr386, 4.06.0+pr389, 4.06.0+pr442, 4.06.0+pr463, 4.06.0+pr465, 4.06.0+pr556, 4.06.0+pr568, 4.06.0+pr574, 4.06.0+pr594, 4.06.0+pr595, 4.06.0+pr608, 4.06.0+pr616, 4.06.0+pr620, 4.06.0+pr638, 4.06.0+pr640, 4.06.0+pr652, 4.06.0+pr658, 4.06.0+pr671, 4.06.0+pr676, 4.06.0+pr686, 4.06.0+pr689, 4.06.0+pr697, 4.06.0+pr711, 4.06.0+pr715, 4.06.0+pr716, 4.06.0+pr717, 4.06.0+pr724, 4.06.0+pr730, 4.06.0+pr754, 4.06.0+pr756, 4.06.0+pr766, 4.06.0+pr770, 4.06.0+pr786, 4.06.0+pr794, 4.06.0+pr830, 4.06.0+pr847, 4.06.0+pr855, 4.06.0+pr858, 4.06.0+pr865, 4.06.0+pr867, 4.06.0+pr882, 4.06.0+pr931, 4.06.0+pr940, 4.06.0+pr942, 4.06.0+pr944, 4.06.0+pr964, 4.06.0+pr974, 4.06.0+pr975, 4.06.0+trunk, 4.06.0+trunk+afl, 4.06.0+trunk+flambda, 4.06.0+trunk+fp, 4.06.0+trunk+fp+flambda, 4.06.0+trunk+safe-string, system }
00:00.119  STATE                   REPOS     : { default }
00:00.120  STATE                   PACKAGES  : 7505 packages
00:00.120  STATE                   INSTALLED : { astring.0.8.3, base.v0.9.3, base-bigarray.base, base-bytes.base, base-num.base, base-threads.base, base-unix.base, bos.0.1.6, cmdliner.1.0.2, conf-m4.1, conf-pkg-config.1.0, conf-which.1, configurator.v0.9.1, cppo.1.6.0, cstruct.3.1.1, cstruct-lwt.3.1.1, depext.1.0.5, duration.0.1.0, fmt.0.8.4, fpath.0.7.2, functoria.2.2.0, functoria-runtime.2.2.0, io-page.2.0.0, ipaddr.2.8.0, jbuilder.1.0+beta13, logs.0.6.2, lwt.3.1.0, mirage.3.0.5, mirage-block.1.1.0, mirage-block-lwt.1.1.0, mirage-channel.3.1.0, mirage-channel-lwt.3.1.0, mirage-clock.1.3.0, mirage-clock-lwt.1.3.0, mirage-console.2.3.5, mirage-console-lwt.2.3.5, mirage-device.1.1.0, mirage-flow.1.3.0, mirage-flow-lwt.1.4.0, mirage-fs.1.1.1, mirage-fs-lwt.1.1.1, mirage-kv.1.1.1, mirage-kv-lwt.1.1.0, mirage-net.1.1.1, mirage-net-lwt.1.1.0, mirage-protocols.1.2.0, mirage-protocols-lwt.1.2.0, mirage-random.1.1.0, mirage-runtime.3.0.5, mirage-stack.1.1.0, mirage-stack-lwt.1.1.0, mirage-time.1.1.0, mirage-time-lwt.1.1.0, mirage-types.3.0.5, mirage-types-lwt.3.0.5, num.0, ocaml-compiler-libs.v0.9.0, ocaml-migrate-parsetree.1.0.4, ocamlbuild.0.11.0, ocamlfind.1.7.3, ocamlgraph.1.8.7, ocplib-endian.1.0, octavius.1.1.0, ppx_ast.v0.9.1, ppx_base.v0.9.0, ppx_compare.v0.9.0, ppx_core.v0.9.0, ppx_driver.v0.9.1, ppx_enumerate.v0.9.0, ppx_hash.v0.9.0, ppx_js_style.v0.9.0, ppx_metaquot.v0.9.0, ppx_optcomp.v0.9.0, ppx_sexp_conv.v0.9.0, ppx_tools_versioned.5.0.1, ppx_traverse_builtins.v0.9.0, ppx_type_conv.v0.9.0, result.1.2, rresult.0.5.0, sexplib.v0.9.2, solo5-kernel-virtio.0.2.2, stdio.v0.9.0, topkg.0.9.0, uchar.0.0.2 }
00:00.121  STATE                   ROOTS     : { base-bigarray.base, base-threads.base, base-unix.base, depext.1.0.5, duration.0.1.0, mirage.3.0.5, mirage-types-lwt.3.0.5, solo5-kernel-virtio.0.2.2 }
00:00.121  STATE                   REINSTALL : {}
00:00.121  STATE                   State switch-lock loaded in 0.112s
00:00.127  SYSTEM                  [log-31227-4bcc67] (in 0.004s) ocamlc -version
00:00.128  SYSTEM                  locking /home/ubuntu/.opam/system/lock
00:00.128  STATE                   LOAD-STATE(install)
00:00.147  STATE                   Loaded /home/ubuntu/.opam/state.cache in 0.016s
00:00.242  STATE                   ROOT      : /home/ubuntu/.opam
00:00.243  STATE                   SWITCH    : system
00:00.243  STATE                   COMPILER  : system
00:00.243  STATE                   COMPILERS : { 3.07, 3.07+1, 3.07+2, 3.08.0, 3.08.1, 3.08.2, 3.08.3, 3.08.4, 3.09.0, 3.09.1, 3.09.1+metaocaml, 3.09.2, 3.09.3, 3.10.0, 3.10.1, 3.10.2, 3.11.0, 3.11.1, 3.11.2, 3.12.0, 3.12.1, 4.00.0, 4.00.0+debug-runtime, 4.00.0+fp, 4.00.1, 4.00.1+BER, 4.00.1+PIC, 4.00.1+annot, 4.00.1+debug-runtime, 4.00.1+french, 4.00.1+mirage-unix, 4.00.1+mirage-xen, 4.00.1+open-types, 4.00.1+raspberrypi, 4.00.1+short-types, 4.01.0, 4.01.0+32bit, 4.01.0+BER, 4.01.0+PIC, 4.01.0+armv6-freebsd, 4.01.0+bin-ocp, 4.01.0+fp, 4.01.0+lsb, 4.01.0+musl, 4.01.0+musl+static, 4.01.0+open-types, 4.01.0+profile, 4.02.0, 4.02.0+PIC, 4.02.0+improved-errors, 4.02.0+modular-implicits, 4.02.0+rc1, 4.02.0+trunk, 4.02.1, 4.02.1+32bit, 4.02.1+BER, 4.02.1+PIC, 4.02.1+fp, 4.02.1+modular-implicits-ber, 4.02.1+musl, 4.02.1+musl+static, 4.02.2, 4.02.2+improved-errors, 4.02.2+rc1, 4.02.3, 4.02.3+32bit, 4.02.3+PIC, 4.02.3+buckle-1, 4.02.3+buckle-master, 4.02.3+bytecode-only, 4.02.3+curried-constr, 4.02.3+fp, 4.02.3+musl, 4.02.3+musl+static, 4.02.3+termux, 4.03.0, 4.03.0+32bit, 4.03.0+beta1, 4.03.0+beta1+flambda, 4.03.0+beta1-no-debug, 4.03.0+beta2, 4.03.0+beta2+flambda, 4.03.0+beta2-no-debug, 4.03.0+fPIC, 4.03.0+flambda, 4.03.0+fp, 4.03.0+fp+flambda, 4.03.0+statistical-memprof, 4.03.0+termux, 4.03.0+trunk, 4.03.0+trunk+flambda, 4.03.0+trunk+fp, 4.03.0+trunk+fp+flambda, 4.04.0, 4.04.0+32bit, 4.04.0+BER, 4.04.0+afl, 4.04.0+beta1, 4.04.0+beta1+flambda, 4.04.0+beta2, 4.04.0+beta2+flambda, 4.04.0+bytecode-only, 4.04.0+copatterns, 4.04.0+fPIC, 4.04.0+flambda, 4.04.0+fp, 4.04.0+fp+flambda, 4.04.0+safe-string, 4.04.0+spacetime, 4.04.0+termux, 4.04.0+trunk+forced_lto, 4.04.1, 4.04.1+32bit, 4.04.1+bytecode-only, 4.04.1+fPIC, 4.04.1+flambda, 4.04.1+fp, 4.04.1+fp+flambda, 4.04.1+safe-string, 4.04.1+spacetime, 4.04.2, 4.04.2+32bit, 4.04.2+bytecode-only, 4.04.2+fPIC, 4.04.2+flambda, 4.04.2+fp, 4.04.2+fp+flambda, 4.04.2+safe-string, 4.04.2+spacetime, 4.05.0, 4.05.0+afl, 4.05.0+beta1, 4.05.0+beta1+flambda, 4.05.0+beta2, 4.05.0+beta2+flambda, 4.05.0+beta3, 4.05.0+flambda, 4.05.0+musl+static+flambda, 4.05.0+rc1, 4.05.0+rc1+flambda, 4.05.0+safe-string, 4.05.0+spacetime, 4.05.0+trunk, 4.05.0+trunk+afl, 4.05.0+trunk+flambda, 4.05.0+trunk+fp, 4.05.0+trunk+fp+flambda, 4.05.0+trunk+lto, 4.05.0+trunk+safe-string, 4.06.0+pr100, 4.06.0+pr1002, 4.06.0+pr1003, 4.06.0+pr1010, 4.06.0+pr102, 4.06.0+pr1020, 4.06.0+pr1024, 4.06.0+pr1029, 4.06.0+pr1061, 4.06.0+pr1062, 4.06.0+pr1063, 4.06.0+pr1071, 4.06.0+pr1084, 4.06.0+pr1110, 4.06.0+pr1120, 4.06.0+pr1128, 4.06.0+pr113, 4.06.0+pr1132, 4.06.0+pr1148, 4.06.0+pr1154, 4.06.0+pr1156, 4.06.0+pr1166, 4.06.0+pr1168, 4.06.0+pr1176, 4.06.0+pr1182, 4.06.0+pr1185, 4.06.0+pr1192, 4.06.0+pr1193, 4.06.0+pr1201, 4.06.0+pr1207, 4.06.0+pr1209, 4.06.0+pr1229, 4.06.0+pr126, 4.06.0+pr1261, 4.06.0+pr1262, 4.06.0+pr1268, 4.06.0+pr1287, 4.06.0+pr1288, 4.06.0+pr1311, 4.06.0+pr1322, 4.06.0+pr1326, 4.06.0+pr1331, 4.06.0+pr1334, 4.06.0+pr1335, 4.06.0+pr1338, 4.06.0+pr1340, 4.06.0+pr1342, 4.06.0+pr1343, 4.06.0+pr1344, 4.06.0+pr1345, 4.06.0+pr1346, 4.06.0+pr1349, 4.06.0+pr1351, 4.06.0+pr181, 4.06.0+pr203, 4.06.0+pr232, 4.06.0+pr24, 4.06.0+pr246, 4.06.0+pr285, 4.06.0+pr292, 4.06.0+pr293, 4.06.0+pr367, 4.06.0+pr374, 4.06.0+pr386, 4.06.0+pr389, 4.06.0+pr442, 4.06.0+pr463, 4.06.0+pr465, 4.06.0+pr556, 4.06.0+pr568, 4.06.0+pr574, 4.06.0+pr594, 4.06.0+pr595, 4.06.0+pr608, 4.06.0+pr616, 4.06.0+pr620, 4.06.0+pr638, 4.06.0+pr640, 4.06.0+pr652, 4.06.0+pr658, 4.06.0+pr671, 4.06.0+pr676, 4.06.0+pr686, 4.06.0+pr689, 4.06.0+pr697, 4.06.0+pr711, 4.06.0+pr715, 4.06.0+pr716, 4.06.0+pr717, 4.06.0+pr724, 4.06.0+pr730, 4.06.0+pr754, 4.06.0+pr756, 4.06.0+pr766, 4.06.0+pr770, 4.06.0+pr786, 4.06.0+pr794, 4.06.0+pr830, 4.06.0+pr847, 4.06.0+pr855, 4.06.0+pr858, 4.06.0+pr865, 4.06.0+pr867, 4.06.0+pr882, 4.06.0+pr931, 4.06.0+pr940, 4.06.0+pr942, 4.06.0+pr944, 4.06.0+pr964, 4.06.0+pr974, 4.06.0+pr975, 4.06.0+trunk, 4.06.0+trunk+afl, 4.06.0+trunk+flambda, 4.06.0+trunk+fp, 4.06.0+trunk+fp+flambda, 4.06.0+trunk+safe-string, system }
00:00.244  STATE                   REPOS     : { default }
00:00.244  STATE                   PACKAGES  : 7505 packages
00:00.244  STATE                   INSTALLED : { astring.0.8.3, base.v0.9.3, base-bigarray.base, base-bytes.base, base-num.base, base-threads.base, base-unix.base, bos.0.1.6, cmdliner.1.0.2, conf-m4.1, conf-pkg-config.1.0, conf-which.1, configurator.v0.9.1, cppo.1.6.0, cstruct.3.1.1, cstruct-lwt.3.1.1, depext.1.0.5, duration.0.1.0, fmt.0.8.4, fpath.0.7.2, functoria.2.2.0, functoria-runtime.2.2.0, io-page.2.0.0, ipaddr.2.8.0, jbuilder.1.0+beta13, logs.0.6.2, lwt.3.1.0, mirage.3.0.5, mirage-block.1.1.0, mirage-block-lwt.1.1.0, mirage-channel.3.1.0, mirage-channel-lwt.3.1.0, mirage-clock.1.3.0, mirage-clock-lwt.1.3.0, mirage-console.2.3.5, mirage-console-lwt.2.3.5, mirage-device.1.1.0, mirage-flow.1.3.0, mirage-flow-lwt.1.4.0, mirage-fs.1.1.1, mirage-fs-lwt.1.1.1, mirage-kv.1.1.1, mirage-kv-lwt.1.1.0, mirage-net.1.1.1, mirage-net-lwt.1.1.0, mirage-protocols.1.2.0, mirage-protocols-lwt.1.2.0, mirage-random.1.1.0, mirage-runtime.3.0.5, mirage-stack.1.1.0, mirage-stack-lwt.1.1.0, mirage-time.1.1.0, mirage-time-lwt.1.1.0, mirage-types.3.0.5, mirage-types-lwt.3.0.5, num.0, ocaml-compiler-libs.v0.9.0, ocaml-migrate-parsetree.1.0.4, ocamlbuild.0.11.0, ocamlfind.1.7.3, ocamlgraph.1.8.7, ocplib-endian.1.0, octavius.1.1.0, ppx_ast.v0.9.1, ppx_base.v0.9.0, ppx_compare.v0.9.0, ppx_core.v0.9.0, ppx_driver.v0.9.1, ppx_enumerate.v0.9.0, ppx_hash.v0.9.0, ppx_js_style.v0.9.0, ppx_metaquot.v0.9.0, ppx_optcomp.v0.9.0, ppx_sexp_conv.v0.9.0, ppx_tools_versioned.5.0.1, ppx_traverse_builtins.v0.9.0, ppx_type_conv.v0.9.0, result.1.2, rresult.0.5.0, sexplib.v0.9.2, solo5-kernel-virtio.0.2.2, stdio.v0.9.0, topkg.0.9.0, uchar.0.0.2 }
00:00.245  STATE                   ROOTS     : { base-bigarray.base, base-threads.base, base-unix.base, depext.1.0.5, duration.0.1.0, mirage.3.0.5, mirage-types-lwt.3.0.5, solo5-kernel-virtio.0.2.2 }
00:00.246  STATE                   REINSTALL : {}
00:00.246  STATE                   State install loaded in 0.112s
00:00.248  FILE(export)            Wrote ~/.opam/system/backup/state-20170820042105.export in 0.004s

=-=- Synchronising pinned packages =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
00:00.332  STATE                   update-dev-packages
00:00.332  PARALLEL                Iterate over 1 task(s) with 3 process(es)
00:00.332  PARALLEL                Starting job 0 (worker 1/3): 0
00:00.332  STATE                   update-dev-package mirage-unikernel-hello-ukvm.~unknown
00:00.333  STATE                   updating /home/ubuntu/devel/mirage-skeleton/tutorial/hello:local
00:00.333  RSYNC                   rsync: src=/home/ubuntu/devel/mirage-skeleton/tutorial/hello/ dst=/home/ubuntu/.opam/system/packages.dev/mirage-unikernel-hello-ukvm
00:00.336  PARALLEL                Next task in job 0: rsync -rLptgoDrvc --exclude .git --exclude _darcs --exclude .hg --exclude .#* --delete /home/ubuntu/devel/mirage-skeleton/tutorial/hello/ /home/ubuntu/.opam/system/packages.dev/mirage-unikernel-hello-ukvm
Processing  1/1: [mirage-unikernel-hello-ukvm: local]
00:00.363  PARALLEL                Collected task for job 0 (ret:0)
[mirage-unikernel-hello-ukvm] /home/ubuntu/devel/mirage-skeleton/tutorial/hello/ synchronized
00:00.367  PARALLEL                Job 0 finished
00:00.367  STATE                   add-to-reinstall all:true packages:{}
00:00.367  STATE                   add-to-reinstall all:false packages:{ mirage-unikernel-hello-ukvm.~unknown }
00:00.368  STATE                   LOAD-STATE(reload-dev-package-updated)
00:00.398  STATE                   Loaded /home/ubuntu/.opam/state.cache in 0.032s
00:00.547  STATE                   ROOT      : /home/ubuntu/.opam
00:00.547  STATE                   SWITCH    : system
00:00.547  STATE                   COMPILER  : system
00:00.547  STATE                   COMPILERS : { 3.07, 3.07+1, 3.07+2, 3.08.0, 3.08.1, 3.08.2, 3.08.3, 3.08.4, 3.09.0, 3.09.1, 3.09.1+metaocaml, 3.09.2, 3.09.3, 3.10.0, 3.10.1, 3.10.2, 3.11.0, 3.11.1, 3.11.2, 3.12.0, 3.12.1, 4.00.0, 4.00.0+debug-runtime, 4.00.0+fp, 4.00.1, 4.00.1+BER, 4.00.1+PIC, 4.00.1+annot, 4.00.1+debug-runtime, 4.00.1+french, 4.00.1+mirage-unix, 4.00.1+mirage-xen, 4.00.1+open-types, 4.00.1+raspberrypi, 4.00.1+short-types, 4.01.0, 4.01.0+32bit, 4.01.0+BER, 4.01.0+PIC, 4.01.0+armv6-freebsd, 4.01.0+bin-ocp, 4.01.0+fp, 4.01.0+lsb, 4.01.0+musl, 4.01.0+musl+static, 4.01.0+open-types, 4.01.0+profile, 4.02.0, 4.02.0+PIC, 4.02.0+improved-errors, 4.02.0+modular-implicits, 4.02.0+rc1, 4.02.0+trunk, 4.02.1, 4.02.1+32bit, 4.02.1+BER, 4.02.1+PIC, 4.02.1+fp, 4.02.1+modular-implicits-ber, 4.02.1+musl, 4.02.1+musl+static, 4.02.2, 4.02.2+improved-errors, 4.02.2+rc1, 4.02.3, 4.02.3+32bit, 4.02.3+PIC, 4.02.3+buckle-1, 4.02.3+buckle-master, 4.02.3+bytecode-only, 4.02.3+curried-constr, 4.02.3+fp, 4.02.3+musl, 4.02.3+musl+static, 4.02.3+termux, 4.03.0, 4.03.0+32bit, 4.03.0+beta1, 4.03.0+beta1+flambda, 4.03.0+beta1-no-debug, 4.03.0+beta2, 4.03.0+beta2+flambda, 4.03.0+beta2-no-debug, 4.03.0+fPIC, 4.03.0+flambda, 4.03.0+fp, 4.03.0+fp+flambda, 4.03.0+statistical-memprof, 4.03.0+termux, 4.03.0+trunk, 4.03.0+trunk+flambda, 4.03.0+trunk+fp, 4.03.0+trunk+fp+flambda, 4.04.0, 4.04.0+32bit, 4.04.0+BER, 4.04.0+afl, 4.04.0+beta1, 4.04.0+beta1+flambda, 4.04.0+beta2, 4.04.0+beta2+flambda, 4.04.0+bytecode-only, 4.04.0+copatterns, 4.04.0+fPIC, 4.04.0+flambda, 4.04.0+fp, 4.04.0+fp+flambda, 4.04.0+safe-string, 4.04.0+spacetime, 4.04.0+termux, 4.04.0+trunk+forced_lto, 4.04.1, 4.04.1+32bit, 4.04.1+bytecode-only, 4.04.1+fPIC, 4.04.1+flambda, 4.04.1+fp, 4.04.1+fp+flambda, 4.04.1+safe-string, 4.04.1+spacetime, 4.04.2, 4.04.2+32bit, 4.04.2+bytecode-only, 4.04.2+fPIC, 4.04.2+flambda, 4.04.2+fp, 4.04.2+fp+flambda, 4.04.2+safe-string, 4.04.2+spacetime, 4.05.0, 4.05.0+afl, 4.05.0+beta1, 4.05.0+beta1+flambda, 4.05.0+beta2, 4.05.0+beta2+flambda, 4.05.0+beta3, 4.05.0+flambda, 4.05.0+musl+static+flambda, 4.05.0+rc1, 4.05.0+rc1+flambda, 4.05.0+safe-string, 4.05.0+spacetime, 4.05.0+trunk, 4.05.0+trunk+afl, 4.05.0+trunk+flambda, 4.05.0+trunk+fp, 4.05.0+trunk+fp+flambda, 4.05.0+trunk+lto, 4.05.0+trunk+safe-string, 4.06.0+pr100, 4.06.0+pr1002, 4.06.0+pr1003, 4.06.0+pr1010, 4.06.0+pr102, 4.06.0+pr1020, 4.06.0+pr1024, 4.06.0+pr1029, 4.06.0+pr1061, 4.06.0+pr1062, 4.06.0+pr1063, 4.06.0+pr1071, 4.06.0+pr1084, 4.06.0+pr1110, 4.06.0+pr1120, 4.06.0+pr1128, 4.06.0+pr113, 4.06.0+pr1132, 4.06.0+pr1148, 4.06.0+pr1154, 4.06.0+pr1156, 4.06.0+pr1166, 4.06.0+pr1168, 4.06.0+pr1176, 4.06.0+pr1182, 4.06.0+pr1185, 4.06.0+pr1192, 4.06.0+pr1193, 4.06.0+pr1201, 4.06.0+pr1207, 4.06.0+pr1209, 4.06.0+pr1229, 4.06.0+pr126, 4.06.0+pr1261, 4.06.0+pr1262, 4.06.0+pr1268, 4.06.0+pr1287, 4.06.0+pr1288, 4.06.0+pr1311, 4.06.0+pr1322, 4.06.0+pr1326, 4.06.0+pr1331, 4.06.0+pr1334, 4.06.0+pr1335, 4.06.0+pr1338, 4.06.0+pr1340, 4.06.0+pr1342, 4.06.0+pr1343, 4.06.0+pr1344, 4.06.0+pr1345, 4.06.0+pr1346, 4.06.0+pr1349, 4.06.0+pr1351, 4.06.0+pr181, 4.06.0+pr203, 4.06.0+pr232, 4.06.0+pr24, 4.06.0+pr246, 4.06.0+pr285, 4.06.0+pr292, 4.06.0+pr293, 4.06.0+pr367, 4.06.0+pr374, 4.06.0+pr386, 4.06.0+pr389, 4.06.0+pr442, 4.06.0+pr463, 4.06.0+pr465, 4.06.0+pr556, 4.06.0+pr568, 4.06.0+pr574, 4.06.0+pr594, 4.06.0+pr595, 4.06.0+pr608, 4.06.0+pr616, 4.06.0+pr620, 4.06.0+pr638, 4.06.0+pr640, 4.06.0+pr652, 4.06.0+pr658, 4.06.0+pr671, 4.06.0+pr676, 4.06.0+pr686, 4.06.0+pr689, 4.06.0+pr697, 4.06.0+pr711, 4.06.0+pr715, 4.06.0+pr716, 4.06.0+pr717, 4.06.0+pr724, 4.06.0+pr730, 4.06.0+pr754, 4.06.0+pr756, 4.06.0+pr766, 4.06.0+pr770, 4.06.0+pr786, 4.06.0+pr794, 4.06.0+pr830, 4.06.0+pr847, 4.06.0+pr855, 4.06.0+pr858, 4.06.0+pr865, 4.06.0+pr867, 4.06.0+pr882, 4.06.0+pr931, 4.06.0+pr940, 4.06.0+pr942, 4.06.0+pr944, 4.06.0+pr964, 4.06.0+pr974, 4.06.0+pr975, 4.06.0+trunk, 4.06.0+trunk+afl, 4.06.0+trunk+flambda, 4.06.0+trunk+fp, 4.06.0+trunk+fp+flambda, 4.06.0+trunk+safe-string, system }
00:00.547  STATE                   REPOS     : { default }
00:00.547  STATE                   PACKAGES  : 7505 packages
00:00.547  STATE                   INSTALLED : { astring.0.8.3, base.v0.9.3, base-bigarray.base, base-bytes.base, base-num.base, base-threads.base, base-unix.base, bos.0.1.6, cmdliner.1.0.2, conf-m4.1, conf-pkg-config.1.0, conf-which.1, configurator.v0.9.1, cppo.1.6.0, cstruct.3.1.1, cstruct-lwt.3.1.1, depext.1.0.5, duration.0.1.0, fmt.0.8.4, fpath.0.7.2, functoria.2.2.0, functoria-runtime.2.2.0, io-page.2.0.0, ipaddr.2.8.0, jbuilder.1.0+beta13, logs.0.6.2, lwt.3.1.0, mirage.3.0.5, mirage-block.1.1.0, mirage-block-lwt.1.1.0, mirage-channel.3.1.0, mirage-channel-lwt.3.1.0, mirage-clock.1.3.0, mirage-clock-lwt.1.3.0, mirage-console.2.3.5, mirage-console-lwt.2.3.5, mirage-device.1.1.0, mirage-flow.1.3.0, mirage-flow-lwt.1.4.0, mirage-fs.1.1.1, mirage-fs-lwt.1.1.1, mirage-kv.1.1.1, mirage-kv-lwt.1.1.0, mirage-net.1.1.1, mirage-net-lwt.1.1.0, mirage-protocols.1.2.0, mirage-protocols-lwt.1.2.0, mirage-random.1.1.0, mirage-runtime.3.0.5, mirage-stack.1.1.0, mirage-stack-lwt.1.1.0, mirage-time.1.1.0, mirage-time-lwt.1.1.0, mirage-types.3.0.5, mirage-types-lwt.3.0.5, num.0, ocaml-compiler-libs.v0.9.0, ocaml-migrate-parsetree.1.0.4, ocamlbuild.0.11.0, ocamlfind.1.7.3, ocamlgraph.1.8.7, ocplib-endian.1.0, octavius.1.1.0, ppx_ast.v0.9.1, ppx_base.v0.9.0, ppx_compare.v0.9.0, ppx_core.v0.9.0, ppx_driver.v0.9.1, ppx_enumerate.v0.9.0, ppx_hash.v0.9.0, ppx_js_style.v0.9.0, ppx_metaquot.v0.9.0, ppx_optcomp.v0.9.0, ppx_sexp_conv.v0.9.0, ppx_tools_versioned.5.0.1, ppx_traverse_builtins.v0.9.0, ppx_type_conv.v0.9.0, result.1.2, rresult.0.5.0, sexplib.v0.9.2, solo5-kernel-virtio.0.2.2, stdio.v0.9.0, topkg.0.9.0, uchar.0.0.2 }
00:00.548  STATE                   ROOTS     : { base-bigarray.base, base-threads.base, base-unix.base, depext.1.0.5, duration.0.1.0, mirage.3.0.5, mirage-types-lwt.3.0.5, solo5-kernel-virtio.0.2.2 }
00:00.548  STATE                   REINSTALL : {}
00:00.548  STATE                   State reload-dev-package-updated loaded in 0.180s
00:00.548  CLIENT                  INSTALL mirage-unikernel-hello-ukvm
00:01.728  CLIENT                  Orphans: full {}, versions {}
00:01.828  SOLVER                  resolve request=install:(mirage-unikernel-hello-ukvm) remove:() upgrade:()
00:01.829  SOLVER                  cudf_versions_map
00:01.981  SOLVER                  Load cudf universe (depopts:false, build:true)
00:03.413  CUDF                    resolve request=install:(mirage-unikernel-hello-ukvm) remove:() upgrade:() criteria:"-count(removed),-notuptodate(request),-sum(request,version-lag),-count(down),-notuptodate(changed),-count(changed),-notuptodate(solution),-sum(solution,version-lag)"
00:04.684  SYSTEM                  [log-31227-5f1023] (in 0.004s) aspcud /home/ubuntu/.opam/log/solver-in-31227-9b8556 /home/ubuntu/.opam/log/solver-out-31227-7afd23 -count(removed),-notuptodate(request),-sum(request,version-lag),-count(down),-notuptodate(changed),-count(changed),-notuptodate(solution),-sum(solution,version-lag)
00:04.684  SYSTEM                  rm /home/ubuntu/.opam/log/solver-in-31227-9b8556
00:04.684  SYSTEM                  rm /home/ubuntu/.opam/log/solver-out-31227-7afd23
00:05.389  CLIENT                  conflict!
Sorry, no solution found: there seems to be a problem with your request.

No solution found, exiting
00:05.391  STATE                   LOAD-STATE(switch-backup-err)
00:05.438  STATE                   Loaded /home/ubuntu/.opam/state.cache in 0.044s
00:05.636  STATE                   ROOT      : /home/ubuntu/.opam
00:05.637  STATE                   SWITCH    : system
00:05.638  STATE                   COMPILER  : system
00:05.638  STATE                   COMPILERS : { 3.07, 3.07+1, 3.07+2, 3.08.0, 3.08.1, 3.08.2, 3.08.3, 3.08.4, 3.09.0, 3.09.1, 3.09.1+metaocaml, 3.09.2, 3.09.3, 3.10.0, 3.10.1, 3.10.2, 3.11.0, 3.11.1, 3.11.2, 3.12.0, 3.12.1, 4.00.0, 4.00.0+debug-runtime, 4.00.0+fp, 4.00.1, 4.00.1+BER, 4.00.1+PIC, 4.00.1+annot, 4.00.1+debug-runtime, 4.00.1+french, 4.00.1+mirage-unix, 4.00.1+mirage-xen, 4.00.1+open-types, 4.00.1+raspberrypi, 4.00.1+short-types, 4.01.0, 4.01.0+32bit, 4.01.0+BER, 4.01.0+PIC, 4.01.0+armv6-freebsd, 4.01.0+bin-ocp, 4.01.0+fp, 4.01.0+lsb, 4.01.0+musl, 4.01.0+musl+static, 4.01.0+open-types, 4.01.0+profile, 4.02.0, 4.02.0+PIC, 4.02.0+improved-errors, 4.02.0+modular-implicits, 4.02.0+rc1, 4.02.0+trunk, 4.02.1, 4.02.1+32bit, 4.02.1+BER, 4.02.1+PIC, 4.02.1+fp, 4.02.1+modular-implicits-ber, 4.02.1+musl, 4.02.1+musl+static, 4.02.2, 4.02.2+improved-errors, 4.02.2+rc1, 4.02.3, 4.02.3+32bit, 4.02.3+PIC, 4.02.3+buckle-1, 4.02.3+buckle-master, 4.02.3+bytecode-only, 4.02.3+curried-constr, 4.02.3+fp, 4.02.3+musl, 4.02.3+musl+static, 4.02.3+termux, 4.03.0, 4.03.0+32bit, 4.03.0+beta1, 4.03.0+beta1+flambda, 4.03.0+beta1-no-debug, 4.03.0+beta2, 4.03.0+beta2+flambda, 4.03.0+beta2-no-debug, 4.03.0+fPIC, 4.03.0+flambda, 4.03.0+fp, 4.03.0+fp+flambda, 4.03.0+statistical-memprof, 4.03.0+termux, 4.03.0+trunk, 4.03.0+trunk+flambda, 4.03.0+trunk+fp, 4.03.0+trunk+fp+flambda, 4.04.0, 4.04.0+32bit, 4.04.0+BER, 4.04.0+afl, 4.04.0+beta1, 4.04.0+beta1+flambda, 4.04.0+beta2, 4.04.0+beta2+flambda, 4.04.0+bytecode-only, 4.04.0+copatterns, 4.04.0+fPIC, 4.04.0+flambda, 4.04.0+fp, 4.04.0+fp+flambda, 4.04.0+safe-string, 4.04.0+spacetime, 4.04.0+termux, 4.04.0+trunk+forced_lto, 4.04.1, 4.04.1+32bit, 4.04.1+bytecode-only, 4.04.1+fPIC, 4.04.1+flambda, 4.04.1+fp, 4.04.1+fp+flambda, 4.04.1+safe-string, 4.04.1+spacetime, 4.04.2, 4.04.2+32bit, 4.04.2+bytecode-only, 4.04.2+fPIC, 4.04.2+flambda, 4.04.2+fp, 4.04.2+fp+flambda, 4.04.2+safe-string, 4.04.2+spacetime, 4.05.0, 4.05.0+afl, 4.05.0+beta1, 4.05.0+beta1+flambda, 4.05.0+beta2, 4.05.0+beta2+flambda, 4.05.0+beta3, 4.05.0+flambda, 4.05.0+musl+static+flambda, 4.05.0+rc1, 4.05.0+rc1+flambda, 4.05.0+safe-string, 4.05.0+spacetime, 4.05.0+trunk, 4.05.0+trunk+afl, 4.05.0+trunk+flambda, 4.05.0+trunk+fp, 4.05.0+trunk+fp+flambda, 4.05.0+trunk+lto, 4.05.0+trunk+safe-string, 4.06.0+pr100, 4.06.0+pr1002, 4.06.0+pr1003, 4.06.0+pr1010, 4.06.0+pr102, 4.06.0+pr1020, 4.06.0+pr1024, 4.06.0+pr1029, 4.06.0+pr1061, 4.06.0+pr1062, 4.06.0+pr1063, 4.06.0+pr1071, 4.06.0+pr1084, 4.06.0+pr1110, 4.06.0+pr1120, 4.06.0+pr1128, 4.06.0+pr113, 4.06.0+pr1132, 4.06.0+pr1148, 4.06.0+pr1154, 4.06.0+pr1156, 4.06.0+pr1166, 4.06.0+pr1168, 4.06.0+pr1176, 4.06.0+pr1182, 4.06.0+pr1185, 4.06.0+pr1192, 4.06.0+pr1193, 4.06.0+pr1201, 4.06.0+pr1207, 4.06.0+pr1209, 4.06.0+pr1229, 4.06.0+pr126, 4.06.0+pr1261, 4.06.0+pr1262, 4.06.0+pr1268, 4.06.0+pr1287, 4.06.0+pr1288, 4.06.0+pr1311, 4.06.0+pr1322, 4.06.0+pr1326, 4.06.0+pr1331, 4.06.0+pr1334, 4.06.0+pr1335, 4.06.0+pr1338, 4.06.0+pr1340, 4.06.0+pr1342, 4.06.0+pr1343, 4.06.0+pr1344, 4.06.0+pr1345, 4.06.0+pr1346, 4.06.0+pr1349, 4.06.0+pr1351, 4.06.0+pr181, 4.06.0+pr203, 4.06.0+pr232, 4.06.0+pr24, 4.06.0+pr246, 4.06.0+pr285, 4.06.0+pr292, 4.06.0+pr293, 4.06.0+pr367, 4.06.0+pr374, 4.06.0+pr386, 4.06.0+pr389, 4.06.0+pr442, 4.06.0+pr463, 4.06.0+pr465, 4.06.0+pr556, 4.06.0+pr568, 4.06.0+pr574, 4.06.0+pr594, 4.06.0+pr595, 4.06.0+pr608, 4.06.0+pr616, 4.06.0+pr620, 4.06.0+pr638, 4.06.0+pr640, 4.06.0+pr652, 4.06.0+pr658, 4.06.0+pr671, 4.06.0+pr676, 4.06.0+pr686, 4.06.0+pr689, 4.06.0+pr697, 4.06.0+pr711, 4.06.0+pr715, 4.06.0+pr716, 4.06.0+pr717, 4.06.0+pr724, 4.06.0+pr730, 4.06.0+pr754, 4.06.0+pr756, 4.06.0+pr766, 4.06.0+pr770, 4.06.0+pr786, 4.06.0+pr794, 4.06.0+pr830, 4.06.0+pr847, 4.06.0+pr855, 4.06.0+pr858, 4.06.0+pr865, 4.06.0+pr867, 4.06.0+pr882, 4.06.0+pr931, 4.06.0+pr940, 4.06.0+pr942, 4.06.0+pr944, 4.06.0+pr964, 4.06.0+pr974, 4.06.0+pr975, 4.06.0+trunk, 4.06.0+trunk+afl, 4.06.0+trunk+flambda, 4.06.0+trunk+fp, 4.06.0+trunk+fp+flambda, 4.06.0+trunk+safe-string, system }
00:05.639  STATE                   REPOS     : { default }
00:05.639  STATE                   PACKAGES  : 7505 packages
00:05.640  STATE                   INSTALLED : { astring.0.8.3, base.v0.9.3, base-bigarray.base, base-bytes.base, base-num.base, base-threads.base, base-unix.base, bos.0.1.6, cmdliner.1.0.2, conf-m4.1, conf-pkg-config.1.0, conf-which.1, configurator.v0.9.1, cppo.1.6.0, cstruct.3.1.1, cstruct-lwt.3.1.1, depext.1.0.5, duration.0.1.0, fmt.0.8.4, fpath.0.7.2, functoria.2.2.0, functoria-runtime.2.2.0, io-page.2.0.0, ipaddr.2.8.0, jbuilder.1.0+beta13, logs.0.6.2, lwt.3.1.0, mirage.3.0.5, mirage-block.1.1.0, mirage-block-lwt.1.1.0, mirage-channel.3.1.0, mirage-channel-lwt.3.1.0, mirage-clock.1.3.0, mirage-clock-lwt.1.3.0, mirage-console.2.3.5, mirage-console-lwt.2.3.5, mirage-device.1.1.0, mirage-flow.1.3.0, mirage-flow-lwt.1.4.0, mirage-fs.1.1.1, mirage-fs-lwt.1.1.1, mirage-kv.1.1.1, mirage-kv-lwt.1.1.0, mirage-net.1.1.1, mirage-net-lwt.1.1.0, mirage-protocols.1.2.0, mirage-protocols-lwt.1.2.0, mirage-random.1.1.0, mirage-runtime.3.0.5, mirage-stack.1.1.0, mirage-stack-lwt.1.1.0, mirage-time.1.1.0, mirage-time-lwt.1.1.0, mirage-types.3.0.5, mirage-types-lwt.3.0.5, num.0, ocaml-compiler-libs.v0.9.0, ocaml-migrate-parsetree.1.0.4, ocamlbuild.0.11.0, ocamlfind.1.7.3, ocamlgraph.1.8.7, ocplib-endian.1.0, octavius.1.1.0, ppx_ast.v0.9.1, ppx_base.v0.9.0, ppx_compare.v0.9.0, ppx_core.v0.9.0, ppx_driver.v0.9.1, ppx_enumerate.v0.9.0, ppx_hash.v0.9.0, ppx_js_style.v0.9.0, ppx_metaquot.v0.9.0, ppx_optcomp.v0.9.0, ppx_sexp_conv.v0.9.0, ppx_tools_versioned.5.0.1, ppx_traverse_builtins.v0.9.0, ppx_type_conv.v0.9.0, result.1.2, rresult.0.5.0, sexplib.v0.9.2, solo5-kernel-virtio.0.2.2, stdio.v0.9.0, topkg.0.9.0, uchar.0.0.2 }
00:05.640  STATE                   ROOTS     : { base-bigarray.base, base-threads.base, base-unix.base, depext.1.0.5, duration.0.1.0, mirage.3.0.5, mirage-types-lwt.3.0.5, solo5-kernel-virtio.0.2.2 }
00:05.640  STATE                   REINSTALL : {}
00:05.641  STATE                   State switch-backup-err loaded in 0.244s
00:05.641  SYSTEM                  rm /home/ubuntu/.opam/system/backup/state-20170820042105.export
00:05.642  SYSTEM                  Lock released on /home/ubuntu/.opam/system/lock
00:05.643  SYSTEM                  Lock released on /home/ubuntu/.opam/lock

static_website_tls: certificate issue at runtime

I'm not sure how the certificate handling in the static_website_tls example is supposed to work. Currently it fails for me with:

Fatal error: exception Invalid_argument("Tls.Config: invalid configuration: certificate type or usage does not match")
Raised at file "pervasives.ml", line 21, characters 25-45
Called from file "lib/config.ml", line 94, characters 18-75
Called from file "lib/config.ml", line 241, characters 29-51
Called from file "dispatch.ml", line 53, characters 20-40
Called from file "main.ml", line 130, characters 2-51
Called from file "src/core/lwt.ml", line 653, characters 66-69
Re-raised at file "src/core/lwt.ml", line 789, characters 22-23
Called from file "src/unix/lwt_main.ml", line 34, characters 8-18
Called from file "main.ml", line 151, characters 5-10

I'd be happy about a clue where it expects the certs and would create a pull request to include it in the documentation.

Linking problem when compiling the xen version of unikernel with networking

Following the Hello World instructions section 3 Networking, from here: http://openmirage.org/wiki/hello-world

I'm running this on a cubieboard2 using the prebuilt cubieboard2.img (downloaded today).

Running the stackv4 example:

$ mirage configure --xen
$ make

I get this in the linking phase:
ld -d -static -nostdlib --start-group
$(pkg-config --static --libs openlibm 'libminios-xen >= 0.2')
_build/main.native.o /home/mirage/.opam/system/lib/mirage-xen/libocaml.a
/home/mirage/.opam/system/lib/mirage-xen/libxencaml.a --end-group
-L/usr/lib/ocaml
-lbigarray
-L/home/mirage/.opam/system/lib/cstruct
-lcstruct_stubs
-L/home/mirage/.opam/system/lib/shared-memory-ring
-lshared_memory_ring_stubs
-L/home/mirage/.opam/system/lib/lwt
-llwt-unix_stubs
-lpthread
-L/home/mirage/.opam/system/lib/ssl
-lssl_stubs
-lcrypto
-lssl
-L/home/mirage/.opam/system/lib/tcpip
-ltcpip_stubs
/usr/lib/gcc/arm-linux-gnueabihf/4.8/libgcc.a
-o mir-stackv4.elf
ld: cannot find -lpthread
ld: cannot find -lcrypto
ld: cannot find -lssl
make: *** [build] Error 1

So it looks like you I'm supposed to have alternate libpthread, libcrypto and libssl libs in /home/mirage/opam/system/lib/(tcpip,ssl,lwt) but I do not see these. How would those have been created? Did I miss a step somewhere? I was able to get the simple hello world xen version working (the one without networking)

Unix binary unikernel does not configure, following "Hello World" tutorial on amd64, Ubuntu 14.10, fresh install

I appear to have the correct modules installed:

$ opam list
Installed packages for system:
base-bigarray  base  Bigarray library distributed with the OCaml compiler
base-threads   base  Threads library distributed with the OCaml compiler
base-unix      base  Unix library distributed with the OCaml compiler
$ opam config var base-threads+base-unix:installed
true

and opam install mirage appears to work ok.

but when trying

$ git clone git://github.com/mirage/mirage-skeleton.git
$ cd mirage-skeleton/console/

I get:

$ mirage configure --unix
Mirage      Using scanned config file: config.ml
Mirage      Processing: /home/steve/projects/mirage/mirage-skeleton/console/config.ml
Mirage      => rm -rf /home/steve/projects/mirage/mirage-skeleton/console/_build/config.*
Mirage      => cd /home/steve/projects/mirage/mirage-skeleton/console && ocamlbuild -use-ocamlfind -tags annot,bin_annot -pkg mirage config.cmxs
console     Using configuration: /home/steve/projects/mirage/mirage-skeleton/console/config.ml
console     1 job [Unikernel.Main]
console     Installing OPAM packages.
console     => opam install --yes mirage-console mirage-unix
The following actions will be performed:
 - install ocamlfind.1.5.5 [required by mirage-console]
 - install base-no-ppx.base [required by mirage-console]
 - install base-threads.base [required by mirage-console]
 - install base-unix.base [required by mirage-console]
 - install camlp4.4.01.0 [required by mirage-console]
 - install ounit.2.0.0 [required by mirage-console]
 - install base-bytes.legacy [required by mirage-console]
 - install type_conv.111.13.00 [required by mirage-console]
 - install optcomp.1.6 [required by mirage-console]
 - install lwt.2.4.6 [required by mirage-console]
 - install sexplib.111.13.00 [required by mirage-console]
 - install ocplib-endian.0.7 [required by mirage-console]
 - install ipaddr.2.5.0 [required by mirage-console]
 - install cstruct.1.4.0 [required by mirage-console]
 - install shared-memory-ring.1.1.0 [required by mirage-console]
 - install io-page.1.1.1 [required by mirage-console]
 - install mirage-types.2.0.1 [required by mirage-console]
 - install mirage-types-lwt.2.0.1 [required by mirage-console]
 - install mirage-clock-unix.1.0.0 [required by mirage-console]
 - install mirage-unix.2.0.0 [required by mirage-console]
 - install mirage-console.2.0.0
21 to install | 0 to reinstall | 0 to upgrade | 0 to downgrade | 0 to remove

=-=-= Installing base-no-ppx.base =-=-=
Installing base-no-ppx.base.

=-=-= Installing base-threads.base =-=-=
Installing base-threads.base.

=-=-= Installing base-unix.base =-=-=
Installing base-unix.base.

=-=-= Installing camlp4.4.01.0 =-=-=
Installing camlp4.4.01.0.

=-=-= Installing ocamlfind.1.5.5 =-=-=
Building ocamlfind.1.5.5:
  ./configure -bindir /home/steve/.opam/system/bin -sitelib /home/steve/.opam/system/lib -mandir /home/steve/.opam/system/man -config /home/steve/.opam/system/lib/findlib.conf -no-topfind
  make all
  make opt
  make install
Installing ocamlfind.1.5.5.

=-=-= Installing base-bytes.legacy =-=-=
Installing base-bytes.legacy.

=-=-= Installing lwt.2.4.6 =-=-=
Building lwt.2.4.6:
  ./configure --prefix /home/steve/.opam/system --disable-libev --disable-react --disable-ssl --enable-unix --enable-extra --enable-preemptive --disable-glib --disable-ppx
  make build
  make install
[ERROR] The compilation of lwt.2.4.6 failed.
Removing lwt.2.4.6.
  ocamlfind remove lwt

=-=-= Installing optcomp.1.6 =-=-=
Building optcomp.1.6:
  ./configure --prefix /home/steve/.opam/system
  make
  make install
[ERROR] The compilation of optcomp.1.6 failed.
Removing optcomp.1.6.
  ocamlfind remove optcomp
  rm /home/steve/.opam/system/bin/optcomp-o
  rm /home/steve/.opam/system/bin/optcomp-r

=-=-= Installing ounit.2.0.0 =-=-=
Building ounit.2.0.0:
  make build
  make install
[ERROR] The compilation of ounit.2.0.0 failed.
Removing ounit.2.0.0.
  ocamlfind remove oUnit

=-=-= Installing type_conv.111.13.00 =-=-=
Building type_conv.111.13.00:
  make
  make install
[ERROR] The compilation of type_conv.111.13.00 failed.
Removing type_conv.111.13.00.
  ocamlfind remove type_conv

[ERROR] Due to some errors while processing { lwt.2.4.6, optcomp.1.6, ounit.2.0.0, type_conv.111.13.00 }, the following actions will NOT proceed:
 - install ocplib-endian.0.7
 - install cstruct.1.4.0
 - install shared-memory-ring.1.1.0
 - install mirage-types.2.0.1
 - install mirage-types-lwt.2.0.1
 - install mirage-unix.2.0.0
 - install mirage-clock-unix.1.0.0
 - install mirage-console.2.0.0
 - install io-page.1.1.1
 - install ipaddr.2.5.0
 - install sexplib.111.13.00

===== ERROR while installing lwt.2.4.6 =====
# opam-version 1.1.1
# os           linux
# command      make install
# path         /home/steve/.opam/system/build/lwt.2.4.6
# compiler     system (4.01.0)
# exit-code    2
# env-file     /home/steve/.opam/system/build/lwt.2.4.6/lwt-21478-c61e7b.env
# stdout-file  /home/steve/.opam/system/build/lwt.2.4.6/lwt-21478-c61e7b.out
# stderr-file  /home/steve/.opam/system/build/lwt.2.4.6/lwt-21478-c61e7b.err
### stdout ###
# ...[truncated]
# /home/steve/.opam/system/bin/ocamlfind ocamldep -package bigarray -package camlp4 -syntax camlp4o -package camlp4.extend -syntax camlp4o -package camlp4.quotations.o -package unix -syntax camlp4o -ppopt syntax/pa_lwt_options.cmo -ppopt syntax/pa_lwt.cmo -ppopt syntax/pa_lwt_log.cmo -ppopt syntax/pa_optcomp.cmo -modules examples/unix/relay.ml > examples/unix/relay.ml.depends
# /home/steve/.opam/system/bin/ocamlfind ocamlc -c -g -I src/core -I src/logger -I src/unix -I syntax -package bigarray -package camlp4 -syntax camlp4o -package camlp4.extend -syntax camlp4o -package camlp4.quotations.o -package unix -syntax camlp4o -ppopt syntax/pa_lwt_options.cmo -ppopt syntax/pa_lwt.cmo -ppopt syntax/pa_lwt_log.cmo -ppopt syntax/pa_optcomp.cmo -I examples/unix -I src/unix -I syntax -o examples/unix/relay.cmo examples/unix/relay.ml
# /home/steve/.opam/system/bin/ocamlfind ocamlopt -c -g -I src/core -I src/logger -I src/unix -I syntax -package bigarray -package camlp4 -syntax camlp4o -package camlp4.extend -syntax camlp4o -package camlp4.quotations.o -package unix -syntax camlp4o -ppopt syntax/pa_lwt_options.cmo -ppopt syntax/pa_lwt.cmo -ppopt syntax/pa_lwt_log.cmo -ppopt syntax/pa_optcomp.cmo -I examples/unix -I src/unix -I syntax -o examples/unix/relay.cmx examples/unix/relay.ml
# /home/steve/.opam/system/bin/ocamlfind ocamlopt -g -I src/unix -linkpkg -package bigarray -package camlp4 -package camlp4.extend -package camlp4.quotations.o -package unix syntax/lwt-syntax.cmxa src/core/lwt.cmxa src/logger/lwt-log.cmxa src/unix/lwt-unix.cmxa examples/unix/relay.cmx -o examples/unix/relay.native
# /home/steve/.opam/system/bin/ocamlfind ocamldep -package bigarray -package camlp4 -syntax camlp4o -package camlp4.extend -syntax camlp4o -package camlp4.quotations.o -package unix -syntax camlp4o -ppopt syntax/pa_lwt_options.cmo -ppopt syntax/pa_lwt.cmo -ppopt syntax/pa_lwt_log.cmo -ppopt syntax/pa_optcomp.cmo -modules examples/unix/parallelize.ml > examples/unix/parallelize.ml.depends
# /home/steve/.opam/system/bin/ocamlfind ocamlc -c -g -I src/core -I src/logger -I src/unix -I syntax -package bigarray -package camlp4 -syntax camlp4o -package camlp4.extend -syntax camlp4o -package camlp4.quotations.o -package unix -syntax camlp4o -ppopt syntax/pa_lwt_options.cmo -ppopt syntax/pa_lwt.cmo -ppopt syntax/pa_lwt_log.cmo -ppopt syntax/pa_optcomp.cmo -I examples/unix -I src/unix -I syntax -o examples/unix/parallelize.cmo examples/unix/parallelize.ml
# /home/steve/.opam/system/bin/ocamlfind ocamlopt -c -g -I src/core -I src/logger -I src/unix -I syntax -package bigarray -package camlp4 -syntax camlp4o -package camlp4.extend -syntax camlp4o -package camlp4.quotations.o -package unix -syntax camlp4o -ppopt syntax/pa_lwt_options.cmo -ppopt syntax/pa_lwt.cmo -ppopt syntax/pa_lwt_log.cmo -ppopt syntax/pa_optcomp.cmo -I examples/unix -I src/unix -I syntax -o examples/unix/parallelize.cmx examples/unix/parallelize.ml
# /home/steve/.opam/system/bin/ocamlfind ocamlopt -g -I src/unix -linkpkg -package bigarray -package camlp4 -package camlp4.extend -package camlp4.quotations.o -package unix syntax/lwt-syntax.cmxa src/core/lwt.cmxa src/logger/lwt-log.cmxa src/unix/lwt-unix.cmxa examples/unix/parallelize.cmx -o examples/unix/parallelize.native
# ./setup.exe -install 
# Makefile:42: recipe for target 'install' failed
### stderr ###
# ocamlfind: Package `wikidoc' not found
# W: Nothing to install for findlib library 'test'
# W: Nothing to install for findlib library 'optcomp'
# ocamlfind: Package lwt is already installed
#  - (file /home/steve/.opam/system/lib/lwt/META already exists)
# E: Failure("Command ''/home/steve/.opam/system/bin/ocamlfind' install lwt src/core/META _build/src/extra/lwt_lib.cmx _build/src/extra/lwt_lib.cmi _build/src/extra/lwt-extra.cmxs _build/src/extra/lwt-extra.a _build/src/extra/lwt-extra.cmxa _build/src/extra/lwt-extra.cma src/extra/lwt_lib.mli _build/src/logger/lwt_log_core.cmx _build/src/logger/lwt_log_rules.cmx _build/src/logger/lwt_log_core.cmi _b...[truncated]
# make: *** [install] Error 1


===== ERROR while installing optcomp.1.6 =====
# opam-version 1.1.1
# os           linux
# command      make install
# path         /home/steve/.opam/system/build/optcomp.1.6
# compiler     system (4.01.0)
# exit-code    2
# env-file     /home/steve/.opam/system/build/optcomp.1.6/optcomp-23111-d2d111.env
# stdout-file  /home/steve/.opam/system/build/optcomp.1.6/optcomp-23111-d2d111.out
# stderr-file  /home/steve/.opam/system/build/optcomp.1.6/optcomp-23111-d2d111.err
### stdout ###
# ...[truncated]
# + /home/steve/.opam/system/bin/ocamlfind ocamlopt -I +camlp4 camlp4fulllib.cmxa -g -linkpkg -package camlp4 -package camlp4.lib -package camlp4.quotations.o src/optcomp.cmxa src/optcomp.cmx src/optcomp_o.cmx -o src/optcomp_o.native
# /usr/bin/ld: error in /usr/lib/ocaml/camlp4/camlp4fulllib.a(Camlp4.o)(.eh_frame); no .eh_frame_hdr table will be created.
# /home/steve/.opam/system/bin/ocamlfind ocamldep -package camlp4 -package camlp4.lib -syntax camlp4o -package camlp4.quotations.o -modules src/optcomp_r.ml > src/optcomp_r.ml.depends
# /home/steve/.opam/system/bin/ocamlfind ocamlc -c -I +camlp4 -I +camlp4/Camlp4Parsers -I +camlp4/Camlp4Printers -I +camlp4/Camlp4Filters -g -I src -package camlp4 -package camlp4.lib -syntax camlp4o -package camlp4.quotations.o -I src -o src/optcomp_r.cmo src/optcomp_r.ml
# /home/steve/.opam/system/bin/ocamlfind ocamlopt -c -I +camlp4 -I +camlp4/Camlp4Parsers -I +camlp4/Camlp4Printers -I +camlp4/Camlp4Filters -g -I src -package camlp4 -package camlp4.lib -syntax camlp4o -package camlp4.quotations.o -I src -o src/optcomp_r.cmx src/optcomp_r.ml
# /home/steve/.opam/system/bin/ocamlfind ocamlopt -I +camlp4 camlp4fulllib.cmxa -g -linkpkg -package camlp4 -package camlp4.lib -package camlp4.quotations.o src/optcomp.cmxa src/optcomp.cmx src/optcomp_r.cmx -o src/optcomp_r.native
# + /home/steve/.opam/system/bin/ocamlfind ocamlopt -I +camlp4 camlp4fulllib.cmxa -g -linkpkg -package camlp4 -package camlp4.lib -package camlp4.quotations.o src/optcomp.cmxa src/optcomp.cmx src/optcomp_r.cmx -o src/optcomp_r.native
# /usr/bin/ld: error in /usr/lib/ocaml/camlp4/camlp4fulllib.a(Camlp4.o)(.eh_frame); no .eh_frame_hdr table will be created.
# ./setup.exe -install 
# Makefile:43: recipe for target 'install' failed
### stderr ###
# ocamlfind: Package optcomp is already installed
#  - (file /home/steve/.opam/system/lib/optcomp/META already exists)
# E: Failure("Command ''/home/steve/.opam/system/bin/ocamlfind' install optcomp src/META _build/src/pa_optcomp.cmx _build/src/pa_optcomp.cmi _build/src/optcomp.cmxs _build/src/optcomp.a _build/src/optcomp.cmxa _build/src/optcomp.cma src/pa_optcomp.mli' terminated with error code 2")
# make: *** [install] Error 1


===== ERROR while installing ounit.2.0.0 =====
# opam-version 1.1.1
# os           linux
# command      make install
# path         /home/steve/.opam/system/build/ounit.2.0.0
# compiler     system (4.01.0)
# exit-code    2
# env-file     /home/steve/.opam/system/build/ounit.2.0.0/ounit-23328-ad8886.env
# stdout-file  /home/steve/.opam/system/build/ounit.2.0.0/ounit-23328-ad8886.out
# stderr-file  /home/steve/.opam/system/build/ounit.2.0.0/ounit-23328-ad8886.err
### stdout ###
# ...[truncated]
# ocamlfind ocamldep -package threads -package unix -modules src/oUnitRunnerThreads.ml > src/oUnitRunnerThreads.ml.depends
# ocamlfind ocamlc -c -g -I src -I src -package threads -package unix -thread -I src -o src/oUnitRunnerThreads.cmo src/oUnitRunnerThreads.ml
# ocamlfind ocamlc -c -g -I src -I src -package threads -package unix -thread -I src -o src/oUnitThreads.cmo src/oUnitThreads.ml
# ocamlfind ocamlc -a src/oUnitRunnerThreads.cmo src/oUnitThreads.cmo -o src/oUnitThreads.cma
# ocamlfind ocamlopt -c -g -I src -I src -package threads -package unix -thread -I src -o src/oUnitRunnerThreads.cmx src/oUnitRunnerThreads.ml
# ocamlfind ocamlopt -c -g -I src -I src -package threads -package unix -thread -I src -o src/oUnitThreads.cmx src/oUnitThreads.ml
# ocamlfind ocamlopt -a src/oUnitRunnerThreads.cmx src/oUnitThreads.cmx -o src/oUnitThreads.cmxa
# ocamlfind ocamlopt -shared src/oUnitThreads.cmx -o src/oUnitThreads.cmxs
# ocaml setup.ml -install 
# Makefile:56: recipe for target 'install' failed
### stderr ###
# W: Cannot find source file matching module 'OUnitLoggerHTMLData' in library oUnitAdvanced
# W: Cannot find source file matching module 'OUnitLoggerHTMLData' in library oUnitAdvanced
# W: Cannot find source header for module OUnitLoggerHTMLData in library oUnitAdvanced
# ocamlfind: Package oUnit is already installed
#  - (file /home/steve/.opam/system/lib/oUnit/META already exists)
# E: Failure("Command ''/home/steve/.opam/system/bin/ocamlfind' install oUnit src/META _build/src/oUnitDiff.cmx _build/src/oUnitCheckEnv.cmx _build/src/oUnitTestData.cmx _build/src/oUnitCache.cmx _build/src/oUnitShared.cmx _build/src/oUnitConf.cmx _build/src/oUnitLogger.cmx _build/src/oUnitCore.cmx _build/src/oUnitRunnerProcesses.cmx _build/src/oUnitRunner.cmx _build/src/oUnitState.cmx _build/src/oU...[truncated]
# make: *** [install] Error 1


===== ERROR while installing type_conv.111.13.00 =====
# opam-version 1.1.1
# os           linux
# command      make install
# path         /home/steve/.opam/system/build/type_conv.111.13.00
# compiler     system (4.01.0)
# exit-code    2
# env-file     /home/steve/.opam/system/build/type_conv.111.13.00/type_conv-23774-d8a4ae.env
# stdout-file  /home/steve/.opam/system/build/type_conv.111.13.00/type_conv-23774-d8a4ae.out
# stderr-file  /home/steve/.opam/system/build/type_conv.111.13.00/type_conv-23774-d8a4ae.err
### stdout ###
# ...[truncated]
# ocamlfind ocamldep -package camlp4.extend -package camlp4.quotations -modules lib/pa_type_conv.mli > lib/pa_type_conv.mli.depends
# ocamlfind ocamlc -c -g -package camlp4.extend -package camlp4.quotations -I lib -o lib/pa_type_conv.cmi lib/pa_type_conv.mli
# ocamlfind ocamldep -syntax camlp4o -package camlp4.extend -package camlp4.quotations -modules lib/pa_type_conv.ml > lib/pa_type_conv.ml.depends
# ocamlfind ocamlc -c -g -syntax camlp4o -package camlp4.extend -package camlp4.quotations -I lib -o lib/pa_type_conv.cmo lib/pa_type_conv.ml
# ocamlfind ocamlc -a lib/pa_type_conv.cmo -o lib/pa_type_conv.cma
# ocamlfind ocamlopt -c -g -syntax camlp4o -package camlp4.extend -package camlp4.quotations -I lib -o lib/pa_type_conv.cmx lib/pa_type_conv.ml
# ocamlfind ocamlopt -a lib/pa_type_conv.cmx -o lib/pa_type_conv.cmxa
# ocamlfind ocamlopt -shared lib/pa_type_conv.cmx -o lib/pa_type_conv.cmxs
# ./setup.exe -install 
# Makefile:33: recipe for target 'install' failed
### stderr ###
# ocamlfind: Package type_conv is already installed
#  - (file /home/steve/.opam/system/lib/type_conv/META already exists)
# E: Failure("Command ''/home/steve/.opam/system/bin/ocamlfind' install type_conv lib/META _build/lib/pa_type_conv.cmx _build/lib/pa_type_conv.cmi _build/lib/pa_type_conv.cmxs _build/lib/pa_type_conv.a _build/lib/pa_type_conv.cmxa _build/lib/pa_type_conv.cma lib/pa_type_conv.mli' terminated with error code 2")
# make: *** [install] Error 1

'opam install --yes mirage-console mirage-unix' failed.
console      ocamlfind ocamldep -package mirage -modules config.ml > config.ml.depends
console      ocamlfind ocamlc -c -annot -bin-annot -package mirage -o config.cmo config.ml
console      ocamlfind ocamlopt -c -annot -bin-annot -package mirage -o config.cmx config.ml
console      ocamlfind ocamlopt -shared -package mirage config.cmx -o config.cmxs
[ERROR]      The command "opam install --yes mirage-console mirage-unix" exited with code 4.

I've tried deleting and reinitialising ~/.opam and I get the same results.

Unable to run stackv4 example

Hi,
I'm trying to compile the stackv4 example but apparently something goes wrong, as you can see from the output of the command mirage configure -t unix:

[ERROR]

ocamlfind ocamldep -package mirage -modules config.ml > config.ml.depends
ocamlfind ocamlc -c -annot -bin-annot -package mirage -o config.cmo config.ml
+ ocamlfind ocamlc -c -annot -bin-annot -package mirage -o config.cmo config.ml
File "config.ml", line 5, characters 44-48:
Error: The function applied to this argument has type
         ?group:string ->
         ?dhcp_key:bool Mirage.value ->
         ?net_key:[ `Direct | `Socket ] Mirage.value ->
         Mirage.stackv4 Functoria.impl
This argument cannot be applied without label
Command exited with code 2.
Hint: Recursive traversal of subdirectories was not enabled for this build,
  as the working directory does not look like an ocamlbuild project (no
  '_tags' or 'myocamlbuild.ml' file). If you have modules in subdirectories,
  you should add the option "-r" or create an empty '_tags' file.

  To enable recursive traversal for some subdirectories only, you can use the
  following '_tags' file:

      true: -traverse
      <dir1> or <dir2>: traverse

At the moment, I'm using mirage with version dev~mirage. Have downgraded to 2.8.0 but then inevitably the mirage configure step forces the package upgrade again and it also fails:

The following actions will be performed:
  ∗  install mirage-net-unix dev~mirage
  ↗  upgrade functoria       1.0.0 to dev~mirage
  ↗  upgrade mirage          2.8.0 to dev~mirage  [uses functoria]
===== ∗  1   ↗  2 =====

=-=- Gathering sources =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[mirage] Archive in cache
[mirage-net-unix] https://github.com/mirage/mirage-net-unix.git updated
[functoria] https://github.com/mirage/functoria.git updated
[mirage] https://github.com/mirage/mirage.git updated

=-=- Processing actions -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[ERROR] The compilation of mirage-net-unix failed at "make".
⊘  removed   mirage.2.8.0
⊘  removed   functoria.1.0.0
∗  installed functoria.dev~mirage
∗  installed mirage.dev~mirage

#=== ERROR while installing mirage-net-unix.dev~mirage ========================#
# opam-version 1.2.2
# os           linux
# command      make
# path         /home/cozzolin/.opam/system/build/mirage-net-unix.dev~mirage
# compiler     system (4.02.3)
# exit-code    2
# env-file     /home/cozzolin/.opam/system/build/mirage-net-unix.dev~mirage/mirage-net-unix-32346-d474c2.env
# stdout-file  /home/cozzolin/.opam/system/build/mirage-net-unix.dev~mirage/mirage-net-unix-32346-d474c2.out
# stderr-file  /home/cozzolin/.opam/system/build/mirage-net-unix.dev~mirage/mirage-net-unix-32346-d474c2.err
### stderr ###
# make: *** No targets specified and no makefile found.  Stop.



=-=- Error report -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
The following actions failed
  ∗  install mirage-net-unix dev~mirage
The following changes have been performed
  ↗  upgrade functoria 1.0.0 to dev~mirage
  ↗  upgrade mirage    2.8.0 to dev~mirage

The former state can be restored with:
    opam switch import "~/.opam/system/backup/state-20161003150412.export"
[ERROR] The command "opam install --yes  functoria lwt mirage-clock-unix mirage-console mirage-net-unix mirage-types mirage-types-lwt mirage-unix tcpip" exited with code 4.

Can anyone shed some light on this issue? Or just point me in the right direction to solve it.

Evaluation of Unikernels

Hello. I'm working with Mirage OS and am hosting the unikernels on a local Xen server. However, unikernels are with performing poorly. The throughput is around 30 kbps and conventional virtual machines at 500 kbps. I thought I had some configuration problem but I found a scientific paper that according to Briggs et al. (2015), during testing of the Mirage HTTP server we encountered a severe bug: the Mirage TCP / IP library apparently leaks memory every time a TCP connection is released, on the order of 30 kilobytes per TCP connection. We have filed a bug with the Mirage OS authors. Unfortunately, this causes the performance of Mirage to be very poor; we expect this performance would be greatly improved after this bug is fixed.

This problem has already been solved and how should I proceed?

Reference.
BRIGGS, Ian et al. A performance evaluation of unikernels. 2015.

-- I apologize for possible grammatical errors, English is not my native language.

mirage-skeleton/static_website doesn't build

www          File "_none_", line 1:
www          Error: No implementations provided for the following modules:
www                   Re_str referenced from dispatch.cmx
www          Command exited with code 2.
www          Makefile:19: recipe for target 'main.native' failed
www          make[1]: *** [main.native] Error 10
www          make[1]: Target 'build' not remade because of errors.
www          make[1]: Leaving directory '/home/edwin/HDD/me/language/OCaml/mirage-skeleton/static_website'

stackv4 freezes with static IP

I am having issues trying to tweak the example to use static ipv4 configuration - the xen image freezes after sending ARP when started as "xl create -c stackv4.xl" and there is no ethernet packet going out of the bridge interface for the configured MAC address.

The xl config is:

name = 'stackv4'
kernel = '/backupnfs/mirage/mir-stackv4.xen'
builder = 'linux'
memory = 256
vif = [ 'mac=02:00:00:52:d7:60,bridge=xenbr1' ]

The mac needs to be set to the specific value for the environment I use (dedicated xenserver on ovh.com) and is reported correctly:

MAC: 02:00:00:52:d7:60
Manager: connect
Manager: configuring
Manager: Interface to 192.95.61.162 nm 255.255.255.0 gw [192.95.61.254]

sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
ARP: sending gratuitous from 192.95.61.162

For comparison a working Linux vm on the same machine has config

auto eth0
iface eth0 inet static
    address 192.95.61.160
    netmask 255.255.255.0
    network 192.95.61.0
    broadcast 192.95.61.255
    gateway 192.95.61.254

I only modified the example config.ml for static configuration, so the problem is likely there:

open Mirage

let ipv4_config = 
  let address = Ipaddr.V4.of_string_exn "192.95.61.162" in
  let netmask = Ipaddr.V4.of_string_exn "255.255.255.0" in
  let gateways = [Ipaddr.V4.of_string_exn "192.95.61.254"] in
  { address; netmask; gateways }

let handler = foreign "Unikernel.Main" (console @-> stackv4 @-> job)

let direct =
    let stack = direct_stackv4_with_static_ipv4 default_console tap0 ipv4_config in
    handler $ default_console $ stack

(* Only add the Unix socket backend if the configuration mode is Unix *)
let socket =
  let c = default_console in
  match get_mode () with
  | `Xen -> []
  | `Unix -> [ handler $ c $ socket_stackv4 c [Ipaddr.V4.any] ]

let () =
  add_to_ocamlfind_libraries ["mirage-http"];
  add_to_opam_packages ["mirage-http"];
  register "stackv4" [direct]      (* tried also with (direct :: socket) *)

Unable to run 'hello world'

I'm trying to run the hello, world example on my Mac (Darwin Kernel Version 12.4.0: Wed May 1 17:57:12 PDT 2013; root:xnu-2050.24.15~1/RELEASE_X86_64 x86_64).

After installing opam and mirari, I go to 'basic' and am able to build successfully.

When I run "./mir-hello', it prints "Manager: create" and then appears to hang. I have to Ctrl-C to quit. No other output.

If there is a way to get more debugging info, please let me know! Thanks!

static_website fails to configure

I recently checked out the mirage skeleton project, and when i try to run the ``static_website` example, I'm greeted with the following:

mirage configure
Mirage Using scanned config file: config.ml
Mirage Processing: /Users/bbrietzke/Development/mirage-skeleton/static_website/config.ml
Mirage => rm -rf /Users/bbrietzke/Development/mirage-skeleton/static_website/_build/config.*
Mirage => cd /Users/bbrietzke/Development/mirage-skeleton/static_website && ocamlbuild -use-ocamlfind -tags annot,bin_annot -pkg mirage config.cmxs
Mirage ocamlfind ocamldep -package mirage -modules config.ml > config.ml.depends
Mirage ocamlfind ocamlc -c -annot -bin-annot -package mirage -o config.cmo config.ml
Mirage + ocamlfind ocamlc -c -annot -bin-annot -package mirage -o config.cmo config.ml
Mirage File "config.ml", line 41, characters 2-16:
Mirage Error: Unbound value conduit_direct
Mirage Command exited with code 2.
[ERROR] The command "cd /Users/bbrietzke/Development/mirage-skeleton/static_website && ocamlbuild -use-ocamlfind -tags annot,bin_annot -pkg mirage config.cmxs" exited with code 10.

I am able to run the console example without an issue.

I've deleted my ~/.opam directory and reinstalled everything and still came back with the same results.

I have run this on both an clean OS/X & Ubuntu machines with the same results.

Let me know what additional information or troubleshooting I can do to help.

The install modules on my system:

opam list
Installed packages for system:
base-bigarray base Bigarray library distributed with the OCaml compiler
base-bytes legacy Bytes compatibility library distributed with ocamlfind
base-no-ppx base A pseudo-library to indicate lack of extension points support
base-threads base Threads library distributed with the OCaml compiler
base-unix base Unix library distributed with the OCaml compiler
bin_prot 111.03.00 A binary protocol generator
camlp4 4.01.0 Camlp4 is a system for writing extensible parsers for programming languages
cmdliner 0.9.5 Declarative definition of command line interfaces for OCaml
cohttp 0.11.2 HTTP library for Lwt, Async and Mirage
comparelib 109.60.00 Part of Jane Street’s Core library
conduit 0.5.1 Network connection library for TCP and SSL
core 111.28.00 Industrial strength alternative to OCaml's standard library
core_kernel 111.28.00 Industrial strength alternative to OCaml's standard library
cstruct 1.4.0 access C structures via a camlp4 extension
custom_printf 111.25.00 Extension for printf format strings
enumerate 111.08.00 Quotation expanders for enumerating finite types.
fieldslib 109.20.03 Syntax extension to define first class values representing record fields, to get and set record fields, iterate and fold over
herelib 109.35.02 Part of Jane Street’s Core library
io-page 1.1.1 Allocate memory pages suitable for aligned I/O
ipaddr 2.5.0 IP (and MAC) address representation library
lwt 2.4.6 A cooperative threads library for OCaml
mirage 1.2.0 The Mirage library operating system
mirage-clock-unix 1.0.0 A Mirage-compatible Clock library for Unix
mirage-console-unix 1.0.0 A Mirage-compatible Console library for Unix
mirage-http 1.1.0 Mirage HTTP client and server driver for Unix
mirage-net-unix 1.1.1 Ethernet network driver for Mirage, using tuntap
mirage-types 1.2.0 Module type definitions for Mirage-compatible applications
mirage-unix 1.1.0 Mirage OS library for Unix compilation
ocamlfind 1.5.3 A library manager for OCaml
ocplib-endian 0.7 Optimised functions to read and write int16/32/64 from strings and bigarrays, based on new primitives added in version 4.01.
optcomp 1.6 Optional compilation with cpp-like directives
ounit 2.0.0 Unit testing framework loosely based on HUnit. It is similar to JUnit, and other XUnit testing frameworks
pa_bench 111.28.00 Syntax extension for inline benchmarks
pa_ounit 111.28.00 Syntax extension for oUnit
pa_test 111.08.00 Quotation expander for assertions.
pipebang 110.01.00 Part of Jane Street’s Core library
re 1.2.2 RE is a regular expression library for OCaml
sexplib 111.25.00 Library for serializing OCaml values to and from S-expressions
shared-memory-ring 1.1.0 Shared memory rings for RPC and bytestream communications.
ssl 0.4.7 Bindings for OpenSSL
stringext 1.0.0 Extra string functions for OCaml
tcpip 1.1.6 Userlevel TCP/IP stack
tuntap 1.0.0 TUN/TAP bindings
type_conv 111.13.00 Library for building type-driven syntax extensions
typerep 111.17.00 typerep is a library for runtime types.
uri 1.7.2 RFC3986 URI/URL parsing library
variantslib 109.15.03 Part of Jane Street’s Core library

ocamlfind: Package `conduit.mirage' not found

When trying to build the static_website_tls example, with a clean 4.04.2 switch and mirage 3.0.2:

mirage configure -t unix
make depend
make

I receive the error:

+ ocamlfind ocamldep -package uri -package tls.mirage -package tls -package tcpip.udp -package tcpip.tcp -package tcpip.stack-direct -package tcpip.ipv4 -package tcpip.icmpv4 -package tcpip.ethif -package tcpip.arpv4 -package tcpip -package nocrypto.lwt -package nocrypto -package mirage-unix -package mirage-types-lwt -package mirage-types -package mirage-runtime -package mirage-random -package mirage-net-unix -package mirage-logs -package mirage-kv-lwt -package mirage-http -package mirage-flow-lwt -package mirage-clock-unix -package mirage-clock -package magic-mime -package lwt -package io-page.unix -package io-page -package functoria-runtime -package conduit.mirage -package conduit -predicates mirage_unix -modules main.ml > main.ml.depends
ocamlfind: Package `conduit.mirage' not found

It appears that the package names have been changed in mirage-conduit 3.0.x:

In each of these packages, the opam and ocamlfind package
names are now the same, so you will need to rename the former
subpackages such as conduit.async to conduit-async. The
implementation is otherwise the same, so no other code changes
should be required.

The generated mirage-unikernel-https-unix.opam contains the dependency "mirage-conduit" {>="2.3.0"}.

My version is 3.0.1:

mirage-conduit  3.0.1  Network conduit library

(Sorry if this is the wrong tracker. I'm not quite sure how the package names / versions are being generated; it seems the mirage configure/build commands are automatically determining them somehow, as I'm not manually configuring them and don't see any settings I can change in the skeleton project).

kv_ro does not build for Solo5 due to use of Io_page

Building the kv_ro example with the ukvm target fails due to use of Io_page in the generated static1.ml. I'm not sure how/where this dependency is missing, there's no obvious place in lib/mirage.ml that I can see where it should go.

Crash on boot with netif-forward

netif-forward crashes after latest opam update.

Xen version: 4.4.1 - Ubuntu 14.04.1

Works: mirage 2.2.0, mirage-net-xen 1.2.0, mirage-xen-minios 0.6.0
Crashes: mirage 2.2.1, mirage-net-xen 1.3.0, mirage-xen-minios 0.7.0

Xen Minimal OS!
  start_info: 0000000000245000(VA)
    nr_pages: 0x10000
  shared_inf: 0xce06f000(MA)
     pt_base: 0000000000248000(VA)
nr_pt_frames: 0x5
    mfn_list: 00000000001c5000(VA)
   mod_start: 0x0(VA)
     mod_len: 0
       flags: 0x0
    cmd_line: 
       stack: 00000000001a4180-00000000001c4180
MM: Init
      _text: 0000000000000000(VA)
     _etext: 00000000000d865f(VA)
   _erodata: 0000000000101000(VA)
     _edata: 000000000016aae0(VA)
stack start: 00000000001a4180(VA)
       _end: 00000000001c4180(VA)
  start_pfn: 250
    max_pfn: 10000
Mapping memory range 0x400000 - 0x10000000
setting 0000000000000000-0000000000101000 readonly
skipped 1000
MM: Initialise page allocator for 2ce000(2ce000)-10000000(10000000)
MM: done
Demand map pfns at 10001000-0000002010001000.
Initialising timer interface
Initialising console ... done.
gnttab_table mapped at 0000000010001000.
getenv(OCAMLRUNPARAM) -> null
getenv(CAMLRUNPARAM) -> null
getenv(PATH) -> null
Unsupported function lseek called in Mini-OS kernel
Unsupported function lseek called in Mini-OS kernel
Unsupported function lseek called in Mini-OS kernel
getenv(OCAMLRUNPARAM) -> null
getenv(CAMLRUNPARAM) -> null
getenv(TMPDIR) -> null
getenv(TEMP) -> null
Netif: add resume hook
Netif.connect 1
Netfront.create: id=1 domid=0
MAC: 00:16:3e:51:27:4c
 sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
Netif.connect 2
Fatal error: exception Failure("net_2")
Raised at file "src/core/lwt.ml", line 788, characters 22-23
Called from file "lib/main.ml", line 56, characters 10-20
Called from file "main.ml", line 48, characters 2-28
Mirage exiting with status 2
Do_exit called!
base is 0x1bff20 caller is 0xbddf7
base is 0x4 Page fault at linear address c, rip d7be7, regs 00000000001bfe38, sp 1bfee0, our_sp 00000000001bfdf8, code 0
RIP: e030:[<00000000000d7be7>] 
RSP: e02b:00000000001bfee0  EFLAGS: 00010006
RAX: 000000000000000c RBX: 0000000000000004 RCX: 00000000000006e1
RDX: 00000000000006e1 RSI: 00000000001bfd40 RDI: 0000000000000004
RBP: 00000000001bff20 R08: 00000000000006e0 R09: 0000000000000020
R10: 000000000000000c R11: 0000000000000000 R12: 0000000000000001
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
base is 0x1bff20 caller is 0xbddf7
base is 0x4 Page fault in pagetable walk (access to invalid memory?).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.