Updates

Pushing updates

Source UPDATING.md Synced 2026-10-07 · b38e70a

Run everything from the project root: C:\Users\ctris\OneDrive\Desktop\XerisOS\XerisOS-fixed


Push an update to the server (interactive — use this)#

.\release.ps1                 whole OS
.\release.ps1 kernel          kernel only
.\release.ps1 data CHROME.ELF one runtime file

Shows the current version, asks for the new one, saves it to version.h, then builds + signs + uploads to R2. Type y at the confirm prompt.

Which type do I use?#

What you changed Command
A kernel source (syscall.c, linux_compat.c, any .asm, the updater code, a header) .\release.ps1 kernel
One runtime file (CHROME.ELF, a lib, a .pak, a font) .\release.ps1 data <path under build\data_run>
Several runtime files, or not sure .\release.ps1 (full)
boot_uefi.c (the loader) Not an OTA — reflash with make run-usb

Rule of thumb: pick by which output changed. Anything compiled into the kernel → kernel. Runtime files → data/full. Always a new version number (the script handles it) — devices only update when the version changes.


Non-interactive (reads version from version.h; bump it first)#

make -f release.mk full
make -f release.mk kernel
make -f release.mk data FILE=locales\en-US.pak
make -f release.mk verify      HEAD the live manifest (expect HTTP 200)
make -f release.mk clean-rel   delete payload\ and out\
make -f release.mk upload      re-upload whatever is already in out\

Server settings (URL, signing key, bucket) live at the top of release.mk: UPDATE_URL, KEY, BUCKET. Override any on the command line.


Make a bootable USB (no server involved)#

mingw32-make run-usb        Full OS on a stick — boot the Beelink straight off it.
mingw32-make installer-usb  Installer stick — boot it, pick a disk, installs to the
                            internal disk.

Both stage a lean image via tools/stage_image.ps1: the kernel, loader, A/B slots, the Ari model, XerisOS apps + fonts, and the MediaTek Wi-Fi firmware — but no CHROME.ELF, no Widevine, no NVIDIA firmware, no Linux userland. The browser and any non-free driver firmware download on first use (see category0/docs/RUNTIME_COMPONENTS.md).

Before building, make sure:

  • build/data_run/ exists and holds the XerisOS-owned files the image needs (fonts UI.TTF/Inter, FONTS/, ABOUT, XKBMAP.TXT, XCRAFT.ELF, MIN.ELF). It no longer needs CHROME.ELF or the browser libs.
  • the Ari model chunks are in the project root: mingw32-make export_model MODEL_CHECKPOINT=..\ari_6.6b_eval_v3.pt MODEL_TOKENIZER=..\xeris_tokenizer.json (skip if you want a no-Ari stick).
  • for a release stick, host the browser bundle and generate a signed manifest first (the OS refuses an unsigned one): mingw32-make -f tools/component.mk web then mingw32-make -f tools/component.mk components-manifest KEY=<your Ed25519 priv>. For a local build test you can skip this — stage_image.ps1 writes a default unsigned COMPONENTS.TXT.

Then copy the contents of the staged folder (build\installer_usb\) to a FAT32 USB stick.


One-time setup (only if not done)#

python tools\xeris_update_keygen.py --priv C:\Users\ctris\keys\xeris_update_private.pem --header src\net\xeris_update_pubkey.h

Generates your signing key and bakes the public half into the OS. Do this once, before the first build. Keep the private key secret and off OneDrive.

This page mirrors the file in the XerisOS repository. Changes go there. Edit on GitHub