Add Jeannie man page
This commit is contained in:
parent
8582c3ea61
commit
1d73c33703
|
|
@ -0,0 +1,289 @@
|
|||
# JEANNIE(1)
|
||||
|
||||
## NAME
|
||||
|
||||
jeannie - operate the personal homelab control pipeline
|
||||
|
||||
## SYNOPSIS
|
||||
|
||||
```sh
|
||||
./jeannie COMMAND [ARG...]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
`jeannie` is the main homelab operator script. It deploys and checks the Debian
|
||||
control host, Gitea, Raspberry Pi services, Pimox workers, Kubernetes platform
|
||||
components, applications, public edge routing, secrets tooling, and local AI
|
||||
helpers.
|
||||
|
||||
Run mutating infrastructure commands from the Debian homelab host. Commands that
|
||||
can destroy or rewrite state have explicit confirmation environment variables.
|
||||
The canonical script name is `metadata.main_script` in `homelab.yml`.
|
||||
|
||||
## COMMANDS
|
||||
|
||||
### Core Lifecycle
|
||||
|
||||
`up`
|
||||
: Deploy the full homelab pipeline. Runs early preflight, deploys Gitea and RPi
|
||||
services, runs full preflight and pre-apply doctor checks, then applies Pimox,
|
||||
OpenWrt, cluster, platform, apps, and edge stacks.
|
||||
|
||||
`plan [all|provisioning|cluster|platform|apps|edge]`
|
||||
: Run OpenTofu plans without applying changes. The default target is `all`.
|
||||
|
||||
`rebuild-cluster`
|
||||
: Back up current local OpenTofu state, destroy cluster state through the guarded
|
||||
nuke path, rebuild Pimox workers, recreate the cluster, and redeploy platform,
|
||||
apps, and edge.
|
||||
|
||||
`stop-cluster`
|
||||
: Stop the Kubernetes control-plane runtime and worker VMs without destroying
|
||||
cluster state.
|
||||
|
||||
`start-cluster`
|
||||
: Start the Kubernetes control-plane runtime and desired worker VMs.
|
||||
|
||||
`status`
|
||||
: Print a compact health report for the configured homelab.
|
||||
|
||||
`nuke`
|
||||
: Destroy Kubernetes state and Pimox worker VMs. Requires
|
||||
`LAB_CONFIRM_NUKE=homelab`.
|
||||
|
||||
### Deploy Targets
|
||||
|
||||
`apps`
|
||||
: Deploy platform applications and build or publish application images when
|
||||
needed.
|
||||
|
||||
`deploy-gitea`
|
||||
: Deploy the external Gitea Docker Compose service on the Debian host.
|
||||
|
||||
`rpi-services`
|
||||
: Deploy Pi-hole, Unbound, and Uptime Kuma on the Raspberry Pi.
|
||||
|
||||
`bootstrap-gitea-repo`
|
||||
: Ensure the configured Gitea repository, branch, remotes, and host SSH key are
|
||||
ready.
|
||||
|
||||
`openwrt`
|
||||
: Apply the OpenWrt VM stack.
|
||||
|
||||
### Gitea Operations
|
||||
|
||||
`backup-gitea`
|
||||
: Run a Gitea backup on the Debian host.
|
||||
|
||||
`drill-gitea-restore`
|
||||
: Run the Gitea restore drill workflow.
|
||||
|
||||
`install-gitea-runner [TOKEN]`
|
||||
: Install or repair the Gitea Actions runner. If `TOKEN` is omitted, the command
|
||||
uses the configured token source.
|
||||
|
||||
### Checks And Doctors
|
||||
|
||||
`preflight`
|
||||
: Run homelab preflight checks. This verifies inventory-derived host settings,
|
||||
Docker roots, Tailscale IPs, Gitea reachability, Pimox storage, and OCI edge SSH.
|
||||
|
||||
`doctor-preapply`
|
||||
: Run blocking readiness checks used by `up` before high-blast-radius applies.
|
||||
It checks Debian free disk, Docker and containerd, Raspberry Pi Docker
|
||||
writability, Pimox storage, OCI edge disk, and Pi-hole DNS.
|
||||
|
||||
`doctor-versions`
|
||||
: Check Kubernetes component version alignment.
|
||||
|
||||
`doctor-edge`
|
||||
: Diagnose public edge routing, Traefik reachability, and Gitea edge exposure.
|
||||
|
||||
`doctor-gitea`
|
||||
: Diagnose Debian Gitea container, local access, edge access, and repository
|
||||
health.
|
||||
|
||||
`doctor-rpi`
|
||||
: Diagnose Raspberry Pi services, Pi-hole DNS, Unbound DNS, fallback DNS,
|
||||
Uptime Kuma, and Docker root state.
|
||||
|
||||
`doctor-cluster`
|
||||
: Diagnose Kubernetes API, nodes, core pods, MetalLB, Traefik, and app health.
|
||||
|
||||
`inventory-check`
|
||||
: Validate `homelab.yml` with a real YAML parser when available.
|
||||
|
||||
`secrets-check`
|
||||
: Validate SOPS and age configuration plus committed encrypted secret file
|
||||
structure.
|
||||
|
||||
`tailnet-policy-check`
|
||||
: Validate the repo-managed Tailscale ACL policy.
|
||||
|
||||
`ai-check`
|
||||
: Check local AI helper prerequisites, knowledge index, and Ollama availability
|
||||
when the backstage helper is enabled.
|
||||
|
||||
### Maintenance
|
||||
|
||||
`state-backup`
|
||||
: Create a local tarball backup of OpenTofu state and generated homelab state
|
||||
files.
|
||||
|
||||
`fix-debian-docker-root`
|
||||
: Repair or migrate the Debian Docker root according to inventory settings.
|
||||
|
||||
`move-prometheus-stack-workers`
|
||||
: Move Prometheus stack workloads off the control plane. Requires
|
||||
`LAB_CONFIRM_DELETE_PROMETHEUS_DATA=true` because Prometheus PVC data is deleted.
|
||||
|
||||
`secrets-init`
|
||||
: Initialize local age and SOPS configuration on the Debian host.
|
||||
|
||||
`ai-index`
|
||||
: Build the local homelab knowledge index for the backstage AI helper.
|
||||
|
||||
`ollama-setup`
|
||||
: Install or configure Ollama on the Debian host and pull the configured local
|
||||
model.
|
||||
|
||||
`website-translation-model`
|
||||
: Prepare the website translation model assets.
|
||||
|
||||
`website-ollama-listen`
|
||||
: Configure the Ollama service listen address for website use.
|
||||
|
||||
## COMMON ENVIRONMENT
|
||||
|
||||
`HOMELAB_INVENTORY_FILE`
|
||||
: Path to the canonical non-secret inventory. Defaults to `./homelab.yml`.
|
||||
|
||||
`HOMELAB_STATE_DIR`
|
||||
: Local runtime state directory. Defaults to
|
||||
`${XDG_DATA_HOME:-$HOME/.local/share}/homelab`.
|
||||
|
||||
`JEANNIE_LOG_DIR`
|
||||
: Directory for command logs. Defaults to `$HOMELAB_STATE_DIR/logs`.
|
||||
|
||||
`JEANNIE_VERBOSE=true`
|
||||
: Print full step output as it runs. Without this, noisy commands are compact and
|
||||
full output is written to the log file.
|
||||
|
||||
`LAB_AUTO_APPROVE=false`
|
||||
: Disable automatic OpenTofu approval for apply paths that support confirmation.
|
||||
|
||||
`LAB_PIMOX_WORKER_COUNT`
|
||||
: Desired Pimox worker count when not supplied by generated cluster topology
|
||||
state.
|
||||
|
||||
`LAB_SKIP_PREFLIGHT=true`
|
||||
: Skip preflight checks. Use only for targeted troubleshooting.
|
||||
|
||||
`LAB_PREFLIGHT_ROOT_MIN_FREE_GIB`
|
||||
: Minimum Debian `/` free space for `doctor-preapply`. Default is `10`.
|
||||
|
||||
`LAB_PREFLIGHT_DATA_MIN_FREE_GIB`
|
||||
: Minimum Debian `/data` free space for `doctor-preapply`. Default is `20`.
|
||||
|
||||
`LAB_PREFLIGHT_EDGE_MIN_FREE_GIB`
|
||||
: Minimum OCI edge `/` free space for `doctor-preapply`. Default is `2`.
|
||||
|
||||
`LAB_GITEA_INSTALL_DOCKER=true`
|
||||
: Allow `deploy-gitea` to install Docker through `get.docker.com` when Docker is
|
||||
missing. Default is to fail and ask for host bootstrap.
|
||||
|
||||
`LAB_RPI_INSTALL_DOCKER=true`
|
||||
: Allow `rpi-services` to install Docker through `get.docker.com` on the
|
||||
Raspberry Pi when Docker is missing. Default is to fail.
|
||||
|
||||
`TF_VAR_edge_install_docker=true`
|
||||
: Allow the edge OpenTofu stack to install Docker on the OCI host when Docker is
|
||||
missing. Default is to fail.
|
||||
|
||||
`TF_VAR_haproxy_stats_password`
|
||||
: Required HAProxy stats password for the edge stack. It must be set explicitly
|
||||
and must not use the old default.
|
||||
|
||||
`LAB_CONFIRM_NUKE=homelab`
|
||||
: Required confirmation for direct `./jeannie nuke`.
|
||||
|
||||
`LAB_NUKE_DESTROY_PIMOX_WORKERS=true`
|
||||
: Also destroy Pimox worker VMs during `nuke`.
|
||||
|
||||
`LAB_CONFIRM_DELETE_PROMETHEUS_DATA=true`
|
||||
: Required confirmation for `move-prometheus-stack-workers`.
|
||||
|
||||
## FILES
|
||||
|
||||
`homelab.yml`
|
||||
: Canonical non-secret inventory for hosts, IPs, domains, ports, and the main
|
||||
script name.
|
||||
|
||||
`.lab/cluster-workers.auto.tfvars.json`
|
||||
: Generated worker topology passed to the cluster stack.
|
||||
|
||||
`.lab/pimox-workers.tsv`
|
||||
: Generated Pimox worker inventory.
|
||||
|
||||
`.lab/manual-workers.tsv`
|
||||
: User-managed manual worker inventory.
|
||||
|
||||
`$HOMELAB_STATE_DIR/logs`
|
||||
: Jeannie command logs.
|
||||
|
||||
`$HOMELAB_STATE_DIR/tofu-state-backups`
|
||||
: Local OpenTofu and generated state backups.
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
Start a three-worker homelab:
|
||||
|
||||
```sh
|
||||
LAB_PIMOX_WORKER_COUNT=3 ./jeannie up
|
||||
```
|
||||
|
||||
Preview all OpenTofu changes:
|
||||
|
||||
```sh
|
||||
./jeannie plan
|
||||
```
|
||||
|
||||
Run focused edge diagnostics:
|
||||
|
||||
```sh
|
||||
./jeannie doctor-edge
|
||||
```
|
||||
|
||||
Run the blocking pre-apply doctor directly:
|
||||
|
||||
```sh
|
||||
./jeannie doctor-preapply
|
||||
```
|
||||
|
||||
Create a local state backup:
|
||||
|
||||
```sh
|
||||
./jeannie state-backup
|
||||
```
|
||||
|
||||
Destroy the cluster path intentionally:
|
||||
|
||||
```sh
|
||||
LAB_CONFIRM_NUKE=homelab ./jeannie nuke
|
||||
```
|
||||
|
||||
## EXIT STATUS
|
||||
|
||||
`0`
|
||||
: Command completed successfully.
|
||||
|
||||
Non-zero
|
||||
: A check, deployment step, or external tool failed. Check the printed error and
|
||||
the referenced Jeannie log file for full command output.
|
||||
|
||||
## SEE ALSO
|
||||
|
||||
`README.md`, `docs/service-catalog.md`, `docs/runbooks/edge-failures.md`,
|
||||
`docs/runbooks/gitea-failures.md`,
|
||||
`docs/runbooks/cluster-stop-start-failures.md`, `docs/secrets.md`.
|
||||
Loading…
Reference in New Issue