From 3385caea19a7303526144ea88aa7d1d8eeeedd75 Mon Sep 17 00:00:00 2001 From: swrup Date: Sun, 2 Nov 2025 14:16:38 +0100 Subject: [PATCH] --- .gitignore | 15 ++++---- .ocamlformat-ignore | 3 +- Makefile | 64 +++++++++++++++++++++++++++++++++++ data/tls/certificates/foo | 29 ++++++++++++++++ data/tls/keys/foo | 52 ++++++++++++++++++++++++++++ dune-project | 7 ++++ dune-workspace | 5 +++ src/dune | 5 ++- src/mte.ml | 1 + unikernel/config.ml | 14 ++++---- {src => unikernel}/connect.ml | 0 {src => unikernel}/server.ml | 0 unikernel/unikernel.ml | 3 +- 13 files changed, 179 insertions(+), 19 deletions(-) create mode 100644 Makefile create mode 100644 data/tls/certificates/foo create mode 100644 data/tls/keys/foo create mode 100644 dune-project create mode 100644 dune-workspace create mode 100644 src/mte.ml rename {src => unikernel}/connect.ml (100%) rename {src => unikernel}/server.ml (100%) diff --git a/.gitignore b/.gitignore index 0e6da31d..26691f24 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ _build/ -mirage/ -dist/ -dune.build -dune.config -dune-project -dune-workspace -duniverse/ +data/tls/* +unikernel/mirage/ +unikernel/dist/ +unikernel/dune.build +unikernel/dune.config +unikernel/dune-project +unikernel/dune-workspace +unikernel/duniverse/ diff --git a/.ocamlformat-ignore b/.ocamlformat-ignore index adfe12f6..1321bd1f 100644 --- a/.ocamlformat-ignore +++ b/.ocamlformat-ignore @@ -1 +1,2 @@ -dist/dune +unikernel/dist/* +unikernel/mirage/* diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..31b40978 --- /dev/null +++ b/Makefile @@ -0,0 +1,64 @@ +# Generated by mirage.v4.10.3 + +-include Makefile.user +BUILD_DIR = unikernel/ +MIRAGE_DIR = unikernel/mirage +UNIKERNEL_NAME = mte-unix +OPAM = opam + +all:: + @$(MAKE) --no-print-directory depends + @$(MAKE) --no-print-directory build + +.PHONY: all lock install-switch pull clean depend depends build repo-add repo-rm depext-lockfile + +repo-add: + @printf "\033[2musing overlay repository mirage: [opam-overlays, mirage-overlays] \033[0m\n" + $(OPAM) repo add opam-overlays https://github.com/dune-universe/opam-overlays.git || $(OPAM) repo set-url opam-overlays https://github.com/dune-universe/opam-overlays.git + $(OPAM) repo add mirage-overlays https://github.com/dune-universe/mirage-opam-overlays.git || $(OPAM) repo set-url mirage-overlays https://github.com/dune-universe/mirage-opam-overlays.git + + +repo-rm: + @printf "\033[2mremoving overlay repository [opam-overlays, mirage-overlays]\033[0m\n" + $(OPAM) repo remove opam-overlays https://github.com/dune-universe/opam-overlays.git + $(OPAM) repo remove mirage-overlays https://github.com/dune-universe/mirage-opam-overlays.git + + + +depext-lockfile: $(MIRAGE_DIR)/$(UNIKERNEL_NAME).opam.locked + echo " ↳ install external dependencies for monorepo" + env OPAMVAR_monorepo="opam-monorepo" $(OPAM) monorepo depext -y -l $< + + +$(MIRAGE_DIR)/$(UNIKERNEL_NAME).opam.locked: $(MIRAGE_DIR)/$(UNIKERNEL_NAME).opam + @$(MAKE) -s repo-add + @echo " ↳ generate lockfile for monorepo dependencies" + @env OPAMVAR_monorepo="opam-monorepo" $(OPAM) monorepo lock --require-cross-compile --build-only $(UNIKERNEL_NAME) -l $@ --ocaml-version $(shell ocamlc --version); (ret=$$?; $(MAKE) -s repo-rm && exit $$ret) + +lock:: + @$(MAKE) -B $(MIRAGE_DIR)/$(UNIKERNEL_NAME).opam.locked + @echo "The lock file has been generated. Run 'make pull' to retrieve the sources, or 'make install-switch' to install the host dependencies." + +pull:: $(MIRAGE_DIR)/$(UNIKERNEL_NAME).opam.locked + @echo " ↳ fetch monorepo dependencies in the duniverse folder" + @env OPAMVAR_monorepo="opam-monorepo" $(OPAM) monorepo pull -l $< -r $(abspath $(BUILD_DIR)) + @echo "The sources have been pulled to the duniverse folder. Run 'make build' to build the unikernel." + +install-switch:: $(MIRAGE_DIR)/$(UNIKERNEL_NAME).opam + @echo " ↳ opam install switch dependencies" + @$(OPAM) install $< --deps-only --yes + @$(MAKE) -s depext-lockfile + @echo "The dependencies have been installed. Run 'make build' to build the unikernel." + +depends depend:: + @$(MAKE) --no-print-directory lock + @$(MAKE) --no-print-directory install-switch + @$(MAKE) --no-print-directory pull + +build:: + dune build --profile release --root . $(BUILD_DIR)dist + @echo "Your unikernel binary is now ready in $(BUILD_DIR)dist/mte" + @echo "Execute the binary using solo5-hvt, solo5-spt, xl, ..." + +clean:: + mirage clean diff --git a/data/tls/certificates/foo b/data/tls/certificates/foo new file mode 100644 index 00000000..88c29aaf --- /dev/null +++ b/data/tls/certificates/foo @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIIFCTCCAvGgAwIBAgIUUp422si1gzlGmuSbNt/IbyqVHDswDQYJKoZIhvcNAQEL +BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI1MTEwMjEzNDgyNloXDTI2MTEw +MjEzNDgyNlowFDESMBAGA1UEAwwJbG9jYWxob3N0MIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA1eDcxghLWnVudmWyMzSYUOm2wLlekm963e4gFQwuiprv +ICI/+4vdrgoyjfpU1NH0QKMpcWz7uBOgi2mVtE/5Car8LU1DQ4qNgz08KSM1LH4U +S0Cia2DwANyjJk0OgfaXnxSS35mFe0jyfIxF9GPQw+Ic8BKvJbe+DyrSz/U/kQEw +AgytX33KtV5HU2XQ8ggYedp1QRs9OHllDfDXmzQ46Ejxp94dB1KjW+AzqVG9Wcep +cM2/6nWQjkjCGLBC/9qgO3vVy/INDC+VMoA2vteR313RK52HVsDstSwGgHvU1UaE +XLnzxnmDgbNI8tQeWtB6pK8IqFoBSCBVUz8RPC5nkw+ybaGZTn0jWEg+3ZMio0oS +3hBqOYrEQIv0ycXbOTX2psm8FmBXb2Ulo0DDcTM/zQF+twKGKRt104kOJR43h5Gc +kstUGnKUbXNV7SDfnp/fWr5jlBb8whSYBnK4oOk69+iZTei3Q3vBrA7oJALQ7g/6 +XtaBjw+8naw7NbTH79+y1YIjpymJ38ALn2MUbjZxmNKSAg5I9+q/qgHuH5T1P2Dj +MS+BFswUgyH9XN8MW/PIYqmTiIyQMtioJzFdj3UOPg9XuhwYF2yMJYvGPk3Angjg +EeANvtFjFIeAPkyU7VAlutHzVPLFo9j9xLaCgo2j+yCPuxyENcet7JgTg81SR3sC +AwEAAaNTMFEwHQYDVR0OBBYEFDJbiGe4Utk+94CLrJ2EgdXsU0mLMB8GA1UdIwQY +MBaAFDJbiGe4Utk+94CLrJ2EgdXsU0mLMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI +hvcNAQELBQADggIBALWxYiTZnlFChpP/3C+0FeNfa46KkNhTw0oj3B9DaoWkOX4l +/lOjDaa6J57z344zzk9OfzPcMXdDXln+E5fre/Kn44F6Q6NcYl+8T1Le9pp9JNu5 +iIuMlY3wWlR9i1gTxcReJq51HkBggguLl8wwHMkEV2pICHVZeyFh6BqnuJLjVI1U +dmgAKmVE6AdOa/NQWFCBufseuAW6fVSTyfJxUmnQfr2twXyvx/Wr2PbPVYCFSPgw +eRR1OqGEIve6aTp6wQKC/zSq3AiHUi3mBidZvAFNGz2NDfMsWM/jyMeBOARvmDg8 +gnSOll5YCcC67NJhswOnLUlSiMOU9V+wp+i+2btSBSOsjCVKgZpkDP4xGlCTyV8P +HDeKi004uPUfKlldThZ23xNzVmYA/mSYqtJJbs+z78GWNNNwArVGjeH7i1dTRb3q +AOJKY4aMCgE3NgY8LoKfraVHaCQiWZJvHgbqO1PEXO6oyGRb9uw2jP3b0IHPRXEx +dlSA1SKjvnhSW0fpphZLz0o5FF/HQ7mB1IDsMau2uvPV/twu+7XH6L3fxWz9iwy8 +hbFHbfXqYYsRh1FkiYIIsCFRIIOYu3Y2Wgr3QUJHFRK+NQJa9ocrD5r8nXZh1Yuk +tN6iqEBxYcHeELSNxvvTzvGRl1l9iA2j+gxk+QmurF1/TILMSCyT6M2CXjA+ +-----END CERTIFICATE----- diff --git a/data/tls/keys/foo b/data/tls/keys/foo new file mode 100644 index 00000000..9fd92a0d --- /dev/null +++ b/data/tls/keys/foo @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +/cjHydhsWxZPc51A5G0iik/ehIQcOA== +-----END PRIVATE KEY----- diff --git a/dune-project b/dune-project new file mode 100644 index 00000000..e06b4ae5 --- /dev/null +++ b/dune-project @@ -0,0 +1,7 @@ +(lang dune 2.9) + +(name mte-unix) + +(implicit_transitive_deps true) + +;; Generated by mirage.v4.10.3 diff --git a/dune-workspace b/dune-workspace new file mode 100644 index 00000000..9f714f25 --- /dev/null +++ b/dune-workspace @@ -0,0 +1,5 @@ +(lang dune 2.9) + +(context (default)) + +;; Generated by mirage.v4.10.3 diff --git a/src/dune b/src/dune index 9bceb10f..5bbd0b24 100644 --- a/src/dune +++ b/src/dune @@ -1,5 +1,4 @@ (library - (wrapped false) (name mte) - (public_name mte) - (libraries logs hxd.core hxd.string)) + (wrapped false) + (libraries logs)) diff --git a/src/mte.ml b/src/mte.ml new file mode 100644 index 00000000..06ce6388 --- /dev/null +++ b/src/mte.ml @@ -0,0 +1 @@ +let uuu = "uuu" diff --git a/unikernel/config.ml b/unikernel/config.ml index 830a9ed1..2a6c4b87 100644 --- a/unikernel/config.ml +++ b/unikernel/config.ml @@ -5,8 +5,8 @@ type conn = Connect let conn = typ Connect -let minipaf = - main "Unikernel.Make" +let mte = + main "Unikernel.Make" ~local_libs:[ "mte" ] ~packages: [ package "digestif"; package ~min:"0.0.9" "mimic-happy-eyeballs"; @@ -27,8 +27,11 @@ let stackv4v6 = generic_stackv4v6 default_network let tcpv4v6 = tcpv4v6_of_stackv4v6 stackv4v6 let he = generic_happy_eyeballs stackv4v6 let dns = generic_dns_client stackv4v6 he -let certificates = crunch "data/tls/certificates" -let keys = crunch "data/tls/keys" + +(* note: if crunch says that directory doesn't exists, it may be because + it's empty and you need to run gen_tls.sh *) +let certificates = crunch "../data/tls/certificates" +let keys = crunch "../data/tls/keys" let conn = let happy_eyeballs = mimic_happy_eyeballs stackv4v6 he dns in @@ -38,5 +41,4 @@ let port = Runtime_arg.create ~pos:__POS__ "Unikernel.port" let http_server = paf_server ~port tcpv4v6 let () = - register "minipaf" - [ minipaf $ certificates $ keys $ tcpv4v6 $ conn $ http_server ] + register "mte" [ mte $ certificates $ keys $ tcpv4v6 $ conn $ http_server ] diff --git a/src/connect.ml b/unikernel/connect.ml similarity index 100% rename from src/connect.ml rename to unikernel/connect.ml diff --git a/src/server.ml b/unikernel/server.ml similarity index 100% rename from src/server.ml rename to unikernel/server.ml diff --git a/unikernel/unikernel.ml b/unikernel/unikernel.ml index 25f9d31c..3240533e 100644 --- a/unikernel/unikernel.ml +++ b/unikernel/unikernel.ml @@ -1,11 +1,10 @@ open Rresult open Lwt.Infix open Cmdliner -open Mte let port = let doc = Arg.info ~doc:"Port of HTTP service." [ "p"; "port" ] in - Arg.(value & opt int 8080 doc) + Arg.(value & opt int 3434 doc) let use_tls = let doc =