Files
bare-operating-system/packages/bare-os-booter/lib/bare-os-boot-graph-proc.js
T
Raven Scott 8f2e3cceb0 Move editable kernel bulk from kernel/init-main.js to kernel/lib/init/
(staged as /lib/init/init-main.js); point bundle-kernel-init and verify
scripts at the new path.

Wire curl, wget, openssl, ssh-keygen, and tar through coreutils and
booter host delegates with booter-side CLI helpers; refresh related
bins, bare manifest, shell completion, and man DB (kernel + seeder).

Add booter support modules for ACL evaluation, audit chain, secret
handles, peer admission, replication priority, process table, swarm
lifecycle, boot-graph proc, metrics, monotonic time, protomux alias
registry, and swarm peer policy; extend extension resolver, VFS,
swarm connection managers, IPC, identity-account, and initd.

Harden bare-os-bare-libs build on esbuild failure; add verify scripts
for extension manifest schema and runtime incomplete markers; extend
ctx API typings, gen-ctx-client-stub, and verify-ctx-dts.

Update boot hook fragment, bundled init.js, handbook and reference
docs (incl. kernel security and VFS path classes).
2026-04-04 17:51:47 -04:00

79 lines
1.9 KiB
JavaScript

/**
* Declarative kernel boot stage graph for `/proc/bare_os/boot_graph.json`.
* Mirrors the default sequence in kernel/init (trusted boot path).
*/
const DEFAULT_BOOT_STAGES = Object.freeze([
'boot.policy',
'os-release',
'motd',
'rc.profile',
'rc',
'rc.d',
'rc.local',
'kernel.d',
'kernel.ext.d',
'onboot',
'session.banner',
'kernel.selftest',
'repl'
])
/**
* @param {{ bootReadyJson?: () => string, stageMsHistogram?: Record<string, number> }} [opts]
*/
export function buildBareOsBootGraphProcJson(opts = {}) {
const nodes = DEFAULT_BOOT_STAGES.map((id, i) => ({
id,
order: i,
bootStage: bootStageForKernelLabel(id)
}))
/** @type {{ from: string, to: string, kind: string }[]} */
const edges = []
for (let i = 0; i < nodes.length - 1; i++) {
edges.push({
from: nodes[i].id,
to: nodes[i + 1].id,
kind: 'sequence'
})
}
let ready = {}
try {
const t =
opts.bootReadyJson && typeof opts.bootReadyJson === 'function'
? opts.bootReadyJson()
: ''
ready = t ? JSON.parse(String(t).trim() || '{}') : {}
} catch {
ready = {}
}
const hist =
opts.stageMsHistogram && typeof opts.stageMsHistogram === 'object'
? opts.stageMsHistogram
: {}
return {
schema: 1,
note: 'Kernel boot stage edges (declarative); latency histogram is populated when journal export is enabled.',
nodes,
edges,
stageMsHistogram: hist,
bootReady: ready,
atMs: Date.now()
}
}
/**
* @param {string} label
*/
function bootStageForKernelLabel(label) {
const s = String(label || '').toLowerCase()
if (s === 'boot.policy') return 'policy'
if (s === 'os-release' || s === 'motd') return 'preflight'
if (s.startsWith('rc') || s === 'kernel.d' || s === 'kernel.ext.d')
return 'rc'
if (s === 'onboot') return 'onboot'
if (s.includes('selftest')) return 'selftest'
if (s.includes('repl') || s.includes('banner')) return 'shell'
return 'other'
}