Last active
October 14, 2024 18:00
-
-
Save DonRichards/cb992523a5ec588f1fb978d752d0d030 to your computer and use it in GitHub Desktop.
Upgrade for Java version for a IQSS/dataverse upgrade.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Configurable variables | |
TARGET_JAVA_VERSION="17" | |
LOGFILE="java_upgrade.log" | |
# Function to log and print messages | |
log() { | |
echo "$(date +"%Y-%m-%d %H:%M:%S") - $1" | tee -a "$LOGFILE" | |
} | |
# Function to check for errors and exit if found | |
check_error() { | |
if [ $? -ne 0 ]; then | |
log "ERROR: $1. Exiting." | |
exit 1 | |
fi | |
} | |
# Function to check Java version for the dataverse user | |
check_java_version() { | |
local version=$(sudo -u dataverse java -version 2>&1 | grep -oP '(?<=version ")([0-9]+)') | |
echo "$version" | |
} | |
# Function to check if JAVA_HOME is set correctly for the dataverse user | |
verify_java_home() { | |
JAVA_HOME_PATH="/usr/lib/jvm/java-${TARGET_JAVA_VERSION}-openjdk" | |
JAVA_HOME_CURRENT=$(sudo -u dataverse bash -c 'echo $JAVA_HOME') | |
if [[ "$JAVA_HOME_CURRENT" != *"${JAVA_HOME_PATH}"* ]]; then | |
log "WARNING: JAVA_HOME is not set correctly for the dataverse user. It's currently: $JAVA_HOME_CURRENT" | |
log "Attempting to set JAVA_HOME to Java ${TARGET_JAVA_VERSION}." | |
sudo -u dataverse bash -c "export JAVA_HOME='$JAVA_HOME_PATH'; export PATH=\$JAVA_HOME/bin:\$PATH" | |
check_error "Failed to set JAVA_HOME for the dataverse user" | |
log "JAVA_HOME set to: $JAVA_HOME_PATH" | |
else | |
log "JAVA_HOME is set correctly for the dataverse user: $JAVA_HOME_CURRENT" | |
fi | |
} | |
# Function to install Java 17 if it's not already installed | |
install_java() { | |
installed_java_version=$(check_java_version) | |
if [ "$installed_java_version" = "$TARGET_JAVA_VERSION" ]; then | |
log "Java ${TARGET_JAVA_VERSION} is already installed. Skipping installation." | |
else | |
log "Java ${TARGET_JAVA_VERSION} is not installed. Proceeding with installation." | |
sudo yum install -y java-${TARGET_JAVA_VERSION}-openjdk java-${TARGET_JAVA_VERSION}-openjdk-devel 2>&1 | tee -a "$LOGFILE" | |
check_error "Failed to install Java ${TARGET_JAVA_VERSION}" | |
log "Java ${TARGET_JAVA_VERSION} installation completed." | |
fi | |
} | |
# Updated Function to set Java 17 as the default version using alternatives | |
set_java_default() { | |
log "Setting Java ${TARGET_JAVA_VERSION} as the default version using alternatives..." | |
# Get the correct path for Java 17 | |
JAVA_17_PATH=$(update-alternatives --list java | grep "java-${TARGET_JAVA_VERSION}-openjdk") | |
if [ -n "$JAVA_17_PATH" ]; then | |
# Set Java 17 as default | |
sudo alternatives --set java "$JAVA_17_PATH" 2>&1 | tee -a "$LOGFILE" | |
check_error "Failed to set Java ${TARGET_JAVA_VERSION} as the default version" | |
else | |
# If Java 17 is not found in alternatives, add it manually | |
log "Java ${TARGET_JAVA_VERSION} path not found in alternatives. Adding it manually..." | |
JAVA_17_BIN="/usr/lib/jvm/java-${TARGET_JAVA_VERSION}-openjdk/bin/java" | |
if [ -f "$JAVA_17_BIN" ]; then | |
sudo alternatives --install /usr/bin/java java "$JAVA_17_BIN" 1700 | |
check_error "Failed to add Java ${TARGET_JAVA_VERSION} to alternatives" | |
log "Java ${TARGET_JAVA_VERSION} added to alternatives." | |
sudo alternatives --set java "$JAVA_17_BIN" 2>&1 | tee -a "$LOGFILE" | |
check_error "Failed to set Java ${TARGET_JAVA_VERSION} as the default version after adding" | |
else | |
log "ERROR: Java ${TARGET_JAVA_VERSION} binary not found at $JAVA_17_BIN. Exiting." | |
exit 1 | |
fi | |
fi | |
# Verify if alternatives was used to set Java for the dataverse user | |
default_java=$(readlink -f /usr/bin/java) | |
if [[ "$default_java" != *"java-${TARGET_JAVA_VERSION}-openjdk"* ]]; then | |
log "ERROR: Java ${TARGET_JAVA_VERSION} is not the default version. Please check alternatives settings." | |
exit 1 | |
else | |
log "Java ${TARGET_JAVA_VERSION} is now the default version." | |
fi | |
} | |
# Function to check if Payara and Dataverse services are running and stop them if they are | |
check_and_stop_services() { | |
# Check if Solr is running and stop it if necessary | |
if systemctl is-active --quiet Solr; then | |
log "Solr is running. Stopping Solr service..." | |
sudo systemctl stop Solr | |
check_error "Failed to stop Solr service" | |
log "Solr service stopped successfully." | |
else | |
log "Solr service is not running." | |
fi | |
# Check if Payara is running and stop it if necessary | |
if systemctl is-active --quiet payara; then | |
log "Payara is running. Stopping Payara service..." | |
sudo systemctl stop payara | |
check_error "Failed to stop Payara service" | |
log "Payara service stopped successfully." | |
else | |
log "Payara service is not running." | |
fi | |
# Check if Dataverse is running and stop it if necessary | |
if systemctl is-active --quiet dataverse; then | |
log "Dataverse is running. Stopping Dataverse service..." | |
sudo systemctl stop dataverse | |
check_error "Failed to stop Dataverse service" | |
log "Dataverse service stopped successfully." | |
else | |
log "Dataverse service is not running." | |
fi | |
} | |
# Function to check if Payara and Dataverse services are running and stop them if they are | |
check_and_start_services() { | |
# Check if Solr is not running and stop it if necessary | |
if systemctl is-active --quiet Solr; then | |
log "Solr is not running. Starting Solr service..." | |
sudo systemctl stop Solr | |
check_error "Failed to stop Solr service" | |
log "Solr service started successfully." | |
else | |
log "Solr service was already running." | |
fi | |
# Check if Payara is not running and stop it if necessary | |
if systemctl is-active --quiet payara; then | |
log "Payara is not running. Starting Payara service..." | |
sudo systemctl stop payara | |
check_error "Failed to stop Payara service" | |
log "Payara service started successfully." | |
else | |
log "Payara service was already running." | |
fi | |
# Check if Dataverse is not running and stop it if necessary | |
if systemctl is-active --quiet dataverse; then | |
log "Dataverse is not running. Starting Dataverse service..." | |
sudo systemctl stop dataverse | |
check_error "Failed to stop Dataverse service" | |
log "Dataverse service started successfully." | |
else | |
log "Dataverse service was already running." | |
fi | |
} | |
# Function to verify JAVA_HOME and PATH for the dataverse user | |
verify_java_configuration() { | |
log "Verifying JAVA_HOME and PATH for the dataverse user..." | |
verify_java_home | |
} | |
# Function to start the upgrade process | |
upgrade_java() { | |
# Step 1: Stop Payara and Dataverse services | |
check_and_stop_services | |
# Step 2: Install Java 17 if necessary | |
install_java | |
# Step 3: Set Java 17 as default | |
set_java_default | |
# Step 4: Verify JAVA_HOME configuration | |
verify_java_configuration | |
log "Java ${TARGET_JAVA_VERSION} upgrade completed successfully." | |
log "Upgrade process complete. Log file saved to $LOGFILE." | |
} | |
# Execute the upgrade process | |
echo "OLD VERSION" | |
upgrade_java |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment