Skip to main content
Version: v3.8.0

Edgelet installation and upgrade

Install Edgelet on linux, darwin, and windows using install.sh. Releases ship raw binaries only (no .tar.gz install bundles, no DEB/RPM).

For production topology (systemd layout, engine selection, provisioning workflow), see Deployment.

Version pin

Platform train v3.8.0 requires Edgelet v1.0.0. Use this tag for fresh installs and fleet upgrades unless your Controller specifies a newer patch on the same train.

Overview

PlatformInstall artifactDefault containerEngineOTA via install.sh
linuxThin wrapper + zstd-embedded fat runtimeedgeletYes (native + controller-driven)
darwinMonolithic binarydockerManual binary replace only
windowsMonolithic .exedockerNot supported by version handler

Fleet upgrades on linux use two layers:

LayerMechanismOn-disk state
1 - Thin binaryinstall.sh --upgrade / --rollback/var/backups/edgelet/ receipts and cache
2 - Fat embededgelet daemon extract on new embed hash/var/lib/edgelet/data/current, data/previous

See Architecture for the thin/fat model.

Forbidden upgrade paths: iofog-agentvc.jar, apt/dnf/yum edgelet packages, or any path that bypasses install.sh on linux native installs.

Prerequisites

PlatformRequirements
linuxRoot/sudo; Ubuntu 20.04+, RHEL 8+, Debian 11+ (or equivalent); network for online install
darwinAdmin for /usr/local/bin; Docker or Podman when not using linux embedded engine
windowsAdmin; Docker or Podman
containerEngine: edgelet (linux)No external container runtime on the host
docker / podmanDocker 26.10+ or Podman 3.0+

Linux init detection (auto): systemd, procd (OpenWrt), OpenRC, SysV, upstart, s6, runit.

Release artifacts

Per tag on GitHub Datasance/edgelet (override with EDGELET_GITHUB_REPO):

OS / archBinary file
linux amd64 / arm64 / arm / riscv64edgelet-linux-<arch>
darwin amd64 / arm64edgelet-darwin-<arch>
windows amd64edgelet-windows-amd64.exe

Also published: SHA256SUMS, edgelet-config.yaml.sample, edgelet-controller-ca.crt.sample, install.sh, uninstall.sh.

Download URL pattern:

https://github.com/Datasance/edgelet/releases/download/<tag>/edgelet-<os>-<arch>[.exe]

Build locally: make release-binaries VERSION={EDGELET_VERSION}dist/.

The fat runtime inside the linux zstd embed is statically linked by default, so one artifact runs on glibc and musl (Alpine, OpenWrt).

Install paths

PurposeLinuxmacOSWindows
Binary/usr/local/bin/edgelet/usr/local/bin/edgelet%ProgramFiles%\Edgelet\edgelet.exe
Config/etc/edgelet/config.yaml/etc/edgelet/config.yaml%ProgramData%\Edgelet\config\config.yaml
Controller CA/etc/edgelet/cert.crtsamesame
Data/var/lib/edgelet//var/lib/edgelet/%ProgramData%\Edgelet\data\
Runtime/run/edgelet//var/run/edgelet/%ProgramData%\Edgelet\run\
Logs/var/log/edgelet//var/log/edgelet/%ProgramData%\Edgelet\log\
Scripts/usr/share/edgelet//usr/local/share/edgelet/%ProgramData%\Edgelet\scripts\
OTA metadata/var/backups/edgelet/--

Linux thin runtime chain: /usr/local/bin/edgelet → lazy extract → /var/lib/edgelet/data/current/bin/edgelet (fat).

Fresh installation

Online

curl -fsSL https://github.com/Datasance/edgelet/releases/download/v1.0.0/install.sh -o install.sh
chmod +x install.sh
sudo ./install.sh --version=v1.0.0

When --version is omitted or set to latest, the script resolves the tag from GitHub releases/latest before downloading the binary.

From a clone (dev / CI)

sudo ./install.sh --bin-path=build/edgelet-linux-amd64 --version=dev

Airgap

On a connected machine, download the binary and verify against SHA256SUMS, then copy to the edge host:

sudo ./install.sh \
  --airgap \
  --bin-path=/tmp/edgelet-linux-arm64 \
  --expected-sha256=<sha256-from-SHA256SUMS> \
  --version=v1.0.0

