starface-mail2fax/fetch-starface-libs.sh

276 lines
9.2 KiB
Bash
Executable File

#!/bin/bash
#
# STARFACE API Libraries Fetcher
# Holt die benötigten JARs und Klassen von einer STARFACE Installation via SCP
#
# Verwendung:
# ./fetch-starface-libs.sh <starface-host> [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 <starface-host> [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@<starface-host>"
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"