J'essaye de modifier un peu l'exemple http-fetch de MirageOS (https://github.com/mirage/mirage-skeleton) qui peut être trouvé dans mirage-skeleton mais j'ai quelques problèmes pour comprendre pourquoi je ne peux pas déplacer certains de la fonction exécutée dans le fichier config.ml dans mon fichier unikernel.ml. Le fichier config.ml d'origine suit (je viens de copier la partie intéressante):MirageOS - Exemple Http-fetch
[...]
let client =
foreign "Unikernel.Client" @@ console @-> resolver @-> conduit @-> job
let() =
add_to_ocamlfind_libraries ["mirage-http"];
add_to_opam_packages ["mirage-http"];
let sv4 = stack default_console in
let res_dns = resolver_dns sv4 in
let conduit = conduit_direct sv4 in
let job = [ client $ default_console $ res_dns $ conduit ] in
register "http-fetch" job
Ce que je suis en train de faire est de déplacer ces deux lignes:
let res_dns = resolver_dns sv4 in
let conduit = conduit_direct sv4 in
dans mon unikernel.ml méthode de démarrage. Fondamentalement je veux passer à mon module juste la pile et le laisser créer un résolveur de DNS et un conduit. Ma fonction de démarrage suit:
let start c s =
C.log_s c (sprintf "Resolving in 1s using DNS server %s" ns) >>= fun() ->
OS.Time.sleep 1.0 >>= fun() ->
let res_dns = resolver_dns s in
let conduit = conduit_direct s in
http_fetch c res_dns conduit >>= fun (data) ->
Lwt.return(dump_to_db data);
En ce moment, je reçois cette erreur à http_fetch paramètres soumission:
Error: This expression has type Mirage.resolver Mirage.impl
but an expression was expected of type Resolver_lwt.t
Ce que je demande ici est surtout une question conceptuelle parce que je manque clairement quelque chose . Je ne suis pas un expert en OCaml/MirageOS mais ce comportement controversé d'incompatibilité de type est difficile à comprendre étant donné que j'appelle la même fonction à partir d'un fichier différent.
config.ml et unikernel.ml sont compilés complètement différemment (et pas même au même point). Pourquoi voulez-vous copier du code de l'un à l'autre? – Drup
J'essayais surtout d'expérimenter. Mon vrai problème est que je rencontre ce problème http://lists.xenproject.org/archives/html/mirageos-devel/2015-06/msg00025.html et j'essaie de suivre les conseils de la création du résolveur et le conduit directement à l'intérieur de l'unikernel. –