Building from source
Most people should download a release. Build from source to change Antinomie, or to try 0.8.0, which has no release archive yet.
Building the host application does not build a guest kernel or a base image: download, import or build a base from the app afterwards.
Requirements
Section titled “Requirements”| Need | Debian or Ubuntu packages | Why |
|---|---|---|
| Rust | Install with rustup | CI builds with Rust 1.98.1; the crates use the 2024 edition |
| C toolchain | build-essential pkg-config |
The transport client and native dependencies |
| Libraries | libsqlite3-dev libxkbcommon-dev libwayland-dev |
SQLite 3.34.1 or later, and the window system |
| musl | musl-tools |
The compatibility collector for bases built before 0.7.0 |
| Runtime | The packages in Installation | QEMU, curl, bubblewrap, TShark and the other runtime tools |
Use an ext4 workspace.
Build and run
Section titled “Build and run”-
Install the build packages:
Terminal window sudo apt install build-essential pkg-config libsqlite3-dev libxkbcommon-dev libwayland-dev musl-tools -
Clone the repository. For the current release use the
v0.7.1tag; for 0.8.0 use therelease-0.8.0branch:Terminal window git clone --branch v0.7.1 https://github.com/MoreMorePwn/Antinomie.git# or: git clone --branch release-0.8.0 https://github.com/MoreMorePwn/Antinomie.gitcd Antinomie -
Build and start it:
Terminal window ./run.sh
run.sh rebuilds the app when its inputs changed, into
work/monitor-host/antinomie-monitor, then starts it and passes your arguments
on, so ./run.sh --data-dir /tmp/antinomie-test works. ./install.sh in the
checkout builds the app and installs it for your user, as from a release
archive.
The built executable also runs on its own, without Rust installed:
work/monitor-host/antinomie-monitor --data-dir ~/antinomieIt is a dynamically linked Linux executable: it still needs compatible system libraries, a display, QEMU and an installed base.
Checks before a pull request
Section titled “Checks before a pull request”Run the checks CI runs, from the repository root:
scripts/check-privacy.shpython3 -I scripts/check-module-size.pycd src/antinomie/monitorcargo fmt --all -- --checkcargo clippy --release --locked --all-targets -- -D warningscargo test --release --locked --no-fail-fastBuild-script changes also need the matching tests/monitor/test-*.py and
scripts/test-*.py tests, and shell changes shellcheck --severity=error.
Guest and transport changes need a VM: see scripts/vm-regress.py --help and
the conformance suite.
Guest kernels and bases
Section titled “Guest kernels and bases”Bases can be built from the app (Build base…), which is the usual way. To
change the guest kernel itself you also need the kernel build dependencies
(Debian’s kernel packaging tools, gcc-14, pahole and others), BusyBox,
cpio, gzip, e2fsprogs and Python 3.10 or later. From the repository root:
scripts/bootstrap.shscripts/build-monitor-kernel.shscripts/build-monitor-image.py --kernel work/monitor-build/arch/x86/boot/bzImagescripts/build-monitor-host.shscripts/run-monitor.sh --bundle work/debian-6.12.94-1-trixie/images/monitor-baseThe guest patches sit on top of Debian’s kernel packaging and are kept as a portable patch series. The full workflow, patch conventions and maintenance steps are in CONTRIBUTING.md.
Further reading
Section titled “Further reading”- The host build guide
- The project layout: durable source, build outputs and what to keep
- Contributing