Voici un script Bash automatisant l'installation d'Oracle JDK 17 sur un système OpenCloudOS Server 9. Il gère le téléchargement, la décompression et la configuration des variables d'environnement.
Script d'installation automatisé
#!/bin/bash
# Script d'automatisation pour l'installation de JDK Oracle 17
# Cible : OpenCloudOS Server 9
set -o errexit
# Paramètres de configuration
JAVA_VER="17"
JAVA_FULL_VER="17.0.12"
JAVA_PATCH="8"
DIST_NAME="jdk-${JAVA_FULL_VER}+${JAVA_PATCH}"
SOURCE_URL="https://download.oracle.com/java/${JAVA_VER}/latest/jdk-${JAVA_FULL_VER}_linux-x64_bin.tar.gz"
TARGET_DIR="/usr/local/java"
ENV_SCRIPT="/etc/profile.d/java_vars.sh"
# Palette de couleurs pour l'affichage
RED_CLR='\033[0;31m'
GREEN_CLR='\033[0;32m'
YELLOW_CLR='\033[1;33m'
NO_CLR='\033[0m'
info_msg() { echo -e "${GREEN_CLR}[INFO]${NO_CLR} $1"; }
warn_msg() { echo -e "${YELLOW_CLR}[ATTENTION]${NO_CLR} $1"; }
error_msg() { echo -e "${RED_CLR}[ERREUR]${NO_CLR} $1"; }
verify_privileges() {
if [[ "${EUID}" -ne 0 ]]; then
error_msg "Ce script doit être exécuté avec les privilèges root."
exit 1
fi
}
check_previous_install() {
if command -v java &> /dev/null; then
warn_msg "Une installation de Java a été détectée : $(java -version 2>&1 | head -1)"
read -rp "Voulez-vous poursuivre l'installation ? (o/n) : " user_choice
if [[ "${user_choice}" != "o" && "${user_choice}" != "O" ]]; then
info_msg "Opération annulée par l'utilisateur."
exit 0
fi
fi
}
prepare_directory() {
info_msg "Préparation du répertoire cible : ${TARGET_DIR}"
mkdir -p "${TARGET_DIR}"
}
fetch_package() {
local archive_path="/tmp/${DIST_NAME}.tar.gz"
if [[ -f "${TARGET_DIR}/${DIST_NAME}/bin/java" ]]; then
info_msg "L'archive JDK est déjà extraite. Étape de téléchargement ignorée."
return 0
fi
info_msg "Démarrage du téléchargement d'Oracle JDK ${JAVA_FULL_VER}..."
info_msg "Source : ${SOURCE_URL}"
if command -v wget &> /dev/null; then
wget --no-check-certificate -O "${archive_path}" "${SOURCE_URL}" || {
error_msg "Échec avec wget. Basculement vers curl..."
curl -L -o "${archive_path}" "${SOURCE_URL}"
}
elif command -v curl &> /dev/null; then
curl -L -o "${archive_path}" "${SOURCE_URL}"
else
error_msg "Outil de téléchargement (wget ou curl) non trouvé."
exit 1
fi
info_msg "Extraction de l'archive dans ${TARGET_DIR}..."
tar -xzf "${archive_path}" -C "${TARGET_DIR}"
# Nettoyage
rm -f "${archive_path}"
info_msg "Extraction terminée avec succès."
}
set_environment() {
info_msg "Écriture des variables d'environnement..."
cat > "${ENV_SCRIPT}" << 'ENVVAR'
# Variables pour Oracle JDK
export JAVA_HOME=/usr/local/java/jdk-17.0.12+8
export JRE_HOME=${JAVA_HOME}/jre
export PATH=${JAVA_HOME}/bin:${PATH}
export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
ENVVAR
chmod +x "${ENV_SCRIPT}"
# Chargement pour la session courante
source "${ENV_SCRIPT}"
info_msg "Variables d'environnement configurées."
}
validate_result() {
info_msg "Validation de l'installation..."
source "${ENV_SCRIPT}"
echo ""
echo "==== Informations sur l'installation ===="
java -version
echo ""
echo "JAVA_HOME : ${JAVA_HOME}"
echo "JRE_HOME : ${JRE_HOME}"
echo "Executable java : $(which java)"
echo "Executable javac : $(which javac)"
echo "========================================"
info_msg "Validation complète !"
}
display_summary() {
echo ""
echo "============================================"
echo " Oracle JDK ${JAVA_FULL_VER} installé avec succès !"
echo "============================================"
echo ""
echo "Fichier de configuration : ${ENV_SCRIPT}"
echo "Les variables seront chargées automatiquement au prochain login."
echo "Pour les activer immédiatement : source ${ENV_SCRIPT}"
echo ""
echo "Commandes utiles :"
echo " java -version # Afficher la version de la JRE"
echo " javac -version # Afficher la version du compilateur"
echo ""
echo "Chemin d'installation : ${JAVA_HOME}"
echo ""
}
# Séquence d'exécution principale
initiate_installation() {
echo "============================================"
echo " Script d'installation Oracle JDK pour OpenCloudOS"
echo "============================================"
echo ""
verify_privileges
check_previous_install
prepare_directory
fetch_package
set_environment
validate_result
display_summary
}
# Point d'entrée
initiate_installation
Procédure d'utilisation
Le script ci-dessus offre les fonctionnalités suivantes :
- Vérification des prérequis : Contrôle automatique des privilèges root.
- Gestion des installations existantes : Détection et confirmation avant remplacement.
- Téléchargement intelligent : Utilisation de wget ou curl en fonciton de leur disponibilité.
- Conception idempotente : Ne retélécharge pas si les fichiers sont déjà extraits.
- Configuration persistante : Écriture des variables d'environnement dans un fichier de profil.
Pour lancer l'installation, transférez le script sur votre serveur et exécutez-le :
# Transfert vers le serveur
scp install-jdk-oracle.sh root@serveur-cible:/tmp/
# Connexion et exécution
ssh root@serveur-cible
chmod +x /tmp/install-jdk-oracle.sh
/tmp/install-jdk-oracle.sh
Alternative manuelle
Si le téléchargement automatique échoue, vous pouvez procéder manuellement :
- Téléchargez l'archive depuis le site officiel d'Oracle pour Linux x64.
- Transférez-la sur le serveur dans le dossier
/tmp/. - Exécutez les commandes suivantes :
# Extraire l'archive
tar -xzf /tmp/jdk-17.0.12_linux-x64_bin.tar.gz -C /usr/local/java
# Configurer les variables (adapter le chemin exact)
cat > /etc/profile.d/java_vars.sh << 'EOF'
export JAVA_HOME=/usr/local/java/jdk-17.0.12
export PATH=$JAVA_HOME/bin:$PATH
EOF
# Recharger l'environnement
source /etc/profile.d/java_vars.sh
java -version