#!/bin/bash # # STARFACE API Libraries Fetcher # Holt die benötigten JARs und Klassen von einer STARFACE Installation via SCP # # Verwendung: # ./fetch-starface-libs.sh [user] [target-dir] # # Beispiele: # ./fetch-starface-libs.sh 192.168.1.100 # ./fetch-starface-libs.sh starface.firma.local root # ./fetch-starface-libs.sh 10.0.0.5 root v8-9-10/libs/starface # set -e # Farben für Output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Argumente STARFACE_HOST="${1:-}" SSH_USER="${2:-root}" TARGET_DIR="${3:-v8-9-10/libs/starface}" # Script-Verzeichnis SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" echo -e "${BLUE}========================================" echo " STARFACE API Libraries Fetcher" echo -e "========================================${NC}" echo "" # Hilfe anzeigen if [ -z "$STARFACE_HOST" ] || [ "$STARFACE_HOST" == "-h" ] || [ "$STARFACE_HOST" == "--help" ]; then echo "Verwendung: $0 [user] [target-dir]" echo "" echo "Argumente:" echo " starface-host IP-Adresse oder Hostname der STARFACE (erforderlich)" echo " user SSH-Benutzer (Standard: root)" echo " target-dir Zielverzeichnis für die JARs (Standard: v8-9-10/libs/starface)" echo "" echo "Beispiele:" echo " $0 192.168.1.100" echo " $0 starface.firma.local root" echo " $0 10.0.0.5 root v8-9-10/libs/starface" echo "" echo "Voraussetzungen:" echo " - SSH-Zugang zur STARFACE (root oder sudo-Benutzer)" echo " - SSH-Key oder Passwort-Authentifizierung" echo "" echo "Tipp: SSH-Key einrichten für passwortloses Login:" echo " ssh-copy-id root@" exit 0 fi echo -e "STARFACE Host: ${GREEN}$STARFACE_HOST${NC}" echo -e "SSH User: ${GREEN}$SSH_USER${NC}" echo -e "Zielordner: ${GREEN}$TARGET_DIR${NC}" echo "" # Zielverzeichnis erstellen mkdir -p "$TARGET_DIR" # STARFACE Version und Pfade ermitteln echo -e "${YELLOW}Ermittle STARFACE Version...${NC}" STARFACE_VERSION=$(ssh -o ConnectTimeout=10 "${SSH_USER}@${STARFACE_HOST}" \ "cat /etc/starface-release 2>/dev/null || head -1 /opt/starface/version.txt 2>/dev/null || echo 'unknown'" 2>/dev/null || echo "connection-failed") if [ "$STARFACE_VERSION" == "connection-failed" ]; then echo -e "${RED}Fehler: Konnte keine Verbindung zu $STARFACE_HOST herstellen${NC}" echo "" echo "Mögliche Ursachen:" echo " - Falscher Hostname/IP" echo " - SSH-Dienst nicht erreichbar" echo " - Firewall blockiert Port 22" echo "" echo "Prüfe die Verbindung mit: ssh ${SSH_USER}@${STARFACE_HOST}" exit 1 fi echo -e "STARFACE Version: ${GREEN}$STARFACE_VERSION${NC}" echo "" # Pfade LIB_PATH="/opt/tomcat/webapps/localhost/starface/WEB-INF/lib" CLASSES_PATH="/opt/tomcat/webapps/localhost/starface/WEB-INF/classes" # Prüfen welcher Pfad existiert echo -e "${YELLOW}Prüfe Verzeichnisstruktur...${NC}" ACTUAL_LIB_PATH=$(ssh "${SSH_USER}@${STARFACE_HOST}" \ "if [ -d '$LIB_PATH' ]; then echo '$LIB_PATH'; fi" 2>/dev/null) ACTUAL_CLASSES_PATH=$(ssh "${SSH_USER}@${STARFACE_HOST}" \ "if [ -d '$CLASSES_PATH' ]; then echo '$CLASSES_PATH'; fi" 2>/dev/null) if [ -z "$ACTUAL_LIB_PATH" ]; then echo -e "${RED}Fehler: STARFACE Bibliotheksverzeichnis nicht gefunden${NC}" exit 1 fi echo -e "Bibliothekspfad: ${GREEN}$ACTUAL_LIB_PATH${NC}" echo -e "Klassenpfad: ${GREEN}$ACTUAL_CLASSES_PATH${NC}" echo "" # Alte Stub-Dateien löschen rm -f "$TARGET_DIR/starface-stubs.jar" 2>/dev/null rm -f "$TARGET_DIR/starface-classes.jar" 2>/dev/null # ============================================================ # STARFACE 9.x: Module-API ist in /classes, nicht in JARs # ============================================================ echo -e "${YELLOW}Prüfe auf STARFACE 9.x Struktur (Module-API in classes)...${NC}" HAS_MODULE_CLASSES=$(ssh "${SSH_USER}@${STARFACE_HOST}" \ "if [ -d '$CLASSES_PATH/de/vertico/starface/module' ]; then echo 'yes'; fi" 2>/dev/null) if [ "$HAS_MODULE_CLASSES" == "yes" ]; then echo -e "${GREEN}STARFACE 9.x erkannt - Module-API in classes gefunden${NC}" echo "" echo -e "${YELLOW}Erstelle JAR aus STARFACE classes...${NC}" # Temporäres Verzeichnis auf STARFACE erstellen und JAR bauen ssh "${SSH_USER}@${STARFACE_HOST}" "cd $CLASSES_PATH && jar cf /tmp/starface-classes.jar de/vertico/starface/module de/vertico/starface/persistence 2>/dev/null || jar cf /tmp/starface-classes.jar de/vertico/starface/module" # JAR herunterladen scp -q "${SSH_USER}@${STARFACE_HOST}:/tmp/starface-classes.jar" "$TARGET_DIR/" ssh "${SSH_USER}@${STARFACE_HOST}" "rm -f /tmp/starface-classes.jar" echo -e " ${GREEN}starface-classes.jar erstellt${NC}" echo "" fi # ============================================================ # JAR-Dateien herunterladen # ============================================================ # JARs für STARFACE 9.x (neue Namensgebung) STARFACE9_JARS=( "starface-db-*.jar" "starface-commons-*.jar" "starface-domain-objects-*.jar" "starface-rpc-*.jar" "starface-ng-*.jar" ) # Allgemeine JARs (alle Versionen) COMMON_JARS=( "log4j-api-*.jar" "log4j-core-*.jar" ) # Legacy JARs (STARFACE 8.x und älter) LEGACY_JARS=( "starface-module-*.jar" "starface-persistence-*.jar" ) echo -e "${YELLOW}Lade STARFACE JARs herunter...${NC}" download_jars() { local jar_array=("$@") for pattern in "${jar_array[@]}"; do files=$(ssh "${SSH_USER}@${STARFACE_HOST}" "ls $ACTUAL_LIB_PATH/$pattern 2>/dev/null" || true) if [ -n "$files" ]; then for file in $files; do filename=$(basename "$file") echo -n " $filename: " scp -q "${SSH_USER}@${STARFACE_HOST}:$file" "$TARGET_DIR/" 2>/dev/null echo -e "${GREEN}OK${NC}" done fi done } # Download alle JAR-Typen download_jars "${STARFACE9_JARS[@]}" download_jars "${COMMON_JARS[@]}" download_jars "${LEGACY_JARS[@]}" echo "" # ============================================================ # Zusammenfassung # ============================================================ JAR_COUNT=$(ls -1 "$TARGET_DIR"/*.jar 2>/dev/null | wc -l) echo -e "${BLUE}========================================" echo -e " Download abgeschlossen!" echo -e "========================================${NC}" echo "" echo -e "Heruntergeladene Dateien: ${GREEN}$JAR_COUNT${NC}" echo -e "Speicherort: ${GREEN}$TARGET_DIR/${NC}" echo "" if [ "$JAR_COUNT" -gt 0 ]; then echo "Inhalt:" ls -lh "$TARGET_DIR"/*.jar 2>/dev/null | while read line; do filename=$(echo "$line" | awk '{print $NF}') size=$(echo "$line" | awk '{print $5}') basename=$(basename "$filename") echo -e " ${GREEN}$basename${NC} ($size)" done echo "" # Prüfen ob Module-API vorhanden ist if [ -f "$TARGET_DIR/starface-classes.jar" ] || ls "$TARGET_DIR"/starface-module-*.jar 2>/dev/null | grep -q .; then echo -e "${GREEN}Module-API gefunden - du kannst jetzt bauen:${NC}" echo " cd v8-9-10 && ./build-block.sh" else echo -e "${YELLOW}Warnung: Module-API nicht gefunden${NC}" echo "Das Build-Script wird Stub-Klassen erstellen." fi else echo -e "${RED}Keine JARs heruntergeladen. Prüfe die Verbindung und Berechtigungen.${NC}" exit 1 fi # ============================================================ # JavaMail-Bibliothek prüfen und ggf. installieren # ============================================================ echo "" echo -e "${YELLOW}Prüfe JavaMail-Bibliothek auf STARFACE...${NC}" HAS_JAVAMAIL=$(ssh "${SSH_USER}@${STARFACE_HOST}" \ "ls $ACTUAL_LIB_PATH/*mail*.jar 2>/dev/null | head -1" || true) if [ -n "$HAS_JAVAMAIL" ]; then echo -e "${GREEN}JavaMail bereits vorhanden:${NC}" ssh "${SSH_USER}@${STARFACE_HOST}" "ls -1 $ACTUAL_LIB_PATH/*mail*.jar 2>/dev/null" | while read jar; do echo -e " ${GREEN}$(basename $jar)${NC}" done else echo -e "${YELLOW}JavaMail nicht gefunden - wird installiert...${NC}" # JavaMail herunterladen falls nicht lokal vorhanden DEPS_DIR="$SCRIPT_DIR/v8-9-10/libs/deps" mkdir -p "$DEPS_DIR" if [ ! -f "$DEPS_DIR/javax.mail.jar" ]; then echo " Lade javax.mail.jar herunter..." curl -sL -o "$DEPS_DIR/javax.mail.jar" \ "https://repo1.maven.org/maven2/com/sun/mail/javax.mail/1.6.2/javax.mail-1.6.2.jar" fi if [ ! -f "$DEPS_DIR/activation.jar" ]; then echo " Lade activation.jar herunter..." curl -sL -o "$DEPS_DIR/activation.jar" \ "https://repo1.maven.org/maven2/javax/activation/activation/1.1.1/activation-1.1.1.jar" fi # Auf STARFACE kopieren echo " Kopiere nach STARFACE..." scp -q "$DEPS_DIR/javax.mail.jar" "${SSH_USER}@${STARFACE_HOST}:$ACTUAL_LIB_PATH/" scp -q "$DEPS_DIR/activation.jar" "${SSH_USER}@${STARFACE_HOST}:$ACTUAL_LIB_PATH/" echo -e "${GREEN}JavaMail erfolgreich auf STARFACE installiert!${NC}" echo "" echo -e "${YELLOW}WICHTIG: STARFACE-Dienst neustarten für Aktivierung:${NC}" echo " ssh ${SSH_USER}@${STARFACE_HOST} 'systemctl restart tomcat'" fi echo "" echo -e "${GREEN}Fertig! Du kannst jetzt den Mail2FaxBlock kompilieren:${NC}" echo " cd v8-9-10 && ./build-block.sh"