gravitational/teleport · warning

not supported on this platform

Error message

not supported on this platform

What it means

ErrNotSupported is a sentinel error in the autoupdate agent updater indicating that the requested operation cannot be performed on the current platform — most commonly because systemd is not running (or the platform lacks the subsystem the updater needs). It is returned by checkSystem, Remove, and removeWithoutSystem, and callers typically detect it with errors.Is to downgrade the operation to a no-op or warning rather than failing.

Source

Thrown at lib/autoupdate/agent/updater.go:346

	// Unlink must be idempotent.
	Unlink(ctx context.Context, rev Revision, pathDir string) error
	// UnlinkSystem unlinks the system (package) installation of Teleport from the system linking location.
	// UnlinkSystem must be idempotent.
	UnlinkSystem(ctx context.Context) error
	// List the installed revisions of Teleport.
	List(ctx context.Context) (revisions []Revision, err error)
	// Remove the Teleport agent at revision.
	// Remove must be idempotent.
	Remove(ctx context.Context, rev Revision) error
	// IsLinked returns true if the revision is linked to path.
	IsLinked(ctx context.Context, rev Revision, pathDir string) (bool, error)
}

var (
	// ErrLinked is returned when a linked version cannot be operated on.
	ErrLinked = errors.New("version is linked")
	// ErrNotSupported is returned when the operation is not supported on the platform.
	ErrNotSupported = errors.New("not supported on this platform")
	// ErrNotAvailable is returned when the operation is not available at the current version of the platform.
	ErrNotAvailable = errors.New("not available at this version")
	// ErrNoBinaries is returned when no binaries are available to be linked.
	ErrNoBinaries = errors.New("no binaries available to link")
	// ErrFilePresent is returned when a file is present.
	ErrFilePresent = errors.New("file present")
	// ErrNotInstalled is returned when Teleport is not installed.
	ErrNotInstalled = errors.New("not installed")
)

// Process provides an API for interacting with a running Teleport process.
type Process interface {
	// Name of the process.
	Name() string
	// Reload must reload the Teleport process as gracefully as possible.
	// If the process is not healthy after reloading, Reload must return an error.
	// If the process did not require reloading, Reload must return ErrNotNeeded.
	// E.g., if the process is not enabled, or it was already reloaded after the last Sync.

View on GitHub (pinned to 1283425b60)

Solutions

  1. Verify systemd is running: `ps -p 1` should show systemd, or `systemctl is-system-running` succeeds.
  2. If running in a container/WSL, enable systemd (systemd=true in WSL, or run with a systemd-enabled base image) or skip autoupdate management on that host.
  3. Treat the error as expected in non-systemd environments: check errors.Is(err, autoupdate.ErrNotSupported) and log a warning instead of failing.
  4. Use a platform where the updater is supported, or manage binaries manually.

Example fix

// before
if err := updater.Remove(ctx); err != nil {
    return err
}
// after
if err := updater.Remove(ctx); err != nil && !errors.Is(err, autoupdate.ErrNotSupported) {
    return trace.Wrap(err)
}
// ErrNotSupported on non-systemd hosts is expected; ignore it.
Defensive patterns

Strategy: type-guard

Validate before calling

if !systemdRunning() { // e.g. exec: systemctl is-system-running
    log.Info("autoupdate operations unavailable: systemd not running")
}

Type guard

func IsNotSupported(err error) bool { return errors.Is(err, autoupdate.ErrNotSupported) }

Try / catch

if err := updater.Remove(ctx); err != nil {
    if errors.Is(err, autoupdate.ErrNotSupported) {
        log.WarnContext(ctx, "operation not supported on this platform; skipping")
        return nil
    }
    return trace.Wrap(err)
}

Prevention

When it happens

Trigger: Calling updater operations (sync/remove/Install-related paths) on a system where systemd is not the init system; in sync (updater.go:630) checkSystem returns it and the caller logs 'Not syncing systemd configuration because systemd is not running.'; process.go:486 returns it when a required package/unit is not present for the platform.

Common situations: Running teleport-update inside a container without systemd, on a sysvinit/OpenRC system, in WSL1 without systemd enabled, or invoking Remove/link operations on an unsupported OS.

Understand the failure class

Background: "unsupported platform" / "not supported on this platform" errors: what they mean and how to fix them — this error's family across 47 libraries.

Related errors


AI-assisted analysis of gravitational/teleport@1283425b60 (2026-09-02). Data as JSON: /api/errors/e02d48b0444159d6. Report an issue: GitHub.