9.8 KiB
Executable File
SysDeck — Quick Start
Author: Jeremy Anderson · info@dcos.net · https://dcos.net Version: 0.2.0 (Master Edition)
Five-minute path from tarball to 26 sidebar entries in your Cockpit — plus the Web Edition with Fester pre-integrated (section 9).
1. Prerequisites
| Component | Why | Install |
|---|---|---|
cockpit-bridge ≥ 239 |
The plugin runtime | pacman -S cockpit / apt install cockpit / dnf install cockpit |
python3 ≥ 3.9 |
Bridge helpers | Universal on modern Linux |
polkit |
Privilege escalation (the cockpit way) | pacman -S polkit / apt install policykit-1 / dnf install polkit |
appstream (optional) |
Cockpit Applications menu | pacman -S appstream / apt install appstream |
Cockpit itself ships its own cockpit-bridge package — that is the only hard dependency. SysDeck degrades gracefully when optional backends (podman, nftables, mkosi, bpftool, apparmor, …) are absent — each panel renders an install hint instead of crashing.
2. Install
# Get the tarball
ls sysdeck-0.0.35.tar.bz2 # download from your release source
# Extract and install
tar xjf sysdeck-0.0.35.tar.bz2
cd sysdeck-0.0.35
sudo make install
# Restart cockpit so it re-scans the plugin directory
sudo systemctl restart cockpit.socket
make install does:
- Copies each
plugins/sysdeck-*/{manifest.json,index.html,*.js}to/usr/share/cockpit/sysdeck-*/ - Copies
shared/{manifest.json,bridge.js,sysdeck.css}to/usr/share/cockpit/sysdeck-common/ - Copies each
bridge/*.py(executable, 0755) to/usr/lib/sysdeck/bridge/ - Copies
firewall/templates/*.sh(executable, 0755) to/usr/share/sysdeck/firewall/templates/ - Installs the AppStream metainfo at
/usr/share/metainfo/sysdeck.metainfo.xml - Installs the polkit policy at
/usr/share/polkit-1/actions/org.sysdeck.policy - Reloads polkit and refreshes the AppStream cache
3. Verify the install
Open https://<host>:9090 in your browser and authenticate as a wheel/sudo user. The Cockpit sidebar should now list 23 entries under the SysDeck <Name> prefix:
| # | Module | # | Module |
|---|---|---|---|
| 1 | SysDeck Containers | 13 | SysDeck Themes |
| 2 | SysDeck Firewall | 14 | SysDeck Hardware Auth |
| 3 | SysDeck Integrity | 15 | SysDeck Glances |
| 4 | SysDeck Network Security | 16 | SysDeck Sensors |
| 5 | SysDeck Service Mesh | 17 | SysDeck Benchmark |
| 6 | SysDeck Vault | 18 | SysDeck Packages |
| 7 | SysDeck Fleet | 19 | SysDeck Policy |
| 8 | SysDeck Kata | 20 | SysDeck Databases |
| 9 | SysDeck Fester | 21 | SysDeck Jellyfin |
| 10 | SysDeck Firmware | 22 | SysDeck Photos |
| 11 | SysDeck Image Builder | 23 | SysDeck Remote FS |
| 12 | SysDeck Mining |
If any are missing, run the diagnostic:
sudo /usr/share/sysdeck/sysdeck-diagnose.sh
It prints exactly what cockpit sees on your system — installed manifests, bridge helpers present, polkit actions loaded, and the cockpit-bridge version.
4. First-use walkthrough
4a. Firewall (the cockpit way)
Open SysDeck Firewall. The panel renders:
- Capability matrix — confirms nftables is installed.
- Template selector — pick
vps-webserver(service-aware firewall that auto-detects SSH/Caddy/Varnish/Forgejo) orno-services(locked-down host with no public services except SSH). - Detect Services — runs the template's
detectaction and shows the OS, interface, IPv4/IPv6, and which services the template found. - Apply Template — cockpit prompts for the superuser password via polkit. The bridge runs the template's
startaction under theorg.sysdeck.firewall.modifyaction. - Banned IPs — live
ssh_abuse/port_scanners/connlimit_abuseban sets, with per-IP Unban buttons and a Clear All button. - Active Ruleset — the live nftables rules table, refreshed after each operation.
To drop in your own template, copy a *.sh file into /usr/share/sysdeck/firewall/templates/ — the panel's templates subcommand discovers it automatically. The script must implement start / stop / restart / detect / status subcommands (see the shipped templates for reference).
4b. Packages (the cockpit way)
Open SysDeck Packages. Click ⬆ Update All. Cockpit prompts for the superuser password via polkit. The bridge runs pacman -Syu / apt upgrade -y / dnf upgrade -y directly via subprocess — no sudo shell-out from JS. Live stdout/stderr stream into the in-panel <pre> log. The 👁 Preview Command button shows the exact command that will be run before you confirm.
4c. Policy & Permissions
Open SysDeck Policy. The panel renders:
- LSM Stack — a badge row in the header showing which LSMs the kernel has stacked (
/sys/kernel/security/lsm), and a table of all 9 supported LSMs with their securityfs paths and active/inactive status. - Capability Matrix — confirms availability of ACLs, cgroups v2, VLANs, eBPF, namespaces, file caps, and each LSM. Absent concerns show a red "no" badge plus the install command.
- ACL Manager — pick a path, type an entry like
group:www-data:rwx, clicksetfacl -m(orsetfacl -xto remove,set default ACLfor directory inheritance). - cgroups v2 — the unified hierarchy tree under
/sys/fs/cgroup/with per-cgroup process counts and controllers. Use Show to inspect one cgroup's processes and control files; mkdir to create a new one; move to migrate a PID; write to setmemory.max,cpu.weight, etc. - VLANs — list and create/delete 802.1Q VLANs via
ip link add ... type vlan id <vid>. - eBPF programs — list loaded BPF programs via
bpftool prog show -j, list maps, pin a program to/sys/fs/bpf/.... - Namespaces —
lsns -Joutput as a table. - File Capabilities —
getcap -r /enumeration withsetcap/getcap/setcap -rcontrols. - AppArmor (optional) — if the kernel compiled AppArmor in, shows the enforcement mode and lets you switch profiles between
enforceandcomplainmodes. If absent, renders an install hint. - Smack / TOMOYO / Yama / LoadPin / Lockdown / BPF-LSM / Landlock — each has its own card with the live state and any management controls the LSM supports. Each card follows the same shape: if the LSM is not active, the card shows the kernel cmdline that enables it; if active, it shows the live state.
4d. Databases
Open SysDeck Databases. The panel auto-detects 32+ engines across SQL (PostgreSQL/MySQL/MariaDB/SQLite/CockroachDB/TiDB), NoSQL (MongoDB/CouchDB/RethinkDB/DynamoDB-local), Vector (Milvus/Qdrant/Weaviate/Chroma/pgvector), TimeSeries (InfluxDB/TimescaleDB/QuestDB/ClickHouse), Graph (Neo4j/ArangoDB/OrientDB), Embedded (Redis/KeyDB/ValKey/RocksDB/LMDB/BadgerDB), Cloud (Firestore-emulator/Supabase-local), and AI (LanceDB/DuckDB/Tile38). Each row has ▶ Start / ■ Stop / ↻ Restart / 🔍 Status buttons. The Run SQL Query card lets you execute arbitrary SQL against SQL-family engines via the engine's CLI client (psql -tAc, mysql -e, etc.).
5. Build from source
cd sysdeck-0.0.35
make check # 7 build-time guards: manifests, metainfo, tabs, no-broken-import, no-broken-module, bridge-subcommands cross-check, version sync
make dist # builds sysdeck-0.0.35.tar.bz2
make distcheck # extracts + runs make check inside the tarball tree
make check is a hard pre-flight: it cross-checks every bridgeCmd("<module>", ["<sub>", ...]) call in shared/bridge.js against the COMMANDS dict declared in each bridge/<module>.py. If the JS calls a subcommand the Python helper doesn't implement, make check fails with a clear message naming the file, line, and missing subcommand.
6. Uninstall
sudo make uninstall
sudo systemctl restart cockpit.socket
make uninstall removes every trace of every prior version (the v0.0.9-v0.0.19 single-plugin /usr/share/cockpit/sysdeck/ directory, the v0.0.20+ multi-plugin /usr/share/cockpit/sysdeck-*/ directories, the Python bridge helpers, the diagnostic scripts, the firewall templates, the AppStream metainfo, the polkit policy, and any pacman-installed sysdeck package).
7. Where to go next
- README.md — full module catalog, architecture, coding standards.
- BLOG.md — release narrative for v0.0.33 and prior versions.
- docs/INSTALL.md — RPM, DEB, pip, and manual install paths.
- QA.md — QA notes per release.
- worklog.md — per-task development log.
8. Reporting issues
Open the in-panel error view: every SysDeck plugin's index.html installs window.addEventListener('error') and 'unhandledrejection' handlers that replace the "Loading…" placeholder with the actual error message on the page — no devtools required. The same page tells you whether cockpit.js itself loaded, whether bridge.js imported cleanly, and whether the panel's mount() threw.
9. The Web Edition (master tarball, v0.2.0)
The master tarball also ships the SysDeck Web Edition at web/ — a standalone browser console (no cockpit required) with 28 bridge modules, real /proc / /sys collectors, and Fester pre-integrated (vendored at web/mini-services/fester, independent version 0.2.1):
make web-dev # fester service in the background (:3010) + web console (:3000)
Manual equivalent:
make fester-start # terminal 1: fester on :3010
cd web && bun install && bun run db:push # terminal 2: web edition setup
bun run dev # web console on :3000
Open http://localhost:3000. The master tarball can be rebuilt any time with make master.
Author: Jeremy Anderson · info@dcos.net · https://dcos.net