Update update-pve9_2.sh

This commit is contained in:
MacRimi
2025-11-28 17:31:32 +01:00
parent b33f313e2e
commit e6232be244

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# ========================================================== # ==========================================================
# Proxmox VE Update Script - Improved Version # Proxmox VE Update Script - Improved Version (with apt progress)
# ========================================================== # ==========================================================
# Configuration # Configuration
@@ -36,11 +36,14 @@ download_common_functions() {
} }
update_pve9() { update_pve9() {
local pve_version=$(pveversion | awk -F'/' '{print $2}' | cut -d'-' -f1) local pve_version
local start_time=$(date +%s) pve_version=$(pveversion | awk -F'/' '{print $2}' | cut -d'-' -f1)
local start_time
start_time=$(date +%s)
local log_file="/var/log/proxmox-update-$(date +%Y%m%d-%H%M%S).log" local log_file="/var/log/proxmox-update-$(date +%Y%m%d-%H%M%S).log"
local changes_made=false local changes_made=false
local OS_CODENAME="$(grep "VERSION_CODENAME=" /etc/os-release | cut -d"=" -f 2 | xargs)" local OS_CODENAME
OS_CODENAME="$(grep "VERSION_CODENAME=" /etc/os-release | cut -d"=" -f 2 | xargs)"
local TARGET_CODENAME="trixie" local TARGET_CODENAME="trixie"
local screen_capture="/tmp/proxmenux_screen_capture_$$.txt" local screen_capture="/tmp/proxmenux_screen_capture_$$.txt"
@@ -56,7 +59,8 @@ update_pve9() {
} | tee -a "$screen_capture" } | tee -a "$screen_capture"
local available_space=$(df /var/cache/apt/archives | awk 'NR==2 {print int($4/1024)}') local available_space
available_space=$(df /var/cache/apt/archives | awk 'NR==2 {print int($4/1024)}')
if [ "$available_space" -lt 1024 ]; then if [ "$available_space" -lt 1024 ]; then
msg_error "$(translate "Insufficient disk space. Available: ${available_space}MB")" msg_error "$(translate "Insufficient disk space. Available: ${available_space}MB")"
echo -e echo -e
@@ -163,7 +167,6 @@ EOF
# Handle common apt errors # Handle common apt errors
if echo "$update_output" | grep -Eq "NO_PUBKEY|GPG error"; then if echo "$update_output" | grep -Eq "NO_PUBKEY|GPG error"; then
# Extract first missing key (NO_PUBKEY ABCDEF... pattern) # Extract first missing key (NO_PUBKEY ABCDEF... pattern)
key=$(echo "$update_output" | sed -n 's/.*NO_PUBKEY \([0-9A-F]\{8,40\}\).*/\1/p' | head -1) key=$(echo "$update_output" | sed -n 's/.*NO_PUBKEY \([0-9A-F]\{8,40\}\).*/\1/p' | head -1)
@@ -203,17 +206,18 @@ EOF
fi fi
fi fi
if apt policy 2>/dev/null | grep -q "${TARGET_CODENAME}.*pve-no-subscription"; then if apt policy 2>/dev/null | grep -q "${TARGET_CODENAME}.*pve-no-subscription"; then
msg_ok "$(translate "Proxmox VE $pve_version repositories verified")" | tee -a "$screen_capture" msg_ok "$(translate "Proxmox VE $pve_version repositories verified")" | tee -a "$screen_capture"
else else
msg_warn "$(translate "Proxmox VE $pve_version repositories verification inconclusive, continuing...")" msg_warn "$(translate "Proxmox VE $pve_version repositories verification inconclusive, continuing...")"
fi fi
local current_pve_version=$(pveversion 2>/dev/null | grep -oP 'pve-manager/\K[0-9]+\.[0-9]+\.[0-9]+' | head -1) local current_pve_version
local available_pve_version=$(apt-cache policy pve-manager 2>/dev/null | grep -oP 'Candidate: \K[0-9]+\.[0-9]+\.[0-9]+' | head -1) current_pve_version=$(pveversion 2>/dev/null | grep -oP 'pve-manager/\K[0-9]+\.[0-9]+\.[0-9]+' | head -1)
local available_pve_version
available_pve_version=$(apt-cache policy pve-manager 2>/dev/null | grep -oP 'Candidate: \K[0-9]+\.[0-9]+\.[0-9]+' | head -1)
# ===== NUEVA LÓGICA INDEPENDIENTE DEL IDIOMA =====
local upgradable local upgradable
upgradable=$($APT_ENV apt list --upgradable 2>/dev/null \ upgradable=$($APT_ENV apt list --upgradable 2>/dev/null \
| sed '1d' \ | sed '1d' \
@@ -224,7 +228,7 @@ EOF
security_updates=$($APT_ENV apt list --upgradable 2>/dev/null \ security_updates=$($APT_ENV apt list --upgradable 2>/dev/null \
| sed '1d' \ | sed '1d' \
| grep -ci '\-security') | grep -ci '\-security')
# ===== FIN NUEVA LÓGICA =====
show_update_menu() { show_update_menu() {
local current_version="$1" local current_version="$1"
@@ -232,7 +236,8 @@ EOF
local upgradable_count="$3" local upgradable_count="$3"
local security_count="$4" local security_count="$4"
local menu_text="$(translate "System Update Information")\n\n" local menu_text
menu_text="$(translate "System Update Information")\n\n"
menu_text+="$(translate "Current PVE Version"): $current_version\n" menu_text+="$(translate "Current PVE Version"): $current_version\n"
if [ -n "$target_version" ] && [ "$target_version" != "$current_version" ]; then if [ -n "$target_version" ] && [ "$target_version" != "$current_version" ]; then
menu_text+="$(translate "Available PVE Version"): $target_version\n" menu_text+="$(translate "Available PVE Version"): $target_version\n"
@@ -262,7 +267,6 @@ EOF
msg_title "$(translate "$SCRIPT_TITLE")" msg_title "$(translate "$SCRIPT_TITLE")"
cat "$screen_capture" cat "$screen_capture"
if [[ $MENU_RESULT -eq 1 ]]; then if [[ $MENU_RESULT -eq 1 ]]; then
msg_info2 "$(translate "Update cancelled by user")" msg_info2 "$(translate "Update cancelled by user")"
apt-get -y autoremove > /dev/null 2>&1 || true apt-get -y autoremove > /dev/null 2>&1 || true
@@ -285,12 +289,14 @@ EOF
fi fi
echo -e echo -e
DEBIAN_FRONTEND=noninteractive apt-get -y \
DEBIAN_FRONTEND=noninteractive apt -y \
-o Dpkg::Options::='--force-confdef' \ -o Dpkg::Options::='--force-confdef' \
-o Dpkg::Options::='--force-confold' \ -o Dpkg::Options::='--force-confold' \
dist-upgrade 2>&1 | tee -a "$log_file" full-upgrade 2> >(tee -a "$log_file" >&2)
upgrade_exit_code=${PIPESTATUS[0]} upgrade_exit_code=$?
echo -e echo -e
clear clear
@@ -298,7 +304,6 @@ EOF
msg_title "$(translate "$SCRIPT_TITLE")" msg_title "$(translate "$SCRIPT_TITLE")"
cat "$screen_capture" cat "$screen_capture"
if [ $upgrade_exit_code -ne 0 ]; then if [ $upgrade_exit_code -ne 0 ]; then
msg_error "$(translate "System upgrade failed. Check log: $log_file")" msg_error "$(translate "System upgrade failed. Check log: $log_file")"
rm -f "$screen_capture" rm -f "$screen_capture"
@@ -321,7 +326,8 @@ EOF
apt-get -y autoclean > /dev/null 2>&1 || true apt-get -y autoclean > /dev/null 2>&1 || true
msg_ok "$(translate "Cleanup finished")" msg_ok "$(translate "Cleanup finished")"
local end_time=$(date +%s) local end_time
end_time=$(date +%s)
local duration=$((end_time - start_time)) local duration=$((end_time - start_time))
local minutes=$((duration / 60)) local minutes=$((duration / 60))
local seconds=$((duration % 60)) local seconds=$((duration % 60))