Skip to content

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.

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.

  1. Install the build packages:

    Terminal window
    sudo apt install build-essential pkg-config libsqlite3-dev libxkbcommon-dev libwayland-dev musl-tools
  2. Clone the repository. For the current release use the v0.7.1 tag; for 0.8.0 use the release-0.8.0 branch:

    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.git
    cd Antinomie
  3. 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:

Terminal window
work/monitor-host/antinomie-monitor --data-dir ~/antinomie

It is a dynamically linked Linux executable: it still needs compatible system libraries, a display, QEMU and an installed base.

Run the checks CI runs, from the repository root:

Terminal window
scripts/check-privacy.sh
python3 -I scripts/check-module-size.py
cd src/antinomie/monitor
cargo fmt --all -- --check
cargo clippy --release --locked --all-targets -- -D warnings
cargo test --release --locked --no-fail-fast

Build-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.

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:

Terminal window
scripts/bootstrap.sh
scripts/build-monitor-kernel.sh
scripts/build-monitor-image.py --kernel work/monitor-build/arch/x86/boot/bzImage
scripts/build-monitor-host.sh
scripts/run-monitor.sh --bundle work/debian-6.12.94-1-trixie/images/monitor-base

The 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.