#!/usr/bin/env bash # install.sh - Installationsscript für easyname Support Bash-Snippets # Modular erweiterbar für neue Tools und Kategorien set -euo pipefail # Farben für Output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' NC='\033[0m' # No Color # Script-Verzeichnis ermitteln SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # Dry-run Modus DRY_RUN=false # Logging-Funktionen log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } log_dry_run() { echo -e "${YELLOW}[DRY-RUN]${NC} $1" } # Hilfsfunktionen backup_file() { local file="$1" if [[ -f "$file" ]]; then local backup="${file}.backup.$(date +%Y%m%d_%H%M%S)" if [[ "$DRY_RUN" == "true" ]]; then log_dry_run "Würde Backup erstellen: $backup" else cp "$file" "$backup" log_info "Backup erstellt: $backup" fi fi } create_symlink() { local src="$1" local dest="$2" local name="$3" if [[ -L "$dest" ]]; then log_warning "$name bereits als Symlink vorhanden, überspringe" return 0 fi if [[ -f "$dest" ]]; then backup_file "$dest" fi if [[ "$DRY_RUN" == "true" ]]; then log_dry_run "Würde Symlink erstellen: $dest -> $src" else ln -sf "$src" "$dest" log_success "$name symlink erstellt: $dest -> $src" fi } make_executable() { local file="$1" if [[ "$DRY_RUN" == "true" ]]; then log_dry_run "Würde ausführbar machen: $file" else chmod +x "$file" log_info "$file ausführbar gemacht" fi } # Installation: Bash-Profile install_bashprofiles() { log_info "=== Bash-Profile Installation ===" echo -e "\n${PURPLE}Verfügbare Profile:${NC}" echo "1) h0tznpl0tz (pl) - Optimiertes Basis-Profil" echo "0) Überspringen" read -p "Profil auswählen [0-1]: " profile_choice case "$profile_choice" in 1) log_info "Installiere h0tznpl0tz Bash-Profil..." backup_file "$HOME/.bashrc" if [[ "$DRY_RUN" == "true" ]]; then log_dry_run "Würde kopieren: $SCRIPT_DIR/bashprofiles/pl/.bashrc -> $HOME/.bashrc" log_dry_run "Würde erstellen: ~/.bash_aliases (falls nicht vorhanden)" log_dry_run "Würde erstellen: ~/.bash_env (falls nicht vorhanden)" log_dry_run "Würde erstellen: ~/.bash_paths (falls nicht vorhanden)" else cp "$SCRIPT_DIR/bashprofiles/pl/.bashrc" "$HOME/.bashrc" # Modulare Dateien erstellen falls nicht vorhanden [[ ! -f "$HOME/.bash_aliases" ]] && touch "$HOME/.bash_aliases" [[ ! -f "$HOME/.bash_env" ]] && touch "$HOME/.bash_env" [[ ! -f "$HOME/.bash_paths" ]] && touch "$HOME/.bash_paths" log_success "Bash-Profil installiert" fi log_info "Hinweis: Setze LUSER in ~/.bash_env für go-Tool" ;; 0) log_info "Bash-Profile übersprungen" ;; *) log_error "Ungültige Auswahl" ;; esac } # Installation: Connect Tools install_connect() { log_info "=== Connect Tools Installation ===" echo -e "\n${PURPLE}Verfügbare Tools:${NC}" echo "1) go - SSH-Shortcuts für easyname Server" echo "0) Überspringen" read -p "Tools auswählen [0-1]: " connect_choice case "$connect_choice" in 1) log_info "Installiere go SSH-Shortcut Tool..." # Prüfe LUSER Variable if [[ -z "${LUSER:-}" ]]; then log_warning "LUSER Umgebungsvariable nicht gesetzt" read -p "LUSER eingeben (für Kerberos): " user_input if [[ -n "$user_input" ]]; then echo "export LUSER=\"$user_input\"" >> "$HOME/.bash_env" export LUSER="$user_input" log_success "LUSER in ~/.bash_env gesetzt" fi fi # Script installieren local go_script="$SCRIPT_DIR/connect/go/go.sh" make_executable "$go_script" # Symlink in ~/bin oder PATH erstellen if [[ -d "$HOME/bin" ]]; then create_symlink "$go_script" "$HOME/bin/go" "go-Tool" else log_info "~/bin existiert nicht. Erstelle Verzeichnis..." mkdir -p "$HOME/bin" create_symlink "$go_script" "$HOME/bin/go" "go-Tool" log_info "Füge ~/bin zu PATH hinzu (in ~/.bash_paths)" echo 'export PATH="$HOME/bin:$PATH"' >> "$HOME/.bash_paths" fi log_success "go-Tool installiert" ;; 0) log_info "Connect Tools übersprungen" ;; *) log_error "Ungültige Auswahl" ;; esac } # Installation: Legacy Tools install_legacy() { log_info "=== Legacy Tools Installation ===" echo -e "\n${PURPLE}Verfügbare Tools:${NC}" echo "1) checkms - MS-Fehlercode Analyse" echo "2) quicknav - Bash-Funktion für schnelle Navigation" echo "3) Alle Legacy Tools" echo "0) Überspringen" read -p "Tools auswählen [0-3]: " legacy_choice case "$legacy_choice" in 1|3) log_info "Installiere checkms..." local checkms_script="$SCRIPT_DIR/legacy/checkms/checkms.sh" make_executable "$checkms_script" if [[ -d "$HOME/bin" ]]; then create_symlink "$checkms_script" "$HOME/bin/checkms" "checkms" else mkdir -p "$HOME/bin" create_symlink "$checkms_script" "$HOME/bin/checkms" "checkms" fi log_success "checkms installiert" ;;& 2|3) log_info "Installiere quicknav..." local quicknav_func="$SCRIPT_DIR/legacy/quicknav/quicknav.sh" log_warning "quicknav ist eine Bash-Funktion und muss manuell in .bashrc eingebunden werden" log_info "Füge folgende Zeile zu ~/.bashrc hinzu:" echo -e "${YELLOW}source \"$quicknav_func\"${NC}" ;;& 0) log_info "Legacy Tools übersprungen" ;; *) log_error "Ungültige Auswahl" ;; esac } # Installation: WH20 Tools (Platzhalter für zukünftige Tools) install_wh20() { log_info "=== WH20 Tools Installation ===" log_info "Noch keine WH20 Tools verfügbar" } # Hilfsfunktion show_help() { cat </dev/null 2>&1; then log_error "git ist erforderlich aber nicht installiert" exit 1 fi while true; do show_menu read -p "Auswahl treffen [0-5]: " choice case "$choice" in 1) install_bashprofiles ;; 2) install_connect ;; 3) install_legacy ;; 4) install_wh20 ;; 5) install_bashprofiles install_connect install_legacy install_wh20 ;; 0) log_success "Installation beendet" echo -e "\n${YELLOW}Hinweis: Starte eine neue Shell oder führe 'source ~/.bashrc' aus${NC}" exit 0 ;; *) log_error "Ungültige Auswahl" ;; esac echo -e "\n${BLUE}Drücke Enter für Hauptmenü...${NC}" read -r done } # Script starten main "$@"