From a5553067b69d74ad05599340245ec10de2f238c9 Mon Sep 17 00:00:00 2001 From: Tomi Eckert Date: Thu, 12 Mar 2026 20:47:56 +0100 Subject: [PATCH] add installer --- install.sh | 277 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 277 insertions(+) create mode 100644 install.sh diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..7004e24 --- /dev/null +++ b/install.sh @@ -0,0 +1,277 @@ +#!/bin/bash +# ============================================================================= +# SAP HANA Monitoring Scripts Installer +# Downloads and installs HANA monitoring scripts to /root/hana-scripts/ +# Preserves existing configuration if hana.conf already exists +# ============================================================================= + +set -e + +# Configuration +INSTALL_DIR="/root/hana-scripts" +REPO_URL="https://git.technopunk.space/tomi/hana-scripts/raw/branch/main" +BACKUP_DIR="/root/hana-scripts-backup-$(date +%Y%m%d_%H%M%S)" + +# List of files to install +FILES=( + "hana.conf" + "hana_lib.sh" + "hana_disk.sh" + "hana_backup.sh" + "hana_log_segments.sh" + "hana_processes.sh" + "hana_queue.sh" + "sld_watchdog.sh" +) + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Logging functions +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" +} + +# Check if running as root +check_root() { + if [ "$EUID" -ne 0 ]; then + log_error "This script must be run as root" + exit 1 + fi +} + +# Check if curl is available +check_curl() { + if ! command -v curl &> /dev/null; then + log_error "curl is required but not installed. Please install curl first." + exit 1 + fi + log_info "curl is available" +} + +# Create backup of existing installation +backup_existing() { + if [ -d "$INSTALL_DIR" ]; then + log_info "Existing installation found at $INSTALL_DIR" + log_info "Creating backup at $BACKUP_DIR..." + + mkdir -p "$BACKUP_DIR" + cp -r "$INSTALL_DIR"/* "$BACKUP_DIR"/ 2>/dev/null || true + + # Save the existing hana.conf separately for easy access + if [ -f "$INSTALL_DIR/hana.conf" ]; then + cp "$INSTALL_DIR/hana.conf" "$BACKUP_DIR/hana.conf.preserved" + log_success "Existing hana.conf backed up to $BACKUP_DIR/hana.conf.preserved" + fi + + log_success "Backup completed" + fi +} + +# Create installation directory +create_install_dir() { + log_info "Creating installation directory: $INSTALL_DIR" + mkdir -p "$INSTALL_DIR" +} + +# Download a file from the repository +download_file() { + local filename="$1" + local url="${REPO_URL}/${filename}" + local dest="${INSTALL_DIR}/${filename}" + + log_info "Downloading ${filename}..." + + if curl -sSf -o "$dest" "$url"; then + log_success "Downloaded ${filename}" + return 0 + else + log_error "Failed to download ${filename}" + return 1 + fi +} + +# Restore preserved configuration +restore_config() { + local preserved_config="$BACKUP_DIR/hana.conf.preserved" + + if [ -f "$preserved_config" ]; then + log_info "Preserving existing hana.conf..." + + # Download the new config to a temp location + local temp_config="${INSTALL_DIR}/hana.conf.new" + if curl -sSf -o "$temp_config" "${REPO_URL}/hana.conf"; then + # Compare configs to check for new settings + if ! diff -q "$preserved_config" "$temp_config" > /dev/null 2>&1; then + log_warning "Configuration file has updates. Merging changes..." + + # Keep the old config but add any new settings from the new config + # First, copy the preserved config + cp "$preserved_config" "$dest" + + # Extract new settings from the new config (settings not in old config) + # This is a simple merge - new variables are appended if not present + while IFS= read -r line; do + # Skip comments and empty lines + if [[ "$line" =~ ^[[:space:]]*# ]] || [[ -z "${line// }" ]]; then + continue + fi + + # Extract variable name + var_name="${line%%=*}" + var_name="${var_name// /}" + + # Check if variable exists in preserved config + if ! grep -q "^${var_name}=" "$preserved_config" 2>/dev/null; then + log_info "Adding new configuration: ${var_name}" + echo "" >> "$dest" + echo "$line" >> "$dest" + fi + done < "$temp_config" + + log_success "Configuration merged successfully" + else + log_info "No configuration changes detected, keeping existing config" + cp "$preserved_config" "$dest" + fi + + # Clean up temp file + rm -f "$temp_config" + else + log_warning "Could not download new hana.conf, keeping existing config" + cp "$preserved_config" "$dest" + fi + + return 0 + fi + + return 1 +} + +# Set executable permissions +set_permissions() { + log_info "Setting executable permissions..." + chmod +x "${INSTALL_DIR}"/*.sh 2>/dev/null || true + log_success "Permissions set" +} + +# Verify installation +verify_installation() { + log_info "Verifying installation..." + + local errors=0 + + for file in "${FILES[@]}"; do + if [ ! -f "${INSTALL_DIR}/${file}" ]; then + log_error "Missing file: ${file}" + errors=$((errors + 1)) + fi + done + + if [ $errors -eq 0 ]; then + log_success "Installation verified successfully" + return 0 + else + log_error "Verification failed with ${errors} errors" + return 1 + fi +} + +# Print summary +print_summary() { + echo "" + echo "==============================================" + echo " Installation Complete!" + echo "==============================================" + echo "" + echo "Installation directory: ${INSTALL_DIR}" + echo "" + + if [ -d "$BACKUP_DIR" ]; then + echo "Backup location: ${BACKUP_DIR}" + echo "" + fi + + echo "Next steps:" + echo " 1. Review and update ${INSTALL_DIR}/hana.conf with your settings" + echo " 2. Make scripts executable: chmod +x ${INSTALL_DIR}/*.sh" + echo " 3. Test individual scripts manually" + echo " 4. Set up cron jobs for automated monitoring" + echo "" + echo "Example cron entries (run crontab -e):" + echo " */5 * * * * ${INSTALL_DIR}/hana_disk.sh" + echo " */5 * * * * ${INSTALL_DIR}/hana_processes.sh" + echo " */10 * * * * ${INSTALL_DIR}/hana_backup.sh" + echo " */5 * * * * ${INSTALL_DIR}/hana_queue.sh" + echo " */5 * * * * ${INSTALL_DIR}/hana_log_segments.sh" + echo " */5 * * * * ${INSTALL_DIR}/sld_watchdog.sh" + echo "" +} + +# Main installation function +main() { + echo "" + echo "==============================================" + echo " SAP HANA Monitoring Scripts Installer" + echo "==============================================" + echo "" + + # Pre-flight checks + check_root + check_curl + + # Backup existing installation + backup_existing + + # Create installation directory + create_install_dir + + # Download all files + local download_errors=0 + for file in "${FILES[@]}"; do + if [ "$file" == "hana.conf" ]; then + # Handle config file specially + if ! restore_config; then + # No existing config, download fresh + download_file "$file" || download_errors=$((download_errors + 1)) + fi + else + download_file "$file" || download_errors=$((download_errors + 1)) + fi + done + + if [ $download_errors -gt 0 ]; then + log_error "Failed to download ${download_errors} files" + exit 1 + fi + + # Set permissions + set_permissions + + # Verify installation + if ! verify_installation; then + exit 1 + fi + + # Print summary + print_summary +} + +# Run main function +main "$@"