release 1.4.1: generic docs and canonical install path

Docs use generic ops/outside-runner wording; install path ~/src/taler-monitoring.
VERSION 1.4.1 patch on top of the 1.4.0 scheme release.
This commit is contained in:
Hernâni Marques 2026-07-18 21:49:53 +02:00
parent d2e0a28e5e
commit 4f092b90cc
No known key found for this signature in database
GPG key ID: CB5738652768F7E9
15 changed files with 75 additions and 50 deletions

View file

@ -55,7 +55,7 @@ command -v qrencode zbarimg
--- ---
## firecuda-external (macOS, outside-only timer) ## outside-runner (macOS, outside-only timer)
| Need | Notes | | Need | Notes |
|------|--------| |------|--------|

View file

@ -51,7 +51,7 @@ sibling `~/src/koopa/koopa-admin-secrets`.
### Local file (recommended on laptop) ### Local file (recommended on laptop)
```bash ```bash
cd ~/src/koopa/src/taler-monitoring cd ~/src/taler-monitoring
cp secrets.env.example secrets.env # gitignored cp secrets.env.example secrets.env # gitignored
$EDITOR secrets.env $EDITOR secrets.env
./taler-monitoring.sh e2e ./taler-monitoring.sh e2e
@ -387,5 +387,5 @@ If pages are missing publicly: `sudo ~/koopa-caddy/apply-monitoring-live.sh` on
## Version on monitoring pages (v1.3+ / sticky bar) ## Version on monitoring pages (v1.3+ / sticky bar)
The sticky bar shows the suite **tag** (e.g. `v1.3.3`) and links to that tag on Forgejo. The sticky bar shows the suite **tag** (e.g. `v1.4.1`) and links to that tag on Forgejo.
Planned **v1.4.0**: fuller L10n (fr-CH for FrancPaysan, de-CH for hacktivism/Taler CH). Planned **v1.4.0**: fuller L10n (fr-CH for FrancPaysan, de-CH for hacktivism/Taler CH).

View file

@ -163,7 +163,7 @@ Skip SPA block: `CHECK_WEBUI_SPA=0`.
| **`full`** | `urls inside versions sanity server e2e ladder auth401` | | **`full`** | `urls inside versions sanity server e2e ladder auth401` |
```bash ```bash
cd ~/src/koopa/src/taler-monitoring cd ~/src/taler-monitoring
# secrets.env with bank admin + merchant tokens (see secrets.env.example) # secrets.env with bank admin + merchant tokens (see secrets.env.example)
./taler-monitoring.sh -d hacktivism.ch full ./taler-monitoring.sh -d hacktivism.ch full
# same, explicit: # same, explicit:

View file

@ -1 +1 @@
1.4.0 1.4.1

View file

