Install on Linux
Codemany runs on Linux too: the same daemon the Mac app bundles, with its web dashboard. Your workflows' Linux jobs then run on that machine instead of GitHub-hosted runners.
What you need
- A 64-bit Linux machine (x86-64 or ARM64) with systemd and glibc. Ubuntu 22.04 and 24.04 LTS and Debian 12 or newer use the apt repository; Fedora and other glibc distros use the install script.
- A GitHub account that can add self-hosted runners to the repository or organization (repo admin, or org owner).
Setting up a mini PC or a cloud VM from scratch? Follow the Linux server guide, or let Codemany create a cloud machine for you.
On a Linux desktop
Install the desktop app: it starts Codemany and walks you through setup, like on a Mac. Download the .deb from the download page (x86-64 or ARM64), or install it from the apt repository below with sudo apt install codemany-desktop.
The app finds the daemon, shows its dashboard with the controls unlocked, and offers Install and start when the service isn't running. Quitting the app leaves the runners running. Stock GNOME shows the tray icon only with the AppIndicator extension.
On a server or VM
One line
One line (Ubuntu, Debian, Fedora and other glibc distros):
curl --proto '=https' --tlsv1.2 -fsSL https://codemany.com/install.sh | sh
It downloads the latest release for your CPU, checks its SHA-256, and installs codemany to /usr/local/bin. It uses sudo for that copy when the directory isn't yours, and once for codemany system-setup, which allows keep-awake. Set CODEMANY_INSTALL_DIR=$HOME/.local/bin to install without sudo.
apt (Debian, Ubuntu)
On Debian and Ubuntu, the apt repository keeps Codemany updated with apt upgrade. The key is installed only if its fingerprint is 92EA E8F4 E140 E71F E883 C291 DBC1 D871 7AE5 E521:
curl --proto '=https' --tlsv1.2 -fsSLo codemany.gpg \
https://codemany.com/download/linux/apt/codemany-archive-keyring.gpg
gpg --show-keys --with-colons codemany.gpg | grep -qx 'fpr:::::::::92EAE8F4E140E71FE883C291DBC1D8717AE5E521:' \
&& sudo install -m 644 codemany.gpg /usr/share/keyrings/codemany-archive-keyring.gpg \
|| echo "codemany.gpg is not Codemany's key: stop" >&2
echo "deb [signed-by=/usr/share/keyrings/codemany-archive-keyring.gpg] https://codemany.com/download/linux/apt stable main" \
| sudo tee /etc/apt/sources.list.d/codemany.list
sudo apt update && sudo apt install codemany # and codemany-desktop on a desktop
Finish setup
In a browser. Before there is a config, the service serves first-run setup instead of the dashboard. Print its link, and open it from any computer on your network:
codemany setup-link # http://<lan-ip>:8825/#code=…
Only someone with the link's one-time code can use it. Then sign in to GitHub, pick repositories or an organization, and start runners. Over an SSH tunnel, codemany setup-link --port 18825 prints the link for your end.
Or in a terminal, as the user the jobs should run as (not root):
codemany setup --target your-org/your-repo --token-from-gh # or --token-stdin
codemany install-service --config ~/.codemany/config.json
install-service writes a systemd user service, then enables and starts it. On a machine without a desktop it also turns on lingering, so Codemany keeps running after you log out and starts at boot.
Use the runners
Runners register with the labels self-hosted, Linux, X64 or ARM64, plus your pool labels (default codemany):
jobs:
test:
runs-on: [self-hosted, Linux, codemany]
Keep Linux in runs-on if you also run Codemany on a Mac. Without it, the same labels match both machines.
What differs from macOS
| macOS | Linux | |
|---|---|---|
| Service | LaunchAgent | systemd user service |
| GitHub token | Keychain | vault file (mode 0600), or the desktop keyring with codemany vault keyring |
| Keep awake | power assertions | logind inhibitor lock (sudo codemany system-setup; the .deb and install.sh run it) |
| Isolation | host, user, vm (macOS VMs, at most 2) | host, user, vm (QEMU/KVM) |
| Updates | the app updates itself | apt upgrade or install.sh; the daemon restarts into the new version after busy runners finish |
Check on it
codemany doctor checks the service, the dashboard, the licence, GitHub, the runners, KVM, Avahi and lingering, and exits non-zero on a failure. codemany status shows the runners, and journalctl --user -u codemany the log.
Uninstall
codemany uninstall-service
sudo rm /usr/local/bin/codemany # or: sudo apt remove codemany
rm -rf ~/.codemany ~/.local/share/com.codemany.cli
Runners that were online when you uninstalled are ephemeral: GitHub removes them after their job, or after a day offline.