The install page
publish and release write four files to the repository root, next to the per-distro package trees: install.html, install.sh, install.json, and badge.svg. Each publish updates the published distro's entry and keeps the rest, so the files stay complete when distros are published one at a time, as in a CI matrix.
omnipackage info --show-install-page-url prints the page URL (S3 repositories).
install.html
A self-contained static page with install instructions for every published distro, grouped by family. Each entry holds copy-paste shell steps and the repository's GPG public key; the header offers a one-line curl ... | sh that runs install.sh. Light and dark themes, no external assets.
The page stores its data as JSON in a <script type="application/json" id="data"> element; the next publish reads existing entries from it. A custom template must keep that element.
install.sh
The POSIX installer behind the one-liner. It picks the distro id from /etc/os-release, refuses to run on a different CPU architecture than the packages were built for, asks for confirmation, and needs root (sudo when available).
| Flag | Effect |
|---|---|
-y, --yes |
Skip the confirmation prompt |
--distro <id> |
Skip autodetection, use this distro id |
-h, --help |
Usage |
install.json
The same data for scripts: a JSON array with one object per distro.
| Field | Meaning |
|---|---|
distro_id |
Distro id, e.g. fedora_42 |
distro_name |
Human-readable name |
distro_family |
Family used for grouping, e.g. Debian, Fedora |
install_steps |
Install commands, one array element per shell line |
gpg_key |
ASCII-armored public key |
download_url |
Direct URL of the distro's latest package file |
package_type |
rpm, deb, or pacman |
arch |
x86_64 or aarch64 |
package_name |
From config.yml |
timestamp |
RFC 3339 time of that distro's last publish |
badge.svg
A shields-style badge: the repository name from config.yml on the left, distro counts per package format on the right (e.g. 12 RPM 8 DEB). After an S3 publish, ready-to-paste badge markdown is printed in the log.
Custom install page
publish and release accept --custom-install-page <path>: a Liquid template that replaces the built-in page. Two rules:
- Keep a
<script type="application/json" id="data">element. Publish stores the distro data there and reads it back on the next run; without it, previously published distros drop off the page. - The template context is
package_nameplus any extra keys on the repository entry: ahomepage: https://myapp.example.comline on the repository renders as{{ homepage }}.
Start from the built-in install.html.liquid.