fix(ai-box): robuste non-free-Aktivierung + Treiber-Kandidat-Check
add_component ersetzt durch add_components: ergaenzt contrib/non-free/non-free-firmware in JEDER Components:-Zeile aller .sources-Dateien (ganze-Wort-Adressen, idempotent), verifiziert die Aenderung per md5sum statt sie nur zu melden. Vor dem nvidia-driver-Install wird der apt-Kandidat geprueft — bei fehlendem non-free klare Fehlermeldung + Anzeige der aktiven Quellen statt kryptischem 'kein Installationskandidat'. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+33
-25
@@ -60,36 +60,35 @@ apt-get update -qq
|
|||||||
apt-get install -y -qq ca-certificates curl gnupg git lsb-release >/dev/null
|
apt-get install -y -qq ca-certificates curl gnupg git lsb-release >/dev/null
|
||||||
ok "ca-certificates, curl, gnupg, git"
|
ok "ca-certificates, curl, gnupg, git"
|
||||||
|
|
||||||
# ── 2. non-free Repos aktivieren (Trixie: deb822-Format) ──
|
# ── 2. non-free Repos aktivieren (Trixie deb822 + Legacy) ──
|
||||||
step "APT-Komponenten (contrib non-free non-free-firmware)"
|
step "APT-Komponenten (contrib non-free non-free-firmware)"
|
||||||
add_component() {
|
# Ergaenzt die drei Komponenten in JEDER Components:-Zeile einer deb822-Datei —
|
||||||
local file="$1" comp="$2"
|
# pro Zeile nur was fehlt, reihenfolge-robust, idempotent. Die Adressen pruefen
|
||||||
# nur in Components:-Zeilen, und nur wenn das Wort noch nicht (als ganzes) da ist
|
# ganze Woerter (non-free-firmware zaehlt NICHT als non-free).
|
||||||
if ! grep -qE "^Components:.*[[:space:]]${comp}([[:space:]]|\$)" "$file"; then
|
add_components() {
|
||||||
sed -i -E "s/^(Components:.*)\$/\1 ${comp}/" "$file"
|
sed -i -E '/^[Cc]omponents:/{
|
||||||
return 0
|
/(^|[[:space:]])contrib([[:space:]]|$)/!s/$/ contrib/
|
||||||
fi
|
/(^|[[:space:]])non-free([[:space:]]|$)/!s/$/ non-free/
|
||||||
return 1
|
/(^|[[:space:]])non-free-firmware([[:space:]]|$)/!s/$/ non-free-firmware/
|
||||||
|
}' "$1"
|
||||||
}
|
}
|
||||||
CHANGED=0
|
ENABLED_ANY=0
|
||||||
DEB822="/etc/apt/sources.list.d/debian.sources"
|
shopt -s nullglob
|
||||||
if [[ -f "$DEB822" ]]; then
|
for f in /etc/apt/sources.list.d/*.sources; do
|
||||||
for comp in contrib non-free non-free-firmware; do
|
grep -qE '^[Cc]omponents:' "$f" || continue
|
||||||
if add_component "$DEB822" "$comp"; then CHANGED=1; ok "hinzugefuegt: $comp"; fi
|
b="$(md5sum "$f")"; add_components "$f"; a="$(md5sum "$f")"
|
||||||
done
|
if [[ "$b" != "$a" ]]; then ENABLED_ANY=1; ok "aktualisiert: $(basename "$f")"; fi
|
||||||
[[ $CHANGED -eq 0 ]] && ok "bereits aktiv (debian.sources)"
|
done
|
||||||
elif [[ -f /etc/apt/sources.list ]]; then
|
shopt -u nullglob
|
||||||
# Legacy-Format: an die deb-Zeilen anhaengen falls noetig
|
# Legacy /etc/apt/sources.list (deb-Zeilen)
|
||||||
if ! grep -qE "non-free-firmware" /etc/apt/sources.list; then
|
if [[ -f /etc/apt/sources.list ]] && grep -qE '^deb ' /etc/apt/sources.list; then
|
||||||
|
if ! grep -qE '^deb .*[[:space:]]non-free([[:space:]]|$)' /etc/apt/sources.list; then
|
||||||
sed -i -E '/^deb .*debian/ s/$/ contrib non-free non-free-firmware/' /etc/apt/sources.list
|
sed -i -E '/^deb .*debian/ s/$/ contrib non-free non-free-firmware/' /etc/apt/sources.list
|
||||||
CHANGED=1; ok "hinzugefuegt (sources.list)"
|
ENABLED_ANY=1; ok "aktualisiert: sources.list"
|
||||||
else
|
|
||||||
ok "bereits aktiv (sources.list)"
|
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
warn "Keine APT-Sources gefunden — non-free ggf. manuell aktivieren."
|
|
||||||
fi
|
fi
|
||||||
[[ $CHANGED -eq 1 ]] && apt-get update -qq
|
[[ $ENABLED_ANY -eq 0 ]] && ok "non-free schon aktiv"
|
||||||
|
apt-get update -qq # immer neu einlesen, damit der Kandidat sicher da ist
|
||||||
|
|
||||||
# ── 3. NVIDIA-Treiber ──
|
# ── 3. NVIDIA-Treiber ──
|
||||||
step "NVIDIA-Treiber"
|
step "NVIDIA-Treiber"
|
||||||
@@ -101,6 +100,15 @@ else
|
|||||||
warn "Treiber installiert, aber nvidia-smi antwortet nicht → REBOOT noetig."
|
warn "Treiber installiert, aber nvidia-smi antwortet nicht → REBOOT noetig."
|
||||||
DRIVER_ACTIVE=0
|
DRIVER_ACTIVE=0
|
||||||
else
|
else
|
||||||
|
# Vor dem Install pruefen ob's ueberhaupt einen Kandidaten gibt (non-free aktiv?)
|
||||||
|
if ! apt-cache policy nvidia-driver 2>/dev/null | grep -qE '(Candidate|Installationskandidat): [0-9]'; then
|
||||||
|
echo
|
||||||
|
warn "nvidia-driver hat KEINEN Installationskandidaten — 'non-free' ist nicht aktiv."
|
||||||
|
warn "Aktive Components-/deb-Zeilen:"
|
||||||
|
grep -rhE '^[Cc]omponents:' /etc/apt/sources.list.d/*.sources 2>/dev/null | sed 's/^/ /' || true
|
||||||
|
grep -E '^deb ' /etc/apt/sources.list 2>/dev/null | sed 's/^/ /' || true
|
||||||
|
die "non-free in den APT-Quellen aktivieren (s.o.), dann Script erneut ausfuehren."
|
||||||
|
fi
|
||||||
warn "Installiere nvidia-driver (zieht Kernel-Modul via DKMS, dauert)…"
|
warn "Installiere nvidia-driver (zieht Kernel-Modul via DKMS, dauert)…"
|
||||||
apt-get install -y -qq nvidia-driver firmware-misc-nonfree >/dev/null
|
apt-get install -y -qq nvidia-driver firmware-misc-nonfree >/dev/null
|
||||||
ok "nvidia-driver installiert"
|
ok "nvidia-driver installiert"
|
||||||
|
|||||||
Reference in New Issue
Block a user