Alternatively use --checksum-path=SHA256SUMS with the manifest in the same directory as the binary.

First-time configuration

If /etc/edgelet/config.yaml is missing, install.sh installs a sample from packaging or /usr/share/edgelet/edgelet-config.yaml.sample. You can also run:

sudo edgelet init-config

init-config is idempotent and does not overwrite an existing file. See Configuration.

Controller CA (/etc/edgelet/cert.crt) is not installed by default. For lab installs use --with-sample-ca; for production use edgelet provision or edgelet config cert.

Install flags

FlagPurpose
--version=Release tag (default latest when downloading)
--arch=Override auto-detected arch (amd64, arm64, arm, riscv64)
--bin-path=Local binary (dev, airgap, CI)
--airgapOffline; requires --bin-path
--expected-sha256=Verify local binary SHA256
--checksum-path=SHA256SUMS file for verification
--upgrade / --rollbackIn-place thin-binary OTA
--force-configReplace config from sample (destructive)
--with-sample-caCopy sample controller CA if cert.crt missing
--container-engine=edgelet, docker, or podman (linux default: edgelet)

Environment: EDGELET_VERSION, EDGELET_GITHUB_REPO.

After install

install.sh does not provision the Edgelet node. On linux it installs the init unit and starts edgelet.service (and edgelet-containerd when containerEngine=edgelet). On darwin and windows it starts edgelet daemon in the background; logs go to edgelet.0.log under the platform log directory.

edgelet --version
edgelet system status
edgelet config --a <controller-api-endpoint>
edgelet provision <provisioning-key>

Orchestrators (potctl) must not pass provision keys to install.sh. See Deployment.

Upgrade and rollback

Use the bundled script path so controller OTA and manual paths stay aligned:

# Upgrade to a specific release
sudo sh /usr/share/edgelet/install.sh --upgrade --version=v1.0.0

# Upgrade to GitHub latest
sudo sh /usr/share/edgelet/install.sh --upgrade

# Rollback to previous-release
sudo sh /usr/share/edgelet/install.sh --rollback

On upgrade, install.sh backs up config, caches the old binary, writes previous-release metadata, stops the daemon, replaces the binary, and restarts via init.

OTA readiness

Edgelet does not self-upgrade when readiness is true. Readiness flags tell the Controller that the Edgelet node can accept a version command. The field agent publishes isReadyToUpgrade and isReadyToRollback on the status heartbeat.

Key gates for readyToUpgrade:

  • Not mid-OTA (60s window after version change)
  • Not EDGELET_DAEMON=container
  • Not Windows
  • /usr/share/edgelet/install.sh exists
  • Daemon healthy
  • Installed version differs from target

Verify locally:

grep installed_version /var/backups/edgelet/install-receipt
edgelet --version
test -f /usr/share/edgelet/install.sh && echo ok

Controller-driven upgrade

When the Controller sets changes.version=true, the field agent fetches the version command and may launch install.sh in the background.

Flat v3.8 shape:

{
"versionCommand": "upgrade",
"provisionKey": "<one-time-key>",
"expirationTime": 1718380800000,
"semver": "1.0.0"
}

Controller-driven OTA rotates the agent ed25519 key without changing iofogUuid. Manual install.sh runs do not auto-reprovision.

Container deployments (EDGELET_DAEMON=container)

When Edgelet runs inside a release container image with EDGELET_DAEMON=container:

ItemValue
Imageghcr.io/datasance/edgelet:1.0.0
OTAOrchestrator replaces image tag (not install.sh)

See Deployment.

Uninstall

sudo sh uninstall.sh
sudo sh uninstall.sh --remove-data # also removes /etc/edgelet when set

Bundled copy (linux): sudo sh /usr/share/edgelet/uninstall.sh.

Troubleshooting

SymptomCheck
readyToUpgrade never trueReceipt version vs target; daemon health; missing /usr/share/edgelet/install.sh
Controller OTA no-opReadiness false at command time; inspect daemon logs for version handler
Rollback failsprevious-release missing; cache deleted; URL unreachable
MS down after upgradeNew embed hash → control-plane and data-plane restart

See also

DocumentTopic
DeploymentProduction topology, engines, potctl contract
ArchitectureThin/fat model, OTA layers
ConfigurationConfig file and profiles
Group 3See anything wrong with the document? Help us improve it!