# ours RP ARM64 Installer Guide

## Goal

This package deploys ours RP on a `linux/arm64` server with Docker Compose and continuously runs all five RIR validation.

The package includes the ours RP ARM64 runtime image, Prometheus ARM64 image and Grafana ARM64 image, so deployment does not pull application images on the target host. Runtime state, run artifacts, logs, Prometheus data and Grafana data are persisted through host bind mounts.

## Quick Start

```bash
tar -xzf ours-rp-arm64-installer-*.tar.gz
cd ours-rp-arm64-installer-*

./install.sh
cp .env.example .env   # install.sh creates .env automatically if missing
vim .env
./start.sh
./status.sh
```

Defaults:

- `RIRS=afrinic,apnic,arin,lacnic,ripe`
- `MAX_RUNS=-1`
- `INTERVAL_SECS=600`
- `TAL_INPUT_MODE=file-live-ta`
- `LIVE_TA_REFRESH_BEFORE_SNAPSHOT=1`
- `PERIODIC_SNAPSHOT_RESET=0`
- `PERIODIC_SNAPSHOT_MAX_DELTAS=100`
- `HOST_DATA_DIR=/var/lib/ours-rp-arm64`
- `SOAK_RESTART_POLICY=unless-stopped`
- `MONITOR_PLATFORM=linux/arm64`

## First Start Semantics

If there is no successful run under `HOST_DATA_DIR/runs`, `start.sh` starts the core `ours-rp-soak` service first and waits for the first snapshot to succeed before starting metrics, Prometheus and Grafana.

The first snapshot refreshes live TA certificates before starting the RP process.

## Ports

Default ports:

- metrics: `http://<host>:9556/metrics`
- Prometheus: `http://<host>:9090`
- Grafana: `http://<host>:3000`

Grafana credentials come from `.env`:

```bash
GRAFANA_ADMIN_USER=admin
GRAFANA_ADMIN_PASSWORD=admin
```

Change the password and restrict public access for production deployments.

## Data Directory

Default host directory:

```text
/var/lib/ours-rp-arm64/
  state/
  runs/
  logs/
  tmp/
  prometheus/
  grafana/
```

Each `runs/run_XXXX/` directory contains `report.json`, `result.ccr`, `input.cir`, `vrps.csv`, `vaps.csv`, `stage-timing.json`, logs and metadata.

## Periodic Snapshot Reset

New knobs:

```bash
PERIODIC_SNAPSHOT_RESET=0
PERIODIC_SNAPSHOT_MAX_DELTAS=100
```

Semantics:

- disabled by default, keeping previous behavior unchanged;
- when enabled, one successful snapshot is followed by at most `N` successful delta runs;
- after the threshold is reached, the next run is forced to snapshot;
- before that forced snapshot, only the active `state/db` is reset, while `runs/`, `logs/`, `state/rsync-mirror`, `.env`, and Prometheus/Grafana data are preserved;
- after a successful forced snapshot, the old DB staging is deleted so disk usage does not keep growing elsewhere.

Check the latest `run-meta.json` for:

- `sync_mode`
- `snapshot_reason`
- `periodic_snapshot_delta_count`
- `periodic_snapshot_forced`
- `reset_db_cleanup_status`

## Common Commands

```bash
./status.sh
./logs.sh ours-rp-soak --tail 200
./restart.sh
./stop.sh
./cleanup.sh --keep-runs 100 --execute
./uninstall.sh
```

`uninstall.sh` keeps data by default. Use the following only when you really want to delete `HOST_DATA_DIR`:

```bash
./uninstall.sh --purge-data
```

For finite acceptance tests, for example `MAX_RUNS=3`, also set:

```bash
SOAK_RESTART_POLICY=no
```

Otherwise Compose `unless-stopped` will restart the container after it exits successfully.
