2016-02-10 6 views
5

Я написал простой Unikernel на основе MirageOS для выполнения основного вызова HTTP GET. Несмотря на то, что она работает без каких-либо проблем, когда я запустить его как бинарный Unix, в тот момент я настроить его для XEN (mirage configure --xen) и запустить команду make, я получаю следующее сообщение об ошибке:MirageOS - Не удалось построить unikernel для XEN

ocamlbuild -use-ocamlfind -pkgs lwt.syntax,cohttp.lwt,cohttp.lwt-core,mirage-console.xen,mirage-http,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 ocamlopt -g -linkpkg -dontlink unix -output-obj -package mirage-types.lwt -package mirage-http -package mirage-console.xen -package cohttp.lwt-core -package cohttp.lwt -package lwt.syntax -syntax camlp4o unikernel.cmx main.cmx -o main.native.o 
File "_none_", line 1: 
Error: No implementations provided for the following modules: 
     Unix referenced from /home/mirage/.opam/system/lib/lwt/lwt-unix.cmxa(Lwt_engine), 
      /home/mirage/.opam/system/lib/lwt/lwt-unix.cmxa(Lwt_unix), 
      /home/mirage/.opam/system/lib/lwt/lwt-unix.cmxa(Lwt_io), 
      /home/mirage/.opam/system/lib/lwt/lwt-unix.cmxa(Lwt_log), 
      /home/mirage/.opam/system/lib/ipaddr/ipaddr_unix.cmxa(Ipaddr_unix), 
      /home/mirage/.opam/system/lib/xenstore_transport/xenstore_transport_lwt_unix.cmxa(Xs_transport_lwt_unix_client), 
      /home/mirage/.opam/system/lib/conduit/conduit-lwt-unix.cmxa(Conduit_lwt_unix), 
      /home/mirage/.opam/system/lib/cohttp/cohttp_lwt_unix.cmxa(Cohttp_lwt_unix_debug), 
      /home/mirage/.opam/system/lib/cohttp/cohttp_lwt_unix.cmxa(Cohttp_lwt_unix) 
Command exited with code 2. 
Compilation unsuccessful after building 7 targets (0 cached) in 00:00:03. 
make: *** [main.native.o] Error 10 

Я только начал работать с MirageOS и OCaml, так что это может быть глупый вопрос, но сейчас я действительно не знаю, что делать.

ответ

5

Нельзя использовать Cohttp_lwt_unix. Как следует из названия, он работает на unix, а не на xen. Если вам нужен пример веб-сервера, который является xen-proof, вы можете посмотреть this skeleton или по адресу the code used by mirage-seal.

3

Как @Drup говорит, вам нужно избегать любых пакетов «unix», если вы хотите быть портативными. Вместо этого используйте адаптер Mirage для cohttp. Этот должен работать:

https://github.com/mirage/mirage-http