#!/bin/bash # ============================================================================== # SAP Business One for HANA Silent Installation Configurator # ============================================================================== # This script interactively collects necessary details to customize the # silent installation properties file for SAP Business One on HANA. # It provides sensible defaults and generates the final 'install.properties'. # ============================================================================== # --- Function to display a welcome header --- print_header() { echo "======================================================" echo " SAP Business One for HANA Installation Configurator " echo "======================================================" echo "Please provide the following details. Defaults are in [brackets]." echo "" } # --- Function to read password securely --- read_password() { local prompt_text=$1 local -n pass_var=$2 # Use a nameref to pass the variable name local pass_verify # Loop until the entered passwords match and are not empty while true; do read -s -p "$prompt_text: " pass_var echo if [ -z "$pass_var" ]; then echo "Password cannot be empty. Please try again." continue fi read -s -p "Confirm password: " pass_verify echo if [ "$pass_var" == "$pass_verify" ]; then break else echo "Passwords do not match. Please try again." echo "" fi done } # --- Main configuration logic --- # 1. Get Hostname/IP Details # Default to the current machine's hostname. DEFAULT_HOSTNAME=$(hostname) read -p "Enter HANA Database Server Hostname or IP [${DEFAULT_HOSTNAME}]: " HANA_DATABASE_SERVERS HANA_DATABASE_SERVERS=${HANA_DATABASE_SERVERS:-$DEFAULT_HOSTNAME} # 2. Get HANA Instance Details read -p "Enter HANA Database Instance Number [00]: " HANA_DATABASE_INSTANCE HANA_DATABASE_INSTANCE=${HANA_DATABASE_INSTANCE:-00} # 3. Get HANA SID to construct the admin user read -p "Enter HANA SID (Tenant Name) [NDB]: " HANA_SID HANA_SID=${HANA_SID:-NDB} # Convert SID to lowercase and append 'adm' HANA_DATABASE_ADMIN_ID=$(echo "${HANA_SID}" | tr '[:upper:]' '[:lower:]')adm # 4. Get Passwords echo "" echo "--- Secure Password Entry ---" read_password "Enter password for HANA Admin ('${HANA_DATABASE_ADMIN_ID}')" HANA_DATABASE_ADMIN_PASSWD # 5. Get HANA Database User read -p "Enter HANA Database User ID [SYSTEM]: " HANA_DATABASE_USER_ID HANA_DATABASE_USER_ID=${HANA_DATABASE_USER_ID:-SYSTEM} # 6. Get HANA User Password read_password "Enter password for HANA User ('${HANA_DATABASE_USER_ID}')" HANA_DATABASE_USER_PASSWORD # 7. Get SLD and Site User Details echo "" echo "--- System Landscape Directory (SLD) & Service Layer ---" read -p "Enter SLD Service Port [40000]: " SERVICE_PORT SERVICE_PORT=${SERVICE_PORT:-40000} read -p "Enter SLD Site User ID [B1SiteUser]: " SITE_USER_ID SITE_USER_ID=${SITE_USER_ID:-B1SiteUser} read_password "Enter password for Site User ('${SITE_USER_ID}')" SITE_USER_PASSWORD # 10. & 11. Get Service Layer Load Balancer Details read -p "Enter Service Layer Load Balancer Port [50000]: " SL_LB_PORT SL_LB_PORT=${SL_LB_PORT:-50000} read -p "How many Service Layer member nodes should be configured? [2]: " SL_MEMBER_COUNT SL_MEMBER_COUNT=${SL_MEMBER_COUNT:-2} # Generate the SL_LB_MEMBERS string SL_LB_MEMBERS="" for (( i=1; i<=SL_MEMBER_COUNT; i++ )); do port=$((50000 + i)) member="${HANA_DATABASE_SERVERS}:${port}" if [ -z "$SL_LB_MEMBERS" ]; then SL_LB_MEMBERS="$member" else SL_LB_MEMBERS="$SL_LB_MEMBERS,$member" fi done # 12. Display Summary and Ask for Confirmation clear echo "======================================================" echo " Configuration Summary" echo "======================================================" echo "" echo " --- Installation & System Details ---" echo " INSTALLATION_FOLDER=/usr/sap/SAPBusinessOne" echo "" echo " --- SAP HANA Database Server Details ---" echo " HANA_DATABASE_SERVERS=${HANA_DATABASE_SERVERS}" echo " HANA_DATABASE_INSTANCE=${HANA_DATABASE_INSTANCE}" echo " HANA_DATABASE_ADMIN_ID=${HANA_DATABASE_ADMIN_ID}" echo " HANA_DATABASE_ADMIN_PASSWD=[hidden]" echo "" echo " --- SAP HANA Database User ---" echo " HANA_DATABASE_USER_ID=${HANA_DATABASE_USER_ID}" echo " HANA_DATABASE_USER_PASSWORD=[hidden]" echo "" echo " --- System Landscape Directory (SLD) Details ---" echo " SERVICE_PORT=${SERVICE_PORT}" echo " SITE_USER_ID=${SITE_USER_ID}" echo " SITE_USER_PASSWORD=[hidden]" echo "" echo " --- Service Layer ---" echo " SL_LB_PORT=${SL_LB_PORT}" echo " SL_LB_MEMBERS=${SL_LB_MEMBERS}" echo "" echo "======================================================" read -p "Save this configuration to 'install.properties'? [y/N]: " confirm echo "" if [[ ! "$confirm" =~ ^[yY]$ ]]; then echo "Configuration cancelled by user." exit 1 fi # --- Write the final install.properties file --- # Using a HEREDOC to write the configuration file with the variables collected. cat > install.properties << EOL # SAP Business One for HANA Silent Installation Properties # Generated by configuration script on $(date) INSTALLATION_FOLDER=/usr/sap/SAPBusinessOne HANA_DATABASE_SERVERS=${HANA_DATABASE_SERVERS} HANA_DATABASE_INSTANCE=${HANA_DATABASE_INSTANCE} HANA_DATABASE_ADMIN_ID=${HANA_DATABASE_ADMIN_ID} HANA_DATABASE_ADMIN_PASSWD=${HANA_DATABASE_ADMIN_PASSWD} HANA_DATABASE_USER_ID=${HANA_DATABASE_USER_ID} HANA_DATABASE_USER_PASSWORD=${HANA_DATABASE_USER_PASSWORD} SERVICE_PORT=${SERVICE_PORT} SLD_DATABASE_NAME=SLDDATA SLD_CERTIFICATE_ACTION=self CONNECTION_SSL_CERTIFICATE_VERIFICATION=false SLD_DATABASE_ACTION=create SLD_SERVER_PROTOCOL=https SITE_USER_ID=${SITE_USER_ID} SITE_USER_PASSWORD=${SITE_USER_PASSWORD} SL_LB_MEMBER_ONLY=false SL_LB_PORT=${SL_LB_PORT} SL_LB_MEMBERS=${SL_LB_MEMBERS} SL_THREAD_PER_SERVER=10 SELECTED_FEATURES=B1ServerTools,B1ServerToolsLandscape,B1ServerToolsSLD,B1ServerToolsLicense,B1ServerToolsJobService,B1ServerToolsXApp,B1SLDAgent,B1BackupService,B1Server,B1ServerSHR,B1ServerHelp,B1AnalyticsPlatform,B1ServerCommonDB,B1ServiceLayerComponent B1S_SAMBA_AUTOSTART=true B1S_SHARED_FOLDER_OVERWRITE=true LANDSCAPE_INSTALL_ACTION=create EOL echo "Success! The configuration file 'install.properties' has been created in the current directory." exit 0