View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0003171 | DCP-o-matic | Packaging | public | 2026-07-11 06:53 | 2026-07-11 07:00 |
| Reporter | eaglebtc | Assigned To | |||
| Priority | normal | Severity | feature | Reproducibility | N/A |
| Status | new | Resolution | open | ||
| Platform | Mac | OS | any | OS Version | any |
| Product Version | 2.18.45 | ||||
| Summary | 0003171: A LaunchDaemon to run an encode server in headless mode. | ||||
| Description | Hello, Chapter 13 of the manual describes configuring a computer as a node for encoding DCP's on the LAN, but all of those methods (except the live CD) require some manual steps to launch the app. And if it crashes for some reason, the operator must intervene to restore functionality. For the Mac platform, I have taken the liberty of writing a LaunchDaemon Property List, and built a package with a post-install script to activate the CLI as a background daemon that always runs on boot. LaunchDaemons do not require any user to log in, so this becomes a "headless" instance. The complete installation consists of one text file — a property list (plist) — in a special location and set with specific permissions, and a script to tell MacOS Launch Services to load and install it permanently. | ||||
| Additional Information | The separate files are attached for your convenience and independent analysis. The package will place the file in the correct path, then run the post-install script to set permissions / ownership and activate the LaunchDaemon. The attached package will work for all versions of MacOS at least through macOS 15 Sequoia. I haven't had a chance to test on a Mac with Tahoe or Golden Gate. NOTE: the package is not signed, and will throw a warning when you try to run it locally. Right-click, then Open. Eventually you'll have to rebuild and re-sign what I created in order to distribute this yourself. | ||||
| Tags | cli, MacOS, server | ||||
| Attached Files | postinstall.sh (236 bytes)
#!/bin/bash encodeserver="/Library/LaunchDaemons/com.dcpomatic.encodeserver.plist" # Set permissions for LaunchDaemon, then load it. chmod 644 "$encodeserver" chown root:wheel "$encodeserver" /bin/launchctl load -w "$encodeserver" com.dcpomatic.encodeserver.plist (501 bytes)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.dcpomatic.encodeserver</string> <key>Program</key> <string>/Applications/DCP-o-matic/DCP-o-matic 2 Encode Server.app/Contents/MacOS/dcpomatic2_server_cli</string> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> <key>ProcessType</key> <string>Background</string> </dict> </plist> | ||||
| Branch | |||||
| Estimated weeks required | |||||
| Estimated work required | |||||
|
|
Two important things to note: 1) I downloaded all the DCP-o-matic apps and placed them in a subfolder: /Applications/DCP-o-matic 2) The script I've provided expects "DCP-o-matic 2 Encode Server.app" to already be present in this subfolder of /Applications. Otherwise, the package will fail. For testing and validation purposes, please either move the app to this location, or revise the LaunchDaemon and update your own package accordingly. If I were to make a suggestion: the Encode Server could be distributed separately as an "unattended installation" package with just the CLI, for people who want to set up a bunch of spare Macs as encoder nodes. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2026-07-11 06:53 | eaglebtc | New Issue | |
| 2026-07-11 06:53 | eaglebtc | Tag Attached: cli | |
| 2026-07-11 06:53 | eaglebtc | Tag Attached: MacOS | |
| 2026-07-11 06:53 | eaglebtc | Tag Attached: server | |
| 2026-07-11 06:53 | eaglebtc | File Added: com.dcpomatic.encodeserver.pkg | |
| 2026-07-11 06:53 | eaglebtc | File Added: postinstall.sh | |
| 2026-07-11 06:53 | eaglebtc | File Added: com.dcpomatic.encodeserver.plist | |
| 2026-07-11 07:00 | eaglebtc | Note Added: 0007340 |