Update channel
Component furcate
This is for machines.
A Furcate node points furcate update here, reads a manifest, and merges the image only if the digest it fetched matches the digest the manifest declared. Nothing is installed on the strength of the channel being reachable.
01
Two files, and a digest that decides.
Contract. What a machine fetches.
$ curl -fsS https://updates.furcate.org/furcate/manifest
version=1.0.58-bdfdf5b
sha256=7c6c10c1d6ca2a4ee45a06bb6f797fea65bb8ae89a304666fa69b5c3cc8c2a04
# then, only if that version differs from the installed one:
$ curl -fsS -o staged.raw \
https://updates.furcate.org/furcate/furcate-1.0.58-bdfdf5b.raw
# the image is merged only if its sha256 matches the manifest.
# if it does not, the machine is left exactly as it was.
What is signed, and what is not
The image this channel serves is the signed release: a dm-verity image whose root hash is signed by a key held in a TPM, the same image published on downloads. A machine that trusts the release certificate will not merge it if a single byte has changed, whichever way it arrived. The manifest is not signed yet: which version to fetch, and the digest to expect, rest on the TLS connection that served it.