2026-09-10 04:00:00 +00:00
|
|
|
# Command line
|
|
|
|
|
|
|
|
|
|
Every script is its own program, and there is no global command. The reference below is
|
|
|
|
|
taken from each script's own `--help`; if the two disagree, the program is right and
|
|
|
|
|
this file is a defect.
|
|
|
|
|
|
|
|
|
|
Common to all six: `--version` prints the version and exits, `-h` / `--help` prints the
|
|
|
|
|
usage and exits, options are given as `--name value` or `--name=value`, and an unknown
|
|
|
|
|
option is refused with the usage and exit code 2.
|
|
|
|
|
|
|
|
|
|
## network-diag.pl
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
Usage: network-diag.pl [options]
|
|
|
|
|
|
|
|
|
|
Network diagnostics: latency, DNS, MTU, dual-stack, ports
|
|
|
|
|
|
|
|
|
|
Options:
|
|
|
|
|
--target HOST Target host for tests (default: cloudflare.com)
|
|
|
|
|
--protocol FAMILY Address family: auto (dual-stack), v4 (IPv4 only),
|
|
|
|
|
v6 (IPv6 only) (default: auto)
|
|
|
|
|
--version Show the version and exit
|
|
|
|
|
-h, --help Show this help and exit
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
| Flag | Default | Effect |
|
|
|
|
|
|---|---|---|
|
|
|
|
|
| `--target HOST` | `cloudflare.com` | The host pinged, resolved and probed for MTU |
|
|
|
|
|
| `--protocol FAMILY` | `auto` | `auto` measures both families, `v4` and `v6` restrict the run |
|
|
|
|
|
|
|
|
|
|
Runs without root. Ports belonging to other users are reported as `(no permission)`
|
|
|
|
|
rather than silently dropped.
|
|
|
|
|
|
|
|
|
|
## system-diag.pl
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
Usage: system-diag.pl [options]
|
|
|
|
|
|
|
|
|
|
System diagnostics: CPU, memory, disk, network, GPU, services, security, performance
|
|
|
|
|
|
|
|
|
|
Options:
|
|
|
|
|
--section LIST Comma-separated sections to run. Available: overview, cpu, memory, disk, network, gpu, services, security, performance, issues [default: all]
|
|
|
|
|
--external-ip Also detect external IP addresses via icanhazip.com (sends a request to a third-party service)
|
|
|
|
|
--json Output machine-readable JSON to stdout
|
|
|
|
|
--version Show the version and exit
|
|
|
|
|
-h, --help Show this help and exit
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
| Flag | Default | Effect |
|
|
|
|
|
|---|---|---|
|
|
|
|
|
| `--section LIST` | all | Runs only the named sections |
|
|
|
|
|
| `--external-ip` | off | Sends a request to `icanhazip.com` to report the public address |
|
|
|
|
|
| `--json` | off | Writes the JSON document to stdout instead of the report |
|
|
|
|
|
|
|
|
|
|
Runs without root; some figures need it and are reported as unavailable instead. Colour
|
|
|
|
|
is used only on a terminal and is suppressed by `NO_COLOR`. The report goes to stderr,
|
|
|
|
|
so `--json` keeps stdout clean.
|
|
|
|
|
|
|
|
|
|
## server-setup.pl
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
Usage: server-setup.pl [options]
|
|
|
|
|
|
|
|
|
|
Idempotent server setup for Fedora Server, CentOS Stream and openEuler
|
|
|
|
|
|
|
|
|
|
Options:
|
|
|
|
|
--dry-run Print what would be done without making changes
|
|
|
|
|
--skip-update Skip system update
|
|
|
|
|
--skip-packages Skip base package installation
|
|
|
|
|
--skip-epel Skip EPEL repository setup on CentOS
|
|
|
|
|
--skip-firewall Skip firewall setup
|
|
|
|
|
--skip-selinux Skip SELinux configuration
|
|
|
|
|
--skip-podman Skip Podman installation
|
|
|
|
|
--skip-auto-updates Skip automatic updates configuration
|
|
|
|
|
--version Show the version and exit
|
|
|
|
|
-h, --help Show this help and exit
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Needs root. The `--skip-*` flags exist per section so a section can be left to another
|
|
|
|
|
tool; the sections are ordered update, EPEL, packages, firewall, SELinux, Podman,
|
|
|
|
|
automatic updates.
|
|
|
|
|
|
|
|
|
|
## workstation-setup.pl
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
Usage: workstation-setup.pl [options]
|
|
|
|
|
|
|
|
|
|
Idempotent workstation setup for Fedora
|
|
|
|
|
|
|
|
|
|
Options:
|
|
|
|
|
--dry-run Print what would be done without making changes
|
|
|
|
|
--skip-update Skip system update
|
|
|
|
|
--skip-rpm Skip RPM package installation
|
|
|
|
|
--skip-flatpak Skip Flatpak apps
|
|
|
|
|
--skip-repos Skip adding third-party repos
|
|
|
|
|
--skip-remove Skip removing pre-installed apps
|
|
|
|
|
--skip-go Skip Go toolchain installation
|
|
|
|
|
--skip-rust Skip Rust toolchain installation
|
|
|
|
|
--skip-jetbrains Skip JetBrains IDE installation
|
|
|
|
|
--skip-firewall Skip firewall setup
|
|
|
|
|
--skip-selinux Skip SELinux setup
|
|
|
|
|
--version Show the version and exit
|
|
|
|
|
-h, --help Show this help and exit
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Needs root, and targets Fedora only. The Go toolchain and GoLand are downloaded and
|
|
|
|
|
verified by checksum; Brave's repository key is verified by fingerprint before import.
|
|
|
|
|
|
|
|
|
|
## sglang-deploy.pl
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
Usage: sglang-deploy.pl [options]
|
|
|
|
|
|
2026-09-29 00:18:15 +02:00
|
|
|
--model ID ModelScope model ID (menu when omitted)
|
2026-09-10 04:00:00 +00:00
|
|
|
--port N internal engine port (default: 8000, not 443)
|
|
|
|
|
--tensor-parallel N GPUs for tensor parallelism (default: 1, written as
|
|
|
|
|
the engine's --tp-size)
|
|
|
|
|
--max-model-len N context length (default: 4096, written as the
|
|
|
|
|
engine's --context-length)
|
|
|
|
|
--gpu-memory-utilization F static memory fraction (default: 0.90, written as
|
|
|
|
|
the engine's --mem-fraction-static)
|
|
|
|
|
--state-dir PATH state and model cache directory (default: /opt/sglang)
|
|
|
|
|
--service-name NAME systemd service name (default: sglang)
|
|
|
|
|
--cert-dir PATH TLS certificate directory (default: /etc/ssl/sglang)
|
|
|
|
|
--image TAG engine image (default: resolved from the GPU and
|
|
|
|
|
the newest SGLang release; a Radeon card resolves
|
|
|
|
|
AMD's newest dated gfx1151 build)
|
|
|
|
|
--rocm-flavour NAME ROCm flavour of the image (default: from the host
|
|
|
|
|
ROCm; rocm10, rocm724, rocm720 or rocm700)
|
|
|
|
|
--api-key KEY API key for the endpoint (default: generate and
|
|
|
|
|
store in /etc/sysconfig)
|
|
|
|
|
--dry-run preview without making changes
|
2026-09-29 00:18:15 +02:00
|
|
|
--uninstall tear down the service, container, caddy drop-in
|
2026-09-10 04:00:00 +00:00
|
|
|
and certificates
|
|
|
|
|
--help show this help
|
|
|
|
|
--version show the version
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Needs root. Without `--model` an interactive menu offers GLM 5.3, GLM 5.3 Flash,
|
2026-09-29 00:18:15 +02:00
|
|
|
Qwen 3.8 Max, Qwen 3.8 Flash and DeepSeek V4.1 Flash, plus a free-form entry.
|
|
|
|
|
`--tensor-parallel`, `--max-model-len` and `--gpu-memory-utilization` are
|
2026-09-10 04:00:00 +00:00
|
|
|
written to the unit as the engine's own `--tp-size`, `--context-length` and
|
|
|
|
|
`--mem-fraction-static`. The API key is shown once when it is generated; a key given
|
|
|
|
|
with `--api-key` is never echoed. `--uninstall` stops and disables the service, removes
|
2026-09-29 00:18:15 +02:00
|
|
|
the unit, the container, the caddy drop-in and the certificates, and keeps the
|
2026-09-10 04:00:00 +00:00
|
|
|
image and the model cache.
|
|
|
|
|
|
|
|
|
|
## system-optimise.pl
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
Usage: system-optimise.pl [options]
|
|
|
|
|
|
|
|
|
|
Idempotent system cleanup and optimisation for Fedora, CentOS Stream and openEuler
|
|
|
|
|
|
|
|
|
|
Options:
|
|
|
|
|
--dry-run Preview without making changes
|
|
|
|
|
--skip-dnf Skip DNF cleanup (autoremove, old kernels, cache)
|
|
|
|
|
--skip-journal Skip journal vacuum
|
|
|
|
|
--skip-tmp Skip temp file cleanup
|
|
|
|
|
--skip-cores Skip core dump cleanup
|
|
|
|
|
--version Show the version and exit
|
|
|
|
|
-h, --help Show this help and exit
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Needs root. The running kernel and one fallback are always kept. Both dnf generations
|
|
|
|
|
are driven: Fedora ships dnf 5, CentOS Stream 10 and openEuler ship dnf 4.
|
|
|
|
|
|
|
|
|
|
## Exit codes
|
|
|
|
|
|
|
|
|
|
| Code | Meaning |
|
|
|
|
|
|---|---|
|
|
|
|
|
| `0` | The run completed, and every step it attempted succeeded |
|
|
|
|
|
| `1` | A step failed, a required tool is missing, the hardware does not qualify, or the system is unsupported |
|
|
|
|
|
| `2` | The arguments were wrong, or interactive input was needed and stdin is not a terminal |
|
|
|
|
|
|
|
|
|
|
A run that finishes with failed steps prints them at the end of the summary and exits 1,
|
|
|
|
|
so a pipeline notices even when the failure was not fatal.
|
|
|
|
|
|
|
|
|
|
## Examples
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
# Is the connection healthy, and is IPv6 working?
|
|
|
|
|
perl network-diag.pl --target example.org --protocol auto
|
|
|
|
|
|
|
|
|
|
# The same machine's health as JSON, for a monitoring poll
|
|
|
|
|
perl system-diag.pl --json --section cpu,memory,disk
|
|
|
|
|
|
|
|
|
|
# A new server, seen before it is changed
|
|
|
|
|
sudo perl server-setup.pl --dry-run
|
|
|
|
|
|
|
|
|
|
# Cleanup, leaving journals and core dumps alone
|
|
|
|
|
sudo perl system-optimise.pl --skip-journal --skip-cores
|
|
|
|
|
|
|
|
|
|
# Deploy a model and then take it down again
|
|
|
|
|
sudo perl sglang-deploy.pl --model deepseek-ai/DeepSeek-V4-Flash-0731
|
|
|
|
|
sudo perl sglang-deploy.pl --uninstall
|
|
|
|
|
```
|