@ -3,21 +3,36 @@
Release history for the standalone **taler-monitoring** suite Release history for the standalone **taler-monitoring** suite
(https://git.hacktivism.ch/hernani/taler-monitoring). (https://git.hacktivism.ch/hernani/taler-monitoring).
## Version scheme
Tags and `VERSION` use **MAJOR.FEATURE.FIX** (three components):
| Part | Meaning |
|------|---------|
| **MAJOR** | Breaking changes to CLI, layout, or host-agent contract |
| **FEATURE** | New capabilities (phases, HTML features, i18n packs, …) |
| **FIX** | Bugfixes and docs that do not add a feature |
Git tags: `vMAJOR.FEATURE.FIX` (e.g. `v1.4.1`). File `VERSION` omits the `v` prefix.
| Tag | Date (UTC) | Notes | | Tag | Date (UTC) | Notes |
|-----|------------|--------| |-----|------------|--------|
| **v1.3.4** | 2026-07-18 | **Bugfix:** summary line printed raw `$(i18n_text …)` instead of message; aptdeploy remote rsync path `src/src/…`; monpages detects merchant code 21 on any HTTP status + checks bare URLs (no trailing slash); host-agent logs expected public FQDNs. | | **v1.5.0** | *planned* | **L10n** packs for user-facing strings that need localization: **fr-CH** (FrancPaysan) and **de-CH** (hacktivism / Taler CH German). |
| **v1.3.3** | 2026-07-18 | **Docs/fix:** `VERSIONS.md` is git/suite only (no Android blob, no dead `koopa-admin-log` cadence paths); Android stays in `android-test/GUI-AUTOMATION-NOTES.md`. monpages in TESTS; README/host-agent/DEPENDENCIES cleanup. | | **v1.4.1** | 2026-07-18 | **Docs/versioning:** canonical tree `~/src/taler-monitoring`; docs use generic ops/outside-runner wording (no client hostnames); tags always **MAJOR.FEATURE.FIX**. |
| **v1.3.2** | 2026-07-18 | **Bugfix:** drop remaining `koopa-admin-log` suite paths — host-agent/install, path unit, aptdeploy dedupe use **only** `~/src/taler-monitoring`. Reinstall systemd units. | | **v1.3.4** | 2026-07-18 | Summary i18n, monpages code-21, aptdeploy rsync path. |
| **v1.4.0** | *planned* | **L10n** for user-facing outputs that need localization: **fr-CH** (FrancPaysan, Suisse romande) and **de-CH** (hacktivism / Taler CH German). Not implemented yet — after **1.3.x**. | | **v1.3.3** | 2026-07-18 | GIT notes vs GUI notes; monpages in TESTS. |
| **v1.3.1** | 2026-07-18 | **Bugfix:** silent skip when `DEPLOY_WWW_ROOT` not writable left public pages missing (merchant JSON code 21). **monpages** phase + host-agent post-check: verify monitoring HTML via **FQDN** (`https://<host>/monitoring/` etc.). | | **v1.3.2** | 2026-07-18 | Suite paths only `~/src/taler-monitoring` (no admin-log suite tree). |
| **v1.3** | 2026-07-18 | Sticky bar shows **suite version** and links to the Forgejo **tag** (`…/src/tag/vX.Y.Z`). (supersedes tag name **v1.3.0**) | | **v1.3.1** | 2026-07-18 | monpages FQDN check + deploy no longer silent-skip. |
| **v1.2** | 2026-07-18 | Language selection: `--lang` / `TALER_MON_LANG` (en\|fr). | | **v1.3.0** | 2026-07-18 | Sticky bar suite version + Forgejo tag link. |
| **v1.1** | 2026-07-18 | i18n chrome: English default; French for FrancPaysan. | | **v1.2.0** | 2026-07-18 | Language selection: `--lang` / `TALER_MON_LANG` (en\|fr). |
| **v1.0** / **v1** | 2026-07-18 | Initial standalone release (split from `koopa-admin-log`). | | **v1.1.0** | 2026-07-18 | i18n chrome: English default; French for FrancPaysan. |
| **v1.0.0** | 2026-07-18 | Initial standalone release. |
## Sticky bar version (v1.3+) Older short tags (`v1`, `v1.0`, `v1.1`, `v1.2`, `v1.3`) are obsolete; use the three-component tags above.
Generated HTML shows the installed release tag (e.g. `v1.3.1`) next to the host line. ## Sticky bar version (v1.3.0+)
Generated HTML shows the installed release tag (e.g. `v1.4.1`) next to the host line.
Clicking opens the tag page on Forgejo: Clicking opens the tag page on Forgejo:
`https://git.hacktivism.ch/hernani/taler-monitoring/src/tag/<tag>` `https://git.hacktivism.ch/hernani/taler-monitoring/src/tag/<tag>`
@ -26,22 +41,22 @@ Resolved via `git describe --tags` after `update-suite.sh`, with fallback to the
## Public monitoring pages (v1.3.1+) ## Public monitoring pages (v1.3.1+)
Host-agent must publish under `DEPLOY_WWW_ROOT` **and** Caddy must `handle` the paths. Host-agent must publish under `DEPLOY_WWW_ROOT` **and** the reverse proxy must `handle` the paths.
If not, public FQDNs return merchant **JSON code 21**. If not, public FQDNs return merchant **JSON code 21**.
| Check | How | | Check | How |
|-------|-----| |-------|-----|
| Phase | `./taler-monitoring.sh monpages` (or `pages`) | | Phase | `./taler-monitoring.sh monpages` (or `pages`) |
| Auto | host-agent default phases include `monpages`; post-check after HTML write | | Auto | host-agent default phases include `monpages`; post-check after HTML write |
| URLs | `https://$MON_HOSTS$HTML_URL_OK` (e.g. `https://taler.hacktivism.ch/monitoring/`) | | URLs | `https://$MON_HOSTS$HTML_URL_OK` |
Bug (fixed in 1.3.1): rsync to `/var/www/monitoring-sites` was **silently skipped** when not writable, so staging had pages but FQDNs never did. Now that is an **ERROR**, and monpages fails until live apply: On the stack host (e.g. koopa), publish + Caddy handles:
```bash ```bash
sudo ~/koopa-caddy/apply-monitoring-live.sh sudo ~/koopa-caddy/apply-monitoring-live.sh
``` ```
## Language (v1.2+) ## Language (v1.2.0+)
| Method | Example | | Method | Example |
|--------|---------| |--------|---------|
@ -49,11 +64,11 @@ sudo ~/koopa-caddy/apply-monitoring-live.sh
| Env | `TALER_MON_LANG=en` or `fr` | | Env | `TALER_MON_LANG=en` or `fr` |
| Auto | `*lefrancpaysan*` → fr, else en | | Auto | `*lefrancpaysan*` → fr, else en |
**Note:** Full locale packs (fr-CH / de-CH) for all check messages are scheduled for **v1.4.0**, not 1.3.x. Full locale packs (fr-CH / de-CH) are scheduled for **v1.5.0**.
## Pin a release ## Pin a release
```bash ```bash
git clone https://git.hacktivism.ch/hernani/taler-monitoring.git ~/src/taler-monitoring git clone https://git.hacktivism.ch/hernani/taler-monitoring.git ~/src/taler-monitoring
cd ~/src/taler-monitoring && git checkout v1.3.4 cd ~/src/taler-monitoring && git checkout v1.4.1
``` ```

View file

@ -116,7 +116,7 @@ GUI=1 ./run-android-build-and-smoke.sh
## Platform capability flags (planned + defaults) ## Platform capability flags (planned + defaults)
Automation can run on hosts that support **Android only**, **GUI tooling only** Automation can run on hosts that support **Android only**, **GUI tooling only**
(conceptual), or **both**. Flags keep that explicit for CI and laptops. (conceptual), or **both**. Flags keep that explicit for CI and workstations.
### Proposed env flags ### Proposed env flags
@ -152,7 +152,7 @@ with **`-no-window`** and still keep **graphics logic** in the guest:
# or let smoke auto-start headless AVD when no phone is plugged in # or let smoke auto-start headless AVD when no phone is plugged in
STACK=goa ./run-android-gui-smoke.sh STACK=goa ./run-android-gui-smoke.sh
# laptop: show the emulator window # ops workstation: show the emulator window
WINDOWED=1 ./start-android-emulator.sh --wait WINDOWED=1 ./start-android-emulator.sh --wait
# or: EMULATOR_HEADLESS=0 EMULATOR_GPU=host ./start-android-emulator.sh --wait # or: EMULATOR_HEADLESS=0 EMULATOR_GPU=host ./start-android-emulator.sh --wait
``` ```

View file

@ -104,7 +104,7 @@ Canonical notes (minimal variant, **flags**, Linux defaults):
```bash ```bash
# headless AVD only (default path for servers) # headless AVD only (default path for servers)
./start-android-emulator.sh --wait ./start-android-emulator.sh --wait
# windowed (laptops) # windowed (workstations with display)
WINDOWED=1 ./start-android-emulator.sh --wait WINDOWED=1 ./start-android-emulator.sh --wait
``` ```

View file

@ -31,7 +31,7 @@ Thin wrappers only set stack defaults:
| `koopa-taler-deploy-test-apt-src-trixie-testing-upgrade` | **upgrade** for testing suite | | `koopa-taler-deploy-test-apt-src-trixie-testing-upgrade` | **upgrade** for testing suite |
```bash ```bash
# from laptop / clementine → triggers on koopa-external # from ops workstation → triggers on koopa-external
./host-agent/run-aptdeploy.sh ./host-agent/run-aptdeploy.sh
./host-agent/run-aptdeploy.sh upgrade ./host-agent/run-aptdeploy.sh upgrade
./host-agent/run-aptdeploy.sh fresh ./host-agent/run-aptdeploy.sh fresh
@ -74,7 +74,7 @@ Runs **as user `hernani`** (systemd user, linger). **Primary** mode:
`podman exec` on this host into `podman exec` on this host into
`taler-hacktivism-bank` / `taler-hacktivism-exchange-ansible` / `taler-hacktivism` `taler-hacktivism-bank` / `taler-hacktivism-exchange-ansible` / `taler-hacktivism`
(IDs `inside.host-*`, not `inside.ssh-*`). (IDs `inside.host-*`, not `inside.ssh-*`).
From a **laptop**, leave `INSIDE_PODMAN` off → access mode **`ssh`** via `KOOPA_SSH` From an **ops workstation**, leave `INSIDE_PODMAN` off → access mode **`ssh`** via `KOOPA_SSH`
(`inside.ssh-*`). (`inside.ssh-*`).
- Public **`urls` + `versions`** for the stack (`-d hacktivism.ch`). - Public **`urls` + `versions`** for the stack (`-d hacktivism.ch`).
- Writes console HTML for all three sites under - Writes console HTML for all three sites under
@ -109,7 +109,7 @@ mkdir -p ~/.config/taler-monitoring
cp ~/src/taler-monitoring/host-agent/env.example \ cp ~/src/taler-monitoring/host-agent/env.example \
~/.config/taler-monitoring/env ~/.config/taler-monitoring/env
# laptop: # ops workstation:
./host-agent/install-host-agent.sh --remote koopa-external ./host-agent/install-host-agent.sh --remote koopa-external
# or on koopa: # or on koopa:
@ -144,16 +144,16 @@ journalctl --user -u taler-monitoring-hacktivism.service -n 50 --no-pager
ls ~/monitoring-sites-staging/bank.hacktivism.ch/monitoring_err/ ls ~/monitoring-sites-staging/bank.hacktivism.ch/monitoring_err/
``` ```
## Relation to firecuda outside-only timer ## Relation to optional outside-only timer
| | host-agent (koopa) | firecuda site-gen | | | host-agent (koopa) | outside-runner site-gen |
|--|--------------------|-------------------| |--|--------------------|-------------------|
| Access | **podman on host** | public HTTPS only | | Access | **podman on host** | public HTTPS only |
| Phases | urls **inside** versions | urls versions | | Phases | urls **inside** versions | urls versions |
| Trigger | software path + 4h | *could* launchd 4h | | Trigger | software path + 4h | *could* launchd 4h |
| Primary for GOA | **yes** | **off** (optional only) | | Primary for GOA | **yes** | **off** (optional only) |
**firecuda-external is not scheduled** right now (launchd disabled). Scripts under **outside-runner is not scheduled** right now (launchd disabled). Scripts under
`site-gen/` can still one-shot a public run if needed; see `site-gen/README.md`. `site-gen/` can still one-shot a public run if needed; see `site-gen/README.md`.
No secrets required for default phases. `secrets.env` optional for e2e later. No secrets required for default phases. `secrets.env` optional for e2e later.

View file

@ -5,7 +5,7 @@
# $EDITOR secrets.env # $EDITOR secrets.env
# #
# Never commit secrets.env. Prefer file paths under koopa-admin-secrets # Never commit secrets.env. Prefer file paths under koopa-admin-secrets
# for long-term storage; this file is for laptop one-shots / overrides. # for long-term storage; this file is for workstation one-shots / overrides.
# #
# Load order: env already set > secrets.env > SECRETS_ROOT files > SSH koopa # Load order: env already set > secrets.env > SECRETS_ROOT files > SSH koopa

View file

@ -14,35 +14,37 @@ Applies to all nine fronts (GOA + FP stage + FP prod) in the default `SITES` lis
| Host | Role | | Host | Role |
|------|------| |------|------|
| **firecuda-external** | optional runner (public DNS) | | **optional outside runner** (SSH alias via `FIRECUDA_SSH`) | optional runner (public DNS) |
| **koopa-external** | deploy staging + Caddy (root service) | | **koopa-external** | deploy staging + Caddy (root service) |
| **host-agents** | primary: GOA + FP on-box (`../host-agent/`) | | **host-agents** | primary: GOA + FP on-box (`../host-agent/`) |
No secrets in `settings.conf` — only hosts, paths, site list. No secrets in `settings.conf` — only hosts, paths, site list.
## firecuda-external (outside-only) — **disabled for now** ## Optional outside runner (outside-only) — **disabled for now**
**firecuda-external could** run public-only monitoring (`SKIP_SSH=1`, phases An **optional outside runner** could run public-only monitoring (`SKIP_SSH=1`, phases
`urls versions`) on a schedule (launchd every 4h) and write HTML under `urls versions`) on a schedule (launchd every 4h) and write HTML under
`~/var/taler-monitoring-sites-work/html/`. Scripts for that still live here `~/var/taler-monitoring-sites-work/html/`. Scripts for that still live here
(`install-firecuda-timer.sh`, `run-on-firecuda.sh`, plist template). (`install-firecuda-timer.sh`, `run-on-firecuda.sh`, plist template).
**Current policy: do not run a real launchd job on firecuda.** **Current policy: do not run a real launchd job on the outside runner.**
Primary GOA monitoring is **koopa host-agent** (`host-agent/`, user `hernani`, Primary GOA monitoring is **koopa host-agent** (`host-agent/`, user `hernani`,
local `podman exec`). Re-enable firecuda only if you explicitly want a second, local `podman exec`). Re-enable the outside runner only if you explicitly want a second,
outside-only view. outside-only view.
```bash ```bash
# optional one-shot (no timer): # optional one-shot (no timer):
# ssh firecuda-external '~/taler-monitoring-site-gen/site-gen/run-on-firecuda.sh' # ssh "$FIRECUDA_SSH" # e.g. your outside-runner alias
# ssh "$FIRECUDA_SSH" '~/taler-monitoring-site-gen/site-gen/run-on-firecuda.sh'
# if a timer was installed earlier, ensure it is off: # if a timer was installed earlier, ensure it is off:
# ssh firecuda-external 'launchctl list | grep taler-monitoring || echo off' # ssh "$FIRECUDA_SSH" # e.g. your outside-runner alias
# ssh 'launchctl list | grep taler-monitoring || echo off # macOS outside runner'
``` ```
Disabled plists may remain as `*.plist.disabled-*` under `~/Library/LaunchAgents/`. Disabled plists may remain as `*.plist.disabled-*` under `~/Library/LaunchAgents/`.
## Quick start (laptop) ## Quick start (ops workstation)
```bash ```bash
cd site-gen cd site-gen

View file

@ -88,5 +88,5 @@ curl -sS https://bank.hacktivism.ch/monitoring_err/ | head
## Not needed as root ## Not needed as root
- Running `taler-monitoring` (use **firecuda-external** / laptop) - Running `taler-monitoring` (use **optional outside runner** (SSH alias via `FIRECUDA_SSH`) / laptop)
- Writing into podman Taler containers - Writing into podman Taler containers

View file

@ -12,7 +12,11 @@ set -euo pipefail
ROOT=$(cd "$(dirname "$0")" && pwd) ROOT=$(cd "$(dirname "$0")" && pwd)
MON_ROOT=$(cd "$ROOT/.." && pwd) MON_ROOT=$(cd "$ROOT/.." && pwd)
FIRECUDA="${FIRECUDA_SSH:-firecuda-external}" FIRECUDA="${FIRECUDA_SSH:-}"
if [ -z "$FIRECUDA" ]; then
echo "Set FIRECUDA_SSH to your outside-runner SSH host alias" >&2
exit 2
fi
REMOTE_BASE="${FIRECUDA_INSTALL_DIR:-taler-monitoring-site-gen}" REMOTE_BASE="${FIRECUDA_INSTALL_DIR:-taler-monitoring-site-gen}"
RUN_NOW=0 RUN_NOW=0
[ "${1:-}" = "--run-now" ] && RUN_NOW=1 [ "${1:-}" = "--run-now" ] && RUN_NOW=1

View file

@ -2,7 +2,11 @@
# pull-firecuda-to-koopa.sh — copy HTML from firecuda work dir → koopa staging # pull-firecuda-to-koopa.sh — copy HTML from firecuda work dir → koopa staging
# Run on laptop (hernani) where both SSH aliases work. # Run on laptop (hernani) where both SSH aliases work.
set -euo pipefail set -euo pipefail
FIRECUDA="${FIRECUDA_SSH:-firecuda-external}" FIRECUDA="${FIRECUDA_SSH:-}"
if [ -z "$FIRECUDA" ]; then
echo "Set FIRECUDA_SSH to your outside-runner SSH host alias" >&2
exit 2
fi
KOOPA="${DEPLOY_SSH:-koopa-external}" KOOPA="${DEPLOY_SSH:-koopa-external}"
REMOTE_HTML="${FIRECUDA_HTML:-var/taler-monitoring-sites-work/html/}" REMOTE_HTML="${FIRECUDA_HTML:-var/taler-monitoring-sites-work/html/}"
STAGE="${DEPLOY_STAGING:-/home/hernani/monitoring-sites-staging}" STAGE="${DEPLOY_STAGING:-/home/hernani/monitoring-sites-staging}"

View file

@ -1,8 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# run-on-firecuda.sh — entrypoint for launchd/cron on firecuda-external. # run-on-firecuda.sh — entrypoint for launchd/cron on outside-runner.
# Outside-only monitoring (SKIP_SSH=1), all 9 sites, then stage HTML to koopa. # Outside-only monitoring (SKIP_SSH=1), all 9 sites, then stage HTML to koopa.
# #
# Installed path on firecuda (default): # Installed path on outside-runner (default):
# ~/taler-monitoring-site-gen/site-gen/run-on-firecuda.sh # ~/taler-monitoring-site-gen/site-gen/run-on-firecuda.sh
# #
set -uo pipefail set -uo pipefail
@ -16,7 +16,7 @@ STAMP=$(date +%Y%m%d-%H%M%S)
LOG="$LOG_DIR/run-${STAMP}.log" LOG="$LOG_DIR/run-${STAMP}.log"
exec >>"$LOG" 2>&1 exec >>"$LOG" 2>&1
echo "======== $(date -Iseconds 2>/dev/null || date) firecuda monitoring sites ========" echo "======== $(date -Iseconds 2>/dev/null || date) outside-runner monitoring sites ========"
# Always: public DNS only, no SSH checks into stacks # Always: public DNS only, no SSH checks into stacks
export SKIP_SSH=1 export SKIP_SSH=1
@ -39,7 +39,7 @@ chmod +x generate-monitoring-sites.sh deploy-monitoring-sites.sh console_to_html
./generate-monitoring-sites.sh ./generate-monitoring-sites.sh
ec=$? ec=$?
# HTML stays on firecuda under WORK_ROOT/html. # HTML stays on outside-runner under WORK_ROOT/html.
# Optional push to koopa if this host can SSH there (often only from laptop): # Optional push to koopa if this host can SSH there (often only from laptop):
if [ -n "${DEPLOY_SSH:-}" ] && [ "${DEPLOY_FROM_FIRECUDA:-0}" = "1" ]; then if [ -n "${DEPLOY_SSH:-}" ] && [ "${DEPLOY_FROM_FIRECUDA:-0}" = "1" ]; then
if [ -x ./deploy-monitoring-sites.sh ]; then if [ -x ./deploy-monitoring-sites.sh ]; then
@ -47,7 +47,7 @@ if [ -n "${DEPLOY_SSH:-}" ] && [ "${DEPLOY_FROM_FIRECUDA:-0}" = "1" ]; then
fi fi
else else
echo "note: HTML at ${WORK_ROOT}/html — pull from laptop:" echo "note: HTML at ${WORK_ROOT}/html — pull from laptop:"
echo " rsync -az firecuda-external:var/taler-monitoring-sites-work/html/ \\" echo " rsync -az outside-runner:var/taler-monitoring-sites-work/html/ \\"
echo " koopa-external:monitoring-sites-staging/" echo " koopa-external:monitoring-sites-staging/"
echo " # or: ./pull-firecuda-to-koopa.sh" echo " # or: ./pull-firecuda-to-koopa.sh"
fi fi

View file

@ -2,8 +2,8 @@
# Copy: cp settings.conf.example settings.conf # Copy: cp settings.conf.example settings.conf
# Never put passwords/tokens here. # Never put passwords/tokens here.
# On firecuda the suite runs *locally* (RUNNER_SSH empty). From a laptop you # On an outside runner the suite runs *locally* (RUNNER_SSH empty). From a laptop you
# can set RUNNER_SSH=firecuda-external to drive a one-off remote run instead. # can set RUNNER_SSH=<outside-runner-ssh-alias> to drive a one-off remote run instead.
RUNNER_SSH= RUNNER_SSH=
RUNNER_SSH_FALLBACKS= RUNNER_SSH_FALLBACKS=
RUNNER_REMOTE_WORKDIR=/tmp/taler-monitoring-site-gen RUNNER_REMOTE_WORKDIR=/tmp/taler-monitoring-site-gen