Instalar paquetes en Proxmox 8 masivamente

INSTALAR PAQUETES EN PROXMOX 8 EN MASA

Esto es un regalo de navidad para todos aquellos entusiastas de Proxmox o que recientemente lo están conociendo debido a que es el la mejor alternativa tras la compra de VMware por Broadcom. Somos partner de Proxmox desde hace muchos años y te animamos a que des el paso si aun no lo has hecho.

Con este script podrás instalar los paquetes que necesites en tu cluster  o en nodos independientes siempre que tengan la misma contraseña sin tener que ir nodo por nodo.

El funcionamiento es simple, en nuestra máquina o máquina donde ejecutemos el script necesitamos 3 cosas:

Instalar sshpass

apt-get install sshpass

Un fichero de texto con nombre e ips de los nodos una por linea

PVE1 192.168.1.250

PVE2 192.168.1.251

PVE3 192.168.1.252

Un fichero de texto con los paquetes a instalar, uno por línea

telnet

net-tools

Teniendo esto creamos nuestro script install-packets.sh pegando el siguiente código:

				
					#!/bin/bash

# Files
while true; do
    read -p "Enter the path to the hosts file: " NODES_FILE
    if [[ -f "$NODES_FILE" ]]; then
        echo "Hosts file found: $NODES_FILE"
        break
    else
        echo "Error: The file does not exist at the specified path. Please enter a valid path."
    fi
done


while true; do
    read -p "Enter the path to the package file: " PACKAGES_FILE
    if [[ -f "$PACKAGES_FILE" ]]; then
        echo "Package file found: $PACKAGES_FILE"
        break
    else
        echo "Error: The file does not exist at the specified path. Please enter a valid path."
    fi
done

# User SSH root
USER="root"
read -sp "Enter the root password for the hosts: " ROOT_PASS
echo

# Repositories PVE
echo "Do you want to use the Enterprise or No-Subscription repositories for Proxmox?"
echo "1) Enterprise"
echo "2) No-Subscription"
read -p "Choose an option (1 or 2): " REPO_OPTION

# Repositories CEPH
echo "Which version of Ceph do you want to use?"
echo "1) Ceph Reef"
echo "2) Ceph Quincy"
read -p "Choose an option (1 or 2): " CEPH_VERSION

# Definición de repositorios Proxmox para Bookworm
NOSUB_REPO="deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription"
ENTERPRISE_REPO="deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise"

# Definir repositorios para Bookworm en función de la versión seleccionada
if [[ "$CEPH_VERSION" -eq 1 ]]; then
    if [[ "$REPO_OPTION" -eq 1 ]]; then
        CEPH_REPO="deb https://enterprise.proxmox.com/debian/ceph-reef bookworm enterprise"
    else
        CEPH_REPO="deb http://download.proxmox.com/debian/ceph-reef bookworm no-subscription"
    fi
elif [[ "$CEPH_VERSION" -eq 2 ]]; then
    if [[ "$REPO_OPTION" -eq 1 ]]; then
        CEPH_REPO="deb https://enterprise.proxmox.com/debian/ceph-quincy bookworm enterprise"
    else
        CEPH_REPO="deb http://download.proxmox.com/debian/ceph-quincy bookworm no-subscription"
    fi
else
    echo "Invalid Ceph version option. Exiting..."
    exit 1
fi

# Read the list of packages from the provided file
PACKAGES=()
while IFS= read -r package; do
  PACKAGES+=("$package")
done < "$PACKAGES_FILE"

# Command to install packages
INSTALL_CMD="apt-get update && apt-get install -y expect ${PACKAGES[@]}"

# Function to process each node
process_node() {
    local hostname=$1
    local ip=$2

    echo "Connecting to $hostname ($ip)..."

    if [[ "$REPO_OPTION" -eq 1 ]]; then
        echo "Switching to Enterprise Repositories in $hostname ($ip)..."
        sshpass -p "$ROOT_PASS" ssh -o StrictHostKeyChecking=no "$USER@$ip" "\
            rm -f /etc/apt/sources.list.d/pve-no-subscription.list; \
            rm -f /etc/apt/sources.list.d/ceph.list; \
            echo '$ENTERPRISE_REPO' > /etc/apt/sources.list.d/pve-enterprise.list; \
            echo '$CEPH_REPO' > /etc/apt/sources.list.d/ceph.list; \
            apt-get update" &
    else
        echo "Switching to No-Subscription Repositories and $hostname ($ip)..."
        sshpass -p "$ROOT_PASS" ssh -o StrictHostKeyChecking=no "$USER@$ip" "\
            rm -f /etc/apt/sources.list.d/pve-enterprise.list; \
            rm -f /etc/apt/sources.list.d/ceph.list; \
            echo '$NOSUB_REPO' > /etc/apt/sources.list.d/pve-no-subscription.list; \
            echo '$CEPH_REPO' > /etc/apt/sources.list.d/ceph.list; \
            apt-get update" &
    fi

    # Wait a few seconds to make sure the changes are applied.
    sleep 5

    # Installing the packages
    echo "Installing packages on $hostname ($ip)..."
    sshpass -p "$ROOT_PASS" ssh -o StrictHostKeyChecking=no "$USER@$ip" "$INSTALL_CMD"
}

# Read the node file and process each node in parallel
while IFS=' ' read -r hostname ip; do
    [[ -z "$hostname" || -z "$ip" ]] && continue  # Skip empty lines
    process_node "$hostname" "$ip" &
done < "$NODES_FILE"

# Wait for all background processes to finish
wait

echo "Completion of the process."

				
			

Le damos permisos con chmod +x install-packets.sh y lo ejecutamos ./install-packets.sh obteniendo la siguiente salida

instalar paquetes proxmox de forma masiva

Es un script muy versátil que podéis adaptar a otras versiones de Proxmox o a otros sistemas.

Testearlo antes en un laboratorio para entender como funciona.

Felices fiestas.

Gracias por leer nuestros posts.

Preguntas Frecuentes

Proxmox es gratuito y de código abierto, pero ofrece cuatro tipos de suscripción (Community,Basic,Standard y Premium)  para acceso a repositorios estables y soporte técnico oficial. Sin suscripción tienes todo lo que ofrece Proxmox no hay limitación y se pueden usar los repositorios "no-subscription" o "test". 

Si no tienes suscripción, cambia los repositorios para usar el canal "no-subscription". Puedes hacerlo desde la interfaz web de Proxmox o por consola como en cualquier sistema Debian.

No es recomendable para entornos productivos, pero si podemos utilizar 2 nodos añadiendo un qdevice que puede estar incluso en una raspberry.

Un QDevice (Quorum Device) es un testigo instalado en una máquina virtual o dispositivo físico que se usa en un clúster de Proxmox VE para ayudar a evitar problemas de quorum cuando se tienen solo dos nodos. Es necesario instalar corosync-qnetd en el dispositivo y en todos los dos nodos del cluster. Una vez instalado desde cualquier nodo ejecutamos pvecm qdevice ip_qdevice.

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Últimos artículos

artículo uds enterprise 4.0

UDS Enterprise 4.0

UDSENTERPRISE 4.0 VDI FLEXIBLE Y EFICIENTE En 2019 ya os hablamos sobre UDS Enterprise 2.2,

Más visitados