Files
tool-mapmint/docs/impl/reports/VALHALLA-ARM64.md
T
mikkeli 2ec74270e2 Adopt designed front matter: typed, with staleness on plans
Replaces `type: default` — one value across every document, read by nothing,
so it discriminated nothing. Types are now reference, guidelines, plan and
report, applied to every markdown file with no exceptions for the hub.

Plans carry status and updated, reports carry date. REPOS.md already noted
that plans go stale and reports do not, but nothing made that visible: a plan
from months ago looked identical to one written today.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013kj58Jugkic783b8ZrtTVZ
2026-09-04 14:14:19 +09:00

110 lines
3.6 KiB
Markdown

---
type: report
date: 2026-09-04
---
# Valhalla on the Jetson: arm64 viability and the driving-side trap
**Date:** 2026-09-04
**Host:** `mikkeli-orin-nano-2` (192.168.2.209), aarch64, Ubuntu 22.04.5, L4T R36.4.7 / JetPack 6
**Outcome:** arm64 works. A separate, silent correctness bug was found and fixed.
## Why this was investigated
Valhalla's arm64 container support was recorded as the one real integration risk
in the navigation workstream, on the strength of a long-running upstream issue
(valhalla/valhalla#3424) about building arm64 images. Everything else in the
workstream was blocked behind the answer.
## arm64: not a risk
The issue is stale. Checked before pulling anything:
```
docker manifest inspect ghcr.io/valhalla/valhalla:latest
→ linux/amd64, linux/arm64
```
Both `ghcr.io/gis-ops/docker-valhalla` and `ghcr.io/nilsnolde/docker-valhalla`
also publish arm64. The official image runs natively; `valhalla_build_config`,
`valhalla_build_admins` and `valhalla_build_tiles` all execute. Version 3.8.3.
Full pipeline verified: config → timezones → admins → tiles → served route.
| Measurement | Value |
|---|---|
| Shikoku PBF | 49 MB |
| Routing tiles from it | 149 MB |
| Whole-Japan PBF | 2.4 GB |
| Admin DB from whole Japan | 17 MB |
| Timezone DB | 116 MB |
| Route Takamatsu → Matsuyama | 157 km, 112 min |
Japanese street names survive intact in the route narrative
(`高松南バイパス`, `高松停車場栗林公園線/173`), so CJK is fine on the routing
path as well as the rendering path.
A benign warning appears at startup:
```
[ERROR] (stat): /data/valhalla/tiles.tar No such file or directory
[WARN] Tile extract could not be loaded
```
The server falls back to the tile *directory*, which is the form we want anyway.
Not an error condition. Do not "fix" it by switching to the tar.
## The actual finding: a sub-region extract silently mirrors the map
The plan said to start from a regional extract to keep artifacts small. That is
correct for routing tiles and **wrong for the admin database.**
Built from `shikoku-latest.osm.pbf`:
```
by admin_level: [(4, 4)]
(4, '36', '徳島県', drive_on_right=1)
(4, '39', '高知県', drive_on_right=1)
(4, '38', '愛媛県', drive_on_right=1)
(4, '37', '香川県', drive_on_right=1)
```
No `admin_level=2` row at all, and right-hand traffic on every prefecture.
Built from `japan-latest.osm.pbf`:
```
by admin_level: [(2, 1), (4, 47)]
(2, 'JP', '日本', 'Japan', drive_on_right=0)
```
Driving side is a **country-level** property. A Shikoku-clipped extract does not
contain Japan's country boundary, so no country record exists and the value
defaults to 1.
### Why this is dangerous
`valhalla_build_admins` **exits successfully.** Nothing warns. Nothing fails. The
tiles build fine and the server serves routes. The first symptom is a turn
instruction that is subtly wrong, on a road the driver may not know well.
### The fix
The admin build and the tile build are separate invocations reading the same
config, so they can take different inputs:
- admins ← `japan-latest.osm.pbf` (always the full country)
- tiles ← whatever regional extract is wanted
Cost is one 2.4 GB download, which is not repeated per region.
### The rule that follows
Never assume this worked. Every build asserts that a country-level row exists and
reports `drive_on_right=0` before its tiles are treated as usable. A check is
cheap; the failure is silent and the consequence is on a road.
## Left on the host
`~/valhalla-test/` — 2.8 GB, kept deliberately. It is a working Valhalla install
with the Japan PBF already fetched, which is the expensive part to reproduce.