The root helper gains one read-only action, `drives`: it finds the drives itself (smartctl --scan-open), reads each as JSON, and writes a summary the agent carries on every sample (agent 1.20.0). Steward judges the figures in drives.py (failing / worn / watch / ok / no SMART / unreadable), records them per drive and as host roll-ups for covering rules, keeps the newest report on the registration and lists it on the host page. install-deps.sh installs smartmontools with apt, dnf, yum, zypper, pacman or apk, run by install.sh and every agent playbook; one it can't install is reported, never fatal. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
51 lines
1.8 KiB
Bash
51 lines
1.8 KiB
Bash
#!/bin/sh
|
|
# Steward host agent: the packages the agent's helper uses, installed with
|
|
# whichever package manager the host has (#5789). Served by Steward at
|
|
# /plugins/host_agent/files/install-deps.sh and run, as root, by install.sh
|
|
# and the host_agent playbooks: one copy of the list.
|
|
#
|
|
# smartmontools gives the helper smartctl, which reads each drive's health.
|
|
# A package that can't be installed is reported, never fatal: the agent runs
|
|
# without it and the host page says what is missing.
|
|
#
|
|
# Recommended / weak dependencies are skipped: on Debian, smartmontools
|
|
# recommends a mail server.
|
|
|
|
PACKAGES="smartmontools"
|
|
|
|
have() { command -v "$1" >/dev/null 2>&1; }
|
|
|
|
install_with() {
|
|
if have apt-get; then
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
# A stale package list can't find the package: refresh once and retry.
|
|
apt-get install -y --no-install-recommends "$@" \
|
|
|| { apt-get update && apt-get install -y --no-install-recommends "$@"; }
|
|
elif have dnf; then
|
|
dnf -y install --setopt=install_weak_deps=False "$@"
|
|
elif have yum; then
|
|
yum -y install "$@"
|
|
elif have zypper; then
|
|
zypper --non-interactive install --no-recommends "$@"
|
|
elif have pacman; then
|
|
pacman -S --needed --noconfirm "$@"
|
|
elif have apk; then
|
|
apk add --no-cache "$@"
|
|
else
|
|
echo "no package manager this script knows (apt, dnf, yum, zypper, pacman, apk)"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
missing=""
|
|
have smartctl || missing="$missing smartmontools"
|
|
[ -n "$missing" ] || { echo "dependencies present: $PACKAGES"; exit 0; }
|
|
|
|
# shellcheck disable=SC2086 # one word per package
|
|
if install_with $missing; then
|
|
echo "installed:$missing"
|
|
else
|
|
echo "WARNING: could not install$missing; drive health will read \"smartctl not installed\" until it is"
|
|
fi
|
|
exit 0
|