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
SubidNotConfigured
User has no entry in /etc/subuid or /etc/subgid.
SubidRangeTooSmall
Range is too small — common on Debian where adduser doesn’t auto-allocate.
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.
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).
DanglingSymlink
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>/.
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.
MissingMetadata
A service is installed (has a marker’d quadlet) but lacks a
metadata.toml. Pre-metadata.toml install — reinstall to migrate.
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).
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.
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.
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.
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
impl Issue
Trait Implementations§
impl Eq for Issue
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.