docs: converge operator guidance on tht
This commit is contained in:
+51
-51
@@ -13,10 +13,10 @@ Commands that contain example paths must be changed to absolute paths on your co
|
||||
- **macOS:** use Terminal and Docker Desktop. Apple Silicon and Intel are supported by the local
|
||||
image build.
|
||||
- **Windows PowerShell:** use Docker Desktop with its WSL2 engine, Git for Windows, the Windows
|
||||
build launcher, and `thothctl-windows-amd64.exe`.
|
||||
build launcher, and `tht-windows-amd64.exe`.
|
||||
- **Windows WSL2 (recommended):** enable Docker Desktop integration for your Linux distribution,
|
||||
clone under `/home/<user>` rather than `/mnt/c`, and follow the Linux shell commands.
|
||||
- **Linux PC:** use Docker Engine plus the Compose v2 plugin and the Linux `thothctl` binary.
|
||||
- **Linux PC:** use Docker Engine plus the Compose v2 plugin and the Linux `tht` binary.
|
||||
|
||||
Windows users must also read [Windows and WSL2 line endings](windows-line-endings.md) before the
|
||||
first build.
|
||||
@@ -167,7 +167,7 @@ Then use `host.docker.internal` in the endpoint. `extra_hosts: host.docker.inter
|
||||
is a host routing aid, not a bundled service. Prefer a real DNS name for independently operated
|
||||
services; retain TLS and authentication even when co-located.
|
||||
|
||||
## Build ThothII and thothctl
|
||||
## Build ThothII and tht
|
||||
|
||||
The canonical local Compose smoke uses the base file plus the local profile. Keep this exact
|
||||
base+profile command available for install verification:
|
||||
@@ -184,45 +184,45 @@ From the repository root, macOS/Linux/WSL2 users run:
|
||||
|
||||
```sh
|
||||
bash scripts/build-local.sh
|
||||
bash scripts/build-thothctl.sh
|
||||
bash scripts/build-tht.sh
|
||||
```
|
||||
|
||||
Native PowerShell users run:
|
||||
|
||||
```powershell
|
||||
powershell -ExecutionPolicy Bypass -File scripts/build-local.ps1
|
||||
& "C:\Program Files\Git\bin\bash.exe" scripts/build-thothctl.sh
|
||||
& "C:\Program Files\Git\bin\bash.exe" scripts/build-tht.sh
|
||||
```
|
||||
|
||||
The second command uses Docker to create native operator binaries under `dist/thothctl`; users do
|
||||
not need to know or install Go. Select `thothctl-darwin-arm64` or `-amd64` on macOS,
|
||||
`thothctl-linux-amd64` or `-arm64` on Linux/WSL2, and `thothctl-windows-amd64.exe` on Windows.
|
||||
The second command uses Docker to create native operator binaries under `dist/tht`; users do
|
||||
not need to know or install Go. Select `tht-darwin-arm64` or `-amd64` on macOS,
|
||||
`tht-linux-amd64` or `-arm64` on Linux/WSL2, and `tht-windows-amd64.exe` on Windows.
|
||||
Copy the selected file to the protected operator directory and, on macOS/Linux, run `chmod 0755`
|
||||
on it.
|
||||
|
||||
## Start and verify
|
||||
|
||||
Set convenient variables (PowerShell users use `$THTCTL` and `$INSTALLATION` with `& $THTCTL`):
|
||||
Every operator call has the form `thothctl --installation <absolute-descriptor> <command>`.
|
||||
Set convenient variables (PowerShell users use `$THT_BIN` and `$INSTALLATION` with `& $THT_BIN`):
|
||||
Every operator call has the form `tht --installation <absolute-descriptor> <command>`.
|
||||
|
||||
```sh
|
||||
THTCTL=/absolute/path/to/thothii-operator/thothctl
|
||||
THT_BIN=/absolute/path/to/thothii-operator/tht
|
||||
INSTALLATION=/absolute/path/to/thothii-operator/thothii-installation.yaml
|
||||
"$THTCTL" --installation "$INSTALLATION" update --check-only
|
||||
"$THTCTL" --installation "$INSTALLATION" start
|
||||
"$THTCTL" --installation "$INSTALLATION" status
|
||||
"$THTCTL" --installation "$INSTALLATION" doctor
|
||||
"$THT_BIN" --installation "$INSTALLATION" update --check-only
|
||||
"$THT_BIN" --installation "$INSTALLATION" start
|
||||
"$THT_BIN" --installation "$INSTALLATION" status
|
||||
"$THT_BIN" --installation "$INSTALLATION" doctor
|
||||
```
|
||||
|
||||
Native PowerShell uses the same order:
|
||||
|
||||
```powershell
|
||||
$THTCTL = 'C:\Users\operator\thothii-operator\thothctl.exe'
|
||||
$THT_BIN = 'C:\Users\operator\thothii-operator\tht.exe'
|
||||
$INSTALLATION = 'C:\Users\operator\thothii-operator\thothii-installation.yaml'
|
||||
& $THTCTL --installation $INSTALLATION update --check-only
|
||||
& $THTCTL --installation $INSTALLATION start
|
||||
& $THTCTL --installation $INSTALLATION status
|
||||
& $THTCTL --installation $INSTALLATION doctor
|
||||
& $THT_BIN --installation $INSTALLATION update --check-only
|
||||
& $THT_BIN --installation $INSTALLATION start
|
||||
& $THT_BIN --installation $INSTALLATION status
|
||||
& $THT_BIN --installation $INSTALLATION doctor
|
||||
```
|
||||
|
||||
Wait for both services, then check the same-origin frontend and direct loopback core:
|
||||
@@ -230,8 +230,8 @@ Wait for both services, then check the same-origin frontend and direct loopback
|
||||
```sh
|
||||
curl --fail http://127.0.0.1:8080/health
|
||||
curl --fail http://127.0.0.1:8787/health
|
||||
"$THTCTL" --installation "$INSTALLATION" pi doctor
|
||||
"$THTCTL" --installation "$INSTALLATION" pi test
|
||||
"$THT_BIN" --installation "$INSTALLATION" pi doctor
|
||||
"$THT_BIN" --installation "$INSTALLATION" pi test
|
||||
```
|
||||
|
||||
Native PowerShell must call `curl.exe` explicitly; Windows PowerShell may otherwise resolve `curl`
|
||||
@@ -240,11 +240,11 @@ to `Invoke-WebRequest`:
|
||||
```powershell
|
||||
curl.exe --fail --silent --show-error http://127.0.0.1:8080/health
|
||||
curl.exe --fail --silent --show-error http://127.0.0.1:8787/health
|
||||
& $THTCTL --installation $INSTALLATION pi doctor
|
||||
& $THTCTL --installation $INSTALLATION pi test
|
||||
& $THT_BIN --installation $INSTALLATION pi doctor
|
||||
& $THT_BIN --installation $INSTALLATION pi test
|
||||
```
|
||||
|
||||
Open <http://127.0.0.1:8080>. If a check fails, run `thothctl ... logs` or `pi logs`; these are
|
||||
Open <http://127.0.0.1:8080>. If a check fails, run `tht ... logs` or `pi logs`; these are
|
||||
bounded and sanitize declared secrets. Do not publish either loopback port.
|
||||
|
||||
## Update an installation
|
||||
@@ -254,7 +254,7 @@ selected by the durable, installation-specific `current-image.yaml` after every
|
||||
Therefore rebuilding `thothii-core:local` followed by `update --check-only` does not reconcile a
|
||||
previous `pi update`: the old promoted core would remain selected.
|
||||
|
||||
Do not delete or edit the selector. `thothctl status` is the installation-aware selector test. If
|
||||
Do not delete or edit the selector. `tht status` is the installation-aware selector test. If
|
||||
the running core image is the base `thothii-core:local` image, no Pi update has promoted a durable
|
||||
lifecycle image and an ordinary same-Pi-version source rebuild/start is supported. If status shows
|
||||
a lifecycle image and the pulled Pi pin is unchanged, `pi update` would be a no-op and the procedure
|
||||
@@ -284,14 +284,14 @@ if ! NEXT_PI_VERSION="$(sed -n 's/^ARG PI_VERSION=//p' docker/core.Dockerfile)";
|
||||
abort_update "could not read the pulled Pi pin"
|
||||
fi
|
||||
[[ -n "$NEXT_PI_VERSION" && "$NEXT_PI_VERSION" != *$'\n'* ]] || abort_update "expected one pinned default PI_VERSION"
|
||||
if ! INSTALLATION_STATUS="$("$THTCTL" --installation "$INSTALLATION" status)"; then
|
||||
abort_update "thothctl status failed"
|
||||
if ! INSTALLATION_STATUS="$("$THT_BIN" --installation "$INSTALLATION" status)"; then
|
||||
abort_update "tht status failed"
|
||||
fi
|
||||
if ! RUNNING_PI_VERSION="$("$THTCTL" --installation "$INSTALLATION" pi status)"; then
|
||||
abort_update "thothctl pi status failed"
|
||||
if ! RUNNING_PI_VERSION="$("$THT_BIN" --installation "$INSTALLATION" pi status)"; then
|
||||
abort_update "tht pi status failed"
|
||||
fi
|
||||
RUNNING_PI_VERSION="${RUNNING_PI_VERSION#Pi version: }"
|
||||
[[ -n "$RUNNING_PI_VERSION" ]] || abort_update "thothctl pi status returned no version"
|
||||
[[ -n "$RUNNING_PI_VERSION" ]] || abort_update "tht pi status returned no version"
|
||||
|
||||
COMPACT_STATUS="${INSTALLATION_STATUS//[[:space:]]/}"
|
||||
USES_BASE_CORE=false
|
||||
@@ -305,23 +305,23 @@ if [[ "$NEXT_PI_VERSION" == "$RUNNING_PI_VERSION" ]]; then
|
||||
fi
|
||||
|
||||
if ! bash scripts/build-local.sh; then abort_update "the local image build failed"; fi
|
||||
if ! bash scripts/build-thothctl.sh; then abort_update "the thothctl build failed"; fi
|
||||
if ! "$THTCTL" --installation "$INSTALLATION" update --check-only; then
|
||||
if ! bash scripts/build-tht.sh; then abort_update "the tht build failed"; fi
|
||||
if ! "$THT_BIN" --installation "$INSTALLATION" update --check-only; then
|
||||
abort_update "the installation render check failed"
|
||||
fi
|
||||
if [[ "$TRANSACTIONAL_PI_UPDATE" == true ]]; then
|
||||
if ! "$THTCTL" --installation "$INSTALLATION" pi update \
|
||||
if ! "$THT_BIN" --installation "$INSTALLATION" pi update \
|
||||
--version "$NEXT_PI_VERSION" --source build --yes --drain; then
|
||||
abort_update "the transactional core update failed"
|
||||
fi
|
||||
fi
|
||||
if ! "$THTCTL" --installation "$INSTALLATION" start; then abort_update "installation start failed"; fi
|
||||
if ! "$THT_BIN" --installation "$INSTALLATION" start; then abort_update "installation start failed"; fi
|
||||
if ! curl --fail http://127.0.0.1:8080/health; then abort_update "frontend health check failed"; fi
|
||||
if ! curl --fail http://127.0.0.1:8787/health; then abort_update "core health check failed"; fi
|
||||
if ! FINAL_STATUS="$("$THTCTL" --installation "$INSTALLATION" status)"; then abort_update "final status failed"; fi
|
||||
if ! FINAL_PI_STATUS="$("$THTCTL" --installation "$INSTALLATION" pi status)"; then abort_update "final pi status failed"; fi
|
||||
if ! FINAL_STATUS="$("$THT_BIN" --installation "$INSTALLATION" status)"; then abort_update "final status failed"; fi
|
||||
if ! FINAL_PI_STATUS="$("$THT_BIN" --installation "$INSTALLATION" pi status)"; then abort_update "final pi status failed"; fi
|
||||
[[ "${FINAL_PI_STATUS#Pi version: }" == "$NEXT_PI_VERSION" ]] || abort_update "running Pi version does not match the pulled pin"
|
||||
if ! "$THTCTL" --installation "$INSTALLATION" doctor; then abort_update "final doctor failed"; fi
|
||||
if ! "$THT_BIN" --installation "$INSTALLATION" doctor; then abort_update "final doctor failed"; fi
|
||||
require_clean_source
|
||||
printf 'Built source revision: %s\n%s\n%s\n' "$SOURCE_REVISION" "$FINAL_STATUS" "$FINAL_PI_STATUS"
|
||||
```
|
||||
@@ -354,9 +354,9 @@ Assert-NativeSuccess 'source revision read'
|
||||
$VersionLine = @(Select-String -Path docker/core.Dockerfile -Pattern '^ARG PI_VERSION=(.+)$')
|
||||
if ($VersionLine.Count -ne 1) { throw 'Expected exactly one pinned default PI_VERSION.' }
|
||||
$NextPiVersion = $VersionLine.Matches[0].Groups[1].Value
|
||||
$InstallationStatus = @(& $THTCTL --installation $INSTALLATION status)
|
||||
$InstallationStatus = @(& $THT_BIN --installation $INSTALLATION status)
|
||||
Assert-NativeSuccess 'installation status'
|
||||
$RunningPiStatus = (& $THTCTL --installation $INSTALLATION pi status)
|
||||
$RunningPiStatus = (& $THT_BIN --installation $INSTALLATION pi status)
|
||||
Assert-NativeSuccess 'Pi status'
|
||||
$RunningPiVersion = $RunningPiStatus -replace '^Pi version:\s*', ''
|
||||
if ([string]::IsNullOrWhiteSpace($RunningPiVersion)) { throw 'Pi status returned no version.' }
|
||||
@@ -371,29 +371,29 @@ if ($NextPiVersion -eq $RunningPiVersion) {
|
||||
}
|
||||
powershell -ExecutionPolicy Bypass -File scripts/build-local.ps1
|
||||
Assert-NativeSuccess 'local image build'
|
||||
& "C:\Program Files\Git\bin\bash.exe" scripts/build-thothctl.sh
|
||||
Assert-NativeSuccess 'thothctl build'
|
||||
& $THTCTL --installation $INSTALLATION update --check-only
|
||||
& "C:\Program Files\Git\bin\bash.exe" scripts/build-tht.sh
|
||||
Assert-NativeSuccess 'tht build'
|
||||
& $THT_BIN --installation $INSTALLATION update --check-only
|
||||
Assert-NativeSuccess 'installation render check'
|
||||
if ($TransactionalPiUpdate) {
|
||||
& $THTCTL --installation $INSTALLATION pi update `
|
||||
& $THT_BIN --installation $INSTALLATION pi update `
|
||||
--version $NextPiVersion --source build --yes --drain
|
||||
Assert-NativeSuccess 'transactional core update'
|
||||
}
|
||||
& $THTCTL --installation $INSTALLATION start
|
||||
& $THT_BIN --installation $INSTALLATION start
|
||||
Assert-NativeSuccess 'installation start'
|
||||
curl.exe --fail --silent --show-error http://127.0.0.1:8080/health
|
||||
Assert-NativeSuccess 'frontend health check'
|
||||
curl.exe --fail --silent --show-error http://127.0.0.1:8787/health
|
||||
Assert-NativeSuccess 'core health check'
|
||||
$FinalStatus = @(& $THTCTL --installation $INSTALLATION status)
|
||||
$FinalStatus = @(& $THT_BIN --installation $INSTALLATION status)
|
||||
Assert-NativeSuccess 'final installation status'
|
||||
$FinalPiStatus = (& $THTCTL --installation $INSTALLATION pi status)
|
||||
$FinalPiStatus = (& $THT_BIN --installation $INSTALLATION pi status)
|
||||
Assert-NativeSuccess 'final Pi status'
|
||||
if (($FinalPiStatus -replace '^Pi version:\s*', '') -ne $NextPiVersion) {
|
||||
throw 'Running Pi version does not match the pulled pin.'
|
||||
}
|
||||
& $THTCTL --installation $INSTALLATION doctor
|
||||
& $THT_BIN --installation $INSTALLATION doctor
|
||||
Assert-NativeSuccess 'final doctor'
|
||||
Assert-CleanSource
|
||||
Write-Output "Built source revision: $SourceRevision"
|
||||
@@ -414,7 +414,7 @@ install a package in the running container.
|
||||
Back up before source/Pi updates and test restoration periodically. First stop cleanly:
|
||||
|
||||
```sh
|
||||
"$THTCTL" --installation "$INSTALLATION" stop
|
||||
"$THT_BIN" --installation "$INSTALLATION" stop
|
||||
docker volume ls --format '{{.Name}}' | grep '^thothii-'
|
||||
```
|
||||
|
||||
@@ -477,7 +477,7 @@ before normal use. Never merge an archive into a non-empty volume.
|
||||
|
||||
## Data-preserving uninstall
|
||||
|
||||
Run `thothctl stop`, retain the installation descriptor at the same absolute path, and make one
|
||||
Run `tht stop`, retain the installation descriptor at the same absolute path, and make one
|
||||
verified backup set. In Docker Desktop, remove only this installation's stopped `core` and
|
||||
`frontend` containers and optional local images; leave its four named volumes. On Linux, use the
|
||||
containers' exact Compose project labels to remove only those stopped containers. Do not prune
|
||||
@@ -485,7 +485,7 @@ global Docker data.
|
||||
|
||||
Do **not** run `docker compose down --volumes`: it deletes the application data this procedure is
|
||||
meant to preserve. Keep the operator directory and protected secrets if you intend to reinstall.
|
||||
Using the same descriptor path preserves the `thothctl` project identity and reconnects the same
|
||||
Using the same descriptor path preserves the `tht` project identity and reconnects the same
|
||||
named volumes after rebuilding the source checkout.
|
||||
|
||||
## Next: workspaces and Pi
|
||||
|
||||
Reference in New Issue
Block a user