#!/usr/bin/env bash # Proxmox VE LXC Container Creation Script for Dell iDRAC Fan Controller # Compatible with Proxmox community-scripts pattern # Usage: bash -c "$(wget -qLO - https://git.benoitsz.com/benoit/iDRAC_fan_controller/raw/branch/main/proxmox/idrac-fan-controller.sh)" source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Application Information APP="Dell-iDRAC-Fan-Controller" var_tags="dell;idrac;fan;cooling;server" var_cpu="1" var_ram="512" var_disk="4" var_os="ubuntu" var_version="22.04" var_unprivileged="0" # Privileged container required for IPMI access # Function to display header with ASCII art function header_info { clear cat <<"EOF" ____ ____ ___ ______ ______ / _/ ____/ __ \ / | / ____/ / ____/___ _____ / / / __ / /_/ / / /| | / / / /_ / __ `/ __ \ _/ / / /_/ / _, _/ / ___ |/ /___ / __/ / /_/ / / / / /___/ \__,_/_/ |_| /_/ |_|\____/ /_/ \__,_/_/ /_/ ____ __ ____ / __ \____ ____/ /__________ / / /__ _____ / / / / __ \/ __ / / ___/ __ \/ / / _ \/ ___/ / /_/ / /_/ / /_/ / / / / /_/ / / / __/ / \____/\____/\__,_/_/_/ \____/_/_/\___/_/ EOF echo -e "\n ${APP} - Container LXC pour Proxmox VE" echo -e " Contrôle dynamique des ventilateurs Dell via iDRAC\n" } # Override default variables function function default_settings() { clear header_info echo -e "${BL}Utilisation des paramètres par défaut pour ${APP}.${CL}" echo -e "${DGN}Container Type: ${BGN}Privileged${CL}" echo -e "${DGN}CPU: ${BGN}$var_cpu${CL}" echo -e "${DGN}RAM: ${BGN}$var_ram MB${CL}" echo -e "${DGN}Stockage: ${BGN}$var_disk GB${CL}" echo -e "${DGN}OS: ${BGN}Ubuntu $var_version${CL}" echo -e "${BL}Création du container...${CL}" } # Application installation function function install_application() { header_info echo "Installation de Dell iDRAC Fan Controller dans le container..." # Update container and install dependencies $STD apt-get update $STD apt-get upgrade -y $STD apt-get install -y \ curl \ wget \ ipmitool \ systemd \ nano \ htop \ ca-certificates # Create application directory mkdir -p /opt/idrac-fan-controller/{config,logs} # Download application files cd /tmp wget -O idrac-controller.tar.gz "https://git.benoitsz.com/benoit/iDRAC_fan_controller/archive/main.tar.gz" 2>/dev/null || { echo "Erreur: Impossible de télécharger les fichiers depuis le repository" exit 1 } tar -xzf idrac-controller.tar.gz cd iDRAC_fan_controller # Install application files cp Dell_iDRAC_fan_controller.sh /opt/idrac-fan-controller/ cp functions.sh /opt/idrac-fan-controller/ cp healthcheck.sh /opt/idrac-fan-controller/ cp lxc/idrac-fan-controller.service /etc/systemd/system/ # Make scripts executable chmod +x /opt/idrac-fan-controller/*.sh # Create default configuration cat > /opt/idrac-fan-controller/config/environment << 'EOL' # Configuration Dell iDRAC Fan Controller # Modifiez ces valeurs selon votre environnement # Connexion iDRAC IDRAC_HOST=local IDRAC_USERNAME=root IDRAC_PASSWORD=calvin # Seuils de température (°C) CPU_TEMPERATURE_1=30 CPU_TEMPERATURE_2=40 CPU_TEMPERATURE_3=50 CPU_TEMPERATURE_4=60 # Vitesses des ventilateurs (%) FAN_SPEED_1=10 FAN_SPEED_2=30 FAN_SPEED_3=60 FAN_SPEED_4=80 # Seuil de sécurité CPU_TEMPERATURE_THRESHOLD=70 # Intervalles et options CHECK_INTERVAL=60 DISABLE_THIRD_PARTY_PCIE_CARD_DELL_DEFAULT_COOLING_RESPONSE=false EOL # Enable and configure systemd service systemctl daemon-reload systemctl enable idrac-fan-controller.service # Create helper scripts wget -O /tmp/container-helpers.sh "https://git.benoitsz.com/benoit/iDRAC_fan_controller/raw/branch/main/proxmox/container-helpers.sh" 2>/dev/null if [ -f /tmp/container-helpers.sh ]; then source /tmp/container-helpers.sh create_idrac_setup create_idrac_status create_idrac_logs create_idrac_config rm /tmp/container-helpers.sh else # Fallback basic setup script cat > /usr/local/bin/idrac-setup << 'EOL' #!/bin/bash echo "=== Dell iDRAC Fan Controller Setup ===" echo "1. Configuration: nano /opt/idrac-fan-controller/config/environment" echo "2. Démarrage: systemctl start idrac-fan-controller" echo "3. Statut: systemctl status idrac-fan-controller" echo "4. Logs: journalctl -u idrac-fan-controller -f" echo "5. Test: /opt/idrac-fan-controller/healthcheck.sh" EOL chmod +x /usr/local/bin/idrac-setup fi # Cleanup cd / rm -rf /tmp/idrac-controller.tar.gz /tmp/iDRAC_fan_controller # Set container description pct set $CTID -description "Dell iDRAC Fan Controller Contrôleur dynamique des ventilateurs Dell via iDRAC avec 4 seuils configurables. Configuration: /opt/idrac-fan-controller/config/environment Logs: journalctl -u idrac-fan-controller -f Setup: idrac-setup ⚠️ Container PRIVILÉGIÉ requis pour accès IPMI" } # Post-installation setup function post_installation() { header_info echo -e "${GN}Installation de ${APP} terminée avec succès!${CL}" echo echo -e "${BL}Configuration du container:${CL}" echo -e "Container ID: ${GN}$CTID${CL}" echo -e "Hostname: ${GN}$NSAPP${CL}" echo -e "Type: ${YW}Privileged${CL} ${DGN}(requis pour IPMI)${CL}" echo -e "OS: ${GN}Ubuntu $var_version${CL}" echo echo -e "${BL}Prochaines étapes:${CL}" echo -e "${DGN}1. Connectez-vous au container:${CL} pct enter $CTID" echo -e "${DGN}2. Lancez la configuration:${CL} idrac-setup" echo -e "${DGN}3. Éditez la config:${CL} nano /opt/idrac-fan-controller/config/environment" echo -e "${DGN}4. Démarrez le service:${CL} systemctl start idrac-fan-controller" echo echo -e "${YW}⚠️ Important: Configurez l'accès IPMI dans Proxmox:${CL}" echo -e "${DGN} - Pour iDRAC local: ajoutez l'accès aux périphériques IPMI${CL}" echo -e "${DGN} - Pour iDRAC distant: configurez l'IP dans environment${CL}" echo } # Variables and setup variables color catch_errors # Application installation function start() { if command -v pveversion >/dev/null 2>&1; then if ! (whiptail --backtitle "Proxmox VE Helper Scripts" --title "${APP} LXC Container" --yesno "Créer un nouveau container LXC ${APP}?" 10 58); then clear exit fi install_script else echo -e "${RD}Ce script doit être exécuté depuis un node Proxmox VE.${CL}" exit 1 fi } # Main application function function update_script() { header_info echo -e "\\n ⚡ Mise à jour de ${APP} Container\\n" NODE=$(hostname) pct list | tail -n +2 | cut -f1 -d' ' | while read container; do OSTYPE=$(pct config $container | grep "^ostype:" | cut -d' ' -f2) if [ "$OSTYPE" = "ubuntu" ]; then echo -e "${BL}[Info]${GN} Mise à jour du container $container ${CL} \\n" pct exec $container -- bash -c " apt update && apt upgrade -y && systemctl restart idrac-fan-controller 2>/dev/null || echo 'Service non trouvé dans ce container' " echo -e "${BL}[Info]${GN} ✅ Container $container mis à jour ${CL} \\n" fi done } # Build the container start build_container description # Install application echo -e " ${CHECKMARK} ${GN}Container LXC créé avec succès${CL}" echo -e " ${CHECKMARK} ${GN}Installation de ${APP}...${CL}" # Execute installation in container pct exec $CTID -- bash -c "$(declare -f install_application); install_application" || { echo -e " ${CROSS} ${RD}Erreur lors de l'installation${CL}" exit 1 } # Post-installation post_installation