Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/edda

crates/nornir-build-thing/tests/fixtures/heimdall-kernel-runtime-needs.json

{
  "schema": "nornir.kernel-runtime-needs/1",
  "producer": "heimdall 0.3.1",
  "mode": "strict",
  "needs": [
    {
      "symbol": "CONFIG_SECCOMP",
      "value": "y",
      "op": "set",
      "needed_by": "strict",
      "feature": "seccomp_filter",
      "reason": "Heimdall strict: every job runs under a seccomp filter (SECCOMP_RET_KILL_PROCESS); without it the runner refuses to start"
    },
    {
      "symbol": "CONFIG_SECCOMP_FILTER",
      "value": "y",
      "op": "set",
      "needed_by": "strict",
      "feature": "seccomp_filter",
      "reason": "Heimdall strict: the job's profile is a BPF filter (SECCOMP_SET_MODE_FILTER), and the broker's USER_NOTIF listener hangs off it"
    },
    {
      "symbol": "CONFIG_MULTIUSER",
      "value": "y",
      "op": "set",
      "needed_by": "strict",
      "feature": "landlock",
      "reason": "Heimdall strict: SECURITY and NAMESPACES depend on MULTIUSER (security/Kconfig, init/Kconfig)"
    },
    {
      "symbol": "CONFIG_SECURITY",
      "value": "y",
      "op": "set",
      "needed_by": "strict",
      "feature": "landlock",
      "reason": "Heimdall strict: the LSM menu Landlock hangs off (security/Kconfig)"
    },
    {
      "symbol": "CONFIG_SECURITY_LANDLOCK",
      "value": "y",
      "op": "set",
      "needed_by": "strict",
      "feature": "landlock",
      "reason": "Heimdall strict: every job is restricted with Landlock (filesystem and network rules no root inside the job can widen); without it the runner refuses to start"
    },
    {
      "symbol": "CONFIG_LSM",
      "value": "landlock",
      "op": "list_contains",
      "needed_by": "strict",
      "feature": "landlock",
      "reason": "Heimdall strict: Landlock must be in the LSM boot order by name (`landlock` in CONFIG_LSM or lsm=), or the kernel has it built and never starts it"
    },
    {
      "symbol": "CONFIG_CGROUPS",
      "value": "y",
      "op": "set",
      "needed_by": "strict",
      "feature": "cgroup_v2",
      "reason": "Heimdall strict: every job's limits are a cgroup v2 cgroup under the runner's parent"
    },
    {
      "symbol": "CONFIG_MEMCG",
      "value": "y",
      "op": "set",
      "needed_by": "strict",
      "feature": "cgroup.memory",
      "reason": "Heimdall strict: memory.max and memory.swap.max, the job's memory limit"
    },
    {
      "symbol": "CONFIG_CGROUP_PIDS",
      "value": "y",
      "op": "set",
      "needed_by": "strict",
      "feature": "cgroup.pids",
      "reason": "Heimdall strict: pids.max, the job's process limit (a fork bomb ends there)"
    },
    {
      "symbol": "CONFIG_CGROUP_SCHED",
      "value": "y",
      "op": "set",
      "needed_by": "strict",
      "feature": "cgroup.cpu",
      "reason": "Heimdall strict: the cpu controller cpu.max hangs off"
    },
    {
      "symbol": "CONFIG_FAIR_GROUP_SCHED",
      "value": "y",
      "op": "set",
      "needed_by": "strict",
      "feature": "cgroup.cpu",
      "reason": "Heimdall strict: the CFS group the job's cpu quota is accounted on"
    },
    {
      "symbol": "CONFIG_CFS_BANDWIDTH",
      "value": "y",
      "op": "set",
      "needed_by": "strict",
      "feature": "cgroup.cpu",
      "reason": "Heimdall strict: cpu.max, the job's cpu quota"
    },
    {
      "symbol": "CONFIG_NAMESPACES",
      "value": "y",
      "op": "set",
      "needed_by": "strict",
      "feature": "user_namespaces",
      "reason": "Heimdall strict: every job is a container in its own namespaces"
    },
    {
      "symbol": "CONFIG_USER_NS",
      "value": "y",
      "op": "set",
      "needed_by": "strict",
      "feature": "user_namespaces",
      "reason": "Heimdall strict: the job's root maps to one unprivileged host id; without user namespaces the runner refuses to start"
    },
    {
      "symbol": "CONFIG_PID_NS",
      "value": "y",
      "op": "set",
      "needed_by": "job",
      "feature": "job.namespaces",
      "reason": "every job's container has its own pid namespace (heimdall-plain spec.rs): it sees only itself, a kill reaches all of it"
    },
    {
      "symbol": "CONFIG_SYSVIPC",
      "value": "y",
      "op": "set",
      "needed_by": "job",
      "feature": "job.namespaces",
      "reason": "IPC_NS depends on SYSVIPC or POSIX_MQUEUE (init/Kconfig)"
    },
    {
      "symbol": "CONFIG_IPC_NS",
      "value": "y",
      "op": "set",
      "needed_by": "job",
      "feature": "job.namespaces",
      "reason": "every job's container has its own ipc namespace (heimdall-plain spec.rs)"
    },
    {
      "symbol": "CONFIG_UTS_NS",
      "value": "y",
      "op": "set",
      "needed_by": "job",
      "feature": "job.namespaces",
      "reason": "every job's container has its own uts namespace (heimdall-plain spec.rs)"
    },
    {
      "symbol": "CONFIG_NET",
      "value": "y",
      "op": "set",
      "needed_by": "job",
      "feature": "job.namespaces",
      "reason": "NET_NS depends on NET (net/Kconfig)"
    },
    {
      "symbol": "CONFIG_NET_NS",
      "value": "y",
      "op": "set",
      "needed_by": "job",
      "feature": "job.namespaces",
      "reason": "every job's container has its own, empty network namespace (heimdall-plain spec.rs)"
    },
    {
      "symbol": "CONFIG_TMPFS",
      "value": "y",
      "op": "set",
      "needed_by": "job",
      "feature": "job.mounts",
      "reason": "every job's /tmp is a capped tmpfs (heimdall-plain spec.rs)"
    },
    {
      "symbol": "CONFIG_CROSS_MEMORY_ATTACH",
      "value": "y",
      "op": "set",
      "needed_by": "broker",
      "feature": "broker.read_args",
      "reason": "the broker reads a job's call arguments with process_vm_readv(2) (heimdall-broker sys.rs); tinyconfig leaves it off"
    }
  ]
}