Install & first boot
This walks an operator from a bare Linux GPU workstation to a running LabPod server with a root admin account. Plan on 10–15 minutes, plus image-pull time the first time a user creates a workspace.
Before you start, skim Requirements. The installer’s --check mode
verifies most of them for you.
What you need
Section titled “What you need”- A supported Linux host: Ubuntu/Debian (apt) or Fedora/RHEL/Rocky (dnf).
sudo/ root on that host.- Network access to the distro package repos and the NVIDIA container-toolkit repo (the installer adds Podman and the GPU toolkit for you).
- For GPU workspaces: an NVIDIA GPU with drivers already installed. The installer wires up the NVIDIA Container Toolkit and a CDI spec; it does not install the GPU driver itself.
Install with the script
Section titled “Install with the script”LabPod ships one public install script. It is a host setup script, not just an app installer -
it installs Podman and rootless dependencies, adds the NVIDIA toolkit repo, generates the CDI spec,
and installs the labpod binary and systemd units. It is idempotent:
already-configured items are skipped, and re-running is safe.
# Dry run - report what's missing, change nothingcurl -fsSL https://labpod.ai/install.sh | sudo bash -s -- --check
# Real install (latest release)curl -fsSL https://labpod.ai/install.sh | sudo bash
# Install a pinned release instead of latestcurl -fsSL https://labpod.ai/install.sh | sudo bash -s -- --version v0.x.y
# Install host prerequisites only, skip the labpod servicecurl -fsSL https://labpod.ai/install.sh | sudo bash -s -- --skip-app# Run these as root# Dry run - report what's missing, change nothingcurl -fsSL https://labpod.ai/install.sh | bash -s -- --check
# Real install (latest release)curl -fsSL https://labpod.ai/install.sh | bash
# Install a pinned release instead of latestcurl -fsSL https://labpod.ai/install.sh | bash -s -- --version v0.x.y
# Install host prerequisites only, skip the labpod servicecurl -fsSL https://labpod.ai/install.sh | bash -s -- --skip-appUseful install options:
| Option | What it does |
|---|---|
--check | Dry run - report what would change, change nothing |
--skip-socket | Skip enabling the target user’s podman.socket |
--skip-app | Install host prerequisites only; skip the labpod binary and service |
--skip-backup | On an upgrade, skip the automatic pre-upgrade DB backup |
--bin <path> | Install a local labpod binary supplied for a support or recovery case |
--admin-password-file <path> | Bootstrap the root LabPod password non-interactively |
--gpu-sharing-lib <path> | Install an existing HAMi/libvgpu-compatible library |
--with-hami | Build the HAMi sharing library with Podman and enable fractional GPU (off by default) |
--uninstall | Remove LabPod-managed binaries, units, and generated assets while keeping config, data, license, and user accounts |
--uninstall --purge | Also remove /etc/labpod and /var/lib/labpod data such as DB, backups, and license. It never removes researcher account-home or work data. |
--uninstall --check | Dry-run uninstall; report what would be removed |
Install from the release tarball
Section titled “Install from the release tarball”If your change-control process does not allow curl | bash, download the GitHub Release assets
first, verify them, extract the tarball, then run the packaged installer:
BASE="https://github.com/LabPod/labpod/releases/latest/download"
curl -fLO "${BASE}/labpod-linux-x86_64.tar.gz"curl -fLO "${BASE}/labpod-linux-x86_64.tar.gz.sig"curl -fLO "${BASE}/SHA256SUMS"
sha256sum -c SHA256SUMS
cat > labpod-artifact-pub.pem <<'EOF'-----BEGIN PUBLIC KEY-----MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEki5c/1B4iOqb16m6ljKHjnbbq5EPD8mP4mNRCYrqniXLDAkDFbpGaMw6WqPBiCQUVqyvDzyL+pADdJTAdxcUSw==-----END PUBLIC KEY-----EOF
openssl dgst -sha256 \ -verify labpod-artifact-pub.pem \ -signature labpod-linux-x86_64.tar.gz.sig \ labpod-linux-x86_64.tar.gz
mkdir labpod-releasetar -xzf labpod-linux-x86_64.tar.gz -C labpod-release
sudo bash labpod-release/scripts/install.sh# Run these as rootBASE="https://github.com/LabPod/labpod/releases/latest/download"
curl -fLO "${BASE}/labpod-linux-x86_64.tar.gz"curl -fLO "${BASE}/labpod-linux-x86_64.tar.gz.sig"curl -fLO "${BASE}/SHA256SUMS"
sha256sum -c SHA256SUMS
cat > labpod-artifact-pub.pem <<'EOF'-----BEGIN PUBLIC KEY-----MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEki5c/1B4iOqb16m6ljKHjnbbq5EPD8mP4mNRCYrqniXLDAkDFbpGaMw6WqPBiCQUVqyvDzyL+pADdJTAdxcUSw==-----END PUBLIC KEY-----EOF
openssl dgst -sha256 \ -verify labpod-artifact-pub.pem \ -signature labpod-linux-x86_64.tar.gz.sig \ labpod-linux-x86_64.tar.gz
mkdir labpod-releasetar -xzf labpod-linux-x86_64.tar.gz -C labpod-release
bash labpod-release/scripts/install.shTo install a pinned version instead, set BASE to a versioned release URL such as
https://github.com/LabPod/labpod/releases/download/v0.1.0. You can pass the same installer
options after the script path, for example sudo bash labpod-release/scripts/install.sh --check.
What the script does:
- Detects the OS (apt vs dnf).
- Installs
podmanand rootless dependencies (only if missing). - Adds
/etc/subuidand/etc/subgidentries for the target user (only if missing). - Enables systemd linger for the user so rootless containers survive logout.
- Enables
podman.socketfor the user. - Validates the environment: cgroup mode (v2 recommended; v1 runs degraded), user namespaces, etc.
- On NVIDIA hosts, installs the GPU stack (NVIDIA Container Toolkit + CDI). Fractional GPU
sharing (HAMi/libvgpu) is off by default — pass
--with-hamito build and enable it. - Installs the
labpodbinary to/usr/local/bin/labpod, seeds/etc/labpod/labpod.env, and registerslabpod.service. - Installs the workspace helper tree under
/opt/labpod/inject(tmux,labpod-monitor, terminfo, and home skeleton files). - Fills in any missing default env keys and prepares the root-managed shared-image store when it is configured. Each researcher still receives their own rootless image copy before a workspace starts.
- Installs
labpod-backup.timer/labpod-backup.servicefor a daily SQLite snapshot in/var/lib/labpod/backups/.
First boot
Section titled “First boot”The install script already initializes the database, sets the root admin password, and starts
the service for you - you don’t need to run these by hand. During the real install (not
--check), it prompts on the terminal for the root LabPod admin password (or reads one
non-interactively from --admin-password-file <path>), then runs the schema migration, writes
the password, and does systemctl enable --now labpod.
If you ever need to redo one of these steps manually - for example after --skip-app, or to
recover from a stuck install - put --db after admin:
# Apply the database schemasudo labpod admin --db /var/lib/labpod/labpod.db migrate
# Set (or reset) the root LabPod admin passwordsudo labpod admin --db /var/lib/labpod/labpod.db set-password root
# Enable and start the servicesudo systemctl enable --now labpod# Run these as root# Apply the database schemalabpod admin --db /var/lib/labpod/labpod.db migrate
# Set (or reset) the root LabPod admin passwordlabpod admin --db /var/lib/labpod/labpod.db set-password root
# Enable and start the servicesystemctl enable --now labpodVerify
Section titled “Verify”systemctl status labpodcurl -s http://127.0.0.1:24680/api/healthcurl -s http://127.0.0.1:24680/api/version # short git SHA of the running binarysudo labpod admin doctor # check host prerequisites, GPU sharing runtime, GPU inspector, …# Run these as rootsystemctl status labpodcurl -s http://127.0.0.1:24680/api/healthcurl -s http://127.0.0.1:24680/api/version # short git SHA of the running binarylabpod admin doctor # check host prerequisites, GPU sharing runtime, GPU inspector, …doctor is your friend whenever something looks off - it checks host prerequisites and reports
what to fix. For the full workstation preflight, use the install script’s --check mode.
You can now open http://<host>:24680 in a browser and log in as root. LabPod also uses the
adjacent port, 24681 by default, as the workspace-application gateway. Allow both ports through
the LAN firewall or VPN. Researchers start from the platform URL only; LabPod redirects workspace
apps to the gateway as needed. See Workspace gateway before
putting LabPod behind a reverse proxy.
Next steps
Section titled “Next steps”- Users & quotas - create researcher accounts and set per-user limits.
- GPU configuration - enable fractional GPU sharing or MIG.
- Templates & shared mounts - register images and mount shared datasets.
- Backups & restore - the daily timer and how to restore.
- Security & hardening - TLS, port guard, and the trust boundary.
- Workspace gateway - the paired browser origins and firewall or reverse-proxy requirements.