Skip to content

Releases: z29k/rescriptum

rescriptum v0.3.0

Choose a tag to compare

@github-actions github-actions released this 30 Aug 14:13

What's Changed

  • feat: the whole boot chain, and a directory per identity by @wamxx in #2
  • feat(config): a TOML configuration file, for where a person edits it by hand by @wamxx in #3

Full Changelog: v0.2.0...v0.3.0

rescriptum v0.2.0

Choose a tag to compare

@github-actions github-actions released this 26 Aug 19:43

What's Changed

  • feat(packaging): a Synology DSM 7 package, the ARMv7 target it forced, and a desktop application by @wamxx in #1

New Contributors

  • @wamxx made their first contribution in #1

Full Changelog: v0.1.0...v0.2.0

rescriptum v0.1.0

Choose a tag to compare

@github-actions github-actions released this 25 Aug 08:06

First public release.

rescriptum is an HTTP server that compiles and renders the configuration files for
automated OS installs. Every machine boots the same image and asks the same server, so the
address inside the image cannot be what distinguishes them. What distinguishes them is what
they say when they ask: a MAC address, a serial number, a hardware inventory. rescriptum
reads that, picks the documents that apply, merges them, and returns one configuration for
that one machine.

It answers both shapes of request, on any path. Proxmox VE 8.2 and later POST a JSON
inventory of the hardware they found and expect the answer in the response body; every
other installer GETs with its identity in the query string, because iPXE substitutes it
into the URL before fetching.

Which file to download

Archive For
armv7-unknown-linux-musleabihf Synology DS416j and other ARMv7 NAS
aarch64-unknown-linux-musl modern ARM NAS, Raspberry Pi
x86_64-unknown-linux-musl most Linux hosts
aarch64-apple-darwin, x86_64-apple-darwin local development

The Linux builds are static musl binaries: no runtime, no interpreter, no container. The
ARMv7 one is 2.4 MB.

Verify what you downloaded

This runs as root on the hardware it provisions, so check the archive rather than trusting
it. Each one ships with its SHA-256 sum:

$ shasum -a 256 -c rescriptum-0.1.0-x86_64-unknown-linux-musl.tar.gz.sha256
rescriptum-0.1.0-x86_64-unknown-linux-musl.tar.gz: OK

Getting started

$ RESCRIPTUM_ANSWERS_DIR=/srv/answers ./rescriptum
$ curl http://localhost:8000/health
OK

Then point what you are installing at its own URL — one server answers all of them. The
quick start goes from an empty
directory to a machine receiving its own configuration, and
preparing installer media has the URL to
bake into each ISO, per operating system.

What is in this release

  • Thirteen document formats. Proxmox answer.toml, Ubuntu autoinstall, kickstart,
    preseed, Ignition, AutoYaST, Windows unattend.xml, iPXE scripts. The endpoint declares
    the format, the document carries it as its extension, and only documents of that format
    may answer — so one machine can be a Proxmox node and a Debian node at once.
  • Answers that compose. A group file for what a rack shares, a machine file carrying
    only its difference, extends chains between groups. Maps merge, arrays replace, the
    machine always wins.
  • Selection by identity or by selector. A document named after the machine, a group
    listing it in members, or a [match] block claiming it for what it is. Deterministic:
    naming beats matching, more criteria beat fewer, ties break on sorted name.
  • Templating. fqdn = "node-{{ serial }}.example.com", filled from the request. A
    missing fact is an error, never an empty string.
  • Two stores. A directory of documents, or SQLite — the same behaviour either way, and a
    conformance suite runs every case against both. import and export move between them.
  • An admin API over SQLite, on its own listener, where a write that would break the
    answer set rolls itself back instead.
  • render and check. A merged answer is a document nobody ever wrote, so render
    prints what a given machine would receive and check renders everything and reports what
    breaks, calling the installer's own validator where one is on PATH.

Documentation

https://z29k.github.io/rescriptum/ — in English and
French, with a
development space covering the constraints,
the internals, and the traps.

Full Changelog: https://github.com/z29k/rescriptum/commits/v0.1.0