numos/seed.py
back to source
"""Seed data for the NumericalOS graph quartet.
ARCH_TARGETS is the multi-arch registry. zig_triple is None where no static
build is published yet; the busybox fallback carries those arches, which is
the mechanism by which "all chip infrastructures" stays honest.
"""
def _arch(canonical, aliases, zig_triple, busybox_variant):
return {"canonical": canonical, "aliases": aliases, "zig_triple": zig_triple,
"busybox_variant": busybox_variant, "artifact_sha256": None}
ARCH_TARGETS = [
_arch("x86_64", ["x86_64", "amd64"], "x86_64-linux-musl", "busybox-x86_64"),
_arch("aarch64", ["aarch64", "arm64"], "aarch64-linux-musl", "busybox-aarch64"),
_arch("riscv64", ["riscv64"], "riscv64-linux-musl", "busybox-riscv64"),
_arch("arm", ["arm", "armv7l", "armv6l", "armhf"], "arm-linux-musleabihf", "busybox-armv7l"),
_arch("powerpc64le", ["ppc64le", "powerpc64le"], "powerpc64le-linux-musl", "busybox-ppc64le"),
_arch("s390x", ["s390x"], "s390x-linux-musl", "busybox-s390x"),
_arch("mips64el", ["mips64el"], "mips64el-linux-musl", "busybox-mips64el"),
_arch("x86", ["x86", "i686", "i386"], "x86-linux-musl", "busybox-i686"),
# loongarch64 Zig target availability is confirmed at build time, not asserted
# here. The busybox fallback covers it either way.
_arch("loongarch64", ["loongarch64"], None, "busybox-loongarch64"),
]
def _unit(name, exec_, kind="oneshot", restart="never", requires=None, after=None):
return {"name": name, "kind": kind, "restart": restart,
"backoff_ms": 0 if restart == "never" else 100,
"backoff_max_ms": 0 if restart == "never" else 8000,
"arch_mask": [], "health_probe": None,
"requires": requires or [], "after": after or [], "exec": exec_}
INFRA_UNITS = [
_unit("mount-proc", "mount -t proc proc /proc"),
_unit("mount-sys", "mount -t sysfs sys /sys"),
_unit("mount-dev", "mount -t devtmpfs dev /dev"),
_unit("net-up", "ip link set eth0 up", restart="on-failure",
requires=["mount-sys"]),
_unit("clock-sync", "ntpd -n -q", restart="on-failure", after=["net-up"]),
_unit("identity", "numctl identity-init", requires=["mount-proc"]),
_unit("join", "numctl join", kind="longrun", restart="always",
requires=["identity"], after=["net-up", "clock-sync"]),
]
BOOT_PHASES = [
{"ordinal": 10, "name": "mount", "on_failure": "halt",
"required_units": ["mount-proc", "mount-sys", "mount-dev"]},
{"ordinal": 20, "name": "net", "on_failure": "degrade",
"required_units": ["net-up"]},
{"ordinal": 30, "name": "clock", "on_failure": "continue",
"required_units": ["clock-sync"]},
{"ordinal": 40, "name": "identity", "on_failure": "halt",
"required_units": ["identity"]},
{"ordinal": 50, "name": "join", "on_failure": "degrade",
"required_units": ["join"]},
]