gravitational/teleport · error

not installed

Error message

not installed

What it means

ErrNotInstalled means Teleport was not installed on this host by teleport-update with the configured package suffix — there is no updater-managed configuration/spec to operate on. Status returns it when cfg.Spec.Proxy is empty (updater.go:807), and the CLI maps it to a clear user-facing message and exit code 1.

Source

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

	// 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.
	// If the type implementing Process does not support the system process manager,
	// Reload must return ErrNotSupported.
	Reload(ctx context.Context) error
	// Sync must validate and synchronize process configuration.
	// After the linked Teleport installation is changed, failure to call Sync without
	// error before Reload may result in undefined behavior.
	// If the type implementing Process does not support the system process manager,
	// Sync must return ErrNotSupported.

View on GitHub (pinned to 1283425b60)

Solutions

  1. Install Teleport via teleport-update (or migrate the existing install to updater management) before running status/update commands.
  2. Check that the configured package suffix matches the suffix used when the agent was installed.
  3. Verify install state on disk (the updater config file for this suffix) before invoking status.
  4. Handle errors.Is(err, autoupdate.ErrNotInstalled) in scripts to print guidance instead of a raw error.

Example fix

// before
successExitCode, err = cmdStatus(ctx, &ccfg)
if err != nil {
    return 1
}
// after (as in tool/teleport-update/main.go:288)
successExitCode, err = cmdStatus(ctx, &ccfg)
if errors.Is(err, autoupdate.ErrNotInstalled) {
    plog.ErrorContext(ctx, "Teleport is not installed by teleport-update with this suffix.")
    return 1
}
Defensive patterns

Strategy: type-guard

Validate before calling

spec, err := readUpdaterSpec(suffix)
if spec == nil || spec.Proxy == "" {
    // not managed by teleport-update with this suffix; skip
}

Type guard

func IsNotInstalled(err error) bool { return errors.Is(err, autoupdate.ErrNotInstalled) }

Try / catch

successExitCode, err = cmdStatus(ctx, &ccfg)
if errors.Is(err, autoupdate.ErrNotInstalled) {
    plog.ErrorContext(ctx, "Teleport is not installed by teleport-update with this suffix.")
    return 1
}

Prevention

When it happens

Trigger: Running `teleport-update status` (or Run/start flows) on a host where the agent was installed by a system package or manually rather than by teleport-update; running with a suffix that does not match the one used at install time.

Common situations: Managing a Teleport installed via apt/rpm with teleport-update; multiple installs with different suffixes where the wrong suffix env/config is set; fresh host where install was never completed.

Related errors


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