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
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.