.deb or .rpm through your configuration management (Ansible, Salt, Puppet, etc.). The package installs the self-contained bundle to /usr/lib/runlayer/ and symlinks /usr/bin/runlayer.
Prerequisites
- Configuration management tooling (Ansible, Salt, Puppet, etc.)
- Linux x86_64 devices with glibc 2.35 or newer (for older distros, see Legacy distributions)
- The
.deb/.rpmandSHA256SUMSfrom your Runlayer downloads access
Legacy distributions (glibc 2.17)
Each release also ships a legacy build variant built against glibc 2.17 for x86_64 distros older than the standard floor — RHEL/CentOS 7+, Amazon Linux 2, Ubuntu 14.04+, and Debian 8+. The package name staysrunlayer; only the filenames carry the tag:
runlayer_<version>_amd64.glibc2.17.debrunlayer-<version>-1.x86_64.glibc2.17.rpmSHA256SUMS-glibc2.17— verify withsha256sum -c SHA256SUMS-glibc2.17
glibc2.17 filenames. Legacy packages identify their variant, so runlayer update only ever offers matching glibc 2.17 builds on those devices.
Check ldd --version if you are unsure which variant a distribution needs —
use the standard package for glibc 2.35+ and the glibc2.17 variant for glibc
2.17–2.34.
Deployment Steps
1
Verify the artifacts
Verify package integrity with
SHA256SUMS:2
Install the package
/usr/lib/runlayer/ and symlinks /usr/bin/runlayer.3
Configure
Write the shared host configuration and root-only organization key:The command preserves local non-policy settings in the world-readable
config.json, removes backend-owned cached settings, and writes the key
only to the 0600 credentials file. CLI versions before 0.30.8 require
writing these files manually.4
Verify
Automatic skill sync
The native.deb and .rpm packages install /etc/cron.d/runlayer-cli. At minute 23 of every hour, its root wrapper enumerates real login users (uid at or above the distro’s UID_MIN; service accounts are excluded) with an existing home and runs runlayer schedule as each user through runuser. Shared homes are synced once, overlapping ticks are skipped, and one user’s failure does not block the others. The raw .tar.gz does not install this cron entry.
The wrapper uses the existing Linux managed-config files:
/etc/runlayer/aiwatch/config.json
/etc/runlayer/aiwatch/credentials
config.json root-owned and readable (0644), but keep credentials root-only (0600). If AI Watch already manages these files, the CLI schedulers reuse its Host and RUNLAYER_API_KEY; no duplicate configuration is needed. A dedicated RUNLAYER_SKILL_SYNC_API_KEY can override the skill-sync key. Without a configured host and key, cron exits quietly. See Sync to devices.
Automatic updates
The same/etc/cron.d/runlayer-cli checks the Client Updates policy at minute
41 of every hour, offset from skill sync at minute 23. The root-only
run-cli-update.sh wrapper waits for any active per-user schedule fan-out,
then runs the packaged updater. Exact version equality is a no-op; a different
backend target can advance or roll back the package. AutoUpdate defaults to
enabled; set "AutoUpdate": false in config.json to opt out while keeping
manual runlayer update available.
The one-command Test Device installer triggers the first check after writing
configuration. A manual package install can run it immediately with:
Upgrades and removal
- Upgrade — automatic checks install the version selected by your Runlayer tenant. Configuration management and explicit
runlayer updateremain available for bootstrap or manual control. - Remove —
apt-get remove runlayeron Debian/Ubuntu, ordnf remove runlayeron RHEL/Fedora. Package removal also removes/etc/cron.d/runlayer-cliand both wrappers; externally managed config remains untouched.