Skip to main content

Running Pantavisor AppEngine

Pantavisor AppEngine init mode lets you run Pantavisor in your already set up Linux distro — a non-invasive way to experiment with the platform without reflashing device storage.

Note: The AppEngine approach does not achieve the minimal system specifications that Pantavisor normally targets. It is designed for container engine prototyping, development, and testing rather than production deployments.

For full requirements and installation options see: docs.pantahub.com/requirements-appengine

To build the tarball yourself, see how-to-build/get-started.md — build target pantavisor-appengine-distro.

First-time system setup

On a fresh machine, install all required system dependencies (Docker, QEMU, kernel modules, apt packages) before running any tests:

./test.docker.sh install-deps

This is interactive and will prompt before making system changes. You only need to run this once per machine.

Loading the image

From the build directory (no extraction needed)

After building pantavisor-appengine-distro, the deploy directory contains an unpacked directory alongside the tarball:

build/tmp-scarthgap/deploy/images/docker-x86_64/pantavisor-appengine-distro-docker-x86_64-<version>/

cd into it and load the Docker images directly — no extraction step needed:

cd build/tmp-scarthgap/deploy/images/docker-x86_64/pantavisor-appengine-distro-docker-x86_64-<version>/
./test.docker.sh install-docker

From a tarball

Extract the tarball and load all required Docker images into a working directory:

mkdir -p <workdir> && cd <workdir>
tar -xzf /path/to/pantavisor-appengine-distro-docker-x86_64-*.tar.gz
chmod +x test.docker.sh
./test.docker.sh install-docker

Run install-docker every time you install from a new tarball — it reloads the appengine, tester, and netsim Docker images.

Both the unpacked directory and the tarball include local/ and remote/ test trees with test data — no separate clone step needed.

Running tests

Pantavisor AppEngine ships with two separate test suites that validate different aspects of the runtime.

Local tests (local/)

Local tests validate the Pantavisor runtime entirely within the appengine container. They cover core, lifecycle, runtime, control, security, and services functionality.

Run all local tests:

./test.docker.sh -v run local

List available tests:

./test.docker.sh ls

Run a specific test:

./test.docker.sh -v run local/core/legacy-config-overload

Run all tests in a category:

./test.docker.sh -v run local/lifecycle

Remote tests (remote/)

Remote tests validate Pantahub connectivity — OTA updates, device claiming, and cloud logging. Pantahub credentials must be configured via environment variables before running these tests.

Run all remote tests:

./test.docker.sh -v run remote

Run a specific test:

./test.docker.sh -v run remote/core/encrypted-pantahub-config

Debug commands

# Pantavisor logs
docker exec pva-test cat /var/pantavisor/storage/logs/0/pantavisor/pantavisor.log

# Container console log
docker exec pva-test cat /var/pantavisor/storage/logs/0/<container>/lxc/console.log

# Enter a container namespace
docker exec -it pva-test pventer -c <container>

# xconnect service graph
docker exec pva-test pvcontrol graph ls

# Daemon status
docker exec pva-test pvcontrol daemons ls

Resetting state

The pvtx.d provisioning scripts only run once per storage volume (keyed on .pvtx-done). To re-trigger provisioning:

# Option A — remove the storage volume entirely
docker rm -f pva-test
docker volume rm storage-test

# Option B — remove only the done-marker (preserves existing state)
docker exec pva-test rm /var/pantavisor/storage/.pvtx-done
docker restart pva-test