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.

Hola, busca qu te busca cosas en internet sobre el tema, los mil videos, videos hasta de una hora y más, no digo que sean malos, he aprendido mucho con ellos también sobre pfsense, pero hay mil detalles muy bien explicados acá, del pi al pa. Cosas que no están en ninguna parte. Le estoy realmente muy agradecido
Nos alegra que le haya servido nuestros posts. Llevamos tiempo sin poder dedicarle tiempo pero en breves seguiremos publicando nuevos posts.