jatszoter logo

jatszoter

jatszoter is a self-hosted, open-source training and exam stand for Linux troubleshooting, in the spirit of SadServers. An operator starts a deployment: a VM on one of the agents, bootstrapped from a scenario that installs, configures and then breaks something. The operator watches the VM terminal, hands it to a trainee through a unique link, can take control back at any moment, and a check script decides whether the trainee fixed the problem. Every terminal session is recorded for replay.

Demo

Jatszoter Demo #1

Demo #1 walks one full cycle on the nginx-502 scenario: a trainee and a deployment are created, the VM bootstraps, the trainee fixes the 502 in the terminal and the check passes, then the operator stops the deployment and purges its logs.

Components

  • packages/api - the control plane, FastAPI over SQLModel: agents, leases, scenarios, deployments, links, recordings and checks.
  • packages/agent - the host daemon in Rust: leases deployments, runs up to N QEMU VMs, bootstraps them with cloud-init and ships their consoles.
  • packages/web - the operator and trainee UI: FastAPI, Jinja2, HTMX and xterm.js.

How they fit together is in docs/project/01-architecture.md.

Repository layout

Path What it holds
packages/ api, agent, web and shared Python code
scenarios/ scenarios, one directory each
docs/ project documentation and its GitHub Pages site
docker/ container images of api and web
prompts/ step-by-step implementation prompts
dev/web/ Penpot mockups of the Web UI

Requirements

On a Debian or Ubuntu workstation:

sudo apt install python3 python3-venv make docker.io docker-compose-v2 shellcheck

Rust comes from rustup; cargo fmt and cargo clippy run as pre-commit hooks. hadolint is a single binary on PATH.

Development

make install
make shell
make lint

make install builds .venv, installs the pinned tools and the git hooks. make shell opens a shell inside that venv. make lint runs every pre-commit hook over the tree.

The Web UI is designed before it is built: see dev/web/README.md.

Contributing

Read CONTRIBUTING.md before you open a pull request, and follow the Code of Conduct. Vulnerabilities go through SECURITY.md, never through a public issue.