Skip to main content

Issue

Enum Issue 

Source
pub enum Issue {
Show 17 variants PodmanUnsupported { found: Option<String>, }, SubidNotConfigured { user: String, missing_files: Vec<&'static str>, }, SubidRangeTooSmall { user: String, current: u32, minimum: u32, }, TailscaleCliMissing, TailscaleNotLoggedIn, AuthSsoDesync { service: String, }, TailscaleServiceUnapproved { service: String, svc_name: String, }, DanglingSymlink { link: PathBuf, target: PathBuf, }, OrphanQuadletFile { path: PathBuf, }, MissingMetadata { service: String, }, NativeSourceMissing { service: String, source: PathBuf, }, BrokenEnvFileRef { service: String, quadlet: PathBuf, env_file: PathBuf, }, LingerNotEnabled, PodmanCgroupfsFallback, IntegrityScanFailed { error: String, }, RamOvercommitted { recommended_mb: u64, total_mb: u64, }, NoSwap,
}
Expand description

A typed, renderable problem detected by check_all.

Variants§

§

PodmanUnsupported

podman is missing or older than [MIN_PODMAN]. Registry quadlets rely on runtime env expansion that older quadlet versions reject at generation time.

Fields

§found: Option<String>

podman --version output, None when the binary isn’t on PATH or didn’t run.

§

SubidNotConfigured

User has no entry in /etc/subuid or /etc/subgid.

Fields

§user: String
§missing_files: Vec<&'static str>
§

SubidRangeTooSmall

Range is too small — common on Debian where adduser doesn’t auto-allocate.

Fields

§user: String
§current: u32
§minimum: u32
§

TailscaleCliMissing

--tailscale was used but the tailscale CLI isn’t on PATH.

§

TailscaleNotLoggedIn

CLI is present but tailscale status --json doesn’t return a *.ts.net DNSName for this node.

§

AuthSsoDesync

A service’s metadata says OIDC SSO is on, but the managed auth provider’s config has no client registered for it: ryra’s bookkeeping and the provider’s actual state disagree, so SSO is silently broken. Usually a ryra backup restore of the provider from a snapshot predating this service’s registration.

Fields

§service: String
§

TailscaleServiceUnapproved

A service is exposed via Tailscale (svc:<svc_name>) but the control plane hasn’t approved this host to serve it, so the *.ts.net URL routes nowhere even though the container is healthy. ryra add verifies approval once at install time; this catches it drifting out of approval afterwards (ACL change, host de-approved, tailscaled losing the advertisement across a reboot).

Fields

§service: String
§svc_name: String

A symlink in ~/.config/containers/systemd/ points at a target that no longer exists. Usually means the user rm -rfd the service’s home dir under ~/.local/share/services/<svc>/.

Fields

§link: PathBuf
§target: PathBuf
§

OrphanQuadletFile

A real quadlet file lives in ~/.local/share/services/<svc>/ but no matching symlink exists in the systemd quadlet path, so systemd doesn’t know about it. Usually means the user deleted the symlink by hand.

Fields

§path: PathBuf
§

MissingMetadata

A service is installed (has a marker’d quadlet) but lacks a metadata.toml. Pre-metadata.toml install — reinstall to migrate.

Fields

§service: String
§

NativeSourceMissing

A runtime = "native" service was installed from a local project dir that no longer exists (the user deleted or moved their repo). The unit runs from that dir, so it can’t start or rebuild (a zombie install).

Fields

§service: String
§source: PathBuf
§

BrokenEnvFileRef

A quadlet references an EnvironmentFile= that doesn’t exist on disk. The unit fails to start, or starts with every ${SERVICE_*} var expanding to an empty string. Usually means the service’s data dir was moved or renamed (e.g. mv grafana grafana-test) or the .env was deleted by hand.

Fields

§service: String
§quadlet: PathBuf
§env_file: PathBuf
§

LingerNotEnabled

loginctl --user enable-linger hasn’t been run, so user-level services don’t survive logout / reboot.

§

PodmanCgroupfsFallback

Rootless podman fell back to the cgroupfs cgroup manager because there’s no usable systemd user session (no user D-Bus). systemctl --user quadlets still run (systemd owns their cgroup), but direct podman build and podman exec fail to create containers (“sd-bus call: Interactive authentication required”). Caused by lingering off and/or a missing user D-Bus session (dbus-user-session on Debian/Ubuntu) and/or an unset XDG_RUNTIME_DIR. This is the wart that turns a clean ryra add of a container-built service into a cryptic crun failure.

§

IntegrityScanFailed

Couldn’t read the quadlet symlink farm or service data root to detect drift — usually a permissions problem on ~/.config/containers/systemd/ or ~/.local/share/services/. Surfaced rather than swallowed so the user knows their install state isn’t being checked.

Fields

§error: String
§

RamOvercommitted

The recommended RAM of all installed services summed exceeds the machine’s total RAM. Services may fail to start or get OOM-killed under load (and with no swap the box can hard-lock). Remove a service or move to a larger machine. The install path warns before crossing this line, but it’s overridable and other paths add services, so a box can drift into it.

Fields

§recommended_mb: u64
§total_mb: u64
§

NoSwap

No swap is configured, so memory pressure goes straight to the OOM killer with no cushion – a heavy enough service set can thrash the box past the point where even sshd can fork. Add zram (compressed RAM-backed swap).

Implementations§

Source§

impl Issue

Source

pub fn severity(&self) -> Severity

How ryra add and ryra doctor should treat this issue.

Source

pub fn code(&self) -> &'static str

Stable machine-readable identifier for the issue variant, so a UI or rpc client can switch on it without parsing the message. Kept in one match so adding a variant surfaces here as a compile error rather than silently degrading to a blank code.

Source

pub fn service(&self) -> Option<String>

The installed service this issue is scoped to, when it’s service-specific.

Trait Implementations§

Source§

impl Clone for Issue

Source§

fn clone(&self) -> Issue

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Issue

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Issue

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for Issue

Source§

impl PartialEq for Issue

Source§

fn eq(&self, other: &Issue) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Issue

Auto Trait Implementations§

§

impl Freeze for Issue

§

impl RefUnwindSafe for Issue

§

impl Send for Issue

§

impl Sync for Issue

§

impl Unpin for Issue

§

impl UnsafeUnpin for Issue

§

impl UnwindSafe for Issue

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V