NumericalOS

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"]},
]