distronomicon
A Linux tool that checks GitHub for repository releases and performs atomic updates under /opt/<app>. Designed for use with systemd timers.
Installation
From crates.io
From source
Usage
All commands require --app <name> to specify the application being managed.
Check for updates
Query GitHub for the latest release without installing:
Prints up-to-date: v1.2.3, update-available: v1.2.3 -> v1.2.4, or install-available: v1.2.4.
Update to latest release
Download, verify, and install the latest release:
This will:
- Download the matching release asset
- Verify the checksum
- Extract to
/opt/myapp/releases/<tag> - Update symlinks in
/opt/myapp/bin - Run the restart command (if provided)
- Prune old releases (keeps 3 by default, configurable with
--retain)
Show installed version
Prints the currently installed tag (e.g., v1.2.3), derived from symlinks in the bin directory.
Filesystem Layout
/opt/<app>/
bin/ # Symlinks to current release binaries
myapp -> ../releases/v1.2.3/myapp
releases/
v1.2.2/ # Previous release
v1.2.3/ # Current release
staging/ # Temporary extraction (cleaned after install)
/var/lib/distronomicon/<app>/state.json # Tracks latest tag, ETag, Last-Modified
The --install-root flag changes the base from /opt to another location.
GitHub Authentication
For private repositories or higher rate limits, provide a token:
Or use --github-token flag.
Systemd Timer
Example service and timer files are in the systemd/ directory. To set up:
# Create /etc/distronomicon/myapp.conf with environment variables
Check status:
Options
--install-root- Change base directory (default:/opt)--skip-verification- Skip checksum verification (not recommended)--retain N- Keep N old releases after update (default: 3)--allow-prerelease- Include prerelease versions--github-host- Use GitHub Enterprise (default:https://api.github.com)-v,-vv- Increase logging verbosity
License
MIT