mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2025-08-15 01:12:22 +00:00
Compare commits
No commits in common. "main" and "v1.1.4" have entirely different histories.
@ -59,7 +59,7 @@ Then, follow the on-screen options to manage your Proxmox server efficiently.
|
|||||||
|
|
||||||
## 📌 System Requirements
|
## 📌 System Requirements
|
||||||
🖥 **Compatible with:**
|
🖥 **Compatible with:**
|
||||||
- Proxmox VE 8.x and 9.x
|
- Proxmox VE 8.x**
|
||||||
|
|
||||||
📦 **Dependencies:**
|
📦 **Dependencies:**
|
||||||
- `bash`, `curl`, `wget`, `jq`, `whiptail`, `python3-venv` (These dependencies are installed automatically during setup.)
|
- `bash`, `curl`, `wget`, `jq`, `whiptail`, `python3-venv` (These dependencies are installed automatically during setup.)
|
||||||
|
@ -526,7 +526,6 @@ show_installation_options() {
|
|||||||
"1" "Normal Version (English only)" 3>&1 1>&2 2>&3)
|
"1" "Normal Version (English only)" 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
if [ -z "$INSTALL_TYPE" ]; then
|
if [ -z "$INSTALL_TYPE" ]; then
|
||||||
show_proxmenux_logo
|
|
||||||
msg_warn "Installation cancelled."
|
msg_warn "Installation cancelled."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -536,7 +535,6 @@ show_installation_options() {
|
|||||||
"2" "Translation Version (Multi-language support)" 3>&1 1>&2 2>&3)
|
"2" "Translation Version (Multi-language support)" 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
if [ -z "$INSTALL_TYPE" ]; then
|
if [ -z "$INSTALL_TYPE" ]; then
|
||||||
show_proxmenux_logo
|
|
||||||
msg_warn "Installation cancelled."
|
msg_warn "Installation cancelled."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -545,7 +543,6 @@ show_installation_options() {
|
|||||||
|
|
||||||
|
|
||||||
if [ -z "$INSTALL_TYPE" ]; then
|
if [ -z "$INSTALL_TYPE" ]; then
|
||||||
show_proxmenux_logo
|
|
||||||
msg_warn "Installation cancelled."
|
msg_warn "Installation cancelled."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -553,14 +550,12 @@ show_installation_options() {
|
|||||||
# For new installations, show confirmation with details
|
# For new installations, show confirmation with details
|
||||||
if [ "$current_install_type" = "none" ]; then
|
if [ "$current_install_type" = "none" ]; then
|
||||||
if ! show_installation_confirmation "$INSTALL_TYPE"; then
|
if ! show_installation_confirmation "$INSTALL_TYPE"; then
|
||||||
show_proxmenux_logo
|
|
||||||
msg_warn "Installation cancelled."
|
msg_warn "Installation cancelled."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! handle_installation_change "$current_install_type" "$INSTALL_TYPE"; then
|
if ! handle_installation_change "$current_install_type" "$INSTALL_TYPE"; then
|
||||||
show_proxmenux_logo
|
|
||||||
msg_warn "Installation cancelled."
|
msg_warn "Installation cancelled."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
435
json/cache.json
435
json/cache.json
@ -2132,439 +2132,6 @@
|
|||||||
"de": "Zum Beenden von iptraf-ng, x drücken",
|
"de": "Zum Beenden von iptraf-ng, x drücken",
|
||||||
"it": "Per uscire da iptraf-ng, premi x",
|
"it": "Per uscire da iptraf-ng, premi x",
|
||||||
"pt": "Para sair do iptraf-ng, pressione x"
|
"pt": "Para sair do iptraf-ng, pressione x"
|
||||||
},
|
|
||||||
"Proxmox VE 8 to 9 Manual Upgrade Guide": {
|
|
||||||
"es": "Guía de actualización manual de Proxmox VE 8 a 9",
|
|
||||||
"fr": "Guide de mise à niveau manuelle de Proxmox VE 8 vers 9",
|
|
||||||
"de": "Manuelles Upgrade-Handbuch: Proxmox VE 8 auf 9",
|
|
||||||
"it": "Guida all'aggiornamento manuale da Proxmox VE 8 a 9",
|
|
||||||
"pt": "Guia de atualização manual do Proxmox VE 8 para 9"
|
|
||||||
},
|
|
||||||
"Source:": {
|
|
||||||
"es": "Fuente:",
|
|
||||||
"fr": "Source :",
|
|
||||||
"de": "Quelle:",
|
|
||||||
"it": "Fonte:",
|
|
||||||
"pt": "Fonte:"
|
|
||||||
},
|
|
||||||
"IMPORTANT PREREQUISITES:": {
|
|
||||||
"es": "REQUISITOS PREVIOS IMPORTANTES:",
|
|
||||||
"fr": "PRÉREQUIS IMPORTANTS :",
|
|
||||||
"de": "WICHTIGE VORAUSSETZUNGEN:",
|
|
||||||
"it": "PREREQUISITI IMPORTANTI:",
|
|
||||||
"pt": "PRÉ-REQUISITOS IMPORTANTES:"
|
|
||||||
},
|
|
||||||
"System must be updated to latest PVE 8.4+ before starting": {
|
|
||||||
"es": "El sistema debe estar actualizado a la versión PVE 8.4+ antes de comenzar",
|
|
||||||
"fr": "Le système doit être mis à jour vers PVE 8.4+ avant de commencer",
|
|
||||||
"de": "Das System muss vor dem Start auf PVE 8.4+ aktualisiert sein",
|
|
||||||
"it": "Il sistema deve essere aggiornato a PVE 8.4+ prima di iniziare",
|
|
||||||
"pt": "O sistema deve estar atualizado para PVE 8.4+ antes de começar"
|
|
||||||
},
|
|
||||||
"Use SSH or terminal access (SSH recommended)": {
|
|
||||||
"es": "Use acceso por SSH o terminal (se recomienda SSH)",
|
|
||||||
"fr": "Utilisez un accès SSH ou terminal (SSH recommandé)",
|
|
||||||
"de": "SSH- oder Terminalzugang verwenden (SSH empfohlen)",
|
|
||||||
"it": "Usa accesso SSH o terminale (consigliato SSH)",
|
|
||||||
"pt": "Use acesso por SSH ou terminal (SSH recomendado)"
|
|
||||||
},
|
|
||||||
"Use tmux or screen to avoid interruptions": {
|
|
||||||
"es": "Use tmux o screen para evitar interrupciones",
|
|
||||||
"fr": "Utilisez tmux ou screen pour éviter les interruptions",
|
|
||||||
"de": "Verwenden Sie tmux oder screen, um Unterbrechungen zu vermeiden",
|
|
||||||
"it": "Usa tmux o screen per evitare interruzioni",
|
|
||||||
"pt": "Use tmux ou screen para evitar interrupções"
|
|
||||||
},
|
|
||||||
"Have valid backups of all VMs and containers": {
|
|
||||||
"es": "Tenga copias de seguridad válidas de todas las VMs y contenedores",
|
|
||||||
"fr": "Ayez des sauvegardes valides de toutes les VM et conteneurs",
|
|
||||||
"de": "Halten Sie gültige Backups aller VMs und Container bereit",
|
|
||||||
"it": "Avere backup validi di tutte le VM e i container",
|
|
||||||
"pt": "Tenha backups válidos de todas as VMs e contêineres"
|
|
||||||
},
|
|
||||||
"At least 5GB free space on root filesystem": {
|
|
||||||
"es": "Al menos 5 GB de espacio libre en el sistema de archivos raíz",
|
|
||||||
"fr": "Au moins 5 Go d’espace libre sur le système de fichiers racine",
|
|
||||||
"de": "Mindestens 5 GB freier Speicherplatz auf dem Root-Dateisystem",
|
|
||||||
"it": "Almeno 5 GB di spazio libero sul filesystem root",
|
|
||||||
"pt": "Pelo menos 5 GB de espaço livre no sistema de arquivos raiz"
|
|
||||||
},
|
|
||||||
"Do not run the upgrade from the Web UI virtual console (it will disconnect)": {
|
|
||||||
"es": "No ejecute la actualización desde la consola virtual de la interfaz web (se desconectará)",
|
|
||||||
"fr": "N’exécutez pas la mise à niveau depuis la console virtuelle de l’interface Web (elle se déconnectera)",
|
|
||||||
"de": "Führen Sie das Upgrade nicht über die virtuelle Konsole der Web-UI aus (die Verbindung wird getrennt)",
|
|
||||||
"it": "Non eseguire l’aggiornamento dalla console virtuale dell’interfaccia Web (si disconnetterà)",
|
|
||||||
"pt": "Não execute a atualização pelo console virtual da interface Web (a conexão será interrompida)"
|
|
||||||
},
|
|
||||||
"Update system to latest PVE 8.4+ (if not done already):": {
|
|
||||||
"es": "Actualizar el sistema a PVE 8.4+ (si aún no se ha hecho):",
|
|
||||||
"fr": "Mettre à jour le système vers PVE 8.4+ (si ce n’est pas déjà fait) :",
|
|
||||||
"de": "System auf PVE 8.4+ aktualisieren (falls noch nicht geschehen):",
|
|
||||||
"it": "Aggiornare il sistema a PVE 8.4+ (se non già fatto):",
|
|
||||||
"pt": "Atualizar o sistema para PVE 8.4+ (se ainda não foi feito):"
|
|
||||||
},
|
|
||||||
"Or use ProxMenux update function": {
|
|
||||||
"es": "O use la función de actualización de ProxMenux",
|
|
||||||
"fr": "Ou utilisez la fonction de mise à jour de ProxMenux",
|
|
||||||
"de": "Oder verwenden Sie die Aktualisierungsfunktion von ProxMenux",
|
|
||||||
"it": "Oppure usa la funzione di aggiornamento di ProxMenux",
|
|
||||||
"pt": "Ou use a função de atualização do ProxMenux"
|
|
||||||
},
|
|
||||||
"Verify PVE version (must be 8.4.1 or newer):": {
|
|
||||||
"es": "Verificar la versión de PVE (debe ser 8.4.1 o superior):",
|
|
||||||
"fr": "Vérifier la version de PVE (doit être 8.4.1 ou plus récente) :",
|
|
||||||
"de": "PVE-Version prüfen (muss 8.4.1 oder neuer sein):",
|
|
||||||
"it": "Verificare la versione di PVE (deve essere 8.4.1 o successiva):",
|
|
||||||
"pt": "Verificar a versão do PVE (deve ser 8.4.1 ou superior):"
|
|
||||||
},
|
|
||||||
"If this node runs hyper-converged Ceph: ensure Ceph is 19.x (Squid) BEFORE upgrading PVE.": {
|
|
||||||
"es": "Si este nodo ejecuta Ceph hiperconvergente: asegúrese de que Ceph sea 19.x (Squid) ANTES de actualizar PVE.",
|
|
||||||
"fr": "Si ce nœud exécute un Ceph hyperconvergé : assurez-vous que Ceph est en 19.x (Squid) AVANT de mettre à niveau PVE.",
|
|
||||||
"de": "Wenn dieser Knoten hyperkonvergentes Ceph betreibt: Stellen Sie sicher, dass Ceph 19.x (Squid) ist, BEVOR Sie PVE aktualisieren.",
|
|
||||||
"it": "Se questo nodo esegue Ceph iperconvergente: assicurarsi che Ceph sia 19.x (Squid) PRIMA di aggiornare PVE.",
|
|
||||||
"pt": "Se este nó executa Ceph hiperconvergente: certifique-se de que o Ceph esteja em 19.x (Squid) ANTES de atualizar o PVE."
|
|
||||||
},
|
|
||||||
"If not 19.x, upgrade Ceph (Reef→Squid) first per the official guide:": {
|
|
||||||
"es": "Si no es 19.x, actualice primero Ceph (Reef→Squid) según la guía oficial:",
|
|
||||||
"fr": "Si ce n’est pas 19.x, mettez d’abord à niveau Ceph (Reef→Squid) selon le guide officiel :",
|
|
||||||
"de": "Wenn nicht 19.x, aktualisieren Sie Ceph zuerst (Reef→Squid) gemäß der offiziellen Anleitung:",
|
|
||||||
"it": "Se non è 19.x, aggiornare prima Ceph (Reef→Squid) secondo la guida ufficiale:",
|
|
||||||
"pt": "Se não for 19.x, atualize primeiro o Ceph (Reef→Squid) conforme o guia oficial:"
|
|
||||||
},
|
|
||||||
"Run upgrade checklist script:": {
|
|
||||||
"es": "Ejecutar el script de la lista de verificación de actualización:",
|
|
||||||
"fr": "Exécuter le script de liste de vérification de mise à niveau :",
|
|
||||||
"de": "Upgrade-Checklisten-Skript ausführen:",
|
|
||||||
"it": "Eseguire lo script della checklist di aggiornamento:",
|
|
||||||
"pt": "Executar o script da lista de verificação de atualização:"
|
|
||||||
},
|
|
||||||
"If it warns about 'systemd-boot' meta-package, remove it:": {
|
|
||||||
"es": "Si advierte sobre el metapaquete 'systemd-boot', elimínelo:",
|
|
||||||
"fr": "S’il signale le méta-paquet « systemd-boot », supprimez-le :",
|
|
||||||
"de": "Wenn vor dem Metapaket „systemd-boot“ gewarnt wird, entfernen Sie es:",
|
|
||||||
"it": "Se avvisa del metapacchetto 'systemd-boot', rimuoverlo:",
|
|
||||||
"pt": "Se alertar sobre o metapacote 'systemd-boot', remova-o:"
|
|
||||||
},
|
|
||||||
"Start terminal multiplexer (recommended):": {
|
|
||||||
"es": "Iniciar un multiplexor de terminal (recomendado):",
|
|
||||||
"fr": "Démarrer un multiplexeur de terminal (recommandé) :",
|
|
||||||
"de": "Terminal-Multiplexer starten (empfohlen):",
|
|
||||||
"it": "Avviare un multiplexer di terminale (consigliato):",
|
|
||||||
"pt": "Iniciar um multiplexador de terminal (recomendado):"
|
|
||||||
},
|
|
||||||
"# Recommended: avoids disconnection during upgrade": {
|
|
||||||
"es": "# Recomendado: evita desconexiones durante la actualización",
|
|
||||||
"fr": "# Recommandé : évite les déconnexions pendant la mise à niveau",
|
|
||||||
"de": "# Empfohlen: vermeidet Verbindungsabbrüche während des Upgrades",
|
|
||||||
"it": "# Consigliato: evita disconnessioni durante l’aggiornamento",
|
|
||||||
"pt": "# Recomendado: evita desconexões durante a atualização"
|
|
||||||
},
|
|
||||||
"# Alternative if you prefer screen": {
|
|
||||||
"es": "# Alternativa si prefiere screen",
|
|
||||||
"fr": "# Alternative si vous préférez screen",
|
|
||||||
"de": "# Alternative, wenn Sie screen bevorzugen",
|
|
||||||
"it": "# Alternativa se preferisci screen",
|
|
||||||
"pt": "# Alternativa se preferir screen"
|
|
||||||
},
|
|
||||||
"Update Debian repositories to Trixie:": {
|
|
||||||
"es": "Actualizar los repositorios de Debian a Trixie:",
|
|
||||||
"fr": "Mettre à jour les dépôts Debian vers Trixie :",
|
|
||||||
"de": "Debian-Repositories auf Trixie aktualisieren:",
|
|
||||||
"it": "Aggiornare i repository Debian a Trixie:",
|
|
||||||
"pt": "Atualizar os repositórios Debian para Trixie:"
|
|
||||||
},
|
|
||||||
"Update PVE enterprise repository (Only if using enterprise):": {
|
|
||||||
"es": "Actualizar el repositorio empresarial de PVE (solo si usa enterprise):",
|
|
||||||
"fr": "Mettre à jour le dépôt entreprise de PVE (uniquement si vous utilisez enterprise) :",
|
|
||||||
"de": "PVE-Enterprise-Repository aktualisieren (nur bei Verwendung von Enterprise):",
|
|
||||||
"it": "Aggiornare il repository enterprise di PVE (solo se si usa enterprise):",
|
|
||||||
"pt": "Atualizar o repositório enterprise do PVE (apenas se usar enterprise):"
|
|
||||||
},
|
|
||||||
"Skip this step if using no-subscription repository": {
|
|
||||||
"es": "Omita este paso si usa el repositorio sin suscripción",
|
|
||||||
"fr": "Ignorez cette étape si vous utilisez le dépôt sans abonnement",
|
|
||||||
"de": "Überspringen Sie diesen Schritt, wenn Sie das No-Subscription-Repository verwenden",
|
|
||||||
"it": "Saltare questo passaggio se si usa il repository senza sottoscrizione",
|
|
||||||
"pt": "Pule esta etapa se usar o repositório sem assinatura"
|
|
||||||
},
|
|
||||||
"Add new PVE 9 enterprise repository (deb822 format) (Only if using enterprise):": {
|
|
||||||
"es": "Agregar el nuevo repositorio empresarial de PVE 9 (formato deb822) (solo si usa enterprise):",
|
|
||||||
"fr": "Ajouter le nouveau dépôt entreprise de PVE 9 (format deb822) (uniquement si vous utilisez enterprise) :",
|
|
||||||
"de": "Neues PVE-9-Enterprise-Repository (deb822-Format) hinzufügen (nur bei Enterprise):",
|
|
||||||
"it": "Aggiungere il nuovo repository enterprise di PVE 9 (formato deb822) (solo se si usa enterprise):",
|
|
||||||
"pt": "Adicionar o novo repositório enterprise do PVE 9 (formato deb822) (apenas se usar enterprise):"
|
|
||||||
},
|
|
||||||
"Only if using enterprise subscription": {
|
|
||||||
"es": "Solo si utiliza suscripción empresarial",
|
|
||||||
"fr": "Uniquement si vous avez un abonnement entreprise",
|
|
||||||
"de": "Nur bei vorhandener Enterprise-Abonnement",
|
|
||||||
"it": "Solo se si dispone di una sottoscrizione enterprise",
|
|
||||||
"pt": "Apenas se você tiver assinatura enterprise"
|
|
||||||
},
|
|
||||||
"OR add new PVE 9 no-subscription repository:": {
|
|
||||||
"es": "O agregar el nuevo repositorio de PVE 9 sin suscripción:",
|
|
||||||
"fr": "OU ajouter le nouveau dépôt PVE 9 sans abonnement :",
|
|
||||||
"de": "ODER das neue PVE-9-No-Subscription-Repository hinzufügen:",
|
|
||||||
"it": "OPPURE aggiungere il nuovo repository PVE 9 senza sottoscrizione:",
|
|
||||||
"pt": "OU adicionar o novo repositório PVE 9 sem assinatura:"
|
|
||||||
},
|
|
||||||
"Only if using no-subscription repository": {
|
|
||||||
"es": "Solo si usa el repositorio sin suscripción",
|
|
||||||
"fr": "Uniquement si vous utilisez le dépôt sans abonnement",
|
|
||||||
"de": "Nur bei Verwendung des No-Subscription-Repository",
|
|
||||||
"it": "Solo se si usa il repository senza sottoscrizione",
|
|
||||||
"pt": "Apenas se usar o repositório sem assinatura"
|
|
||||||
},
|
|
||||||
"Refresh APT index and verify repositories:": {
|
|
||||||
"es": "Actualizar el índice de APT y verificar los repositorios:",
|
|
||||||
"fr": "Actualiser l’index APT et vérifier les dépôts :",
|
|
||||||
"de": "APT-Index aktualisieren und Repositories prüfen:",
|
|
||||||
"it": "Aggiornare l’indice APT e verificare i repository:",
|
|
||||||
"pt": "Atualizar o índice do APT e verificar os repositórios:"
|
|
||||||
},
|
|
||||||
"Ensure there are no errors and that proxmox-ve candidate shows 9.x": {
|
|
||||||
"es": "Asegúrese de que no haya errores y de que el candidato de proxmox-ve sea 9.x",
|
|
||||||
"fr": "Assurez-vous qu’il n’y a aucune erreur et que le candidat proxmox-ve indique 9.x",
|
|
||||||
"de": "Stellen Sie sicher, dass keine Fehler auftreten und der proxmox-ve-Kandidat 9.x anzeigt",
|
|
||||||
"it": "Assicurarsi che non vi siano errori e che il candidato di proxmox-ve sia 9.x",
|
|
||||||
"pt": "Certifique-se de que não há erros e que o candidato proxmox-ve mostre 9.x"
|
|
||||||
},
|
|
||||||
"Update Ceph repository (Only if using Ceph):": {
|
|
||||||
"es": "Actualizar el repositorio de Ceph (solo si usa Ceph):",
|
|
||||||
"fr": "Mettre à jour le dépôt Ceph (uniquement si vous utilisez Ceph) :",
|
|
||||||
"de": "Ceph-Repository aktualisieren (nur bei Verwendung von Ceph):",
|
|
||||||
"it": "Aggiornare il repository di Ceph (solo se si usa Ceph):",
|
|
||||||
"pt": "Atualizar o repositório do Ceph (apenas se usar Ceph):"
|
|
||||||
},
|
|
||||||
"Use enterprise URL if you have subscription.": {
|
|
||||||
"es": "Use la URL enterprise si dispone de suscripción.",
|
|
||||||
"fr": "Utilisez l’URL enterprise si vous avez un abonnement.",
|
|
||||||
"de": "Verwenden Sie die Enterprise-URL, wenn Sie ein Abonnement haben.",
|
|
||||||
"it": "Usa l’URL enterprise se hai una sottoscrizione.",
|
|
||||||
"pt": "Use a URL enterprise se tiver assinatura."
|
|
||||||
},
|
|
||||||
"Remove old repository files:": {
|
|
||||||
"es": "Eliminar los archivos de repositorio antiguos:",
|
|
||||||
"fr": "Supprimer les anciens fichiers de dépôt :",
|
|
||||||
"de": "Alte Repository-Dateien entfernen:",
|
|
||||||
"it": "Rimuovere i vecchi file di repository:",
|
|
||||||
"pt": "Remover arquivos antigos de repositório:"
|
|
||||||
},
|
|
||||||
"Also comment any remaining 'bookworm' entries in *.list if present.": {
|
|
||||||
"es": "Comente también cualquier entrada restante de ‘bookworm’ en *.list si existe.",
|
|
||||||
"fr": "Commentez également toute entrée ‘bookworm’ restante dans *.list si présente.",
|
|
||||||
"de": "Kommentieren Sie außerdem verbleibende ‚bookworm‘-Einträge in *.list, falls vorhanden.",
|
|
||||||
"it": "Commentare anche eventuali voci ‘bookworm’ rimanenti in *.list se presenti.",
|
|
||||||
"pt": "Comente também quaisquer entradas ‘bookworm’ restantes em *.list, se houver."
|
|
||||||
},
|
|
||||||
"Update package index:": {
|
|
||||||
"es": "Actualizar el índice de paquetes:",
|
|
||||||
"fr": "Mettre à jour l’index des paquets :",
|
|
||||||
"de": "Paketindex aktualisieren:",
|
|
||||||
"it": "Aggiornare l’indice dei pacchetti:",
|
|
||||||
"pt": "Atualizar o índice de pacotes:"
|
|
||||||
},
|
|
||||||
"Disable kernel audit messages (optional but recommended):": {
|
|
||||||
"es": "Desactivar los mensajes de auditoría del kernel (opcional pero recomendado):",
|
|
||||||
"fr": "Désactiver les messages d’audit du noyau (optionnel mais recommandé) :",
|
|
||||||
"de": "Kernel-Audit-Meldungen deaktivieren (optional, aber empfohlen):",
|
|
||||||
"it": "Disabilitare i messaggi di audit del kernel (opzionale ma consigliato):",
|
|
||||||
"pt": "Desativar as mensagens de auditoria do kernel (opcional, mas recomendado):"
|
|
||||||
},
|
|
||||||
"Start the main system upgrade:": {
|
|
||||||
"es": "Iniciar la actualización principal del sistema:",
|
|
||||||
"fr": "Démarrer la mise à niveau principale du système :",
|
|
||||||
"de": "Hauptsystem-Upgrade starten:",
|
|
||||||
"it": "Avviare l’aggiornamento principale del sistema:",
|
|
||||||
"pt": "Iniciar a atualização principal do sistema:"
|
|
||||||
},
|
|
||||||
"This will take time. Answer prompts carefully - see notes below.": {
|
|
||||||
"es": "Esto llevará tiempo. Responda a las indicaciones con cuidado (vea las notas a continuación).",
|
|
||||||
"fr": "Cela prendra du temps. Répondez aux invites avec attention (voir les notes ci-dessous).",
|
|
||||||
"de": "Dies wird einige Zeit dauern. Beantworten Sie Rückfragen sorgfältig (siehe Hinweise unten).",
|
|
||||||
"it": "Questo richiederà tempo. Rispondi con attenzione alle richieste (vedi note sotto).",
|
|
||||||
"pt": "Isso levará tempo. Responda às solicitações com atenção (veja as notas abaixo)."
|
|
||||||
},
|
|
||||||
"UPGRADE PROMPTS - RECOMMENDED ANSWERS:": {
|
|
||||||
"es": "INDICACIONES DE ACTUALIZACIÓN - RESPUESTAS RECOMENDADAS:",
|
|
||||||
"fr": "INVITES DE MISE À NIVEAU - RÉPONSES RECOMMANDÉES :",
|
|
||||||
"de": "UPGRADE-AUFFORDERUNGEN – EMPFOHLENE ANTWORTEN:",
|
|
||||||
"it": "PROMPT DI AGGIORNAMENTO - RISPOSTE CONSIGLIATE:",
|
|
||||||
"pt": "PROMPTS DE ATUALIZAÇÃO - RESPOSTAS RECOMENDADAS:"
|
|
||||||
},
|
|
||||||
"Keep current version (N)": {
|
|
||||||
"es": "Mantener la versión actual (N)",
|
|
||||||
"fr": "Conserver la version actuelle (N)",
|
|
||||||
"de": "Aktuelle Version beibehalten (N)",
|
|
||||||
"it": "Mantieni la versione corrente (N)",
|
|
||||||
"pt": "Manter a versão atual (N)"
|
|
||||||
},
|
|
||||||
"Install maintainer's version (Y)": {
|
|
||||||
"es": "Instalar la versión del mantenedor del paquete (Y)",
|
|
||||||
"fr": "Installer la version du mainteneur du paquet (Y)",
|
|
||||||
"de": "Version des Paketbetreuers installieren (Y)",
|
|
||||||
"it": "Installare la versione del maintainer del pacchetto (Y)",
|
|
||||||
"pt": "Instalar a versão do mantenedor do pacote (Y)"
|
|
||||||
},
|
|
||||||
"Keep current version (N) if modified": {
|
|
||||||
"es": "Mantener la versión actual (N) si está modificada",
|
|
||||||
"fr": "Conserver la version actuelle (N) si elle a été modifiée",
|
|
||||||
"de": "Aktuelle Version beibehalten (N), falls angepasst",
|
|
||||||
"it": "Mantieni la versione corrente (N) se modificata",
|
|
||||||
"pt": "Manter a versão atual (N) se estiver modificada"
|
|
||||||
},
|
|
||||||
"Service restarts:": {
|
|
||||||
"es": "Reinicios de servicios:",
|
|
||||||
"fr": "Redémarrages de services :",
|
|
||||||
"de": "Neustarts von Diensten:",
|
|
||||||
"it": "Riavvii dei servizi:",
|
|
||||||
"pt": "Reinicializações de serviços:"
|
|
||||||
},
|
|
||||||
"Use default (Yes)": {
|
|
||||||
"es": "Usar la opción predeterminada (Sí)",
|
|
||||||
"fr": "Utiliser l’option par défaut (Oui)",
|
|
||||||
"de": "Standardoption verwenden (Ja)",
|
|
||||||
"it": "Usare l’opzione predefinita (Sì)",
|
|
||||||
"pt": "Usar a opção padrão (Sim)"
|
|
||||||
},
|
|
||||||
"Press 'q' to exit": {
|
|
||||||
"es": "Presione «q» para salir",
|
|
||||||
"fr": "Appuyez sur « q » pour quitter",
|
|
||||||
"de": "Drücken Sie „q“, um zu beenden",
|
|
||||||
"it": "Premi «q» per uscire",
|
|
||||||
"pt": "Pressione «q» para sair"
|
|
||||||
},
|
|
||||||
"If booting in EFI mode with root on LVM: install GRUB for EFI": {
|
|
||||||
"es": "Si inicia en modo EFI con root en LVM: instale GRUB para EFI",
|
|
||||||
"fr": "Si vous démarrez en mode EFI avec root sur LVM : installez GRUB pour EFI",
|
|
||||||
"de": "Wenn Sie im EFI-Modus mit Root auf LVM booten: GRUB für EFI installieren",
|
|
||||||
"it": "Se l’avvio è in modalità EFI con root su LVM: installare GRUB per EFI",
|
|
||||||
"pt": "Se iniciar em modo EFI com root no LVM: instale o GRUB para EFI"
|
|
||||||
},
|
|
||||||
"Per official known issues; ensures proper boot after upgrade": {
|
|
||||||
"es": "Según las incidencias conocidas oficiales, garantiza un arranque correcto tras la actualización",
|
|
||||||
"fr": "Selon les problèmes connus officiels, cela garantit un démarrage correct après la mise à niveau",
|
|
||||||
"de": "Laut den offiziellen Known Issues sorgt dies für einen ordnungsgemäßen Start nach dem Upgrade",
|
|
||||||
"it": "Secondo le note ufficiali dei problemi noti, garantisce un avvio corretto dopo l’aggiornamento",
|
|
||||||
"pt": "De acordo com os problemas conhecidos oficiais, garante uma inicialização correta após a atualização"
|
|
||||||
},
|
|
||||||
"Run checklist again to verify upgrade:": {
|
|
||||||
"es": "Ejecutar de nuevo la lista de verificación para comprobar la actualización:",
|
|
||||||
"fr": "Relancer la liste de vérification pour valider la mise à niveau :",
|
|
||||||
"de": "Checkliste erneut ausführen, um das Upgrade zu verifizieren:",
|
|
||||||
"it": "Eseguire nuovamente la checklist per verificare l’aggiornamento:",
|
|
||||||
"pt": "Executar novamente a lista de verificação para validar a atualização:"
|
|
||||||
},
|
|
||||||
"Should show fewer or no issues": {
|
|
||||||
"es": "Debería mostrar menos problemas o ninguno",
|
|
||||||
"fr": "Devrait afficher moins de problèmes, voire aucun",
|
|
||||||
"de": "Sollte weniger oder keine Probleme anzeigen",
|
|
||||||
"it": "Dovrebbe mostrare meno problemi o nessuno",
|
|
||||||
"pt": "Deve mostrar menos problemas ou nenhum"
|
|
||||||
},
|
|
||||||
"Reboot the system:": {
|
|
||||||
"es": "Reiniciar el sistema:",
|
|
||||||
"fr": "Redémarrer le système :",
|
|
||||||
"de": "System neu starten:",
|
|
||||||
"it": "Riavviare il sistema:",
|
|
||||||
"pt": "Reiniciar o sistema:"
|
|
||||||
},
|
|
||||||
"After reboot, verify PVE version:": {
|
|
||||||
"es": "Después del reinicio, verificar la versión de PVE:",
|
|
||||||
"fr": "Après le redémarrage, vérifier la version de PVE :",
|
|
||||||
"de": "Nach dem Neustart die PVE-Version prüfen:",
|
|
||||||
"it": "Dopo il riavvio, verificare la versione di PVE:",
|
|
||||||
"pt": "Após reiniciar, verificar a versão do PVE:"
|
|
||||||
},
|
|
||||||
"Should show pve-manager/9.x.x": {
|
|
||||||
"es": "Debería mostrar pve-manager/9.x.x",
|
|
||||||
"fr": "Devrait afficher pve-manager/9.x.x",
|
|
||||||
"de": "Sollte pve-manager/9.x.x anzeigen",
|
|
||||||
"it": "Dovrebbe mostrare pve-manager/9.x.x",
|
|
||||||
"pt": "Deve mostrar pve-manager/9.x.x"
|
|
||||||
},
|
|
||||||
"Optional: Modernize repository sources:": {
|
|
||||||
"es": "Opcional: Modernizar las fuentes de repositorio:",
|
|
||||||
"fr": "Optionnel : Moderniser les sources des dépôts :",
|
|
||||||
"de": "Optional: Repository-Quellen modernisieren:",
|
|
||||||
"it": "Opzionale: Modernizzare le fonti del repository:",
|
|
||||||
"pt": "Opcional: Modernizar as fontes de repositório:"
|
|
||||||
},
|
|
||||||
"Converts to deb822; keeps .list backups as .bak": {
|
|
||||||
"es": "Convierte a deb822; mantiene copias .list como .bak",
|
|
||||||
"fr": "Convertit en deb822 ; conserve les sauvegardes .list en .bak",
|
|
||||||
"de": "Konvertiert zu deb822; behält .list-Backups als .bak bei",
|
|
||||||
"it": "Converte in deb822; mantiene i backup .list come .bak",
|
|
||||||
"pt": "Converte para deb822; mantém backups .list como .bak"
|
|
||||||
},
|
|
||||||
"CLUSTER UPGRADE NOTES:": {
|
|
||||||
"es": "NOTAS DE ACTUALIZACIÓN DEL CLÚSTER:",
|
|
||||||
"fr": "NOTES DE MISE À NIVEAU DU CLUSTER :",
|
|
||||||
"de": "HINWEISE ZUM CLUSTER-UPGRADE:",
|
|
||||||
"it": "NOTE DI AGGIORNAMENTO DEL CLUSTER:",
|
|
||||||
"pt": "NOTAS DE ATUALIZAÇÃO DO CLUSTER:"
|
|
||||||
},
|
|
||||||
"Upgrade one node at a time": {
|
|
||||||
"es": "Actualizar un nodo a la vez",
|
|
||||||
"fr": "Mettre à niveau un nœud à la fois",
|
|
||||||
"de": "Jeweils nur einen Knoten aktualisieren",
|
|
||||||
"it": "Aggiornare un nodo alla volta",
|
|
||||||
"pt": "Atualizar um nó por vez"
|
|
||||||
},
|
|
||||||
"Migrate VMs away from node being upgraded": {
|
|
||||||
"es": "Migrar las VMs fuera del nodo que se está actualizando",
|
|
||||||
"fr": "Migrer les VM hors du nœud en cours de mise à niveau",
|
|
||||||
"de": "VMs vom zu aktualisierenden Knoten weg migrieren",
|
|
||||||
"it": "Migrare le VM dal nodo in aggiornamento",
|
|
||||||
"pt": "Migrar as VMs para fora do nó em atualização"
|
|
||||||
},
|
|
||||||
"Wait for each node to complete before starting next": {
|
|
||||||
"es": "Esperar a que cada nodo termine antes de empezar con el siguiente",
|
|
||||||
"fr": "Attendre que chaque nœud soit terminé avant de commencer le suivant",
|
|
||||||
"de": "Warten, bis jeder Knoten abgeschlossen ist, bevor der nächste beginnt",
|
|
||||||
"it": "Attendere che ogni nodo termini prima di iniziare il successivo",
|
|
||||||
"pt": "Aguardar cada nó concluir antes de iniciar o próximo"
|
|
||||||
},
|
|
||||||
"HA groups will be migrated to HA rules automatically": {
|
|
||||||
"es": "Los grupos de HA se migrarán automáticamente a reglas de HA",
|
|
||||||
"fr": "Les groupes HA seront migrés automatiquement vers des règles HA",
|
|
||||||
"de": "HA-Gruppen werden automatisch in HA-Regeln migriert",
|
|
||||||
"it": "I gruppi HA verranno migrati automaticamente a regole HA",
|
|
||||||
"pt": "Grupos de HA serão migrados automaticamente para regras de HA"
|
|
||||||
},
|
|
||||||
"TROUBLESHOOTING:": {
|
|
||||||
"es": "SOLUCIÓN DE PROBLEMAS:",
|
|
||||||
"fr": "DÉPANNAGE :",
|
|
||||||
"de": "FEHLERBEHEBUNG:",
|
|
||||||
"it": "RISOLUZIONE DEI PROBLEMI:",
|
|
||||||
"pt": "SOLUÇÃO DE PROBLEMAS:"
|
|
||||||
},
|
|
||||||
"If upgrade fails:": {
|
|
||||||
"es": "Si la actualización falla:",
|
|
||||||
"fr": "Si la mise à niveau échoue :",
|
|
||||||
"de": "Wenn das Upgrade fehlschlägt:",
|
|
||||||
"it": "Se l’aggiornamento fallisce:",
|
|
||||||
"pt": "Se a atualização falhar:"
|
|
||||||
},
|
|
||||||
"If repositories error:": {
|
|
||||||
"es": "Si hay errores de repositorios:",
|
|
||||||
"fr": "En cas d’erreurs de dépôts :",
|
|
||||||
"de": "Bei Repository-Fehlern:",
|
|
||||||
"it": "In caso di errori dei repository:",
|
|
||||||
"pt": "Se houver erros nos repositórios:"
|
|
||||||
},
|
|
||||||
"If 'proxmox-ve' removal warning:": {
|
|
||||||
"es": "Si aparece advertencia de eliminación de ‘proxmox-ve’:",
|
|
||||||
"fr": "Si un avertissement de suppression de ‘proxmox-ve’ apparaît :",
|
|
||||||
"de": "Bei Warnung zur Entfernung von ‚proxmox-ve‘:",
|
|
||||||
"it": "Se compare un avviso di rimozione di ‘proxmox-ve’:",
|
|
||||||
"pt": "Se aparecer um aviso de remoção de ‘proxmox-ve’:"
|
|
||||||
},
|
|
||||||
"Emergency recovery:": {
|
|
||||||
"es": "Recuperación de emergencia:",
|
|
||||||
"fr": "Récupération d’urgence :",
|
|
||||||
"de": "Notfallwiederherstellung:",
|
|
||||||
"it": "Ripristino di emergenza:",
|
|
||||||
"pt": "Recuperação de emergência:"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1008,7 +1008,7 @@
|
|||||||
{
|
{
|
||||||
"name": "Docmost",
|
"name": "Docmost",
|
||||||
"slug": "docmost",
|
"slug": "docmost",
|
||||||
"desc": "Open-source collaborative wiki and documentation software. Create, collaborate, and share knowledge seamlessly with Docmost. Ideal for managing your wiki, knowledge-base, documentation and a lot more.",
|
"desc": "Open-source collaborative wiki and documentation software Create, collaborate, and share knowledge seamlessly with Docmost. Ideal for managing your wiki, knowledge-base, documentation and a lot more.",
|
||||||
"script": "ct/docmost.sh",
|
"script": "ct/docmost.sh",
|
||||||
"script_url": "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/docmost.sh",
|
"script_url": "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/docmost.sh",
|
||||||
"categories": [
|
"categories": [
|
||||||
@ -1696,6 +1696,23 @@
|
|||||||
"notes": [],
|
"notes": [],
|
||||||
"type": "ct"
|
"type": "ct"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Home Assistant Core",
|
||||||
|
"slug": "homeassistant-core",
|
||||||
|
"desc": "A standalone installation of Home Assistant Core refers to a setup where the Home Assistant Core software is installed directly on a device or operating system, without the use of Docker containers. This provides a simpler, but less flexible and scalable solution, as the software is tightly coupled with the underlying system.",
|
||||||
|
"script": "ct/homeassistant-core.sh",
|
||||||
|
"script_url": "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/homeassistant-core.sh",
|
||||||
|
"categories": [
|
||||||
|
16
|
||||||
|
],
|
||||||
|
"notes": [
|
||||||
|
"If the LXC is created Privileged, the script will automatically set up USB passthrough.",
|
||||||
|
"Requires PVE 8.2.2 with kernel 6.8.4-3-pve or newer",
|
||||||
|
"Deprecation-Warning: This Core-based setup will be deprecated by August 2025. Use Home Assistant OS is strongly recommended to ensure long-term stability and updates.",
|
||||||
|
"config path: `/root/.homeassistant`"
|
||||||
|
],
|
||||||
|
"type": "ct"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Home Assistant Container",
|
"name": "Home Assistant Container",
|
||||||
"slug": "homeassistant",
|
"slug": "homeassistant",
|
||||||
@ -1770,20 +1787,6 @@
|
|||||||
],
|
],
|
||||||
"type": "ct"
|
"type": "ct"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "HortusFox",
|
|
||||||
"slug": "hortusfox",
|
|
||||||
"desc": "HortusFox is a collaborative plant management system for plant enthusiasts. Manage, document and track your entire plant collection \u2013 self-hosted and privacy-friendly.",
|
|
||||||
"script": "ct/hortusfox.sh",
|
|
||||||
"script_url": "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/hortusfox.sh",
|
|
||||||
"categories": [
|
|
||||||
24
|
|
||||||
],
|
|
||||||
"notes": [
|
|
||||||
"Login Credentials : `cat ~/hortusfox.creds`"
|
|
||||||
],
|
|
||||||
"type": "ct"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Proxmox VE Host Backup",
|
"name": "Proxmox VE Host Backup",
|
||||||
"slug": "host-backup",
|
"slug": "host-backup",
|
||||||
@ -2007,7 +2010,7 @@
|
|||||||
"script": "ct/jenkins.sh",
|
"script": "ct/jenkins.sh",
|
||||||
"script_url": "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/jenkins.sh",
|
"script_url": "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/jenkins.sh",
|
||||||
"categories": [
|
"categories": [
|
||||||
20
|
22
|
||||||
],
|
],
|
||||||
"notes": [],
|
"notes": [],
|
||||||
"type": "ct"
|
"type": "ct"
|
||||||
@ -3323,22 +3326,6 @@
|
|||||||
"notes": [],
|
"notes": [],
|
||||||
"type": "ct"
|
"type": "ct"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Palmr",
|
|
||||||
"slug": "palmr",
|
|
||||||
"desc": "Palmr is a fast and secure platform for sharing files, built with performance and privacy in mind.",
|
|
||||||
"script": "ct/palmr.sh",
|
|
||||||
"script_url": "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/palmr.sh",
|
|
||||||
"categories": [
|
|
||||||
11
|
|
||||||
],
|
|
||||||
"notes": [
|
|
||||||
"This LXC is very memory-hungry when updating; it requires at least 6GB RAM, but RAM may be reduced to as low as 2GB when running normally",
|
|
||||||
"To use a bind mount for storage, create symlinks to your mount for both `uploads` and `temp-uploads` in `/opt/palmr_data`",
|
|
||||||
"To use Palmr with a reverse proxy, uncomment `SECURE_SITE` in `/opt/palmr/apps/server/.env`"
|
|
||||||
],
|
|
||||||
"type": "ct"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "PaperlessAI",
|
"name": "PaperlessAI",
|
||||||
"slug": "paperless-ai",
|
"slug": "paperless-ai",
|
||||||
@ -3930,8 +3917,7 @@
|
|||||||
],
|
],
|
||||||
"notes": [
|
"notes": [
|
||||||
"Create Proxmox-API-Token first: `https://github.com/rcourtman/Pulse?tab=readme-ov-file#creating-api-token`",
|
"Create Proxmox-API-Token first: `https://github.com/rcourtman/Pulse?tab=readme-ov-file#creating-api-token`",
|
||||||
"After installation, access the web interface to configure your Proxmox connection details through the built-in setup wizard",
|
"After installation, access the web interface to configure your Proxmox connection details through the built-in setup wizard"
|
||||||
"Configure authentication in the Web UI => Settings => Security"
|
|
||||||
],
|
],
|
||||||
"type": "ct"
|
"type": "ct"
|
||||||
},
|
},
|
||||||
@ -5024,8 +5010,7 @@
|
|||||||
4
|
4
|
||||||
],
|
],
|
||||||
"notes": [
|
"notes": [
|
||||||
"Wireguard and WGDashboard are not the same. More info: `https://docs.wgdashboard.dev/what-is-wireguard-what-is-wgdashboard.html`",
|
"Wireguard and WGDashboard are not the same. More info: `https://docs.wgdashboard.dev/what-is-wireguard-what-is-wgdashboard.html`"
|
||||||
"WGDashboard installation is optional.`"
|
|
||||||
],
|
],
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
|
@ -179,11 +179,9 @@ EOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
|
||||||
export APT_LISTCHANGES_FRONTEND=none
|
|
||||||
export NEEDRESTART_MODE=a
|
|
||||||
export UCF_FORCE_CONFOLD=1
|
|
||||||
export DPKG_OPTIONS="--force-confdef --force-confold"
|
|
||||||
|
|
||||||
msg_info "$(translate "Performing packages upgrade...")"
|
msg_info "$(translate "Performing packages upgrade...")"
|
||||||
apt-get install pv -y > /dev/null 2>&1
|
apt-get install pv -y > /dev/null 2>&1
|
||||||
@ -197,24 +195,22 @@ EOF
|
|||||||
tput civis
|
tput civis
|
||||||
tput sc
|
tput sc
|
||||||
|
|
||||||
|
|
||||||
(
|
(
|
||||||
/usr/bin/env \
|
/usr/bin/env DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::='--force-confdef' dist-upgrade 2>&1 | \
|
||||||
DEBIAN_FRONTEND=noninteractive \
|
|
||||||
APT_LISTCHANGES_FRONTEND=none \
|
|
||||||
NEEDRESTART_MODE=a \
|
|
||||||
UCF_FORCE_CONFOLD=1 \
|
|
||||||
apt-get -y \
|
|
||||||
-o Dpkg::Options::="--force-confdef" \
|
|
||||||
-o Dpkg::Options::="--force-confold" \
|
|
||||||
dist-upgrade 2>&1 | \
|
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
if [[ "$line" =~ ^(Setting\ up|Unpacking|Preparing\ to\ unpack|Processing\ triggers\ for) ]]; then
|
if [[ "$line" =~ ^(Setting up|Unpacking|Preparing to unpack|Processing triggers for) ]]; then
|
||||||
|
|
||||||
package_name=$(echo "$line" | sed -E 's/.*(Setting up|Unpacking|Preparing to unpack|Processing triggers for) ([^ ]+).*/\2/')
|
package_name=$(echo "$line" | sed -E 's/.*(Setting up|Unpacking|Preparing to unpack|Processing triggers for) ([^ ]+).*/\2/')
|
||||||
|
|
||||||
|
|
||||||
[ -z "$package_name" ] && package_name="$(translate "Unknown")"
|
[ -z "$package_name" ] && package_name="$(translate "Unknown")"
|
||||||
|
|
||||||
|
|
||||||
tput rc
|
tput rc
|
||||||
tput ed
|
tput ed
|
||||||
|
|
||||||
|
|
||||||
row=$(( $(tput lines) - 6 ))
|
row=$(( $(tput lines) - 6 ))
|
||||||
tput cup $row 0; echo "$(translate "Installing packages...")"
|
tput cup $row 0; echo "$(translate "Installing packages...")"
|
||||||
tput cup $((row + 1)) 0; echo "──────────────────────────────────────────────"
|
tput cup $((row + 1)) 0; echo "──────────────────────────────────────────────"
|
||||||
@ -222,10 +218,12 @@ EOF
|
|||||||
tput cup $((row + 3)) 0; echo "Progress: [ ] 0%"
|
tput cup $((row + 3)) 0; echo "Progress: [ ] 0%"
|
||||||
tput cup $((row + 4)) 0; echo "──────────────────────────────────────────────"
|
tput cup $((row + 4)) 0; echo "──────────────────────────────────────────────"
|
||||||
|
|
||||||
|
|
||||||
for i in $(seq 1 10); do
|
for i in $(seq 1 10); do
|
||||||
progress=$((i * 10))
|
progress=$((i * 10))
|
||||||
tput cup $((row + 3)) 9
|
tput cup $((row + 3)) 9
|
||||||
printf "[%-50s] %3d%%" "$(printf "#%.0s" $(seq 1 $((progress/2))))" "$progress"
|
printf "[%-50s] %3d%%" "$(printf "#%.0s" $(seq 1 $((progress/2))))" "$progress"
|
||||||
|
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@ -234,7 +232,6 @@ EOF
|
|||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
tput rc
|
tput rc
|
||||||
tput ed
|
tput ed
|
||||||
tput cnorm
|
|
||||||
msg_ok "$(translate "System upgrade completed")"
|
msg_ok "$(translate "System upgrade completed")"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -16,85 +16,27 @@ BASE_DIR="/usr/local/share/proxmenux"
|
|||||||
UTILS_FILE="$BASE_DIR/utils.sh"
|
UTILS_FILE="$BASE_DIR/utils.sh"
|
||||||
VENV_PATH="/opt/googletrans-env"
|
VENV_PATH="/opt/googletrans-env"
|
||||||
|
|
||||||
|
|
||||||
check_pve9_translation_compatibility() {
|
|
||||||
local pve_version
|
|
||||||
|
|
||||||
if command -v pveversion &>/dev/null; then
|
|
||||||
pve_version=$(pveversion 2>/dev/null | grep -oP 'pve-manager/\K[0-9]+' | head -1)
|
|
||||||
else
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -n "$pve_version" ]] && [[ "$pve_version" -ge 9 ]] && [[ -d "$VENV_PATH" ]]; then
|
|
||||||
|
|
||||||
local has_googletrans=false
|
|
||||||
local has_cache=false
|
|
||||||
|
|
||||||
if [[ -f "$VENV_PATH/bin/pip" ]]; then
|
|
||||||
if "$VENV_PATH/bin/pip" list 2>/dev/null | grep -q "googletrans"; then
|
|
||||||
has_googletrans=true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -f "$BASE_DIR/cache.json" ]]; then
|
|
||||||
has_cache=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$has_googletrans" = true ]] || [[ "$has_cache" = true ]]; then
|
|
||||||
|
|
||||||
dialog --clear \
|
|
||||||
--backtitle "ProxMenux - Compatibility Required" \
|
|
||||||
--title "Translation Environment Incompatible with PVE $pve_version" \
|
|
||||||
--msgbox "NOTICE: You are running Proxmox VE $pve_version with translation components installed.\n\nTranslations are NOT supported in PVE 9+. This causes:\n• Menu loading errors\n• Translation failures\n• System instability\n\nREQUIRED ACTION:\nProxMenux will now automatically reinstall the Normal Version.\n\nThis process will:\n• Remove incompatible translation components\n• Install PVE 9+ compatible version\n• Preserve all your settings and preferences\n\nPress OK to continue with automatic reinstallation..." 20 75
|
|
||||||
|
|
||||||
bash <(curl -sSL "$REPO_URL/install_proxmenux.sh")
|
|
||||||
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
check_pve9_translation_compatibility
|
|
||||||
|
|
||||||
# ==========================================================
|
|
||||||
|
|
||||||
if [[ -f "$UTILS_FILE" ]]; then
|
if [[ -f "$UTILS_FILE" ]]; then
|
||||||
source "$UTILS_FILE"
|
source "$UTILS_FILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
load_language
|
||||||
|
initialize_cache
|
||||||
|
# ==========================================================
|
||||||
|
|
||||||
if ! command -v dialog &>/dev/null; then
|
if ! command -v dialog &>/dev/null; then
|
||||||
apt update -qq >/dev/null 2>&1
|
apt update -qq >/dev/null 2>&1
|
||||||
apt install -y dialog >/dev/null 2>&1
|
apt install -y dialog >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$PROXMENUX_PVE9_WARNING_SHOWN" = "1" ]]; then
|
|
||||||
|
|
||||||
if ! load_language 2>/dev/null; then
|
|
||||||
LANGUAGE="en"
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
|
||||||
load_language
|
|
||||||
initialize_cache
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ==========================================================
|
|
||||||
|
|
||||||
show_menu() {
|
show_menu() {
|
||||||
local TEMP_FILE
|
local TEMP_FILE
|
||||||
TEMP_FILE=$(mktemp)
|
TEMP_FILE=$(mktemp)
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
|
|
||||||
local menu_title="Main ProxMenux"
|
|
||||||
if [[ -n "$PROXMENUX_PVE9_WARNING_SHOWN" ]]; then
|
|
||||||
menu_title="Main ProxMenux"
|
|
||||||
fi
|
|
||||||
|
|
||||||
dialog --clear \
|
dialog --clear \
|
||||||
--backtitle "ProxMenux" \
|
--backtitle "ProxMenux" \
|
||||||
--title "$(translate "$menu_title")" \
|
--title "$(translate "Main ProxMenux")" \
|
||||||
--menu "$(translate "Select an option:")" 20 70 10 \
|
--menu "$(translate "Select an option:")" 20 70 10 \
|
||||||
1 "$(translate "Settings post-install Proxmox")" \
|
1 "$(translate "Settings post-install Proxmox")" \
|
||||||
2 "$(translate "Help and Info Commands")" \
|
2 "$(translate "Help and Info Commands")" \
|
||||||
@ -110,6 +52,7 @@ show_menu() {
|
|||||||
local EXIT_STATUS=$?
|
local EXIT_STATUS=$?
|
||||||
|
|
||||||
if [[ $EXIT_STATUS -ne 0 ]]; then
|
if [[ $EXIT_STATUS -ne 0 ]]; then
|
||||||
|
# ESC pressed or Cancel
|
||||||
clear
|
clear
|
||||||
msg_ok "$(translate "Thank you for using ProxMenux. Goodbye!")"
|
msg_ok "$(translate "Thank you for using ProxMenux. Goodbye!")"
|
||||||
rm -f "$TEMP_FILE"
|
rm -f "$TEMP_FILE"
|
||||||
@ -120,7 +63,7 @@ show_menu() {
|
|||||||
|
|
||||||
case $OPTION in
|
case $OPTION in
|
||||||
1) exec bash <(curl -s "$REPO_URL/scripts/menus/menu_post_install.sh") ;;
|
1) exec bash <(curl -s "$REPO_URL/scripts/menus/menu_post_install.sh") ;;
|
||||||
2) exec bash <(curl -s "$REPO_URL/scripts/help_info_menu.sh") ;;
|
2) bash <(curl -s "$REPO_URL/scripts/help_info_menu.sh") ;;
|
||||||
3) exec bash <(curl -s "$REPO_URL/scripts/menus/hw_grafics_menu.sh") ;;
|
3) exec bash <(curl -s "$REPO_URL/scripts/menus/hw_grafics_menu.sh") ;;
|
||||||
4) exec bash <(curl -s "$REPO_URL/scripts/menus/create_vm_menu.sh") ;;
|
4) exec bash <(curl -s "$REPO_URL/scripts/menus/create_vm_menu.sh") ;;
|
||||||
5) exec bash <(curl -s "$REPO_URL/scripts/menus/storage_menu.sh") ;;
|
5) exec bash <(curl -s "$REPO_URL/scripts/menus/storage_menu.sh") ;;
|
||||||
@ -134,4 +77,6 @@ show_menu() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
show_menu
|
show_menu
|
@ -1,82 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# ==========================================================
|
|
||||||
# ProxMenu - A menu-driven script for Proxmox VE management
|
|
||||||
# ==========================================================
|
|
||||||
# Author : MacRimi
|
|
||||||
# Copyright : (c) 2024 MacRimi
|
|
||||||
# License : MIT (https://raw.githubusercontent.com/MacRimi/ProxMenux/main/LICENSE)
|
|
||||||
# Version : 2.0
|
|
||||||
# Last Updated: 04/04/2025
|
|
||||||
# ==========================================================
|
|
||||||
|
|
||||||
# Configuration ============================================
|
|
||||||
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
|
|
||||||
BASE_DIR="/usr/local/share/proxmenux"
|
|
||||||
UTILS_FILE="$BASE_DIR/utils.sh"
|
|
||||||
VENV_PATH="/opt/googletrans-env"
|
|
||||||
|
|
||||||
if [[ -f "$UTILS_FILE" ]]; then
|
|
||||||
source "$UTILS_FILE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
load_language
|
|
||||||
initialize_cache
|
|
||||||
# ==========================================================
|
|
||||||
|
|
||||||
if ! command -v dialog &>/dev/null; then
|
|
||||||
apt update -qq >/dev/null 2>&1
|
|
||||||
apt install -y dialog >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
|
|
||||||
show_menu() {
|
|
||||||
local TEMP_FILE
|
|
||||||
TEMP_FILE=$(mktemp)
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
dialog --clear \
|
|
||||||
--backtitle "ProxMenux" \
|
|
||||||
--title "$(translate "Main ProxMenux")" \
|
|
||||||
--menu "$(translate "Select an option:")" 20 70 10 \
|
|
||||||
1 "$(translate "Settings post-install Proxmox")" \
|
|
||||||
2 "$(translate "Help and Info Commands")" \
|
|
||||||
3 "$(translate "Hardware: GPUs and Coral-TPU")" \
|
|
||||||
4 "$(translate "Create VM from template or script")" \
|
|
||||||
5 "$(translate "Disk and Storage Manager")" \
|
|
||||||
6 "$(translate "Proxmox VE Helper Scripts")" \
|
|
||||||
7 "$(translate "Network Management")" \
|
|
||||||
8 "$(translate "Utilities and Tools")" \
|
|
||||||
9 "$(translate "Settings")" \
|
|
||||||
0 "$(translate "Exit")" 2>"$TEMP_FILE"
|
|
||||||
|
|
||||||
local EXIT_STATUS=$?
|
|
||||||
|
|
||||||
if [[ $EXIT_STATUS -ne 0 ]]; then
|
|
||||||
# ESC pressed or Cancel
|
|
||||||
clear
|
|
||||||
msg_ok "$(translate "Thank you for using ProxMenux. Goodbye!")"
|
|
||||||
rm -f "$TEMP_FILE"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
OPTION=$(<"$TEMP_FILE")
|
|
||||||
|
|
||||||
case $OPTION in
|
|
||||||
1) exec bash <(curl -s "$REPO_URL/scripts/menus/menu_post_install.sh") ;;
|
|
||||||
2) bash <(curl -s "$REPO_URL/scripts/help_info_menu.sh") ;;
|
|
||||||
3) exec bash <(curl -s "$REPO_URL/scripts/menus/hw_grafics_menu.sh") ;;
|
|
||||||
4) exec bash <(curl -s "$REPO_URL/scripts/menus/create_vm_menu.sh") ;;
|
|
||||||
5) exec bash <(curl -s "$REPO_URL/scripts/menus/storage_menu.sh") ;;
|
|
||||||
6) exec bash <(curl -s "$REPO_URL/scripts/menus/menu_Helper_Scripts.sh") ;;
|
|
||||||
7) exec bash <(curl -s "$REPO_URL/scripts/menus/network_menu.sh") ;;
|
|
||||||
8) exec bash <(curl -s "$REPO_URL/scripts/menus/utilities_menu.sh") ;;
|
|
||||||
9) exec bash <(curl -s "$REPO_URL/scripts/menus/config_menu.sh") ;;
|
|
||||||
0) clear; msg_ok "$(translate "Thank you for using ProxMenu. Goodbye!")"; rm -f "$TEMP_FILE"; exit 0 ;;
|
|
||||||
*) msg_warn "$(translate "Invalid option")"; sleep 2 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
show_menu
|
|
@ -686,18 +686,11 @@ install_log2ram_auto() {
|
|||||||
|
|
||||||
|
|
||||||
sed -i "s/^SIZE=.*/SIZE=$LOG2RAM_SIZE/" /etc/log2ram.conf
|
sed -i "s/^SIZE=.*/SIZE=$LOG2RAM_SIZE/" /etc/log2ram.conf
|
||||||
LOG2RAM_BIN="$(command -v log2ram || echo /usr/local/bin/log2ram)"
|
|
||||||
rm -f /etc/cron.daily/log2ram /etc/cron.weekly/log2ram /etc/cron.monthly/log2ram 2>/dev/null || true
|
|
||||||
rm -f /etc/cron.hourly/log2ram
|
rm -f /etc/cron.hourly/log2ram
|
||||||
|
echo "0 */$CRON_HOURS * * * root /usr/sbin/log2ram write" > /etc/cron.d/log2ram
|
||||||
{
|
msg_ok "$(translate "log2ram write scheduled every") $CRON_HOURS $(translate "hour(s)")"
|
||||||
echo 'MAILTO=""'
|
|
||||||
echo "0 */$CRON_HOURS * * * root $LOG2RAM_BIN write >/dev/null 2>&1"
|
|
||||||
} > /etc/cron.d/log2ram
|
|
||||||
|
|
||||||
chmod 0644 /etc/cron.d/log2ram
|
|
||||||
chown root:root /etc/cron.d/log2ram
|
|
||||||
msg_ok "$(translate "Log2RAM write scheduled every") $CRON_HOURS $(translate "hour(s)")"
|
|
||||||
|
|
||||||
|
|
||||||
cat << 'EOF' > /usr/local/bin/log2ram-check.sh
|
cat << 'EOF' > /usr/local/bin/log2ram-check.sh
|
||||||
@ -713,12 +706,7 @@ fi
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
chmod +x /usr/local/bin/log2ram-check.sh
|
chmod +x /usr/local/bin/log2ram-check.sh
|
||||||
{
|
echo "*/5 * * * * root /usr/local/bin/log2ram-check.sh" > /etc/cron.d/log2ram-auto-sync
|
||||||
echo 'MAILTO=""'
|
|
||||||
echo "*/5 * * * * root /usr/local/bin/log2ram-check.sh >/dev/null 2>&1"
|
|
||||||
} > /etc/cron.d/log2ram-auto-sync
|
|
||||||
chmod 0644 /etc/cron.d/log2ram-auto-sync
|
|
||||||
chown root:root /etc/cron.d/log2ram-auto-sync
|
|
||||||
msg_ok "$(translate "Auto-sync enabled when /var/log exceeds 90% of") $LOG2RAM_SIZE"
|
msg_ok "$(translate "Auto-sync enabled when /var/log exceeds 90% of") $LOG2RAM_SIZE"
|
||||||
|
|
||||||
register_tool "log2ram" true
|
register_tool "log2ram" true
|
||||||
|
@ -3002,18 +3002,18 @@ configure_log2ram() {
|
|||||||
"12" "$(translate "Every 12 hours")" OFF \
|
"12" "$(translate "Every 12 hours")" OFF \
|
||||||
3>&1 1>&2 2>&3) || return 0
|
3>&1 1>&2 2>&3) || return 0
|
||||||
|
|
||||||
|
# Activar auto-sync si se pasa del 90%
|
||||||
if whiptail --title "Log2RAM" --yesno "$(translate "Enable auto-sync if /var/log exceeds 90% of its size?")" 10 60; then
|
if whiptail --title "Log2RAM" --yesno "$(translate "Enable auto-sync if /var/log exceeds 90% of its size?")" 10 60; then
|
||||||
ENABLE_AUTOSYNC=true
|
ENABLE_AUTOSYNC=true
|
||||||
else
|
else
|
||||||
ENABLE_AUTOSYNC=false
|
ENABLE_AUTOSYNC=false
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Instalación
|
||||||
msg_info "$(translate "Installing Log2RAM from GitHub...")"
|
msg_info "$(translate "Installing Log2RAM from GitHub...")"
|
||||||
rm -rf /tmp/log2ram
|
rm -rf /tmp/log2ram
|
||||||
|
|
||||||
|
# Ensure git is available
|
||||||
if ! command -v git >/dev/null 2>&1; then
|
if ! command -v git >/dev/null 2>&1; then
|
||||||
msg_info "$(translate "Installing required package: git")"
|
msg_info "$(translate "Installing required package: git")"
|
||||||
apt-get update -qq >/dev/null 2>&1
|
apt-get update -qq >/dev/null 2>&1
|
||||||
@ -3031,22 +3031,13 @@ configure_log2ram() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Aplicar configuración
|
||||||
sed -i "s/^SIZE=.*/SIZE=$LOG2RAM_SIZE/" /etc/log2ram.conf
|
sed -i "s/^SIZE=.*/SIZE=$LOG2RAM_SIZE/" /etc/log2ram.conf
|
||||||
LOG2RAM_BIN="$(command -v log2ram || echo /usr/local/bin/log2ram)"
|
|
||||||
rm -f /etc/cron.daily/log2ram /etc/cron.weekly/log2ram /etc/cron.monthly/log2ram 2>/dev/null || true
|
|
||||||
rm -f /etc/cron.hourly/log2ram
|
rm -f /etc/cron.hourly/log2ram
|
||||||
|
echo "0 */$CRON_HOURS * * * root /usr/sbin/log2ram write" > /etc/cron.d/log2ram
|
||||||
{
|
|
||||||
echo 'MAILTO=""'
|
|
||||||
echo "0 */$CRON_HOURS * * * root $LOG2RAM_BIN write >/dev/null 2>&1"
|
|
||||||
} > /etc/cron.d/log2ram
|
|
||||||
|
|
||||||
chmod 0644 /etc/cron.d/log2ram
|
|
||||||
chown root:root /etc/cron.d/log2ram
|
|
||||||
msg_ok "$(translate "Log2RAM write scheduled every") $CRON_HOURS $(translate "hour(s)")"
|
msg_ok "$(translate "Log2RAM write scheduled every") $CRON_HOURS $(translate "hour(s)")"
|
||||||
|
|
||||||
|
# Auto-sync
|
||||||
if [[ "$ENABLE_AUTOSYNC" == true ]]; then
|
if [[ "$ENABLE_AUTOSYNC" == true ]]; then
|
||||||
cat << 'EOF' > /usr/local/bin/log2ram-check.sh
|
cat << 'EOF' > /usr/local/bin/log2ram-check.sh
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
@ -3059,14 +3050,7 @@ if (( USED_KB > THRESHOLD )); then
|
|||||||
fi
|
fi
|
||||||
EOF
|
EOF
|
||||||
chmod +x /usr/local/bin/log2ram-check.sh
|
chmod +x /usr/local/bin/log2ram-check.sh
|
||||||
|
echo "*/5 * * * * root /usr/local/bin/log2ram-check.sh" > /etc/cron.d/log2ram-auto-sync
|
||||||
{
|
|
||||||
echo 'MAILTO=""'
|
|
||||||
echo "*/5 * * * * root /usr/local/bin/log2ram-check.sh >/dev/null 2>&1"
|
|
||||||
} > /etc/cron.d/log2ram-auto-sync
|
|
||||||
chmod 0644 /etc/cron.d/log2ram-auto-sync
|
|
||||||
chown root:root /etc/cron.d/log2ram-auto-sync
|
|
||||||
|
|
||||||
msg_ok "$(translate "Auto-sync enabled when /var/log exceeds 90% of") $LOG2RAM_SIZE"
|
msg_ok "$(translate "Auto-sync enabled when /var/log exceeds 90% of") $LOG2RAM_SIZE"
|
||||||
else
|
else
|
||||||
rm -f /usr/local/bin/log2ram-check.sh /etc/cron.d/log2ram-auto-sync
|
rm -f /usr/local/bin/log2ram-check.sh /etc/cron.d/log2ram-auto-sync
|
||||||
|
@ -1,271 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# ==========================================================
|
|
||||||
# ProxMenux - Manual Proxmox VE 8 to 9 Upgrade Guide
|
|
||||||
# ==========================================================
|
|
||||||
# Author : MacRimi
|
|
||||||
# Copyright : (c) 2024 MacRimi
|
|
||||||
# License : MIT (https://raw.githubusercontent.com/MacRimi/ProxMenux/main/LICENSE)
|
|
||||||
# Version : 1.0
|
|
||||||
# Last Updated: 13/08/2025
|
|
||||||
# ==========================================================
|
|
||||||
|
|
||||||
# Configuration ============================================
|
|
||||||
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
|
|
||||||
BASE_DIR="/usr/local/share/proxmenux"
|
|
||||||
UTILS_FILE="$BASE_DIR/utils.sh"
|
|
||||||
VENV_PATH="/opt/googletrans-env"
|
|
||||||
|
|
||||||
if [[ -f "$UTILS_FILE" ]]; then
|
|
||||||
source "$UTILS_FILE"
|
|
||||||
fi
|
|
||||||
load_language
|
|
||||||
initialize_cache
|
|
||||||
# ==========================================================
|
|
||||||
|
|
||||||
show_command() {
|
|
||||||
local step="$1"
|
|
||||||
local description="$2"
|
|
||||||
local command="$3"
|
|
||||||
local note="$4"
|
|
||||||
local command_extra="$5"
|
|
||||||
|
|
||||||
echo -e "${BGN}${step}.${CL} ${BL}${description}${CL}"
|
|
||||||
echo ""
|
|
||||||
echo -e "${TAB}${command}"
|
|
||||||
echo -e
|
|
||||||
[[ -n "$note" ]] && echo -e "${TAB}${DARK_GRAY}${note}${CL}"
|
|
||||||
[[ -n "$command_extra" ]] && echo -e "${TAB}${YW}${command_extra}${CL}"
|
|
||||||
echo ""
|
|
||||||
}
|
|
||||||
|
|
||||||
show_proxmox_upgrade_manual_guide() {
|
|
||||||
clear
|
|
||||||
show_proxmenux_logo
|
|
||||||
msg_title "$(translate "Proxmox VE 8 to 9 Manual Upgrade Guide")"
|
|
||||||
|
|
||||||
echo -e "${TAB}${BL}------------------------------------------------------------------------${CL}"
|
|
||||||
echo -e
|
|
||||||
echo -e "${TAB}${BGN}$(translate "Source:")${CL} ${BL}https://pve.proxmox.com/wiki/Upgrade_from_8_to_9${CL}"
|
|
||||||
echo -e
|
|
||||||
echo -e
|
|
||||||
echo -e "${TAB}${BOLD}$(translate "IMPORTANT PREREQUISITES:")${CL}"
|
|
||||||
echo -e
|
|
||||||
echo -e "${TAB}${BGN}• $(translate "System must be updated to latest PVE 8.4+ before starting")${CL}"
|
|
||||||
echo -e "${TAB}${BGN}• $(translate "Use SSH or terminal access (SSH recommended)")${CL}"
|
|
||||||
echo -e "${TAB}${BGN}• $(translate "Use tmux or screen to avoid interruptions")${CL}"
|
|
||||||
echo -e "${TAB}${BGN}• $(translate "Have valid backups of all VMs and containers")${CL}"
|
|
||||||
echo -e "${TAB}${BGN}• $(translate "At least 5GB free space on root filesystem")${CL}"
|
|
||||||
echo -e "${TAB}${BGN}• $(translate "Do not run the upgrade from the Web UI virtual console (it will disconnect)")${CL}"
|
|
||||||
echo -e
|
|
||||||
echo -e "${TAB}${BL}------------------------------------------------------------------------${CL}"
|
|
||||||
echo -e
|
|
||||||
|
|
||||||
|
|
||||||
show_command "1" \
|
|
||||||
"$(translate "Update system to latest PVE 8.4+ (if not done already):")\n\n" \
|
|
||||||
"apt update && apt dist-upgrade -y" \
|
|
||||||
"$(translate "Or use ProxMenux update function")" \
|
|
||||||
"\n\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "2" \
|
|
||||||
"$(translate "Verify PVE version (must be 8.4.1 or newer):")\n\n" \
|
|
||||||
"pveversion" \
|
|
||||||
"" \
|
|
||||||
"\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "2.1" \
|
|
||||||
"${YW}$(translate "If this node runs hyper-converged Ceph: ensure Ceph is 19.x (Squid) BEFORE upgrading PVE.")${CL}\n\n" \
|
|
||||||
"ceph --version" \
|
|
||||||
"$(translate "If not 19.x, upgrade Ceph (Reef→Squid) first per the official guide:") ${BL}https://pve.proxmox.com/wiki/Ceph_Squid${CL}" \
|
|
||||||
"\n"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
show_command "3" \
|
|
||||||
"$(translate "Run upgrade checklist script:")\n\n" \
|
|
||||||
"pve8to9 --full" \
|
|
||||||
"${YW}$(translate "If it warns about 'systemd-boot' meta-package, remove it:")${CL} apt remove systemd-boot" \
|
|
||||||
"\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "4" \
|
|
||||||
"$(translate "Start terminal multiplexer (recommended):")\n\n" \
|
|
||||||
"tmux new-session -s upgrade ${DARK_GRAY}$(translate "# Recommended: avoids disconnection during upgrade")${CL}\n\n screen -S upgrade ${DARK_GRAY}$(translate "# Alternative if you prefer screen")${CL}" \
|
|
||||||
"" \
|
|
||||||
"\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "5" \
|
|
||||||
"$(translate "Update Debian repositories to Trixie:")\n\n" \
|
|
||||||
"sed -i 's/bookworm/trixie/g' /etc/apt/sources.list" \
|
|
||||||
"" \
|
|
||||||
"\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "6" \
|
|
||||||
"${YW}$(translate "Update PVE enterprise repository (Only if using enterprise):")${CL}\n\n" \
|
|
||||||
"${CUS}sed -i 's/bookworm/trixie/g' /etc/apt/sources.list.d/pve-enterprise.list${CL}" \
|
|
||||||
"$(translate "Skip this step if using no-subscription repository")" \
|
|
||||||
"\n\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "7" \
|
|
||||||
"${YW}$(translate "Add new PVE 9 enterprise repository (deb822 format) (Only if using enterprise):")${CL}\n\n" \
|
|
||||||
"${CUS}cat > /etc/apt/sources.list.d/pve-enterprise.sources << EOF
|
|
||||||
Types: deb
|
|
||||||
URIs: https://enterprise.proxmox.com/debian/pve
|
|
||||||
Suites: trixie
|
|
||||||
Components: pve-enterprise
|
|
||||||
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
|
|
||||||
EOF${CL}" \
|
|
||||||
"$(translate "Only if using enterprise subscription")" \
|
|
||||||
"\n\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "8" \
|
|
||||||
"$(translate "OR add new PVE 9 no-subscription repository:")\n\n" \
|
|
||||||
"cat > /etc/apt/sources.list.d/proxmox.sources << EOF
|
|
||||||
Types: deb
|
|
||||||
URIs: http://download.proxmox.com/debian/pve
|
|
||||||
Suites: trixie
|
|
||||||
Components: pve-no-subscription
|
|
||||||
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
|
|
||||||
EOF" \
|
|
||||||
"$(translate "Only if using no-subscription repository")" \
|
|
||||||
"\n\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "8.1" \
|
|
||||||
"$(translate "Refresh APT index and verify repositories:")\n\n" \
|
|
||||||
"apt update && apt policy | sed -n '1,120p'" \
|
|
||||||
"$(translate "Ensure there are no errors and that proxmox-ve candidate shows 9.x")" \
|
|
||||||
"\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "9" \
|
|
||||||
"${YW}$(translate "Update Ceph repository (Only if using Ceph):")${CL}\n\n" \
|
|
||||||
"${CUS}cat > /etc/apt/sources.list.d/ceph.sources << EOF
|
|
||||||
Types: deb
|
|
||||||
URIs: http://download.proxmox.com/debian/ceph-squid
|
|
||||||
Suites: trixie
|
|
||||||
Components: no-subscription
|
|
||||||
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
|
|
||||||
EOF${CL}" \
|
|
||||||
"$(translate "Use enterprise URL if you have subscription.")" \
|
|
||||||
"\n\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "10" \
|
|
||||||
"$(translate "Remove old repository files:")\n\n" \
|
|
||||||
"rm -f /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/ceph.list" \
|
|
||||||
"$(translate "Also comment any remaining 'bookworm' entries in *.list if present.")" \
|
|
||||||
"\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "11" \
|
|
||||||
"$(translate "Update package index:")\n\n" \
|
|
||||||
"apt update" \
|
|
||||||
"" \
|
|
||||||
"\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "12" \
|
|
||||||
"$(translate "Disable kernel audit messages (optional but recommended):")\n\n" \
|
|
||||||
"systemctl disable --now systemd-journald-audit.socket" \
|
|
||||||
"" \
|
|
||||||
"\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "13" \
|
|
||||||
"$(translate "Start the main system upgrade:")\n\n" \
|
|
||||||
"apt dist-upgrade" \
|
|
||||||
"$(translate "This will take time. Answer prompts carefully - see notes below.")\n" \
|
|
||||||
"\n"
|
|
||||||
|
|
||||||
|
|
||||||
echo -e "${TAB}${BOLD}$(translate "UPGRADE PROMPTS - RECOMMENDED ANSWERS:")${CL}"
|
|
||||||
echo -e
|
|
||||||
echo -e "${TAB}${BGN}/etc/issue:${CL} ${YW}$(translate "Keep current version (N)")${CL}"
|
|
||||||
echo -e "${TAB}${BGN}/etc/lvm/lvm.conf:${CL} ${YW}$(translate "Install maintainer's version (Y)")${CL}"
|
|
||||||
echo -e "${TAB}${BGN}/etc/ssh/sshd_config:${CL} ${YW}$(translate "Install maintainer's version (Y)")${CL}"
|
|
||||||
echo -e "${TAB}${BGN}/etc/default/grub:${CL} ${YW}$(translate "Keep current version (N) if modified")${CL}"
|
|
||||||
echo -e "${TAB}${BGN}/etc/chrony/chrony.conf:${CL} ${YW}$(translate "Install maintainer's version (Y)")${CL}"
|
|
||||||
echo -e "${TAB}${BGN}$(translate "Service restarts:")${CL} ${YW}$(translate "Use default (Yes)")${CL}"
|
|
||||||
echo -e "${TAB}${BGN}apt-listchanges:${CL} ${YW}$(translate "Press 'q' to exit")${CL}"
|
|
||||||
echo -e
|
|
||||||
echo -e
|
|
||||||
echo -e
|
|
||||||
|
|
||||||
|
|
||||||
show_command "13.1" \
|
|
||||||
"${YW}$(translate "If booting in EFI mode with root on LVM: install GRUB for EFI")${CL}\n\n" \
|
|
||||||
"[ -d /sys/firmware/efi ] && apt install grub-efi-amd64" \
|
|
||||||
"$(translate "Per official known issues; ensures proper boot after upgrade")" \
|
|
||||||
"\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "14" \
|
|
||||||
"$(translate "Run checklist again to verify upgrade:")\n\n" \
|
|
||||||
"pve8to9 --full" \
|
|
||||||
"$(translate "Should show fewer or no issues")" \
|
|
||||||
"\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "15" \
|
|
||||||
"$(translate "Reboot the system:")\n\n" \
|
|
||||||
"reboot" \
|
|
||||||
"" \
|
|
||||||
"\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "16" \
|
|
||||||
"$(translate "After reboot, verify PVE version:")\n\n" \
|
|
||||||
"pveversion" \
|
|
||||||
"$(translate "Should show pve-manager/9.x.x")" \
|
|
||||||
"\n"
|
|
||||||
|
|
||||||
|
|
||||||
show_command "17" \
|
|
||||||
"$(translate "Optional: Modernize repository sources:")\n\n" \
|
|
||||||
"apt modernize-sources" \
|
|
||||||
"$(translate "Converts to deb822; keeps .list backups as .bak")" \
|
|
||||||
"\n"
|
|
||||||
|
|
||||||
echo -e "${TAB}${BL}------------------------------------------------------------------------${CL}"
|
|
||||||
echo -e
|
|
||||||
echo -e
|
|
||||||
echo -e "${TAB}${BOLD}$(translate "CLUSTER UPGRADE NOTES:")${CL}"
|
|
||||||
echo -e
|
|
||||||
echo -e "${TAB}${BGN}• $(translate "Upgrade one node at a time")${CL}"
|
|
||||||
echo -e "${TAB}${BGN}• $(translate "Migrate VMs away from node being upgraded")${CL}"
|
|
||||||
echo -e "${TAB}${BGN}• $(translate "Wait for each node to complete before starting next")${CL}"
|
|
||||||
echo -e "${TAB}${BGN}• $(translate "HA groups will be migrated to HA rules automatically")${CL}"
|
|
||||||
echo -e
|
|
||||||
echo -e
|
|
||||||
|
|
||||||
echo -e
|
|
||||||
echo -e "${TAB}${BOLD}$(translate "TROUBLESHOOTING:")${CL}"
|
|
||||||
echo -e
|
|
||||||
echo -e "${TAB}${BGN}$(translate "If upgrade fails:")${CL} ${YW}apt -f install${CL}"
|
|
||||||
echo -e "${TAB}${BGN}$(translate "If repositories error:")${CL} ${YW}Check /etc/apt/sources.list*${CL}"
|
|
||||||
echo -e "${TAB}${BGN}$(translate "If 'proxmox-ve' removal warning:")${CL} ${YW}Fix repository configuration (ensure PVE 9 repo active)${CL}"
|
|
||||||
echo -e "${TAB}${BGN}$(translate "Emergency recovery:")${CL} ${YW}Boot from rescue system${CL}"
|
|
||||||
echo -e
|
|
||||||
echo -e
|
|
||||||
|
|
||||||
echo -e
|
|
||||||
msg_success "$(translate "Press Enter to return to menu...")"
|
|
||||||
echo -e
|
|
||||||
read -r
|
|
||||||
clear
|
|
||||||
exit 0
|
|
||||||
#bash <(curl -fsSL "$REPO_URL/scripts/utilities/upgrade_pve8_to_pve9.sh")
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Main execution
|
|
||||||
show_proxmox_upgrade_manual_guide
|
|
@ -1,877 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# ==========================================================
|
|
||||||
# ProxMenuX - Upgrade PVE 8 → 9 (Simplified, per official guide)
|
|
||||||
# ==========================================================
|
|
||||||
# Author : MacRimi
|
|
||||||
# Copyright : (c) 2024 MacRimi
|
|
||||||
# License : MIT (https://raw.githubusercontent.com/MacRimi/ProxMenux/main/LICENSE)
|
|
||||||
# Version : 1.0
|
|
||||||
# Last Updated: 14/08/2025
|
|
||||||
# ==========================================================
|
|
||||||
|
|
||||||
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
|
|
||||||
BASE_DIR="/usr/local/share/proxmenux"
|
|
||||||
UTILS_FILE="$BASE_DIR/utils.sh"
|
|
||||||
|
|
||||||
|
|
||||||
if [[ -f "$UTILS_FILE" ]]; then
|
|
||||||
source "$UTILS_FILE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
load_language
|
|
||||||
initialize_cache
|
|
||||||
|
|
||||||
# ==========================================================
|
|
||||||
|
|
||||||
LOG="/var/log/pve8-a-pve9-$(date +%Y%m%d-%H%M%S).log"
|
|
||||||
: > "$LOG"
|
|
||||||
|
|
||||||
|
|
||||||
REPO_MODE="no-subscription"
|
|
||||||
DISABLE_AUDIT="1"
|
|
||||||
ASSUME_YES="0"
|
|
||||||
CEPH_ENFORCE="auto"
|
|
||||||
|
|
||||||
|
|
||||||
for arg in "$@"; do
|
|
||||||
case "$arg" in
|
|
||||||
--enterprise) REPO_MODE="enterprise" ;;
|
|
||||||
--no-subscription) REPO_MODE="no-subscription" ;;
|
|
||||||
--skip-audit-disable) DISABLE_AUDIT="0" ;;
|
|
||||||
--assume-yes|-y) ASSUME_YES="1" ;;
|
|
||||||
--ignore-ceph-check) CEPH_ENFORCE="skip" ;;
|
|
||||||
--warn-ceph-check) CEPH_ENFORCE="warn" ;;
|
|
||||||
*) ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# ==========================================================
|
|
||||||
|
|
||||||
|
|
||||||
run_manual_guide() {
|
|
||||||
local url="$REPO_URL/scripts/utilities/proxmox-upgrade-pve8-to-pve9-manual-guide.sh"
|
|
||||||
if command -v curl >/dev/null 2>&1; then
|
|
||||||
bash <(curl -fsSL "$url")
|
|
||||||
else
|
|
||||||
bash <(wget -qO- "$url")
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
ask_run_mode() {
|
|
||||||
|
|
||||||
if [[ "${ASSUME_YES:-0}" == "1" ]]; then
|
|
||||||
msg_ok "$(translate "Run mode: Unattended")"
|
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
|
||||||
export APT_LISTCHANGES_FRONTEND=none
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
if command -v dialog >/dev/null 2>&1; then
|
|
||||||
local title text choice status
|
|
||||||
title="$(translate "Select run mode")"; [[ -z "$title" ]] && title="Select run mode"
|
|
||||||
text="$(translate "Choose how to perform the upgrade:")"; [[ -z "$text" ]] && text="Choose how to perform the upgrade:"
|
|
||||||
title=${title//$'\r'/}; title=${title//$'\n'/' '}
|
|
||||||
text=${text//$'\r'/}; text=${text//$'\n'/' '}
|
|
||||||
|
|
||||||
choice=$(
|
|
||||||
dialog --backtitle "ProxMenux" \
|
|
||||||
--title "$title" \
|
|
||||||
--menu "$text" 17 78 3 \
|
|
||||||
1 "$(translate "Automatic/Unattended")" \
|
|
||||||
2 "$(translate "Interactive (guided, prompts visible)")" \
|
|
||||||
3 "$(translate "Manual upgrade guide step by step")" \
|
|
||||||
3>&1 1>&2 2>&3
|
|
||||||
); status=$?
|
|
||||||
|
|
||||||
|
|
||||||
if [[ $status -ne 0 ]]; then
|
|
||||||
show_proxmenux_logo || true
|
|
||||||
msg_warn "$(translate "Action canceled by user")"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$choice" in
|
|
||||||
1)
|
|
||||||
ASSUME_YES="1"
|
|
||||||
show_proxmenux_logo || true
|
|
||||||
msg_title "$(translate "Upgrade assistant: Proxmox VE 8 → 9 (Trixie)")"
|
|
||||||
msg_info2 "$(translate "Run mode selected: Unattended")"
|
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
|
||||||
export APT_LISTCHANGES_FRONTEND=none
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
3)
|
|
||||||
run_manual_guide
|
|
||||||
continue
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
show_proxmenux_logo || true
|
|
||||||
msg_title "$(translate "Upgrade assistant: Proxmox VE 8 → 9 (Trixie)")"
|
|
||||||
msg_info2 "$(translate "Run mode selected: Interactive")"
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
elif command -v whiptail >/dev/null 2>&1; then
|
|
||||||
local choice
|
|
||||||
if ! choice=$(
|
|
||||||
whiptail --title "$(translate "Select run mode")" \
|
|
||||||
--menu "$(translate "Choose how to perform the upgrade:")" 17 78 3 \
|
|
||||||
"1" "$(translate "Automatic/Unattended")" \
|
|
||||||
"2" "$(translate "Interactive (guided, prompts visible)")" \
|
|
||||||
"3" "$(translate "Manual upgrade guide step by step")" \
|
|
||||||
3>&1 1>&2 2>&3
|
|
||||||
); then
|
|
||||||
show_proxmenux_logo || true
|
|
||||||
msg_warn "$(translate "Action canceled by user")"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$choice" in
|
|
||||||
1)
|
|
||||||
ASSUME_YES="1"
|
|
||||||
show_proxmenux_logo || true
|
|
||||||
msg_title "$(translate "Upgrade assistant: Proxmox VE 8 → 9 (Trixie)")"
|
|
||||||
msg_info2 "$(translate "Run mode selected: Unattended")"
|
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
|
||||||
export APT_LISTCHANGES_FRONTEND=none
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
3)
|
|
||||||
run_manual_guide
|
|
||||||
continue
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
show_proxmenux_logo || true
|
|
||||||
msg_title "$(translate "Upgrade assistant: Proxmox VE 8 → 9 (Trixie)")"
|
|
||||||
msg_info2 "$(translate "Run mode selected: Interactive")"
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
else
|
|
||||||
printf "%s" "$(translate "Select run mode: [1]unattended / [2]interactive / [3]manual guide? (default: 2): ")"
|
|
||||||
read -r ans
|
|
||||||
case "$ans" in
|
|
||||||
1)
|
|
||||||
ASSUME_YES="1"
|
|
||||||
show_proxmenux_logo || true
|
|
||||||
msg_title "$(translate "Upgrade assistant: Proxmox VE 8 → 9 (Trixie)")"
|
|
||||||
msg_info2 "$(translate "Run mode selected: Unattended")"
|
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
|
||||||
export APT_LISTCHANGES_FRONTEND=none
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
3)
|
|
||||||
run_manual_guide
|
|
||||||
continue
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
show_proxmenux_logo || true
|
|
||||||
msg_title "$(translate "Upgrade assistant: Proxmox VE 8 → 9 (Trixie)")"
|
|
||||||
msg_info2 "$(translate "Run mode selected: Interactive")"
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ==========================================================
|
|
||||||
|
|
||||||
|
|
||||||
confirm() {
|
|
||||||
local prompt="$1"
|
|
||||||
if [[ "$ASSUME_YES" == "1" ]]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
if command -v whiptail >/dev/null 2>&1; then
|
|
||||||
whiptail --title "$(translate "Confirmation")" --yesno "$prompt" 14 80
|
|
||||||
else
|
|
||||||
echo -n "$(translate "$prompt") [y/N]: "
|
|
||||||
read -r ans
|
|
||||||
[[ "$ans" =~ ^[Yy]$ ]]
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
ask_choice_auto_or_manual() {
|
|
||||||
if [[ "$ASSUME_YES" == "1" ]]; then
|
|
||||||
echo "auto"; return 0
|
|
||||||
fi
|
|
||||||
if command -v whiptail >/dev/null 2>&1; then
|
|
||||||
if whiptail --title "$(translate "Cluster upgrade mode")" --yesno "$(translate "Pending upgrades detected on a clustered node.\n\nTo proceed safely, update this node to the latest Proxmox VE 8.x before switching to Trixie/PVE 9.\n\nSelect Yes for AUTOMATIC upgrade (recommended), or No for MANUAL instructions.")" 16 78; then
|
|
||||||
echo "auto"
|
|
||||||
else
|
|
||||||
echo "manual"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo -n "$(translate "Pending upgrades detected on a clustered node. Perform AUTOMATIC upgrade now? (y = automatic, n = manual): ")"
|
|
||||||
read -r ans
|
|
||||||
[[ "$ans" =~ ^[Yy]$ ]] && echo "auto" || echo "manual"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
run_step() {
|
|
||||||
|
|
||||||
local pre="$1"; local ok="$2"; local cmd="$3"
|
|
||||||
echo -ne "${TAB}${YW}$(translate "$pre")${CL}"
|
|
||||||
if bash -lc "set -o pipefail; $cmd 2>&1 | tee -a \"$LOG\""; then
|
|
||||||
echo -e "${BFR}${TAB}${CM}${GN}$(translate "$ok")${CL}"
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
echo -e "${BFR}${TAB}${RD}[ERROR] $(translate "Failed. See log:") $LOG${CL}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
run_step_interactive() {
|
|
||||||
|
|
||||||
local pre="$1"; local ok="$2"; shift 2
|
|
||||||
echo -ne "${TAB}${YW}$(translate "$pre")${CL}"
|
|
||||||
if "$@"; then
|
|
||||||
echo -e "${BFR}${TAB}${CM}${GN}$(translate "$ok")${CL}"
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
echo -e "${BFR}${TAB}${RD}[ERROR] $(translate "Failed. See log:") $LOG${CL}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
append_step() {
|
|
||||||
|
|
||||||
local pre="$1"; local ok="$2"; local cmd="$3"
|
|
||||||
echo -ne "${TAB}${YW}$(translate "$pre")${CL}"
|
|
||||||
if bash -lc "set -o pipefail; $cmd 2>&1 | tee -a \"$LOG\""; then
|
|
||||||
echo -e "${BFR}${TAB}${CM}${GN}$(translate "$ok")${CL}"
|
|
||||||
else
|
|
||||||
echo -e "${BFR}${TAB}${CM}${GN}$(translate "$ok")${CL}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
file_contains() {
|
|
||||||
local file="$1"
|
|
||||||
local pattern="$2"
|
|
||||||
grep -qE "$pattern" "$file" 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
is_cluster_node() {
|
|
||||||
if command -v pvecm >/dev/null 2>&1 && pvecm status >> "$LOG" 2>&1; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
is_hyperconverged_ceph_node() {
|
|
||||||
if command -v pveceph >/dev/null 2>&1; then
|
|
||||||
if pveceph status >> "$LOG" 2>&1; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if systemctl list-units --type=service --all 2>/dev/null | grep -Eq 'ceph-(mon|osd|mgr)@'; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
if ls /var/lib/ceph/osd/ceph-* >/dev/null 2>&1; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
if [[ -f /etc/pve/ceph.conf ]]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# ==========================================================
|
|
||||||
|
|
||||||
|
|
||||||
create_pve_repo_enterprise_if_missing() {
|
|
||||||
local f="/etc/apt/sources.list.d/pve-enterprise.sources"
|
|
||||||
[[ -f "$f" ]] && return 0
|
|
||||||
cat > "$f" << 'EOF'
|
|
||||||
Types: deb
|
|
||||||
URIs: https://enterprise.proxmox.com/debian/pve
|
|
||||||
Suites: trixie
|
|
||||||
Components: pve-enterprise
|
|
||||||
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
|
|
||||||
EOF
|
|
||||||
chmod 644 "$f"
|
|
||||||
}
|
|
||||||
|
|
||||||
create_pve_repo_nosub_if_missing() {
|
|
||||||
local f="/etc/apt/sources.list.d/proxmox.sources"
|
|
||||||
[[ -f "$f" ]] && return 0
|
|
||||||
cat > "$f" << 'EOF'
|
|
||||||
Types: deb
|
|
||||||
URIs: http://download.proxmox.com/debian/pve
|
|
||||||
Suites: trixie
|
|
||||||
Components: pve-no-subscription
|
|
||||||
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
|
|
||||||
EOF
|
|
||||||
chmod 644 "$f"
|
|
||||||
}
|
|
||||||
|
|
||||||
create_ceph_repo_enterprise_if_missing() {
|
|
||||||
local f="/etc/apt/sources.list.d/ceph.sources"
|
|
||||||
[[ -f "$f" ]] && return 0
|
|
||||||
cat > "$f" << 'EOF'
|
|
||||||
Types: deb
|
|
||||||
URIs: https://enterprise.proxmox.com/debian/ceph-squid
|
|
||||||
Suites: trixie
|
|
||||||
Components: enterprise
|
|
||||||
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
|
|
||||||
EOF
|
|
||||||
chmod 644 "$f"
|
|
||||||
}
|
|
||||||
|
|
||||||
create_ceph_repo_nosub_if_missing() {
|
|
||||||
local f="/etc/apt/sources.list.d/ceph.sources"
|
|
||||||
[[ -f "$f" ]] && return 0
|
|
||||||
cat > "$f" << 'EOF'
|
|
||||||
Types: deb
|
|
||||||
URIs: http://download.proxmox.com/debian/ceph-squid
|
|
||||||
Suites: trixie
|
|
||||||
Components: no-subscription
|
|
||||||
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
|
|
||||||
EOF
|
|
||||||
chmod 644 "$f"
|
|
||||||
}
|
|
||||||
|
|
||||||
disable_enterprise_repo_if_present() {
|
|
||||||
local s="/etc/apt/sources.list.d/pve-enterprise.sources"
|
|
||||||
local l="/etc/apt/sources.list.d/pve-enterprise.list"
|
|
||||||
if [[ -f "$s" ]]; then
|
|
||||||
if grep -qi '^Enabled:' "$s"; then
|
|
||||||
sed -i 's/^Enabled:.*/Enabled: false/i' "$s"
|
|
||||||
else
|
|
||||||
echo "Enabled: false" >> "$s"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [[ -f "$l" ]]; then
|
|
||||||
sed -i 's/^[[:space:]]*deb/# deb/' "$l"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
comment_legacy_pve8_lists() {
|
|
||||||
for f in /etc/apt/sources.list.d/pve-public-repo.list /etc/apt/sources.list.d/pve-install-repo.list; do
|
|
||||||
[[ -f "$f" ]] || continue
|
|
||||||
sed -i 's/^[[:space:]]*deb/# deb/' "$f" || true
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
comment_legacy_ceph_list() {
|
|
||||||
local f="/etc/apt/sources.list.d/ceph.list"
|
|
||||||
[[ -f "$f" ]] || return 0
|
|
||||||
sed -i 's/^[[:space:]]*deb/# deb/' "$f" || true
|
|
||||||
}
|
|
||||||
|
|
||||||
apt_update_with_repo_fallback() {
|
|
||||||
|
|
||||||
local output status
|
|
||||||
output="$(apt-get update >/dev/null 2>&1 | tee -a "$LOG")"; status=${PIPESTATUS[0]}
|
|
||||||
if [[ $status -eq 0 ]]; then
|
|
||||||
msg_ok2 "$(translate "APT indexes updated for Trixie")"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
if [[ "$REPO_MODE" == "enterprise" ]] && { echo "$output" | grep -qE '401[[:space:]]+Unauthorized' || echo "$output" | grep -qi 'enterprise\.proxmox\.com'; }; then
|
|
||||||
if [[ "$ASSUME_YES" == "1" ]] || confirm "$(translate "Enterprise repository returned 401 Unauthorized (no valid subscription). Switch to the no-subscription repository and retry?")"; then
|
|
||||||
|
|
||||||
disable_enterprise_repo_if_present
|
|
||||||
create_pve_repo_nosub_if_missing
|
|
||||||
if [[ -f /etc/apt/sources.list.d/ceph.sources ]]; then
|
|
||||||
create_ceph_repo_nosub_if_missing
|
|
||||||
fi
|
|
||||||
REPO_MODE="no-subscription"
|
|
||||||
msg_ok2 "$(translate "Repositories switched to no-subscription")"
|
|
||||||
|
|
||||||
if apt-get update >> "$LOG" >/dev/null 2>&1; then
|
|
||||||
msg_ok2 "$(translate "APT indexes updated for Trixie (no-subscription)")"
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
echo -e "${BFR}${TAB}${RD}[ERROR] $(translate "APT index update failed after switching to no-subscription. See log:") $LOG${CL}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo -e "${BFR}${TAB}${RD}[ERROR] $(translate "Enterprise repository unauthorized and fallback declined by user") $LOG${CL}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
echo -e "${BFR}${TAB}${RD}[ERROR] $(translate "APT index update failed. See log:") $LOG${CL}"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# ==========================================================
|
|
||||||
|
|
||||||
proxmox_repo_candidate_ok() {
|
|
||||||
local cand
|
|
||||||
cand="$(apt-cache policy proxmox-ve 2>/dev/null | awk -F': ' '/Candidate:/{print $2}')"
|
|
||||||
[[ -n "$cand" && "$cand" != "(none)" && "$cand" =~ ^9 ]]
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
simulate_would_remove_proxmox_ve() {
|
|
||||||
apt-get -s dist-upgrade >/dev/null 2>&1 | grep -Eq 'Remv[[:space:]]+proxmox-ve|The following packages will be REMOVED:.*proxmox-ve'
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
guard_against_proxmox_ve_removal() {
|
|
||||||
msg_info "$(translate "Validating Proxmox 9 repositories (checking 'proxmox-ve' candidate)...")"
|
|
||||||
if proxmox_repo_candidate_ok; then
|
|
||||||
msg_ok "$(translate "Proxmox repository OK (candidate is 9.x)")"
|
|
||||||
else
|
|
||||||
if [[ "$REPO_MODE" == "enterprise" ]]; then
|
|
||||||
msg_warn "$(translate "Proxmox enterprise repo might be missing or inaccessible. Trying to switch to no-subscription...")"
|
|
||||||
disable_enterprise_repo_if_present
|
|
||||||
create_pve_repo_nosub_if_missing
|
|
||||||
REPO_MODE="no-subscription"
|
|
||||||
apt_update_with_repo_fallback
|
|
||||||
if proxmox_repo_candidate_ok; then
|
|
||||||
msg_ok "$(translate "Proxmox repository fixed (no-subscription, candidate is 9.x)")"
|
|
||||||
else
|
|
||||||
msg_error "$(translate "Could not find a valid 'proxmox-ve' 9.x candidate after switching to no-subscription. Please verify your repository configuration and network, then retry.")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
msg_error "$(translate "Invalid 'proxmox-ve' candidate (not 9.x or none). Please verify your repository configuration and network, then retry.")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
msg_info "$(translate "Running pre-upgrade simulation to verify 'proxmox-ve' will remain installed...")"
|
|
||||||
if simulate_would_remove_proxmox_ve; then
|
|
||||||
msg_error "$(translate "Pre-upgrade check FAILED: the simulation shows that 'proxmox-ve' would be REMOVED.\n This indicates a repository or dependency issue and upgrading now could break your Proxmox installation.")"
|
|
||||||
echo "---- $(translate "Recommended diagnostic commands") ----"
|
|
||||||
echo "apt-cache policy proxmox-ve"
|
|
||||||
echo "apt policy | sed -n '1,120p'"
|
|
||||||
echo "cat /etc/apt/sources.list"
|
|
||||||
echo "ls -l /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
msg_ok "$(translate "Pre-upgrade simulation passed: 'proxmox-ve' will be kept or upgraded safely.")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# ==========================================================
|
|
||||||
|
|
||||||
|
|
||||||
check_not_web_terminal() {
|
|
||||||
[[ "${PVE_ALLOW_WEBTERM:-0}" = "1" ]] && return 0
|
|
||||||
|
|
||||||
[[ -n "${SSH_CONNECTION:-}" ]] && return 0
|
|
||||||
|
|
||||||
local pid ppid comm args i
|
|
||||||
pid=$$
|
|
||||||
|
|
||||||
show_web_terminal_block_msg() {
|
|
||||||
local title msg_line1 msg_line2 msg
|
|
||||||
|
|
||||||
title="$(translate "Unsupported Terminal")"
|
|
||||||
msg_line1="$(translate "This script cannot be executed from the Proxmox web terminal.")"
|
|
||||||
msg_line2="$(translate "Please use an SSH session (Linux, macOS, Windows/PuTTY) or a physical console to perform the upgrade.")"
|
|
||||||
|
|
||||||
msg="${msg_line1}"$'\n\n'"${msg_line2}"
|
|
||||||
|
|
||||||
whiptail --title "$title" --msgbox "$msg" 12 72
|
|
||||||
}
|
|
||||||
|
|
||||||
for i in {1..12}; do
|
|
||||||
ppid=$(ps -o ppid= -p "$pid" 2>/dev/null | tr -d ' ')
|
|
||||||
[[ -z "$ppid" || "$ppid" -le 1 ]] && break
|
|
||||||
|
|
||||||
comm=$(ps -o comm= -p "$ppid" 2>/dev/null || true)
|
|
||||||
args=$(ps -o args= -p "$ppid" 2>/dev/null || true)
|
|
||||||
|
|
||||||
if echo "$comm $args" | grep -Eqi 'termproxy|vncshell'; then
|
|
||||||
show_web_terminal_block_msg
|
|
||||||
msg_warn "$(translate "Upgrade canceled by user")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
pid="$ppid"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
ask_run_mode
|
|
||||||
|
|
||||||
check_not_web_terminal
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export NCURSES_NO_UTF8_ACS=1
|
|
||||||
|
|
||||||
show_upgrade_confirm() {
|
|
||||||
|
|
||||||
local title
|
|
||||||
title="$(translate "Upgrade to Proxmox VE 9")"
|
|
||||||
|
|
||||||
local intro req l1 l2 l3 l4 cont
|
|
||||||
intro="$(translate "This will upgrade this node to Proxmox VE 9 on Debian Trixie.")"
|
|
||||||
req="$(translate "REQUIREMENTS:")"
|
|
||||||
l1="$(translate "Valid backups for all VMs/CTs")"
|
|
||||||
l2="$(translate "Run from console, or SSH inside tmux/screen")"
|
|
||||||
l3="$(translate "Migrate away any guests that must keep running")"
|
|
||||||
l4=""
|
|
||||||
cont="$(translate "Continue?")"
|
|
||||||
|
|
||||||
|
|
||||||
local bullet="•"
|
|
||||||
if ! locale charmap 2>/dev/null | grep -qi 'utf-8'; then
|
|
||||||
bullet="-"
|
|
||||||
fi
|
|
||||||
|
|
||||||
local msg
|
|
||||||
msg="${intro}"$'\n\n'"${req}"$'\n'
|
|
||||||
msg+="${bullet} ${l1}"$'\n'
|
|
||||||
msg+="${bullet} ${l2}"$'\n'
|
|
||||||
msg+="${bullet} ${l3}"
|
|
||||||
|
|
||||||
[[ -n "$l4" ]] && msg+=$'\n'"${bullet} ${l4}"
|
|
||||||
msg+=$'\n\n'"${cont}"
|
|
||||||
|
|
||||||
local cols width height
|
|
||||||
cols=$(tput cols 2>/dev/null || echo 80)
|
|
||||||
width=$(( cols < 78 ? (cols>40?cols-2:40) : 78 ))
|
|
||||||
height=18
|
|
||||||
|
|
||||||
if whiptail --title "$title" --yesno "$msg" "$height" "$width"; then
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
msg_warn "$(translate "Upgrade canceled by user")"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
show_upgrade_confirm
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# Step 1
|
|
||||||
# ---------------------------
|
|
||||||
|
|
||||||
|
|
||||||
apt_upgrade() {
|
|
||||||
local pve_version
|
|
||||||
pve_version=$(pveversion 2>/dev/null | grep -oP 'pve-manager/\K[0-9]+' | head -1)
|
|
||||||
|
|
||||||
if [[ -z "$pve_version" ]]; then
|
|
||||||
msg_error "Unable to detect Proxmox version."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$pve_version" -ge 9 ]]; then
|
|
||||||
msg_info2 "$(translate "Proxmox 9 system update allready")"
|
|
||||||
msg_success "$(translate "Press Enter to return to menu...")"
|
|
||||||
read -r
|
|
||||||
exit 1
|
|
||||||
|
|
||||||
else
|
|
||||||
bash <(curl -fsSL "$REPO_URL/scripts/global/update-pve8.sh")
|
|
||||||
hash -r
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
apt_upgrade
|
|
||||||
|
|
||||||
run_pve8to9_check() {
|
|
||||||
local tmp
|
|
||||||
tmp="$(mktemp)"
|
|
||||||
echo -e
|
|
||||||
set -o pipefail
|
|
||||||
pve8to9 --full 2>&1 | tee -a "$LOG" | tee "$tmp"
|
|
||||||
local rc=${PIPESTATUS[0]}
|
|
||||||
|
|
||||||
local fails warns
|
|
||||||
fails=$(grep -c 'FAIL:' "$tmp" || true)
|
|
||||||
warns=$(grep -c 'WARN:' "$tmp" || true)
|
|
||||||
|
|
||||||
|
|
||||||
if (( fails > 0 )); then
|
|
||||||
echo -e
|
|
||||||
echo -e "${BFR}${RD}[ERROR] $(translate "Pre-check found") $fails $(translate "blocking issue(s).")\n$(translate "Please resolve the problem(s) as described above, then re-run the upgrade script.")${CL}"
|
|
||||||
echo -e
|
|
||||||
|
|
||||||
if grep -q 'systemd-boot meta-package installed' "$tmp"; then
|
|
||||||
echo -e
|
|
||||||
echo -e "$(translate "Fix: remove the conflicting meta-package:") apt remove systemd-boot"
|
|
||||||
echo -e
|
|
||||||
fi
|
|
||||||
msg_success "$(translate "Press Enter to exit and repair")"
|
|
||||||
read -r
|
|
||||||
rm -f "$tmp"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo -e
|
|
||||||
msg_ok "$(translate "Checklist pre-check finished. Warnings:") $warns"
|
|
||||||
rm -f "$tmp"
|
|
||||||
return $rc
|
|
||||||
}
|
|
||||||
|
|
||||||
run_pve8to9_check
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# Step 2
|
|
||||||
# ---------------------------
|
|
||||||
|
|
||||||
run_step \
|
|
||||||
"" \
|
|
||||||
"Connectivity to Proxmox repository OK" \
|
|
||||||
"ping -c1 -W2 download.proxmox.com >/dev/null"
|
|
||||||
|
|
||||||
|
|
||||||
msg_info "$(translate "Checking free space in /var/cache/apt/archives...")"
|
|
||||||
FREE_MB=$(df /var/cache/apt/archives | awk 'NR==2 {print int($4/1024)}')
|
|
||||||
if [[ "${FREE_MB:-0}" -lt 1024 ]]; then
|
|
||||||
msg_error "$(translate "Insufficient space:") ${FREE_MB}MB $(translate "(need ≥ 1024MB)")"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
msg_ok "$(translate "Free space OK:") ${FREE_MB}MB"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [[ "$DISABLE_AUDIT" == "1" ]]; then
|
|
||||||
append_step \
|
|
||||||
"" \
|
|
||||||
"Audit socket disabled or not required" \
|
|
||||||
"systemctl disable --now systemd-journald-audit.socket >/dev/null 2>&1 || true"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# Step 3
|
|
||||||
# ---------------------------
|
|
||||||
|
|
||||||
if command -v ceph >/dev/null 2>&1; then
|
|
||||||
if [[ "$CEPH_ENFORCE" == "skip" ]]; then
|
|
||||||
msg_ok2 "$(translate "Ceph check skipped by user flag (--ignore-ceph-check)")"
|
|
||||||
else
|
|
||||||
if is_hyperconverged_ceph_node; then
|
|
||||||
msg_info "$(translate "Ceph detected as hyper-converged on this node. Checking version (require 19.x Squid)...")"
|
|
||||||
CEPH_V=$(ceph --version 2>/dev/null | head -1 || true)
|
|
||||||
if echo "$CEPH_V" | grep -Eq 'ceph.*(version 19|squid)'; then
|
|
||||||
msg_ok "$(translate "Ceph version OK:") $CEPH_V"
|
|
||||||
else
|
|
||||||
if [[ "$CEPH_ENFORCE" == "warn" ]]; then
|
|
||||||
msg_warn "$(translate "Ceph is not 19.x (Squid). Proceeding due to --warn-ceph-check. Detected:") ${CEPH_V:-N/A}"
|
|
||||||
else
|
|
||||||
msg_error "$(translate "Ceph is not 19.x (Squid). Upgrade Ceph first. Detected:") ${CEPH_V:-N/A}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
CEPH_V=$(ceph --version 2>/dev/null | head -1 || true)
|
|
||||||
echo -e "${BFR}${TAB}${CM}${GN}${CEPH_V:-N/A}${CL}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# Step 4
|
|
||||||
# ---------------------------
|
|
||||||
|
|
||||||
OS_FILE="/etc/apt/sources.list"
|
|
||||||
if [[ -f "$OS_FILE" ]]; then
|
|
||||||
msg_info "$(translate "Updating Debian Bookworm → Trixie in sources.list...")"
|
|
||||||
if sed -i 's/bookworm/trixie/g' "$OS_FILE"; then
|
|
||||||
msg_ok "$(translate "sources.list updated to Trixie")"
|
|
||||||
else
|
|
||||||
msg_ok "$(translate "sources.list update skipped (no change)")"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
msg_ok "$(translate "No main sources.list present (skipped)")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
PVE_ENT_LIST="/etc/apt/sources.list.d/pve-enterprise.list"
|
|
||||||
msg_info "$(translate "Updating pve-enterprise.list (if present) to Trixie...")"
|
|
||||||
if [[ -f "$PVE_ENT_LIST" ]]; then
|
|
||||||
if sed -i 's/bookworm/trixie/g' "$PVE_ENT_LIST"; then
|
|
||||||
msg_ok "$(translate "pve-enterprise.list updated to Trixie")"
|
|
||||||
else
|
|
||||||
msg_ok "$(translate "pve-enterprise.list update skipped (no change)")"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
msg_ok "$(translate "No pve-enterprise.list present (skipped)")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
msg_info "$(translate "Commenting any residual Bookworm lines in *.list...")"
|
|
||||||
for f in /etc/apt/sources.list.d/*.list; do
|
|
||||||
[[ -f "$f" ]] || continue
|
|
||||||
sed -i '/bookworm/s/^/# /' "$f" || true
|
|
||||||
done
|
|
||||||
sed -i '/bookworm/s/^/# /' "$OS_FILE" 2>/dev/null || true
|
|
||||||
msg_ok "$(translate "Residual Bookworm entries commented where applicable")"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# Step 5
|
|
||||||
# ---------------------------
|
|
||||||
|
|
||||||
if [[ "$REPO_MODE" == "enterprise" ]]; then
|
|
||||||
msg_info "$(translate "Ensuring pve-enterprise.sources (PVE 9, deb822) is present...")"
|
|
||||||
create_pve_repo_enterprise_if_missing
|
|
||||||
msg_ok "$(translate "Enterprise repository present")"
|
|
||||||
else
|
|
||||||
msg_info "$(translate "Ensuring proxmox.sources (PVE 9, no-subscription, deb822) is present...")"
|
|
||||||
create_pve_repo_nosub_if_missing
|
|
||||||
msg_ok "$(translate "No-subscription repository present")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
msg_info "$(translate "Commenting legacy PVE 8 repository .list files (if any)...")"
|
|
||||||
comment_legacy_pve8_lists
|
|
||||||
msg_ok "$(translate "Legacy PVE 8 .list files commented or not present")"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# Step 6
|
|
||||||
# ---------------------------
|
|
||||||
|
|
||||||
if command -v ceph >/dev/null 2>&1; then
|
|
||||||
if [[ "$REPO_MODE" == "enterprise" ]]; then
|
|
||||||
msg_info "$(translate "Ensuring ceph.sources (enterprise, Trixie) is present...")"
|
|
||||||
create_ceph_repo_enterprise_if_missing
|
|
||||||
msg_ok "$(translate "Ceph enterprise repository present")"
|
|
||||||
else
|
|
||||||
msg_info "$(translate "Ensuring ceph.sources (no-subscription, Trixie) is present...")"
|
|
||||||
create_ceph_repo_nosub_if_missing
|
|
||||||
msg_ok "$(translate "Ceph no-subscription repository present")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "$(translate "Commenting legacy ceph.list (if present)...")"
|
|
||||||
comment_legacy_ceph_list
|
|
||||||
msg_ok "$(translate "Legacy ceph.list commented or not present")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# Step 7
|
|
||||||
# ---------------------------
|
|
||||||
|
|
||||||
apt_update_with_repo_fallback
|
|
||||||
|
|
||||||
run_step \
|
|
||||||
"" \
|
|
||||||
"Repository verification completed (see log)" \
|
|
||||||
"apt policy >/dev/null 2>&1"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# Step 8
|
|
||||||
# ---------------------------
|
|
||||||
|
|
||||||
guard_against_proxmox_ve_removal
|
|
||||||
|
|
||||||
disable_translation_post_upgrade() {
|
|
||||||
translate() { echo "$1"; }
|
|
||||||
}
|
|
||||||
disable_translation_post_upgrade
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ==========================================================
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# Step 9
|
|
||||||
# ---------------------------
|
|
||||||
|
|
||||||
if [[ "$ASSUME_YES" == "1" ]]; then
|
|
||||||
run_step \
|
|
||||||
"" \
|
|
||||||
"System upgraded to Trixie/PVE 9" \
|
|
||||||
"DEBIAN_FRONTEND=noninteractive APT_LISTCHANGES_FRONTEND=none apt-get -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' dist-upgrade"
|
|
||||||
else
|
|
||||||
run_step_interactive \
|
|
||||||
"" \
|
|
||||||
"System upgraded to Trixie/PVE 9" \
|
|
||||||
bash -lc "apt-get dist-upgrade"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ==========================================================
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# Step 10
|
|
||||||
# ---------------------------
|
|
||||||
if [[ -d /sys/firmware/efi ]]; then
|
|
||||||
if [[ "$ASSUME_YES" == "1" ]]; then
|
|
||||||
append_step \
|
|
||||||
"Installing grub-efi-amd64" \
|
|
||||||
"grub-efi-amd64 installed or already present" \
|
|
||||||
"apt-get install -y grub-efi-amd64 >/dev/null 2>&1"
|
|
||||||
else
|
|
||||||
run_step \
|
|
||||||
"Installing grub-efi-amd64" \
|
|
||||||
"grub-efi-amd64 installed or already present" \
|
|
||||||
"apt-get install grub-efi-amd64 >/dev/null 2>&1"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if command -v pve8to9 >/dev/null 2>&1; then
|
|
||||||
sleep 2
|
|
||||||
append_step \
|
|
||||||
"" \
|
|
||||||
"Checklist post-upgrade finished" \
|
|
||||||
"pve8to9 --full"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo "════════════════════════════════════════════════════════════════"
|
|
||||||
echo " UPGRADE TO PVE 9 COMPLETED (reboot required) "
|
|
||||||
echo "════════════════════════════════════════════════════════════════"
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
|
|
||||||
msg_success "$(translate "Press Enter to continue...")"
|
|
||||||
read -r
|
|
||||||
if confirm "It is RECOMMENDED to reboot now to load the new kernel and services.\n\nReboot now?"; then
|
|
||||||
echo -e
|
|
||||||
msg_warn "$(translate "Rebooting the system...")"
|
|
||||||
echo -e
|
|
||||||
reboot
|
|
||||||
else
|
|
||||||
msg_info2 "$(translate "You can reboot later manually.")"
|
|
||||||
echo -e
|
|
||||||
msg_success "$(translate "Press Enter to exit")"
|
|
||||||
read -r
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
@ -52,7 +52,8 @@ NEON_PURPLE_BLUE="\033[38;5;99m"
|
|||||||
WHITE="\033[38;5;15m"
|
WHITE="\033[38;5;15m"
|
||||||
RESET="\033[0m"
|
RESET="\033[0m"
|
||||||
DARK_GRAY="\033[38;5;244m"
|
DARK_GRAY="\033[38;5;244m"
|
||||||
ORANGE="\033[38;5;208m"
|
DARK_GRAY="\033[38;5;244m"
|
||||||
|
DARK_GRAY="\033[38;5;244m"
|
||||||
YW="\033[33m"
|
YW="\033[33m"
|
||||||
YWB="\033[1;33m"
|
YWB="\033[1;33m"
|
||||||
GN="\033[1;92m"
|
GN="\033[1;92m"
|
||||||
@ -136,12 +137,6 @@ msg_info2() {
|
|||||||
echo -e "${TAB}${BOLD}${YW}${HOLD}${msg}${CL}"
|
echo -e "${TAB}${BOLD}${YW}${HOLD}${msg}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Display info message with spinner
|
|
||||||
msg_info3() {
|
|
||||||
local msg="$1"
|
|
||||||
echo -ne "${TAB}${YW}${HOLD}${msg}${CL}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display success message
|
# Display success message
|
||||||
msg_success() {
|
msg_success() {
|
||||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then
|
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then
|
||||||
@ -170,7 +165,7 @@ msg_warn() {
|
|||||||
fi
|
fi
|
||||||
printf "\e[?25h"
|
printf "\e[?25h"
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -e "${BFR}${TAB}${CL} ${YWB}${msg}${CL}"
|
echo -e "${BFR}${TAB}${NV}${CL} ${YWB}${msg}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -184,12 +179,6 @@ msg_ok() {
|
|||||||
echo -e "${BFR}${TAB}${CM}${GN}${msg}${CL}"
|
echo -e "${BFR}${TAB}${CM}${GN}${msg}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
msg_ok2() {
|
|
||||||
printf "\e[?25h"
|
|
||||||
local msg="$1"
|
|
||||||
echo -e "${BFR}${TAB}${CM}${GN}${msg}${CL}"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Display error message
|
# Display error message
|
||||||
msg_error() {
|
msg_error() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user