Record the Caddy reverse-proxy at /etc/caddy/ (14 *.localhost sites,
mkcert TLS, systemd caddy.service) as a manual override in
docs/tech/manual-overrides.md - no caddy Ansible role exists yet.
Add a 'Local Dev Services' section to docs/tech/stack.md listing all
*.localhost sites and useful Caddy commands.
New learning record docs/learnings/2026-07-06-caddy-onlyoffice-mcp-sse-
investigation.md: Caddy emits 'context canceled' SSE aborts (~1.5ms) on
onlyoffice.localhost/mcp -> localhost:3847. Upstream verified alive
(HTTP 406 to plain GET = expected). Handed off to GitLab issue
satware/mcp/onlyoffice#92 with 5 hypotheses, 7 tasks, and a proposed
flush_interval -1 + transport http { versions 1.1 } mitigation (not
applied yet to avoid masking root cause).
136 lines
6.5 KiB
Markdown
136 lines
6.5 KiB
Markdown
---
|
|
description: >-
|
|
Detailed inventory of the core software stack, OS context, and maintenance
|
|
policies for the mw-pfeddersheim-workstation.
|
|
tags:
|
|
- software-stack
|
|
- inventory
|
|
- tech-stack
|
|
last_updated: '2026-07-06'
|
|
---
|
|
|
|
# Software Stack - mw-pfeddersheim-workstation
|
|
|
|
## Core Development Environment
|
|
|
|
| Technology | Version | Description |
|
|
|------------|---------|-------------|
|
|
| **Node.js** | 25.6.1 | Primary JavaScript/TypeScript runtime |
|
|
| **Python** | 3.14.3 | Secondary scripting and AI automation language |
|
|
| **PHP** | 8.5.3 (CLI) | Legacy and ERP integration language |
|
|
| **Ansible** | 2.20.2 (core) | Infrastructure provisioning and configuration |
|
|
| **Docker** | 29.2.1 | Containerization and environment isolation |
|
|
| **Git** | latest | Version control |
|
|
| **ripgrep** | latest | Fast line-oriented search tool (`rg`) |
|
|
| **bat** | latest | A `cat` clone with syntax highlighting |
|
|
| **rustdesk** | latest | Remote management via Tailscale |
|
|
|
|
## Desktop Environment
|
|
|
|
|| Technology | Version | Description |
|
|
||------------|---------|-------------|
|
|
|| **Hyprland** | 0.55.2 | Wayland compositor (uwsm-managed) |
|
|
|| **Waybar** | latest | Status bar (with USB auto-mount module) |
|
|
|| **Kitty** | latest | GPU-accelerated terminal emulator |
|
|
|| **Fuzzel** | latest | Application launcher (preferred over Wofi) |
|
|
|| **Dunst** | latest | Notification daemon |
|
|
|| **yazi** | latest | Terminal file manager (full deps: chafa, 7zip, resvg, etc.) |
|
|
|
|
## Known Issues (2026-05-22 Boot Audit)
|
|
|
|
| Domain | Issue | Status |
|
|
|--------|-------|--------|
|
|
| **PCIe slot** | GPU in bottom PCIEX4 slot (PCIe 2.0 x4, ~2 GB/s) instead of top PCIEX16 (PCIe 3.0 x16, ~16 GB/s). **8x bandwidth loss** | **Pending**: physical move required |
|
|
| **PCIe slot** | NVMe Samsung PM9A1 running Gen2 x4 (8 GT/s) instead of Gen3 x4 (16 GT/s). May resolve after GPU slot fix + BIOS Gen3 setting | **Pending**: BIOS tuning |
|
|
| **Idle daemon** | hypridle SEGV crash loop — sdbus-cpp 2.3.0 ABI break | **Fixed**: sdbus-cpp upgraded to 2.3.1-1 |
|
|
| **Webcam (UVC)** | Device 1-10 has multiple UVC control failures (zoom/pan/tilt/iris non-functional due to firmware non-compliance) | Known hardware limitation, core capture works |
|
|
| **KVM** | `/dev/kvm` unavailable — libvirtd cannot use hardware acceleration | Open — check BIOS VT-x/AMD-V |
|
|
| **Wi-Fi regulatory** | `regulatory.db` firmware missing — channels restricted | Open — install `wireless-regdb` |
|
|
| **D-Bus** | Stale `org.kde.kwalletd6.service` file; dunst/kscreen naming mismatches | **Fixed**: kwalletd6 stub removed; kscreen/kscreenlocker/libkscreen uninstalled (35 MiB) |
|
|
| **XDG portals** | Deprecated `UseIn` key usage (portals.conf preferred) | Low priority, functional |
|
|
|
|
**Removed (2026-05-22, ADR 0007)**: All X11 display managers (lightdm, sddm), X11 video/input drivers (xf86-*), X11 tools (xterm, xorg-xinit, x11vnc, etc.), entire KDE Plasma stack (kwin, plasma-desktop, plasma-workspace, plasma-nm, plasma-pa, powerdevil, etc.), and Dolphin (replaced by yazi). `greetd`+`tuigreet` is the active DM. Screenshots use `grim`+`slurp`+`grimblast`.
|
|
|
|
## Browsers
|
|
|
|
| Technology | Version | Notes |
|
|
|------------|---------|-------|
|
|
| **Google Chrome** | 148.0.7778.178 (AUR) | Sole browser — Wayland-native, VA-API on NVIDIA |
|
|
| ~~Chromium~~ | ~~removed~~ | All artifacts cleaned 2026-05-22 (see ADR 0006) |
|
|
|
|
## OS Context
|
|
- **OS**: Linux (Manjaro/Arch Linux based)
|
|
- **Architecture**: x86_64
|
|
|
|
## Package Domain Classification (ADR 0007 Tier 4)
|
|
|
|
Packages previously listed as "Misc" reclassified to functional domains:
|
|
|
|
| Package | New Domain | Role |
|
|
|---------|-----------|------|
|
|
| uv | Python Toolchain | Fast Python package/env manager |
|
|
| jq | Shell/Terminal | JSON processor |
|
|
| inxi | Hardware | System hardware info |
|
|
| lsof | Core OS | List open files |
|
|
| iproute2 | Network | Advanced routing/networking |
|
|
| openresolv | Network | DNS resolver management |
|
|
| perl-image-exiftool | Dev Tools | Metadata read/write |
|
|
| icoutils | Dev Tools | ICO/ANE cursor extraction |
|
|
| innoextract-git | Dev Tools | Inno Setup installer extraction |
|
|
| opencl-headers | GPU Compute | OpenCL C headers |
|
|
| libxnvctrl-580xx | NVIDIA | NVML/XNVCTRL for 580xx |
|
|
| zram-generator | Core OS | Systemd zram swap generator |
|
|
| mkinitcpio-openswap | Core OS | Swap resume hook for mkinitcpio |
|
|
|
|
## Maintenance Policies
|
|
- **Updates**: System-wide updates via `pacman` managed through maintenance scripts.
|
|
- **Node.js**: Global packages managed via `pnpm`.
|
|
- **Python**: Use `uv` for environment management.
|
|
- **PHP**: Managed via system package manager, focused on CLI execution.
|
|
|
|
## Tool Path Summary
|
|
- **Ansible**: `/usr/bin/ansible`
|
|
- **Python**: `/usr/bin/python`
|
|
- **Docker**: `/usr/bin/docker`
|
|
|
|
## Local Dev Services (Manual - not Ansible-managed)
|
|
|
|
System-level services running on this workstation that are configured manually
|
|
outside this repo's Ansible roles. See `docs/tech/manual-overrides.md` for the
|
|
full override table and `docs/learnings/2026-07-06-caddy-onlyoffice-mcp-sse-investigation.md`
|
|
for the active Caddy/OnlyOffice investigation.
|
|
|
|
### Caddy (port 443, systemd `caddy.service`)
|
|
|
|
| Item | Value |
|
|
|------|-------|
|
|
| Package | `caddy` (pacman) |
|
|
| Service | `caddy.service` (enabled, runs as `caddy` user) |
|
|
| Config | `/etc/caddy/Caddyfile` + `/etc/caddy/conf.d/localhost-dev.conf` |
|
|
| TLS | mkcert-generated pair at `/etc/caddy/localhost{,-key}.pem` |
|
|
| Admin endpoint | Unix socket `/run/caddy/admin.socket` |
|
|
| Sites | 14 `*.localhost` virtual hosts (see table below) |
|
|
|
|
#### `*.localhost` sites
|
|
|
|
| Site | Backend / Handler | Notes |
|
|
|------|-------------------|-------|
|
|
| `mcp.localhost` | `reverse_proxy localhost:50880` | MCP server (node, pid 1167) |
|
|
| `artifacts.localhost` | `file_server browse` root `/var/www/artifacts` | Static artifacts |
|
|
| `onlyoffice.localhost` | `reverse_proxy localhost:3847` | OnlyOffice MCP server; emitting `context canceled` SSE aborts (issue [#92](https://gitlab.satware.com/satware/mcp/onlyoffice/-/work_items/92)) |
|
|
| `project-1.localhost` ... `project-10.localhost` | `respond "project-N - placeholder"` | 10 reserved placeholders |
|
|
| `demo.satware.com.localhost` | `reverse_proxy localhost:38081` | webdevops/php-apache-dev container |
|
|
|
|
Wildcard cert covers one level only. `demo.satware.com.localhost` works
|
|
(single label under `*.localhost`); deeper nesting (e.g.
|
|
`sub.demo.satware.com.localhost`) would NOT be covered.
|
|
|
|
### Useful Caddy commands
|
|
|
|
```bash
|
|
sudo caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile
|
|
sudo systemctl reload caddy
|
|
sudo journalctl -u caddy --no-pager -n 50
|
|
curl -sk https://onlyoffice.localhost/ping # test (skips cert verify)
|
|
```
|