You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
bash scripts/vm/build-qcow2.sh # creates output/secai-os.qcow2 and prints the virt-install command
233
+
bash scripts/vm/build-qcow2.sh --ci # runs virt-install unattended on a KVM build runner
234
+
bash scripts/vm/build-ova.sh # converts output/secai-os.qcow2 to output/secai-os.ova
232
235
```
233
236
234
-
Requires a Linux host with `virt-install`, `qemu-img`, and `libvirt`.
237
+
The USB builder uses a digest-pinned bootc-image-builder image by default. VM builds require a Linux host with `virt-install`, `virsh`, `qemu-img`, and `libvirt`.
@@ -312,13 +315,14 @@ All CI jobs are defined in [`.github/workflows/ci.yml`](.github/workflows/ci.yml
312
315
313
316
| Job | Workflow Link | What It Proves |
314
317
|-----|--------------|---------------|
315
-
|`go-build-and-test`|[View job](https://github.com/SecAI-Hub/SecAI_OS/actions/workflows/ci.yml)| 413 Go tests across 9 services with `-race` (build, test, vet) |
316
-
|`python-test`|[View job](https://github.com/SecAI-Hub/SecAI_OS/actions/workflows/ci.yml)| 998 Python tests (unit/integration + adversarial/acceptance), ruff lint, bandit security scan (enforced on HIGH/HIGH), mypy type checking |
318
+
|`go-build-and-test`|[View job](https://github.com/SecAI-Hub/SecAI_OS/actions/workflows/ci.yml)| 428 Go tests across 9 services with `-race` (build, test, vet) |
319
+
|`python-test`|[View job](https://github.com/SecAI-Hub/SecAI_OS/actions/workflows/ci.yml)| 1,132 Python tests (unit/integration + adversarial/acceptance), ruff lint, bandit security scan (enforced on HIGH/HIGH), mypy type checking |
320
+
|`appsec-lint`|[View job](https://github.com/SecAI-Hub/SecAI_OS/actions/workflows/ci.yml)| Hadolint for container build files and Semgrep project security rules |
|`supply-chain-verify`|[View job](https://github.com/SecAI-Hub/SecAI_OS/actions/workflows/ci.yml)| SBOM generation via Syft, cosign availability, provenance keywords in release/build workflows |
319
323
|`test-count-check`|[View job](https://github.com/SecAI-Hub/SecAI_OS/actions/workflows/ci.yml)| Prevents documented test counts from drifting below actual (source of truth: [test-counts.json](docs/test-counts.json)) |
320
324
|`dependency-audit`|[View job](https://github.com/SecAI-Hub/SecAI_OS/actions/workflows/ci.yml)| Enforced Go vulnerability scanning (govulncheck) + Python dependency audit (pip-audit) with [waiver mechanism](.github/vuln-waivers.json)|
321
-
|`shellcheck`|[View job](https://github.com/SecAI-Hub/SecAI_OS/actions/workflows/ci.yml)| Static analysis of all shell scripts (first-boot, build, verify-release, etc.) |
325
+
|`shellcheck`|[View job](https://github.com/SecAI-Hub/SecAI_OS/actions/workflows/ci.yml)| Static analysis of production shell entrypoints (first-boot, service build, MOK generation, verify-release, etc.) |
322
326
|`policy-validate`|[View job](https://github.com/SecAI-Hub/SecAI_OS/actions/workflows/ci.yml)| YAML schema validation for all policy and recipe files |
323
327
|`check-pins`|[View job](https://github.com/SecAI-Hub/SecAI_OS/actions/workflows/ci.yml)| Verifies all GitHub Actions are pinned to specific commit SHAs (not tags) |
324
328
|`docs-validation`|[View job](https://github.com/SecAI-Hub/SecAI_OS/actions/workflows/ci.yml)| Broken link detection, required docs presence, test-counts.json format validation |
@@ -334,7 +338,7 @@ All CI jobs are defined in [`.github/workflows/ci.yml`](.github/workflows/ci.yml
334
338
|[API Reference](docs/api.md)| HTTP API for all services |
335
339
|[Policy Schema](docs/policy-schema.md)| Full policy.yaml schema reference |
336
340
|[Security Status](docs/security-status.md)| Implementation status of all 54 milestones |
337
-
|[Test Matrix](docs/test-matrix.md)| Test coverage: 1,411 tests across Go and Python (see [test-counts.json](docs/test-counts.json)) |
341
+
|[Test Matrix](docs/test-matrix.md)| Test coverage: 1,560 tests across Go and Python (see [test-counts.json](docs/test-counts.json)) |
338
342
|[Compatibility Matrix](docs/compatibility-matrix.md)| GPU, VM, and hardware support |
339
343
|[Security Test Matrix](docs/security-test-matrix.md)| Security feature test coverage |
Copy file name to clipboardExpand all lines: docs/install/dev.md
+6-6Lines changed: 6 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,7 +7,7 @@ This guide covers running SecAI OS services locally for development and testing,
7
7
## Prerequisites
8
8
9
9
-**Go 1.25+** for building Go services
10
-
-**Python 3.11+** for running Python services (quarantine, UI, search-mediator)
10
+
-**Python 3.12 recommended** for running Python services. CI and lockfiles use Python 3.12; package metadata still allows Python 3.11 where scanner compatibility requires it.
Copy file name to clipboardExpand all lines: docs/install/quickstart.md
+9-5Lines changed: 9 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,7 +12,7 @@ Get SecAI OS running in the fewest steps possible. Choose the path that fits you
12
12
|**Sandbox Stack**|~10 min | Easy | Evaluate the control plane on an existing workstation |
13
13
|**Development**|~10 min | Easy | Service development only (no OS features) |
14
14
15
-
> **Note on release media:** The release pipeline builds both an installer ISO and a portable USB image (`*-usb.raw.xz`). Pre-built VM images (OVA/QCOW2) still require build infrastructure not yet provisioned. The bootstrap path remains the recommended production install, but the portable USB artifact is the right choice when you want to boot and evaluate directly from removable media. See [Artifact Availability](#artifact-availability) for details.
15
+
> **Note on release media:** The release pipeline builds both an installer ISO and a portable USB image (`*-usb.raw.xz`). Pre-built VM images (OVA/QCOW2) are optional release artifacts and only appear when the repository has a self-hosted KVM runner configured. The bootstrap path remains the recommended production install, but the portable USB artifact is the right choice when you want to boot and evaluate directly from removable media. See [Artifact Availability](#artifact-availability) for details.
16
16
17
17
---
18
18
@@ -127,14 +127,18 @@ If you want a self-contained VM image without installing Fedora first, you can b
# Create the QCOW2 disk and a signed-first kickstart.
131
+
# The script prints the virt-install command to complete the install.
131
132
bash scripts/vm/build-qcow2.sh
132
133
133
-
# Optionally convert to OVA for VirtualBox/VMware
134
+
# On a self-hosted KVM runner, run the install unattended.
135
+
bash scripts/vm/build-qcow2.sh --ci
136
+
137
+
# After the QCOW2 install completes, optionally convert to OVA for VirtualBox/VMware.
134
138
bash scripts/vm/build-ova.sh
135
139
```
136
140
137
-
The build scripts pull the signed OCI image and create a bootable disk with root + encrypted vault partitions. Credentials are randomly generated and printed at build time.
141
+
The QCOW2 builder installs the SecAI signing policy in the kickstart before the first image pull and rebases with `ostree-image-signed:docker://`. It creates root + encrypted vault partitions, writes the temporary kickstart with mode `0600`, and randomly generates temporary VM/vault credentials that are printed at build time. Change those credentials immediately after first boot.
138
142
139
143
**2. Start the VM**
140
144
@@ -238,7 +242,7 @@ make verify-release
238
242
|**ISO signature**|[GitHub Releases](https://github.com/SecAI-Hub/SecAI_OS/releases/latest)|`.iso.sig` file for verification |
239
243
|**Portable USB image**| Release workflow artifact (90-day retention) | Built in CI as `secai-os-*-usb.raw.xz`; flash directly to removable media |
240
244
|**Portable USB signature**|[GitHub Releases](https://github.com/SecAI-Hub/SecAI_OS/releases/latest)|`.raw.xz.sig` file for verification |
|**QCOW2 / OVA**|Release workflow artifact when `HAS_KVM_RUNNER=true`, or `scripts/vm/build-qcow2.sh` / `build-ova.sh`locally | Optional; CI build requires self-hosted KVM runner |
242
246
243
247
The installer ISO and portable USB image are produced by every tagged release and are available as [workflow artifacts](https://github.com/SecAI-Hub/SecAI_OS/actions/workflows/release.yml) with 90-day retention. Their cosign signatures are published to GitHub Releases for verification. For permanent hosting, an external storage solution is still needed.
0 commit comments