1- # Quick Start
1+ # Installation
22
3- This document provides the quickest start available to get Hyper running.
3+ This document walks through a full installation of Hyper on a node. For the
4+ fastest dev/eval path, see the [ quickstart] ( quickstart.md ) , which automates
5+ this guide via ` setup.sh ` .
46
57## Configuration
68
@@ -67,8 +69,8 @@ sudo dnf install -y \
6769
6870### Build Toolchain
6971
70- Hyper compiles two Rust components as part of ` mix compile ` — the setuid
71- helper and the in-guest agent — and generates its Firecracker/gRPC bindings
72+ Hyper compiles two Rust components as part of ` mix compile ` -- the setuid
73+ helper and the in-guest agent -- and generates its Firecracker/gRPC bindings
7274from the shipped specs. Every machine that ** compiles** Hyper (including as a
7375Mix dependency) therefore needs, besides Elixir ` ~> 1.20 ` on OTP 28+:
7476
@@ -84,7 +86,7 @@ sudo apt install -y protobuf-compiler # dnf install protobuf-compiler
8486mix escript.install hex protobuf 0.17.0
8587```
8688
87- ` ~/.mix/escripts ` does not need to be on your ` PATH ` — the build finds
89+ ` ~/.mix/escripts ` does not need to be on your ` PATH ` -- the build finds
8890` protoc-gen-elixir ` there itself.
8991
9092### Device Mapper Config
@@ -299,14 +301,14 @@ as this user; every operation that genuinely needs root is routed through the
299301setuid helper (see [SUID Helper](#suid-helper)), so the node itself never holds
300302privilege.
301303
302- Create the user — system account, no login shell:
304+ Create the user -- system account, no login shell:
303305
304306```sh
305307sudo useradd --system --shell /usr/sbin/nologin --home-dir /srv/hyper hyper
306308```
307309
308310Start Hyper as this user (for example `sudo -u hyper ...`, or `User=hyper` in a
309- systemd unit). The rest of this section covers the few permissions it needs —
311+ systemd unit). The rest of this section covers the few permissions it needs --
310312and the ones it deliberately does **not**.
311313
312314#### Working directory
@@ -315,7 +317,7 @@ The node builds its entire on-disk tree (`jails`, `socks`, `scratch`, `layers`,
315317`redist`) under `work_dir` (from `/etc/hyper/config.toml`, default `/srv/hyper`)
316318**as this user**. It must therefore own that directory. Boot validation
317319(`Hyper.Node.Layer.Repo.test_system/0`) refuses to start unless the `layers`
318- subdirectory already exists — the node only creates it lazily on first image
320+ subdirectory already exists -- the node only creates it lazily on first image
319321load, so pre-create it now:
320322
321323```sh
340342```
341343
342344Then `mix deps.get && mix compile`. Alternatively, work from a source
343- checkout of the [repository](https://github.com/harmont-dev/hyper) — every
345+ checkout of the [repository](https://github.com/harmont-dev/hyper) -- every
344346step below is identical.
345347
346348### Firecracker
@@ -354,7 +356,7 @@ mix firecracker.install # installs to /opt/firecracker
354356```
355357
356358The task installs the binaries under their bare basenames (`firecracker`,
357- `jailer` — the setuid helper rejects version-stamped names), marks them
359+ `jailer` -- the setuid helper rejects version-stamped names), marks them
358360executable, and prints the `[tools]` snippet for `/etc/hyper/config.toml`.
359361After installing, make both binaries root-owned and not group- or
360362world-writable (the task prints the exact `chown` command); the helper refuses
@@ -373,7 +375,7 @@ operations. This is achieved through a side-car binary called
373375> build produced**: `mix compile` stamps the helper with a BLAKE3 checksum and
374376> bakes that identity into the release, and a deployed helper whose version or
375377> checksum differs is refused. A binary from another machine or build will not
376- > pass — always install the helper from the same tree you compiled.
378+ > pass -- always install the helper from the same tree you compiled.
377379
378380Build and install it with:
379381
@@ -394,7 +396,7 @@ sudo install -o root -g root -m 4755 \
394396
395397With PostgreSQL reachable (see above) and your database credentials configured
396398(see the [configuration guide](config.md)), create and migrate the image
397- database — once per cluster, from any node:
399+ database -- once per cluster, from any node:
398400
399401```sh
400402mix ecto.create -r Hyper.Img.Db.Repo
@@ -403,7 +405,7 @@ mix ecto.migrate -r Hyper.Img.Db.Repo
403405
404406## Booting
405407
406- Start your application as the `hyper` user — Hyper' s supervision tree boots
408+ Start your application as the `hyper` user -- Hyper' s supervision tree boots
407409with it and the node becomes a VM runner. From a source checkout, an
408410interactive session is the quickest smoke test:
409411
@@ -414,7 +416,7 @@ sudo -u hyper iex -S mix
414416At boot Hyper validates the node: config file ownership, the setuid helper's
415417build identity, and the device-mapper targets. A misconfigured node refuses to
416418start with a specific error rather than limping along. Once up, load an image
417- and boot a VM — see the [ intro] ( intro.md#usage ) for the walkthrough.
419+ and boot a VM -- see the [ intro] ( intro.md#usage ) for the walkthrough.
418420
419421For production, run it under a supervisor of your choice (e.g. a systemd unit
420422with ` User=hyper ` ). Nodes that join the BEAM cluster become additional VM
0 commit comments