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:
+32
-24
@@ -60,36 +60,35 @@ apt-get update -qq
|
||||
apt-get install -y -qq ca-certificates curl gnupg git lsb-release >/dev/null
|
||||
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)"
|
||||
add_component() {
|
||||
local file="$1" comp="$2"
|
||||
# nur in Components:-Zeilen, und nur wenn das Wort noch nicht (als ganzes) da ist
|
||||
if ! grep -qE "^Components:.*[[:space:]]${comp}([[:space:]]|\$)" "$file"; then
|
||||
sed -i -E "s/^(Components:.*)\$/\1 ${comp}/" "$file"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
# Ergaenzt die drei Komponenten in JEDER Components:-Zeile einer deb822-Datei —
|
||||
# pro Zeile nur was fehlt, reihenfolge-robust, idempotent. Die Adressen pruefen
|
||||
# ganze Woerter (non-free-firmware zaehlt NICHT als non-free).
|
||||
add_components() {
|
||||
sed -i -E '/^[Cc]omponents:/{
|
||||
/(^|[[:space:]])contrib([[:space:]]|$)/!s/$/ contrib/
|
||||
/(^|[[:space:]])non-free([[:space:]]|$)/!s/$/ non-free/
|
||||
/(^|[[:space:]])non-free-firmware([[:space:]]|$)/!s/$/ non-free-firmware/
|
||||
}' "$1"
|
||||
}
|
||||
CHANGED=0
|
||||
DEB822="/etc/apt/sources.list.d/debian.sources"
|
||||
if [[ -f "$DEB822" ]]; then
|
||||
for comp in contrib non-free non-free-firmware; do
|
||||
if add_component "$DEB822" "$comp"; then CHANGED=1; ok "hinzugefuegt: $comp"; fi
|
||||
ENABLED_ANY=0
|
||||
shopt -s nullglob
|
||||
for f in /etc/apt/sources.list.d/*.sources; do
|
||||
grep -qE '^[Cc]omponents:' "$f" || continue
|
||||
b="$(md5sum "$f")"; add_components "$f"; a="$(md5sum "$f")"
|
||||
if [[ "$b" != "$a" ]]; then ENABLED_ANY=1; ok "aktualisiert: $(basename "$f")"; fi
|
||||
done
|
||||
[[ $CHANGED -eq 0 ]] && ok "bereits aktiv (debian.sources)"
|
||||
elif [[ -f /etc/apt/sources.list ]]; then
|
||||
# Legacy-Format: an die deb-Zeilen anhaengen falls noetig
|
||||
if ! grep -qE "non-free-firmware" /etc/apt/sources.list; then
|
||||
shopt -u nullglob
|
||||
# Legacy /etc/apt/sources.list (deb-Zeilen)
|
||||
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
|
||||
CHANGED=1; ok "hinzugefuegt (sources.list)"
|
||||
else
|
||||
ok "bereits aktiv (sources.list)"
|
||||
ENABLED_ANY=1; ok "aktualisiert: sources.list"
|
||||
fi
|
||||
else
|
||||
warn "Keine APT-Sources gefunden — non-free ggf. manuell aktivieren."
|
||||
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 ──
|
||||
step "NVIDIA-Treiber"
|
||||
@@ -101,6 +100,15 @@ else
|
||||
warn "Treiber installiert, aber nvidia-smi antwortet nicht → REBOOT noetig."
|
||||
DRIVER_ACTIVE=0
|
||||
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)…"
|
||||
apt-get install -y -qq nvidia-driver firmware-misc-nonfree >/dev/null
|
||||
ok "nvidia-driver installiert"
|
||||
|
||||
Reference in New Issue
Block a user