{"record":{"id":"908da8704f393c68","repo":"gravitational/teleport","slug":"not-installed","errorCode":null,"errorMessage":"not installed","messagePattern":"not installed","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"lib/autoupdate/agent/updater.go","lineNumber":354,"sourceCode":"\t// Remove must be idempotent.\n\tRemove(ctx context.Context, rev Revision) error\n\t// IsLinked returns true if the revision is linked to path.\n\tIsLinked(ctx context.Context, rev Revision, pathDir string) (bool, error)\n}\n\nvar (\n\t// ErrLinked is returned when a linked version cannot be operated on.\n\tErrLinked = errors.New(\"version is linked\")\n\t// ErrNotSupported is returned when the operation is not supported on the platform.\n\tErrNotSupported = errors.New(\"not supported on this platform\")\n\t// ErrNotAvailable is returned when the operation is not available at the current version of the platform.\n\tErrNotAvailable = errors.New(\"not available at this version\")\n\t// ErrNoBinaries is returned when no binaries are available to be linked.\n\tErrNoBinaries = errors.New(\"no binaries available to link\")\n\t// ErrFilePresent is returned when a file is present.\n\tErrFilePresent = errors.New(\"file present\")\n\t// ErrNotInstalled is returned when Teleport is not installed.\n\tErrNotInstalled = errors.New(\"not installed\")\n)\n\n// Process provides an API for interacting with a running Teleport process.\ntype Process interface {\n\t// Name of the process.\n\tName() string\n\t// Reload must reload the Teleport process as gracefully as possible.\n\t// If the process is not healthy after reloading, Reload must return an error.\n\t// If the process did not require reloading, Reload must return ErrNotNeeded.\n\t// E.g., if the process is not enabled, or it was already reloaded after the last Sync.\n\t// If the type implementing Process does not support the system process manager,\n\t// Reload must return ErrNotSupported.\n\tReload(ctx context.Context) error\n\t// Sync must validate and synchronize process configuration.\n\t// After the linked Teleport installation is changed, failure to call Sync without\n\t// error before Reload may result in undefined behavior.\n\t// If the type implementing Process does not support the system process manager,\n\t// Sync must return ErrNotSupported.","sourceCodeStart":336,"sourceCodeEnd":372,"githubUrl":"https://github.com/gravitational/teleport/blob/1283425b60ec5f60d509ba4c791183d452923ff7/lib/autoupdate/agent/updater.go#L336-L372","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nsuccessExitCode, err = cmdStatus(ctx, &ccfg)\nif err != nil {\n    return 1\n}\n// after (as in tool/teleport-update/main.go:288)\nsuccessExitCode, err = cmdStatus(ctx, &ccfg)\nif errors.Is(err, autoupdate.ErrNotInstalled) {\n    plog.ErrorContext(ctx, \"Teleport is not installed by teleport-update with this suffix.\")\n    return 1\n}","handlingStrategy":"type-guard","validationCode":"spec, err := readUpdaterSpec(suffix)\nif spec == nil || spec.Proxy == \"\" {\n    // not managed by teleport-update with this suffix; skip\n}","typeGuard":"func IsNotInstalled(err error) bool { return errors.Is(err, autoupdate.ErrNotInstalled) }","tryCatchPattern":"successExitCode, err = cmdStatus(ctx, &ccfg)\nif errors.Is(err, autoupdate.ErrNotInstalled) {\n    plog.ErrorContext(ctx, \"Teleport is not installed by teleport-update with this suffix.\")\n    return 1\n}","preventionTips":["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"],"tags":["not-installed","autoupdate","cli","sentinel-error"],"backgroundTag":"not-installed","analyzedSha":"1283425b60ec5f60d509ba4c791183d452923ff7","analyzedAt":"2026-09-02T04:06:41.601Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}