#!/bin/sh # Dieses Skript muss als root laufen. # --- Distros erkennen --- is_alpine() { [ -f /etc/alpine-release ] || grep -Eq '^ID="?alpine"?$' /etc/os-release 2>/dev/null } is_debian() { grep -Eq '^(ID|ID_LIKE)=.*(debian|ubuntu)' /etc/os-release 2>/dev/null } is_arch() { grep -Eq '^ID="?arch"?$' /etc/os-release 2>/dev/null } is_rhel() { grep -Eq '^(ID|ID_LIKE)=.*(rhel|fedora|centos)' /etc/os-release 2>/dev/null } # --- Bash-Setup für Debian und Alpine --- echo "Führe Bash-Setup durch (Debian/Alpine)…" # Bash installieren auf Alpine if is_alpine; then if ! command -v bash >/dev/null 2>&1; then echo " → Bash nicht gefunden, installiere mit apk..." apk update apk add --no-cache bash else echo " → Bash bereits installiert." fi # /bin/bash in /etc/shells eintragen if ! grep -Fxq "/bin/bash" /etc/shells; then echo "/bin/bash" >> /etc/shells echo " → /bin/bash zu /etc/shells hinzugefügt." fi # Standard-Shell für alle Benutzer setzen echo " → Setze Default-Shell auf /bin/bash für alle User:" while IFS=: read -r user pass uid gid home shell; do if [ "$uid" -ge 1000 ] || [ "$uid" -eq 0 ]; then if [ "$shell" != "/bin/bash" ]; then echo " $user: $shell → /bin/bash" usermod -s /bin/bash "$user" fi fi done < /etc/passwd fi # Bash-Setup (gemeinsam für Debian und Alpine) BASHRC_CONTENT="\n# Farbiges ls und grep\nalias ls='ls --color=auto'\nalias grep='grep --color=auto'\nalias egrep='egrep --color=auto'\nalias fgrep='fgrep --color=auto'\neval \"\$(dircolors -b ~/.dircolors)\"\nif [ \"\$EUID\" -eq 0 ]; then\n PS1='\\[\\e[1;31m\\]\\u\\[\\e[0;33m\\]@\\[\\e[1;95m\\]\\h \\[\\e[1;33m\\]\\w\\[\\e[0m\\] # '\nelse\n PS1='\\[\\e[1;32m\\]\\u\\[\\e[0;33m\\]@\\[\\e[1;95m\\]\\h \\[\\e[1;34m\\]\\w\\[\\e[0m\\] \\$ '\nfi\n" dircolors -p > /etc/skel/.dircolors update_bashrc() { home=$1; file="$home/.bashrc" echo " → Bearbeite .bashrc für $home" touch "$file" chown "$(basename "$home")":"$(basename "$home")" "$file" if ! grep -q "Farbiges ls und grep" "$file"; then echo -e "$BASHRC_CONTENT" >> "$file" echo " Aktualisiert: $file" fi cp /etc/skel/.dircolors "$home/.dircolors" chown "$(basename "$home")":"$(basename "$home")" "$home/.dircolors" # sicherstellen, dass ~/.bashrc in ~/.profile geladen wird prof="$home/.profile" if ! grep -q '\.bashrc' "$prof" 2>/dev/null; then echo 'if [ -n "$BASH_VERSION" ]; then' >> "$prof" echo ' [ -f ~/.bashrc ] && . ~/.bashrc' >> "$prof" echo 'fi' >> "$prof" echo " ~/.profile angepasst zum Laden von .bashrc" fi } update_bashrc "/root" for d in /home/*; do [ -d "$d" ] && update_bashrc "$d"; done echo "Bash-Konfiguration abgeschlossen." # --- Nano + Syntax-Highlighting für alle Distros --- echo "Installiere/configuriere Nano + Syntax-Highlighting…" if is_alpine; then apk update apk add --no-cache nano nano-syntax elif is_debian; then apt update DEBIAN_FRONTEND=noninteractive apt install -y nano elif is_arch; then pacman -Syu --noconfirm nano nano-syntax-highlighting elif is_rhel; then if ! rpm -qa | grep -q epel-release; then yum install -y epel-release fi yum install -y nano nano-syntax-highlighting else echo "Unbekannte Distribution - versuche, Nano zu installieren…" if command -v apt >/dev/null; then apt update && apt install -y nano elif command -v yum >/dev/null; then yum install -y nano elif command -v pacman >/dev/null; then pacman -Syu --noconfirm nano fi fi NANORC=/etc/nanorc INCLUDE='include "/usr/share/nano/*.nanorc"' if ! grep -Fxq "$INCLUDE" $NANORC; then echo "$INCLUDE" >> $NANORC echo " → Nano: Syntax-Highlighting in $NANORC aktiviert." else echo " → Nano: Syntax-Highlighting bereits aktiviert." fi echo "Skript vollständig abgeschlossen."