CHANGES:
-
This release introduces a significant change in the Mirage tool by
splitting the definition of command-line arguments used at
configure-time and runtime. Command-line arguments used in the
configure script (also called 'configuration keys' and defined in
theKey
module) are essential during the setup of module
dependencies for the unikernel, allowing for a specialized
production of a unikernel for a given target runtime environment. On
the other hand, command-line arguments that the unikernel can use at
runtime (defined in theRuntime_arg
module) are useful for
customizing deployments without altering the dependencies of the
unikernels. (#1449, #1450, #1451, #1455 @samoht, review by @hannesm)-
API changes:
- There is no more
~stage
parameter forKey.Arg.info
. Key
now define command-line arguments for the configuration tool.- There is a new module
Runtime_arg
to define command-line arguments
for the unikernel. - As there are no more keys type
'Both
, users are now expected to create
two separated keys in that case (one for configure-time, one for runtime)
or decide if the key is useful at runtime of configure-time.
- There is no more
-
Intended use of configuration keys (values of type
'a key
):- Used to set up module dependencies of the unikernel, such as the
target (hvt, xen, etc.) and whether to use DHCP or a fixed IP address. - Enable the production of specialized unikernels suitable for
specific target runtime environments and dedicated network and
storage stacks. - Similar keys will produce reproducible binaries to be uploaded to artifact
repositories like Docker Hub or https://builds.robur.coop/.
- Used to set up module dependencies of the unikernel, such as the
-
Intended use of command-line runtime arguments (values of type
a runtime_arg
):- Allow users to customize deployments by changing device
configuration, like IP addresses, secrets, block device names,
etc., post downloading of binaries. - These keys don’t alter the dependencies of the unikernels.
- A runtime keys is just a reference to a normal Cmdliner term.
- Allow users to customize deployments by changing device
-
key_gen.ml
is not generated anymore, so users cannot refer to
Key_gen.<key_name>
directy.- Any runtime argument has to be declared (using
runtime_arg
and
registered on the device (using~runtime_args
). The value of that
argument will then be passed as an extra parameter of theconnect
function of that device. - Configuration keys are not available at runtime anymore. For
instance,Key_gen.target
has been removed.
- Any runtime argument has to be declared (using
-
-
Code migration:
(* in config.ml *) let key = let doc = Key.Arg.info ~doc:"A Key." ~stage:`Run [ "key" ] in Key.(create "key" Arg.(opt_all ~stage:`Run string doc))
becomes:
(* in unikernel.ml *) open Cmdliner let key = let doc = Arg.info ~doc:"A Key." [ "key" ] in Arg.(value & opt_all string [] doc)
(* in unikernel.ml *) let start _ = let key = Key_gen.hello () in ...
becomes:
(* in config.ml *) let hello = runtime_arg ~pos:__POS__ "Unikernel.hello" let main = main ~runtime_args:[hello] ...
(* in unikernel.ml *) let hello = let open Cmdliner in let doc = Arg.info ~doc:"How to say hello." [ "hello" ] in Arg.(value & opt string "Hello World!" doc) let start _ hello = ...
- bump minimal ocaml-solo5 version bound to 0.8.2 to avoid fast memory usage
error (#1507, @palainp) - BREAKING: the packages
functoria
andfunctoria-runtime
are removed. The
respectives libraries becamemirage.functoria
andmirage-runtime.functoria
(#1509, @samoht) - BREAKING:
Mirage.keys
is renamed toMirage.runtime_args
(#1506, @samoht) - BREAKING: remove
Mirage.foreign. Use
Mirage.main` instead (#1505, @samoht) - BREAKING:
Mirage.main
does not take a?extra_deps
parameter anymore
(#1505, @samoht) - BREAKING: the
Mirage.connect
functions passed to create devices
(withMirage.impl
) now take values of type'a Mirage.code
instead
ofstring
. Value of typecode
are created using a newMirage.code
function, that takes~pos:__POS__
as parameter. This is used to generate
better locations in the generated code, leading to better error messages
(#1504, @samoht) - BUGFIX: fix
mirage describe
output (#1446 @samoht), add test (#1458 @samoht) - Remove ipaddr from runtime (#1437 @samoht, #1465 @hannesm)
- BREAKING:
Mirage.register
no longer have?packages
and?keys
arguments
(#1433, #1434 @hannesm) - BREAKING: Remove deprecated bindings and types (#1461 @hannesm)
- BREAKING: Remove
mirage build
subcommand, usedune build
in Makefile
(#1404 @hannesm), put--profile release
in Makefile instead of
dune-workspace (#1470 @hannesm) - Increase dune version to 2.9 in generated dune-project (#1443 @samoht)