Service Layer (native, systemd)
All Services run a fully native, systemd-managed media-automation stack with consistent permissions, predictable service behavior, and seamless integration with the storage layer.
Each application runs under its own dedicated user with standardized unit patterns, shared group access, and controlled file ownership. A unified Samba share (/media/plutus) provides a single source of truth for downloads and organized media.
Services Overview
| Service | Binary / Path | User | Config / Data |
|---|---|---|---|
| Sonarr | /opt/Sonarr/Sonarr |
sonarr |
/var/lib/sonarr |
| Radarr | /opt/Radarr/Radarr |
radarr |
/var/lib/radarr |
| Prowlarr | /opt/Prowlarr/Prowlarr |
prowlarr |
/var/lib/prowlarr |
| qBittorrent | /usr/bin/qbittorrent-nox |
qbittorrent-nox |
/home/qbittorrent-nox/.config/qBittorrent |
| NZBGet | /home/plutus/nzbget/nzbget |
plutus |
/home/plutus/nzbget |
Systemd Unit Patterns (PiJarr)
Units live in /etc/systemd/system/ and follow this pattern:
Ini, TOML
WorkingDirectory=/opt/<App>
User=<app>
Group=media
UMask=0002
ExecStart=/opt/<App>/... -data=/var/lib/<app>
Restart=on-failure
Note: NZBGet is a manual install running under the
plutususer in forking mode.
Permissions Model
-
Group:
mediais used for service group membership. -
UMask:
0002ensures group write permissions. -
Samba:
force user = plutusensures consistent ownership for files created over SMB. -
ACLs: Extended ACLs are present (
+inls -l) to allow fine-grained control.
Samba Integration & Share Design
Share Definition
Ini, TOML
[Cornucopia]
path = /media/plutus
comment = Shared RAID Array, Plutus
browsable = yes
writable = yes
guest ok = yes
create mask = 0777
directory mask = 0777
force user = plutus
Directory Layout
Plaintext
/media/plutus
├─ dist/ # static site (NGINX reads)
├─ downloads/ # staging for download clients
├─ Media/
│ ├─ Movies/
│ ├─ Shows/
│ ├─ Music/
│ ├─ Pics/
│ └─ Roms/
└─ nginx.conf
Media Pipeline (End-to-End Flow)
-
Indexing: Prowlarr manages indexers and supplies Sonarr/Radarr with search endpoints.
-
Requesting: Sonarr/Radarr schedule searches and send jobs to qBittorrent-nox or NZBGet.
-
Downloading: Clients write to
/media/plutus/downloads. -
Importing: Sonarr/Radarr detect completed downloads, rename, and move files into
/media/plutus/Media/<type>. -
Serving: Files are available via Samba and consumed by clients; static site served from
/media/plutus/distby NGINX gateway.