Skip to content

Releases: mirage/mirage

4.5.0

10 Apr 13:21
88faf8f
Compare
Choose a tag to compare

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
    the Key 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 the Runtime_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 for Key.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.
    • 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/.
    • 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.
    • 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 the connect
        function of that device.
      • Configuration keys are not available at runtime anymore. For
        instance, Key_gen.target has been removed.
  • 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 and functoria-runtime are removed. The
    respectives libraries became mirage.functoria and mirage-runtime.functoria
    (#1509, @samoht)
  • BREAKING: Mirage.keys is renamed to Mirage.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
    (with Mirage.impl) now take values of type 'a Mirage.code instead
    of string. Value of type code are created using a new Mirage.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, use dune 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)

4.4.2

13 Feb 11:00
Compare
Choose a tag to compare

CHANGES:

4.4.1

20 Nov 21:47
Compare
Choose a tag to compare

CHANGES:

4.4.0

20 Jun 08:33
Compare
Choose a tag to compare

CHANGES:

4.3.6

28 Mar 13:48
Compare
Choose a tag to compare

CHANGES:

4.3.5

20 Mar 11:46
Compare
Choose a tag to compare

CHANGES:

Changed

4.3.4

23 Feb 10:19
Compare
Choose a tag to compare

CHANGES:

Fixed

Added

Changed

4.3.3

30 Jan 12:13
Compare
Choose a tag to compare

CHANGES:

Fixed

  • add (merlin) to the dune-workspace file -- this allows merlin to properly work
    with unikernels (#1385, fixes #1384 @TheLortex @hannesm)
  • add "build" stanzas to packages that are supposed to be vendored (#1383,
    @Leonidas-from-XIV) for "opam-monorepo 0.3.5" compatibility

Changed

4.3.2

12 Dec 14:30
Compare
Choose a tag to compare

CHANGES:

Fixed

  • use "printf" instead of "echo -e" in Makefiles for macOS support (#1370,
    @gridbugs)

Changed

Added

4.3.1

25 Oct 15:48
Compare
Choose a tag to compare

CHANGES:

Fixed

Changed

  • mirage-runtime: use Logs.level_of_string / level_to_string, avoid manual
    construction of Cmdliner.Arg.conv types (use the Cmdliner.Arg.conv function
    instead) (#1358, @hannesm)

Added