Skip to content

Instantly share code, notes, and snippets.

@DonRichards
Last active October 14, 2024 18:00
Show Gist options
  • Save DonRichards/cb992523a5ec588f1fb978d752d0d030 to your computer and use it in GitHub Desktop.
Save DonRichards/cb992523a5ec588f1fb978d752d0d030 to your computer and use it in GitHub Desktop.
Upgrade for Java version for a IQSS/dataverse upgrade.
#!/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