Updates
Pushing updates
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 webthenmingw32-make -f tools/component.mk components-manifest KEY=<your Ed25519 priv>. For a local build test you can skip this —stage_image.ps1writes a default unsignedCOMPONENTS.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.