changed a year ago
Published Linked with GitHub

Building mirage-www unikernel on Ubuntu 22.04 LTS

  1. Clone the mirage-www repository on the Raspberry Pi:
$ git clone https://github.com/mirage/mirage-www.git
  1. Update opam:
$ sudo bash -c "sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)"
$ opam init
$ opam update && opam upgrade
$ opam switch create 4.14.0 ocaml-base-compiler.4.14.0
  1. Install mirage:
$ opam repo add mirage-dev https://github.com/mirage/mirage-dev.git
$ opam install "mirage>=4.0.0"
  1. Configure the unikernel:
$ cd mirage-www
$ mirage configure -f mirage/config.ml -t hvt
  1. Pin tailwind css:
$ opam pin git+https://github.com/tmattio/opam-tailwindcss.git
  1. Fetch the dependencies:
$ make depends

Answer yes to Opam plugin “monorepo” may require upgrading/reinstalling. Reinstall the plugin on the current switch? [Y/n] y.

  1. Build the unikernel:
$ dune build mirage/
  1. Expose port 80 in the iptables firewall:
$ sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 10.0.0.2:80

You can also add the above iptables entry to bridge.sh script so that everytime you reboot and run bridge.sh script, the firewall is updated.

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 10.0.0.2:80

If running on your computer, create the tap0 interface:

$ sudo ip tuntap add tap0 mode tap 
$ sudo ip addr add 10.0.0.1/24 dev tap0
$ sudo ip link set dev tap0 up
  1. Run bridge.sh script
$ sudo ~/bridge.sh
  1. Run the mirage-www unikernel:
$ solo5-hvt --net:service=tap0 -- ./mirage/dist/www.hvt --ipv4-gateway=10.0.0.1 

You can open a browser on your system/laptop with IP address of the Raspberry Pi and default port 80, and you should be able to see the mirage-www htdocs.

Reference

  1. MirageOS Unikernel. https://github.com/mirage/mirage-www/#mirageos-unikernel
Select a repo