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.

2 respuestas

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

    1. Nos alegra que le haya servido nuestros posts. Llevamos tiempo sin poder dedicarle tiempo pero en breves seguiremos publicando nuevos posts.

Deja tu comentario

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

Últimos artículos

robot web browser

Har2locust

Creando un fichero Locust con Har2Locust Como lo prometido es deuda, si habéis seguido el

Más visitados