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
- Install Teleport via teleport-update (or migrate the existing install to updater management) before running status/update commands.
- Check that the configured package suffix matches the suffix used when the agent was installed.
- Verify install state on disk (the updater config file for this suffix) before invoking status.
- 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
- Install via teleport-update before running its status/update commands
- Keep the package suffix consistent between install and later commands
- In scripts, branch on ErrNotInstalled to print actionable guidance
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
- updater config file not found
- executable has unstable path
- version is linked
- not supported on this platform
- no binaries available to link
AI-assisted analysis of gravitational/teleport@1283425b60 (2026-09-02).
Data as JSON: /api/errors/908da8704f393c68.
Report an issue: GitHub.