Rust System Vitals (Experimental)
This guide walks you through building and running the Rust system vitals reference on Avocado OS. The app cross-compiles a Rust binary that reads system stats from /proc and logs structured JSON to the journal.
Prerequisites
- macOS 10.12+ or Linux (Ubuntu 22.04+, Fedora 39+)
- Docker Desktop installed and running
- The latest version of the Avocado CLI
For hardware targets, you will also need:
- Your target device and any required accessories (SD card, USB cable, serial console adapter)
- See the Support Matrix for your target's requirements
Initialize
Clone the reference or initialize a new project from it:
avocado init --reference rust-vitals rust-app
cd rust-app
To target specific hardware instead of the default, pass --target:
avocado init --reference rust-vitals --target raspberrypi5 rust-app
cd rust-app
Install
Install the SDK toolchain, extension dependencies, and runtime packages:
avocado install -f
This pulls the SDK container image and installs the Rust cross-compilation toolchain: nativesdk-rust, nativesdk-cargo, packagegroup-rust-cross-canadian-avocado-<target>, and target libraries libstd-rs and libstd-rs-dev.
Build
Build the extensions and assemble the runtime image:
avocado build
The build step runs rust-compile.sh inside the SDK container, which:
- Discovers the Rust target triple from
RUST_TARGET_PATH(e.g.,x86_64-avocado-linux-gnu) - Clears SDK-injected
RUSTFLAGSto avoid conflicts - Generates
.cargo/config.tomlwith the correct--sysrootand linker flags - Runs
cargo build --release --target $RUST_TARGET
Then rust-install.sh locates the cross-compiled binary and copies it to /usr/bin/ref_rust in the extension sysroot.
Deploy
QEMU
For QEMU targets, provision and boot the VM:
avocado provision -r dev
avocado sdk run -iE vm dev
SD card targets (Raspberry Pi, Seeed reTerminal, NXP, STMicroelectronics)
Insert your SD card and provision:
avocado provision -r dev --profile sd
Insert the SD card into the device and apply power.
USB flash targets (OnLogic)
avocado provision -r dev --profile usb
NVIDIA Jetson
avocado provision -r dev --profile tegraflash
Follow the USB disconnect/reconnect prompts during the flash process.
Verify
Log in as root with an empty password. The service starts automatically on boot.
Check the service is running:
systemctl status ref-rust
journalctl -u ref-rust -f
You should see output like:
{"hostname":"avocado-qemux86-64","uptime":42,"mem_total_kb":977972,"mem_free_kb":821488,"load_1m":"0.12"}
Customize
Edit the Rust source
Modify ref-rust/src/main.rs to change the vitals collected or the output format.
Add Cargo dependencies
Edit ref-rust/Cargo.toml:
[dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"
Rebuild after changes
After any change, rebuild and reprovision:
avocado build
avocado provision -r dev