Files
firezone/rust/headless-client/docs/use_cases.md
Reactor Scram 3a67eacfbe refactor(linux-client): replace client-tunnel with headless-client which is the same thing (#4516)
Unfortunately I had to keep `linux-client` to get the compatibility
tests to pass. #4578 aims to remove that package.

Please add to this list if you think of anything:

```[tasklist]
# Things that may break that CI/CD won't catch
- [ ] Github release artifacts
- [ ] Knowledge base 
- [ ] Docker images
- [ ] Docker containers
- [ ] Existing `linux-client` users
- [ ] Anything that downloads ghcr artifacts
- [ ] Nix (Not sure if it's built in CI. It had a merge conflict)
```

Refs #4515, and #3712, #3782

I think this is what Thomas and I agreed on in Slack / Github

---------

Signed-off-by: Reactor Scram <ReactorScram@users.noreply.github.com>
Co-authored-by: Thomas Eizinger <thomas@eizinger.io>
2024-04-10 22:01:55 +00:00

1.6 KiB

Linux client use cases

This document lists the most common use cases that we could test. Exhaustively tesing everything would be difficult. These cases at least exercise every feature once, although they don't exercise every combination of features.

  1. Alpine Docker container, CLI only, resolv.conf DNS (Easy to test)
  2. Exe only, Manual startup, CLI only, No DNS (Embedded / IoT)
  3. Exe only, Manual startup, CLI only, resolv.conf DNS (Embedded / IoT)
  4. Package manager installation, activated by NetworkManager, CLI only, NetworkManager DNS (To get NM working before committing to a GUI)
  5. Package manager installation, runs as always-on systemd service unit, Tauri GUI, resolvectl DNS (A desktop that doesn't have NetworkManager)
  6. Package manager installation, runs as systemd service unit, activated by NetworkManager, Tauri GUI and NetworkManager interfaces, NetworkManager DNS (The "Make me one with everything" option)

If we don't test a real package manager (e.g. apt, yum) we can consider a tarball artifact to be a "package" and untar it in CI to get the systemd and NetworkManager service files. cargo-deb does work well for Debian systems.

Code paths to be exercised

Install method

  1. Exe only
  2. Package manager (e.g. apt / yum) or equivalent manual install
  3. Docker (Unsupported in prod, only for testing?)

Startup

  1. Manual
  2. Systemd service unit
  3. D-Bus service activation by NetworkManager

Interface

  1. CLI only
  2. Tauri GUI
  3. NetworkManager plugin

DNS control method

  1. None
  2. resolv.conf
  3. resolvectl
  4. NetworkManager (Ubuntu 20.04 Desktop and Debian 12 with XFCE both come with NM by default, so it's very popular)