fix(shell): zsh-Pflicht im Installer durchsetzen und benennen
Der Installer installiert zsh bei Bedarf selbst (apt-get, dnf, pacman, zypper, apk) und sagt das im Kopf und in der Ausgabe. Ohne zsh bricht der Shell-Teil jetzt VOR dem ersten Schreibzugriff ab (Exit 1, Befehl genannt, ~/.zshrc unangetastet), statt einen wirkungslosen Prompt-Eintrag zu hinterlassen. install_zsh meldet Erfolg nur bei echtem Fund im PATH, chsh-Fehler werden gemeldet, Abschlusszeile nennt Exit-Status.
This commit is contained in:
1 parent
ca90ac08cc
commit
ed85797eda
5 files changed
+110
-13
No files matched your search
+60
-10
@@ -10,6 +10,12 @@
|
||||
# ./install.sh --terminal-only # nur Terminal-Palette
|
||||
# ./install.sh --no-chsh # Login-Shell nicht anfassen
|
||||
#
|
||||
# zsh ist Pflicht: der Prompt ist ein zsh-Modul, in bash wirkt er nicht. Fehlt zsh,
|
||||
# installiert dieses Skript ihn selbst (apt-get, dnf, pacman, zypper, apk). Geht das
|
||||
# nicht — kein Paketmanager oder sudo ohne Passwort — bricht der Shell-Teil ab und
|
||||
# nennt den genauen Befehl zum Nachholen. Ein halb eingerichtetes ~/.zshrc hilft
|
||||
# niemandem, deshalb lieber kein Prompt als ein stummer.
|
||||
#
|
||||
# Grundsaetze: jede Datei wird vorher gesichert (.vor-kalina-ci-<stempel>),
|
||||
# jeder Block ist an einem Marker erkennbar und wird nicht doppelt geschrieben,
|
||||
# jede veraenderte Datei wird anschliessend mit dem passenden Pruefer getestet.
|
||||
@@ -26,6 +32,7 @@ SRC_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
RAW="${KALINA_CI_RAW:-https://gitea.m-m.bio/mm/kalina-ci/raw/branch/main/shell}"
|
||||
|
||||
DRY=0; DO_SHELL=1; DO_TERM=1; DO_CHSH=1
|
||||
ZSH_OK=0 # 1 = zsh vorhanden oder installiert; 0 = Prompt kann nicht greifen
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--dry-run) DRY=1 ;;
|
||||
@@ -58,6 +65,11 @@ fi
|
||||
|
||||
install_zsh() {
|
||||
command -v zsh >/dev/null && { ok "zsh vorhanden: $(zsh --version)"; return 0; }
|
||||
if [ "$DRY" = 1 ]; then
|
||||
say " zsh fehlt — ein echter Lauf wuerde ihn jetzt installieren (ohne zsh kein Prompt)."
|
||||
else
|
||||
say " zsh fehlt — wird jetzt installiert (ohne zsh kein Prompt)."
|
||||
fi
|
||||
local pm=""
|
||||
for c in apt-get dnf pacman zypper apk; do command -v "$c" >/dev/null && pm="$c" && break; done
|
||||
[ -n "$pm" ] || { warn "kein bekannter Paketmanager — zsh bitte von Hand installieren"; return 1; }
|
||||
@@ -76,10 +88,15 @@ install_zsh() {
|
||||
apt-get) run $SUDO env DEBIAN_FRONTEND=noninteractive apt-get install -y zsh ;;
|
||||
dnf) run $SUDO dnf install -y zsh ;;
|
||||
pacman) run $SUDO pacman -S --needed --noconfirm zsh ;;
|
||||
zypper) run $SUDO zypper --non-interactive install zsh ;;
|
||||
apk) run $SUDO apk add zsh ;;
|
||||
zypper) $SUDO zypper --non-interactive install zsh ;;
|
||||
apk) $SUDO apk add zsh ;;
|
||||
esac
|
||||
command -v zsh >/dev/null && ok "zsh installiert: $(zsh --version)" || warn "zsh weiterhin nicht auffindbar"
|
||||
if command -v zsh >/dev/null; then
|
||||
ok "zsh installiert: $(zsh --version)"
|
||||
return 0
|
||||
fi
|
||||
warn "zsh ist nach der Installation nicht auffindbar — PATH pruefen"
|
||||
return 1
|
||||
}
|
||||
|
||||
# Block mit Markern an eine Datei anhaengen (nicht doppelt)
|
||||
@@ -101,7 +118,17 @@ append_block() {
|
||||
# ------------------------------------------------------------------ Shell
|
||||
do_shell() {
|
||||
step "Shell (zsh + Kalina-CI-Prompt)"
|
||||
install_zsh || true
|
||||
|
||||
# Ohne zsh gibt es keinen Prompt: das Modul ist zsh-Syntax in ~/.zshrc. Wer in bash
|
||||
# sitzt, sieht davon nichts — also erst zsh, dann alles andere.
|
||||
if ! command -v zsh >/dev/null && [ "$DRY" = 1 ]; then
|
||||
install_zsh || true
|
||||
warn "Trockenlauf: ein echter Lauf wuerde zsh zuerst installieren, sonst gaebe es keinen Prompt"
|
||||
elif ! install_zsh; then
|
||||
warn "Shell-Teil abgebrochen — ohne zsh wirkt der Prompt nicht (kein ~/.zshrc-Eintrag geschrieben)."
|
||||
warn "zsh nachholen (Befehl oben), dann dieses Skript erneut starten."
|
||||
return 1
|
||||
fi
|
||||
|
||||
run mkdir -p "$CONF_DIR"
|
||||
if [ -f "$SRC_DIR/prompt.zsh" ]; then
|
||||
@@ -170,13 +197,26 @@ RC
|
||||
fi
|
||||
|
||||
# Login-Shell
|
||||
local cur; cur="$(getent passwd "$(id -un)" | cut -d: -f7)"
|
||||
if [ "$cur" = "$(command -v zsh 2>/dev/null)" ]; then
|
||||
local cur zshbin; cur="$(getent passwd "$(id -un)" | cut -d: -f7)"
|
||||
zshbin="$(command -v zsh 2>/dev/null)"
|
||||
if [ -z "$zshbin" ]; then
|
||||
warn "zsh nicht gefunden — Login-Shell bleibt $cur, Prompt erscheint nicht"
|
||||
return 0
|
||||
fi
|
||||
ZSH_OK=1
|
||||
if [ "$cur" = "$zshbin" ]; then
|
||||
ok "Login-Shell ist bereits zsh"
|
||||
elif [ "$DO_CHSH" = 0 ]; then
|
||||
warn "Login-Shell bleibt $cur (--no-chsh); Start mit 'exec zsh' oder 'chsh -s $(command -v zsh)'"
|
||||
warn "Login-Shell bleibt $cur (--no-chsh). Bis du zsh startest, siehst du den Prompt nicht:"
|
||||
say " exec zsh # nur diese Sitzung"
|
||||
say " chsh -s $zshbin # dauerhaft"
|
||||
else
|
||||
run $SUDO chsh -s "$(command -v zsh)" "$(id -un)" && ok "Login-Shell auf zsh gestellt (greift beim naechsten Login)"
|
||||
if run $SUDO chsh -s "$zshbin" "$(id -un)"; then
|
||||
ok "Login-Shell auf zsh gestellt — greift beim naechsten Login (nicht in dieser Sitzung)"
|
||||
else
|
||||
warn "chsh fehlgeschlagen; Login-Shell bleibt $cur. Von Hand: chsh -s $zshbin"
|
||||
warn "Sofort testen: exec zsh"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -446,10 +486,20 @@ XRES
|
||||
say "Kalina CI — Installation auf $(hostname), Ziel $HOME"
|
||||
[ "$DRY" = 1 ] && say "(Probelauf: es wird nichts geschrieben)"
|
||||
|
||||
[ "$DO_SHELL" = 1 ] && do_shell
|
||||
RC=0
|
||||
[ "$DO_SHELL" = 1 ] && { do_shell || RC=1; }
|
||||
[ "$DO_TERM" = 1 ] && do_terminal
|
||||
|
||||
say ""
|
||||
step "Fertig"
|
||||
say " Prompt pruefen: zsh -i (oder neue Terminal-Sitzung)"
|
||||
if [ "$RC" = 0 ] && [ "$ZSH_OK" = 1 ]; then
|
||||
ok "neu starten: exec zsh — oder einmal neu einloggen (Login-Shell greift erst dann)"
|
||||
elif [ "$RC" = 0 ]; then
|
||||
warn "ohne zsh kein Prompt — im echten Lauf bricht der Shell-Teil hier ab"
|
||||
else
|
||||
warn "mit Fehlern beendet (Exit 1) — oben steht, was fehlt; erneut starten, sobald es da ist"
|
||||
fi
|
||||
say " Prompt pruefen: zsh -i"
|
||||
say " Abschalten: KALINA_CI_PROMPT=0 zsh -i"
|
||||
say " Palette pruefen: Terminal neu starten; nach environment.d-Aenderung einmal neu anmelden"
|
||||
exit "$RC"
|
||||
Reference in new issue
Block a user