<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Archiwa Proxmox - soban</title>
	<atom:link href="https://soban.pl/pl/category/proxmox-pl/feed/" rel="self" type="application/rss+xml" />
	<link>https://soban.pl/pl/category/proxmox-pl/</link>
	<description>IT, Linux, Servers, Security</description>
	<lastBuildDate>Tue, 24 Feb 2026 11:11:53 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>
	<item>
		<title>Debian 13 (Trixie) → Proxmox VE 9 – Uproszczona instalacja na czystym Debianie</title>
		<link>https://soban.pl/pl/instalacja-proxmox-ve-9-debian-13-trixie/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Mon, 23 Feb 2026 16:26:05 +0000</pubDate>
				<category><![CDATA[Proxmox]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=733</guid>

					<description><![CDATA[<p>Proxmox VE 9 bazuje na Debianie 13 (Trixie) i wprowadza nowsze jądro systemu, zaktualizowane LXC, QEMU oraz ulepszony stos wirtualizacji. Ten poradnik przedstawia uproszczoną i zautomatyzowaną metodę instalacji Proxmox VE 9 na czystym systemie Debian 13 przy użyciu dwóch skryptów instalacyjnych. Metoda opiera się na tym samym podejściu, co mój wcześniejszy poradnik instalacji Proxmox 8 [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/pl/instalacja-proxmox-ve-9-debian-13-trixie/">Debian 13 (Trixie) → Proxmox VE 9 – Uproszczona instalacja na czystym Debianie</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large is-resized"><img fetchpriority="high" decoding="async" width="1024" height="680" src="https://soban.pl/wp-content/uploads/2026/02/image-2-1024x680.png" alt="" class="wp-image-727" style="width:593px;height:auto" srcset="https://soban.pl/wp-content/uploads/2026/02/image-2-1024x680.png 1024w, https://soban.pl/wp-content/uploads/2026/02/image-2-300x199.png 300w, https://soban.pl/wp-content/uploads/2026/02/image-2-768x510.png 768w, https://soban.pl/wp-content/uploads/2026/02/image-2.png 1118w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Proxmox VE 9 bazuje na Debianie 13 (Trixie) i wprowadza nowsze jądro systemu, zaktualizowane LXC, QEMU oraz ulepszony stos wirtualizacji. Ten poradnik przedstawia uproszczoną i zautomatyzowaną metodę instalacji Proxmox VE 9 na czystym systemie Debian 13 przy użyciu dwóch skryptów instalacyjnych.</p>



<p>Metoda opiera się na tym samym podejściu, co mój wcześniejszy poradnik instalacji Proxmox 8 na Debianie 12, ale została dostosowana do Debiana 13 oraz Proxmox VE 9.</p>



<h2 class="wp-block-heading">Wymagania wstępne</h2>



<ul class="wp-block-list">
<li>Świeża instalacja Debian 13 (Trixie)</li>



<li>Dostęp root</li>



<li>Połączenie z Internetem</li>
</ul>



<p>Wszystkie polecenia należy wykonywać jako użytkownik root.</p>



<h2 class="wp-block-heading">Część 1 – Przygotowanie systemu i instalacja jądra Proxmox</h2>



<p>Pobierz pierwszy skrypt:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">wget http://soban.pl/bash/install-proxmox9-part1.sh
chmod +x install-proxmox9-part1.sh
./install-proxmox9-part1.sh</pre></div>



<p>Ten skrypt:</p>



<ul class="wp-block-list">
<li>Ustawia hostname i aktualizuje plik /etc/hosts</li>



<li>Instaluje keyring archiwum Proxmox (weryfikowany przez SHA512)</li>



<li>Dodaje repozytorium Proxmox VE 9 dla Debian 13</li>



<li>Wykonuje pełną aktualizację systemu</li>



<li>Instaluje proxmox-default-kernel</li>



<li>Restartuje system</li>
</ul>



<h3 class="wp-block-heading">Zawartość install-proxmox9-part1.sh</h3>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">#!/usr/bin/env bash
set -euo pipefail

# Part 1/2: Debian 13 (Trixie) -> Proxmox VE 9
# - sets /etc/hosts
# - adds PVE repo + installs Proxmox archive keyring (verified by SHA512)
# - full-upgrade
# - installs proxmox-default-kernel
# - reboots

log() { echo "[$(date '+%F %T')] $*"; }
die() { echo "ERROR: $*" >&2; exit 1; }

if [[ "$(id -u)" -ne 0 ]]; then
  die "Run as root."
fi

log "=== Proxmox VE 9 install (part 1/2) on Debian 13 Trixie ==="

if ! grep -qi 'trixie' /etc/os-release; then
  log "WARNING: This does not look like Debian 13 (Trixie). Continue at your own risk."
fi

log "Network interfaces (for reference):"
ip -br -c a || true

CURRENT_HOSTNAME="$(hostname)"
CURRENT_IP="$(hostname -I | awk '{print $1}')"

read -r -p "Hostname for this node [${CURRENT_HOSTNAME}]: " HOSTNAME
HOSTNAME="${HOSTNAME:-$CURRENT_HOSTNAME}"

read -r -p "Primary IP for /etc/hosts [${CURRENT_IP}]: " IPADDR
IPADDR="${IPADDR:-$CURRENT_IP}"

if [[ -z "${HOSTNAME}" || -z "${IPADDR}" ]]; then
  die "Hostname/IP cannot be empty."
fi

log "Setting hostname to: ${HOSTNAME}"
hostnamectl set-hostname "${HOSTNAME}"

log "Backing up /etc/hosts -> /etc/hosts.backup"
cp -a /etc/hosts /etc/hosts.backup

log "Writing /etc/hosts (makes hostname resolvable locally)"
cat > /etc/hosts <<EOT
127.0.0.1       localhost
${IPADDR}       ${HOSTNAME}

# IPv6
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
EOT

log "Installing prerequisites"
apt update
apt install -y wget ca-certificates gnupg

log "Installing Proxmox archive keyring to /usr/share/keyrings/proxmox-archive-keyring.gpg"
KEYRING="/usr/share/keyrings/proxmox-archive-keyring.gpg"
wget -q https://enterprise.proxmox.com/debian/proxmox-release-trixie.gpg -O "${KEYRING}"

log "Verifying SHA512 of keyring"
EXPECTED_SHA512="8678f2327c49276615288d7ca11e7d296bc8a2b96946fe565a9c81e533f9b15a5dbbad210a0ad5cd46d361ff1d3c4bac55844bc296beefa4f88b86e44e69fa51"
ACTUAL_SHA512="$(sha512sum "${KEYRING}" | awk '{print $1}')"

if [[ "${ACTUAL_SHA512}" != "${EXPECTED_SHA512}" ]]; then
  die "Keyring SHA512 mismatch!
Expected: ${EXPECTED_SHA512}
Actual:   ${ACTUAL_SHA512}"
fi

log "Adding Proxmox VE 9 no-subscription repo (Trixie)"
cat > /etc/apt/sources.list.d/pve-install-repo.list <<EOT
deb [arch=amd64 signed-by=/usr/share/keyrings/proxmox-archive-keyring.gpg] http://download.proxmox.com/debian/pve trixie pve-no-subscription
EOT

log "Updating + full-upgrade"
apt update
apt full-upgrade -y

log "Installing Proxmox kernel meta-package: proxmox-default-kernel"
apt install -y proxmox-default-kernel

log "Part 1 done. Rebooting now. After reboot run: ./install-proxmox9-part2.sh"
reboot</pre></div>



<h2 class="wp-block-heading">Część 2 – Instalacja Proxmox VE 9</h2>



<p>Po restarcie pobierz i uruchom:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">wget http://soban.pl/bash/install-proxmox9-part2.sh
chmod +x install-proxmox9-part2.sh
./install-proxmox9-part2.sh</pre></div>



<h3 class="wp-block-heading">Zawartość install-proxmox9-part2.sh</h3>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">#!/usr/bin/env bash
set -euo pipefail

# Part 2/2: Debian 13 (Trixie) -> Proxmox VE 9
# - verifies running PVE kernel (unless FORCE=1)
# - installs proxmox-ve + required packages
# - removes Debian kernel packages (keeps pve)
# - updates grub
# - removes os-prober
# - prints URL to GUI

log() { echo "[$(date '+%F %T')] $*"; }
die() { echo "ERROR: $*" >&2; exit 1; }

FORCE="${FORCE:-0}"

if [[ "$(id -u)" -ne 0 ]]; then
  die "Run as root."
fi

log "=== Proxmox VE 9 install (part 2/2) ==="

KERNEL="$(uname -r || true)"
if ! echo "${KERNEL}" | grep -qi 'pve'; then
  if [[ "${FORCE}" != "1" ]]; then
    die "You are NOT running a PVE kernel (uname -r: ${KERNEL}).
Reboot and select the Proxmox kernel first.
If you really want to continue anyway: FORCE=1 ./install-proxmox9-part2.sh"
  else
    log "WARNING: Continuing despite not running PVE kernel because FORCE=1"
  fi
else
  log "OK: running PVE kernel: ${KERNEL}"
fi

log "Update package lists"
apt update

log "Install Proxmox VE packages"
DEBIAN_FRONTEND=readline apt install -y proxmox-ve postfix open-iscsi chrony

log "Upgrade remaining packages"
apt full-upgrade -y

log "Removing Debian kernel meta-package and non-PVE kernels (best-effort)"
apt remove -y linux-image-amd64 || true

mapfile -t KPKGS < <(dpkg -l | awk '/^ii  linux-image-/{print $2}' | grep -vE 'pve|proxmox' || true)
if (( ${#KPKGS[@]} > 0 )); then
  log "Purging non-PVE kernel packages: ${KPKGS[*]}"
  apt purge -y "${KPKGS[@]}" || true
fi

log "Update grub"
update-grub || true

log "Remove os-prober (recommended for servers; avoids odd grub side effects)"
apt remove -y os-prober || true

log "Done. Proxmox UI should be available at:"
IP="$(hostname -I | awk '{print $1}')"
echo "https://${IP}:8006"

log "Login: root + your root password"</pre></div>



<h2 class="wp-block-heading">Dostęp do interfejsu webowego</h2>



<p>Po zakończeniu działania drugiego skryptu otwórz:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">https://YOUR_SERVER_IP:8006</pre></div>



<p>Zaloguj się użytkownikiem <strong>root</strong> oraz swoim hasłem roota. Możesz zobaczyć ostrzeżenie o certyfikacie — jest to normalne przy świeżych instalacjach.</p>



<h2 class="wp-block-heading">Rozwiązywanie problemów – błąd 401 Unauthorized (repozytorium pve-enterprise)</h2>



<p>Jeśli po instalacji lub podczas wykonywania <code>apt update</code> pojawi się następujący błąd:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">Err:8 https://enterprise.proxmox.com/debian/pve trixie InRelease
  401  Unauthorized [IP: 2001:41d0:b00:5900::34 443]
Error: Failed to fetch https://enterprise.proxmox.com/debian/pve/dists/trixie/InRelease  401  Unauthorized
Error: The repository 'https://enterprise.proxmox.com/debian/pve trixie InRelease' is not signed.
Notice: Updating from such a repository can't be done securely, and is therefore disabled by default.</pre></div>



<p>Oznacza to, że aktywne jest <strong>repozytorium enterprise</strong>, ale system nie posiada ważnej subskrypcji Proxmox.  
W tym poradniku korzystamy z repozytorium <em>pve-no-subscription</em>, więc należy wyłączyć repozytorium enterprise.</p>



<p>Naprawa jest bardzo prosta – wykonaj:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">mv /etc/apt/sources.list.d/pve-enterprise.sources \
   /etc/apt/sources.list.d/pve-enterprise.sources.disabled

apt update</pre></div>



<p>Po wyłączeniu repozytorium aktualizacja powinna zakończyć się poprawnie:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">apt update && apt dist-upgrade -y && apt autoremove -y</pre></div>



<p>Jeśli wszystko jest w porządku, zobaczysz komunikat:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">All packages are up to date.</pre></div>



<h2 class="wp-block-heading">Podsumowanie</h2>



<p>Ta metoda zapewnia czysty i kontrolowany sposób wdrożenia Proxmox VE 9 bezpośrednio na Debianie 13, bez używania instalatora ISO. Jest szczególnie przydatna w środowiskach zautomatyzowanych, laboratoriach oraz niestandardowych konfiguracjach infrastruktury.</p>
<p>Artykuł <a href="https://soban.pl/pl/instalacja-proxmox-ve-9-debian-13-trixie/">Debian 13 (Trixie) → Proxmox VE 9 – Uproszczona instalacja na czystym Debianie</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Proxmox Automatyczne aktualizacje VM (qm + vzdump) z testami sieci i auto-przywracaniem</title>
		<link>https://soban.pl/pl/proxmox-vm-auto-upgrade-script-2/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 16:02:07 +0000</pubDate>
				<category><![CDATA[Patching]]></category>
		<category><![CDATA[Proxmox]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=683</guid>

					<description><![CDATA[<p>Proxmox: Automatyczne aktualizacje VM (qm + vzdump) z testami sieci i auto-przywracaniem W tym artykule opisuję prosty (ale bardzo skuteczny) skrypt automatyzujący aktualizacje maszyn wirtualnych na Proxmox VE. Skrypt potrafi: Skąd pobrać skrypt Skrypt możesz pobrać bezpośrednio z mojej strony: soban.pl/bash/upgrade_proxmox_qm.sh Wymagane katalogi Zanim uruchomisz automatyzację, utwórz dwa katalogi: jeden na skrypty i jeden na [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/pl/proxmox-vm-auto-upgrade-script-2/">Proxmox Automatyczne aktualizacje VM (qm + vzdump) z testami sieci i auto-przywracaniem</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="498" height="745" src="https://soban.pl/wp-content/uploads/2026/01/image-1.png" alt="" class="wp-image-681" style="width:452px;height:auto" srcset="https://soban.pl/wp-content/uploads/2026/01/image-1.png 498w, https://soban.pl/wp-content/uploads/2026/01/image-1-201x300.png 201w" sizes="(max-width: 498px) 100vw, 498px" /></figure>



<h2 class="wp-block-heading">Proxmox: Automatyczne aktualizacje VM (qm + vzdump) z testami sieci i auto-przywracaniem</h2>



<p>W tym artykule opisuję prosty (ale bardzo skuteczny) skrypt automatyzujący aktualizacje maszyn wirtualnych na Proxmox VE. Skrypt potrafi:</p>



<ul class="wp-block-list">
<li>utworzyć backup maszyny (opcjonalnie),</li>



<li>uruchomić VM, jeśli wcześniej była wyłączona,</li>



<li>zrobić pełny upgrade systemu przez apt i wykonać reboot,</li>



<li>zrobić testy sieciowe przed i po aktualizacji,</li>



<li>w razie problemów automatycznie przywrócić VM z backupu (opcjonalnie),</li>



<li>na końcu wyłączyć VM, jeśli wcześniej była wyłączona.</li>
</ul>



<h3 class="wp-block-heading">Skąd pobrać skrypt</h3>



<p>Skrypt możesz pobrać bezpośrednio z mojej strony:</p>



<p><strong>soban.pl/bash/upgrade_proxmox_qm.sh</strong></p>



<h3 class="wp-block-heading">Wymagane katalogi</h3>



<p>Zanim uruchomisz automatyzację, utwórz dwa katalogi: jeden na skrypty i jeden na logi:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">mkdir -p /root/automate_scripts /root/logs</pre></div>



<h3 class="wp-block-heading">Instalacja skryptu</h3>



<p>Pobierz skrypt do <code>/root/automate_scripts/</code> i nadaj mu prawa wykonywania:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">cd /root/automate_scripts
curl -fsSL -o upgrade_proxmox_qm.sh "https://soban.pl/bash/upgrade_proxmox_qm.sh"
chmod +x /root/automate_scripts/upgrade_proxmox_qm.sh</pre></div>



<h3 class="wp-block-heading">Jak to działa (w skrócie)</h3>



<ul class="wp-block-list">
<li>Najpierw wykonywany jest <strong>backup</strong> (vzdump snapshot + zstd) – jeśli backup jest włączony.</li>



<li>Jeśli VM była <strong>stopped</strong>, skrypt ją uruchamia i czeka <strong>WAIT_TIME</strong> sekund.</li>



<li>Następnie wykonywane są <strong>testy sieciowe PRZED aktualizacją</strong>:
		<ul>
			
			
			
			
		</ul>
	

















</li>



<li>Skrypt wykonuje apt update/upgrade/dist-upgrade/autoremove/clean i na końcu robi <strong>reboot</strong> VM.</li>



<li>Po reboocie czeka ponownie (<strong>WAIT_TIME</strong>) i uruchamia te same testy <strong>PO aktualizacji</strong>.</li>



<li>Jeśli testy nie przejdą i istnieje backup, skrypt wykonuje <strong>qmrestore</strong> automatycznie.</li>



<li>Na końcu (opcjonalnie) wyłącza VM, jeśli wcześniej była wyłączona.</li>
</ul>



<h3 class="wp-block-heading">Uruchomienie (manualnie)</h3>



<p>Skrypt przyjmuje dokładnie dwa argumenty:</p>



<ul class="wp-block-list">
<li><code>VMID</code> – ID maszyny wirtualnej na Proxmox</li>



<li><code>TIME_SEC</code> – czas oczekiwania po starcie/reboocie (w sekundach)</li>
</ul>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">/root/automate_scripts/upgrade_proxmox_qm.sh 901 500</pre></div>



<p><strong>Wskazówka:</strong> dobierz WAIT_TIME do realnego czasu bootowania VM oraz czasu trwania aktualizacji. Najczęściej sprawdza się <code>300</code> do <code>1000</code> sekund (zależnie od maszyny).</p>



<h3 class="wp-block-heading">Pełny skrypt (do wklejenia / podglądu)</h3>



<p>Poniżej wrzucam całość w jednym miejscu – dokładnie w takiej formie, w jakiej jest używana w tej automatyzacji:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">#!/bin/bash

WAIT_TIME=$2  # wait time for VM start/restart (in seconds)
DO_BACKUP="y" # 'y' - create backup, 'n' - skip backup
DO_UPDATE="y" # 'y' - run system update, 'n' - skip update

echo "---------------START---------------"
date
echo "-----------------------------------"

# Argument check
if [ "$#" -ne 2 ]; then
    echo "Usage: $0 &lt;VMID&gt; &lt;TIME_SEC&gt;"
    exit 1
fi

VMID="$1"
TARGET_HOSTNAME=$(/usr/sbin/qm list | grep -w "$VMID" | awk '{print $2}')
VM_STATUS=$(/usr/sbin/qm status "$VMID" | awk '{print $2}')
HOST_MACHINE=$(hostname)
WAS_STOPPED=0

if [ "$VM_STATUS" = "stopped" ]; then
    WAS_STOPPED=1
else
    WAS_STOPPED=0
fi

# Create backup if DO_BACKUP is set to 'y'
backup_result="Backup not attempted"
if [ "$DO_BACKUP" = "y" ]; then
    echo "Creating backup for VM $VMID..."
    BACKUP_OUTPUT=$(/usr/bin/vzdump "$VMID" --storage local --mode snapshot --compress zstd)
    BACKUP_FILE=$(echo "$BACKUP_OUTPUT" | grep -oP 'vzdump-qemu-[^\s]+' | tr -d "'")

    if [ -z "$BACKUP_FILE" ]; then
        echo "Backup failed: No backup file created."
        backup_result="Backup created: NOK"
        exit 1
    else
        echo "Backup created successfully: $BACKUP_FILE"
        backup_result="Backup created: OK"
    fi
else
    echo "Backup not attempted (backup is disabled)."
fi

# Start VM if it was originally stopped
if [ "$WAS_STOPPED" -eq 1 ]; then
    echo "Starting VM $VMID for update..."
    /usr/sbin/qm start "$VMID"
    echo "Waiting $WAIT_TIME seconds for VM to start..."
    sleep "$WAIT_TIME"
fi

# Test functions
perform_ping_test() {
    source="$1"
    target="$2"
    if ssh root@"$source" "ping -c 3 -W 2 $target" &gt;/dev/null 2&gt;&amp;1; then
        echo "Ping from $source to $target: OK"
        return 0
    else
        echo "Ping from $source to $target: NOK"
        return 1
    fi
}

test_curl() {
    source="$1"
    target="$2"
    if ssh root@"$source" "curl -s --head --connect-timeout 5 $target" &gt;/dev/null 2&gt;&amp;1; then
        echo "Curl from $source to $target: OK"
        return 0
    else
        echo "Curl from $source to $target: NOK"
        return 1
    fi
}

perform_local_ping_test() {
    source="$1"
    target="$2"
    if ping -c 3 -W 2 "$target" &gt;/dev/null 2&gt;&amp;1; then
        echo "Ping from $source to $target: OK"
        return 0
    else
        echo "Ping from $source to $target: NOK"
        return 1
    fi
}

DEFAULT_GW=$(/sbin/ip route | grep default | awk '{print $3}')

perform_tests() {
    status=0
    perform_local_ping_test "$HOST_MACHINE" "$TARGET_HOSTNAME" || status=1
    perform_ping_test "$TARGET_HOSTNAME" "8.8.8.8" || status=1
    perform_ping_test "$TARGET_HOSTNAME" "$DEFAULT_GW" || status=1
    test_curl "$TARGET_HOSTNAME" "http://google.com" || status=1
    return ${status:-0}
}

# General tests before update
echo "--- General tests BEFORE update ---"
if perform_tests; then
    echo "All network tests before update: OK"
    echo "$backup_result"

    if [ "$backup_result" == "Backup created: OK" ] || [ "$backup_result" == "Backup not attempted" ]; then
        echo "BEFORE status: OK"
    else
        echo "BEFORE status: NOK"
    fi
else
    echo "Some network tests before update: NOK"
    echo "$backup_result"
    echo "BEFORE status: NOK"
    [ "$WAS_STOPPED" -eq 1 ] &amp;&amp; /usr/sbin/qm shutdown "$VMID"
    exit 1
fi
echo "-----------------------------------"

# System update and reboot
update_result="Upgrade system: NOK"
if [ "$DO_UPDATE" = "y" ]; then
    echo "--- Updating VM $VMID ---"
    if ssh root@"$TARGET_HOSTNAME" "/usr/bin/apt update &amp;&amp; \
                          /usr/bin/apt upgrade -y &amp;&amp; \
                          /usr/bin/apt dist-upgrade -y &amp;&amp; \
                          /usr/bin/apt autoremove -y &amp;&amp; \
                          /usr/bin/apt autoclean &amp;&amp; \
                          /usr/bin/apt clean &amp;&amp; \
                          /usr/bin/apt --purge autoremove &amp;&amp; \
                          /sbin/reboot"; then
        echo "---END Updating VM $VMID ---"
        echo "Upgrade system: OK"
        update_result="Upgrade system: OK"
    else
        echo "Upgrade system: NOK"
        update_result="Upgrade system: NOK"
        [ "$WAS_STOPPED" -eq 1 ] &amp;&amp; /usr/sbin/qm shutdown "$VMID"
        echo "Update failed. Exiting."
        exit 1
    fi
fi

# Wait for VM reboot if update was performed
if [ "$DO_UPDATE" = "y" ]; then
    echo "Waiting $WAIT_TIME seconds for VM to reboot..."
    sleep "$WAIT_TIME"
fi

# Tests after reboot if update was performed
if [ "$DO_UPDATE" = "y" ]; then
    echo "--- Network tests AFTER update ---"
    if perform_tests; then
        echo "All network tests after update: OK"
        echo "$update_result"
        echo "AFTER status: OK"
    else
        echo "Some network tests after update: NOK"
        echo "$update_result"
        echo "Attempting to restore from backup..."

        if [ "$DO_BACKUP" = "y" ]; then
            /usr/sbin/qm stop "$VMID"
            /usr/sbin/qmrestore "/var/lib/vz/dump/$BACKUP_FILE" "$VMID" --force

            if [ "$WAS_STOPPED" -eq 1 ]; then
                /usr/sbin/qm shutdown "$VMID"
            fi

            echo "Restore attempt finished. Please check VM status."
            echo "AFTER status: NOK"
        else
            echo "No backup available for restoration. The VM might not function properly after failed update."
            echo "AFTER status: NOK"
        fi
    fi
    echo "-----------------------------------"
fi

# Shut down VM if it was originally stopped
if [ "$WAS_STOPPED" -eq 1 ]; then
    echo "Shutting down VM $VMID (originally stopped)."
    /usr/sbin/qm shutdown "$VMID"
fi

echo "---------------END---------------"
date
echo "-----------------------------------"</pre></div>



<h3 class="wp-block-heading">Cron (harmonogram tygodniowy + osobne logi per VM)</h3>



<p>Poniżej masz przykład crontaba, który uruchamia aktualizacje raz w tygodniu (inna VM każdego dnia roboczego) i zapisuje logi do osobnych plików w <code>/root/logs/</code>.</p>



<p>Edytuj crona roota:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">crontab -e</pre></div>



<p>Wklej reguły (komentarze są po angielsku):</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">15 0 * * 1 /root/automate_scripts/upgrade_proxmox_qm.sh 901 500 &gt; /root/logs/kali.log 2&gt;&amp;1                 # Monday: upgrade Kali Linux (VMID 901)
15 0 * * 2 /root/automate_scripts/upgrade_proxmox_qm.sh 903 500 &gt; /root/logs/proxmox-test-01.log 2&gt;&amp;1      # Tuesday: upgrade proxmox-test-01 (VMID 903)
15 0 * * 3 /root/automate_scripts/upgrade_proxmox_qm.sh 904 500 &gt; /root/logs/ubuntu-lte.log 2&gt;&amp;1           # Wednesday: upgrade ubuntu-lte (VMID 904)
15 0 * * 4 /root/automate_scripts/upgrade_proxmox_qm.sh 905 1000 &gt; /root/logs/backup-machine.log 2&gt;&amp;1      # Thursday: upgrade backup-machine (VMID 905)</pre></div>



<h3 class="wp-block-heading">Szybkie checklisty / troubleshooting</h3>



<ul class="wp-block-list">
<li>Upewnij się, że root z hosta Proxmox może łączyć się po SSH do VM po hostname (skrypt używa <code>ssh root@&lt;vm-hostname&gt;</code>).</li>



<li>Sprawdź czy DNS (albo <code>/etc/hosts</code>) poprawnie rozwiązuje hostname VM na hoście Proxmox.</li>



<li>Jeśli apt potrafi pytać o potwierdzenia, zadbaj o tryb non-interactive albo „trzymaj” pakiety, które robią problemy podczas upgrade.</li>
</ul>



<p>To wszystko. Umieść skrypt w /root/automate_scripts/, wyślij logi do /root/logs/, a cotygodniowa konserwacja maszyny wirtualnej stanie się praktycznie niezauważalna.</pre><p>Artykuł <a href="https://soban.pl/pl/proxmox-vm-auto-upgrade-script-2/">Proxmox Automatyczne aktualizacje VM (qm + vzdump) z testami sieci i auto-przywracaniem</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Jak zaktualizować Proxmox VE 8.x do wersji 9.0 (Debian 12 do Debian 13) – krok po kroku za pomocą skryptu</title>
		<link>https://soban.pl/pl/jak-zaktualizowac-proxmox-ve-8-x-do-wersji-9-0-debian-12-do-debian-13-krok-po-kroku-za-pomoca-skryptu/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Mon, 11 Aug 2025 11:56:18 +0000</pubDate>
				<category><![CDATA[Proxmox]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=647</guid>

					<description><![CDATA[<p>Wprowadzenie Proxmox VE 9.0 (oparty na Debian 13 &#8222;Trixie&#8221;) został wydany i przynosi zaktualizowane pakiety, nowy kernel oraz ulepszoną stabilność. Ten poradnik przeprowadzi Cię przez aktualizację w miejscu z Proxmox VE 8.4.x (Debian 12 &#8222;Bookworm&#8221;) do Proxmox VE 9.0. Proces będzie zautomatyzowany przy użyciu gotowego skryptu aktualizacyjnego, który: Pobranie i uruchomienie skryptu aktualizacyjnego Możesz pobrać [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/pl/jak-zaktualizowac-proxmox-ve-8-x-do-wersji-9-0-debian-12-do-debian-13-krok-po-kroku-za-pomoca-skryptu/">Jak zaktualizować Proxmox VE 8.x do wersji 9.0 (Debian 12 do Debian 13) – krok po kroku za pomocą skryptu</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="1024" height="1024" src="https://soban.pl/wp-content/uploads/2025/08/image.png" alt="" class="wp-image-648" style="width:416px;height:auto" srcset="https://soban.pl/wp-content/uploads/2025/08/image.png 1024w, https://soban.pl/wp-content/uploads/2025/08/image-300x300.png 300w, https://soban.pl/wp-content/uploads/2025/08/image-150x150.png 150w, https://soban.pl/wp-content/uploads/2025/08/image-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Wprowadzenie</h2>



<p>Proxmox VE 9.0 (oparty na Debian 13 &#8222;Trixie&#8221;) został wydany i przynosi zaktualizowane pakiety, nowy kernel oraz ulepszoną stabilność. Ten poradnik przeprowadzi Cię przez <strong>aktualizację w miejscu</strong> z Proxmox VE 8.4.x (Debian 12 &#8222;Bookworm&#8221;) do Proxmox VE 9.0.</p>



<p>Proces będzie zautomatyzowany przy użyciu gotowego skryptu aktualizacyjnego, który:</p>



<ul class="wp-block-list">
<li>Sprawdza aktualną wersję</li>



<li>Uruchamia <code>pve8to9</code> w celu weryfikacji przed aktualizacją</li>



<li>Tworzy kopię zapasową źródeł APT</li>



<li>Aktualizuje repozytoria z Bookworm do Trixie</li>



<li>Wykonuje pełny dist-upgrade</li>



<li>Loguje wszystkie zmiany przed i po aktualizacji</li>
</ul>



<h2 class="wp-block-heading">Pobranie i uruchomienie skryptu aktualizacyjnego</h2>



<p>Możesz pobrać gotowy skrypt aktualizacyjny bezpośrednio z naszego serwera, nadać mu uprawnienia i uruchomić:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">wget https://soban.pl/bash/upgrade-pve8-to-9.sh -O /root/upgrade-pve8-to-9.sh
chmod +x /root/upgrade-pve8-to-9.sh
/root/upgrade-pve8-to-9.sh</pre></div>



<p>Jeśli stracisz połączenie (a to może się zdarzyć podczas aktualizacji Proxmoxa), możesz śledzić logi poleceniem:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">tail -f /root/pve-upgrade-latest.log</pre></div>



<p>Spokojnie poczekaj, aż skrypt zakończy działanie — może to potrwać.</p>



<h2 class="wp-block-heading">Pełny kod źródłowy skryptu</h2>



<p>Poniżej znajduje się pełna treść skryptu do wglądu. Zaleca się jednak pobranie najnowszej wersji z powyższego linku, aby mieć pewność, że zawiera wszystkie aktualne poprawki.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">#!/bin/bash
# Proxmox VE 8 -&gt; 9 in-place upgrade (Debian 12 "bookworm" -&gt; Debian 13 "trixie")
# Hardened: nuke/lock Enterprise repo, move backups OUT of APT dir, ensure single no-sub,
# robust pve8to9 detection/installation, switch to trixie, non-interactive upgrade, post-boot check.
set -euo pipefail

LOG="/root/pve-upgrade-$(date +%Y%m%d-%H%M%S).log"
SINK="/etc/apt/disabled-sources"        # OUTSIDE of APT scan path
APT_BACKUP_DIR="/root/apt-sources-backup-$(date +%Y%m%d-%H%M%S)"
NO_REBOOT="${NO_REBOOT:-0}"
FORCE_UPGRADE="${FORCE_UPGRADE:-0}"
SKIP_PRECHECK="${SKIP_PRECHECK:-0}"

# Ensure sane PATH for non-interactive shells
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${PATH:-}"
export DEBIAN_FRONTEND=noninteractive
export APT_LISTCHANGES_FRONTEND=none
export UCF_FORCE_CONFFOLD=1

shopt -s nullglob

msg() { echo "$*" | tee -a "$LOG"; }
die() { echo "ERROR: $*" | tee -a "$LOG"; exit 1; }
ts()  { date +%F-%H%M%S; }

sink() { # move file out of sources.list.d safely
  local f="$1" base
  [[ -e "$f" ]] || return 0
  base="$(basename "$f")"
  mkdir -p "$SINK"
  mv -f "$f" "$SINK/$base.bak.$(ts)"
}

divert_add() {
  local p="$1"
  if ! dpkg-divert --list | grep -Fq "diversion of $p"; then
    dpkg-divert --quiet --local --rename --add "$p" || true
  fi
  rm -f "$p" || true
}

cleanup_nonlist_sources() {
  mkdir -p "$SINK"
  find /etc/apt/sources.list.d -maxdepth 1 -type f \
    ! -name '*.list' ! -name '*.sources' \
    -exec mv -f {} "$SINK"/ \; || true
}

# STRICT verify: only fail on ACTIVE enterprise refs
verify_no_enterprise() {
  local bad=0
  # 1) Active lines in *.list (not commented)
  if grep -RIsn '^[[:space:]]*deb[[:space:]].*enterprise\.proxmox\.com' /etc/apt/sources.list /etc/apt/sources.list.d 2&gt;/dev/null; then
    bad=1
  fi
  # 2) Deb822 .sources that mention enterprise AND are effectively enabled
  while IFS= read -r -d '' f; do
    if grep -qi 'enterprise\.proxmox\.com' "$f"; then
      # treat missing Enabled as enabled, only "Enabled: no" is safe
      if ! grep -qi '^[[:space:]]*Enabled:[[:space:]]*no[[:space:]]*$' "$f"; then
        echo "[VERIFY] Enabled enterprise in: $f" | tee -a "$LOG"
        bad=1
      fi
    fi
  done &lt; &lt;(find /etc/apt/sources.list.d -maxdepth 1 -type f -name '*.sources' -print0 2&gt;/dev/null)
  (( bad == 0 )) || die "Enterprise repo still detected. Clean failed."
}

# Disabled deb822 stub WITHOUT enterprise domain (so greps never trip)
write_disabled_enterprise_sources() {
  cat &gt; /etc/apt/sources.list.d/pve-enterprise.sources &lt;&lt;'EOF'
Types: deb
URIs: https://example.invalid/proxmox           # placeholder to avoid enterprise domain
Suites: trixie
Components: pve-enterprise
Enabled: no
EOF
  chmod 0644 /etc/apt/sources.list.d/pve-enterprise.sources
}

# --------- FIXED: robust locator for pve8to9 + debug ----------
locate_pve8to9() {
  hash -r 2&gt;/dev/null || true
  local tool=""
  tool="$(type -P pve8to9 2&gt;/dev/null || true)"
  [[ -z "$tool" ]] &amp;&amp; tool="$(command -v pve8to9 2&gt;/dev/null || true)"
  [[ -z "$tool" &amp;&amp; -x /usr/bin/pve8to9 ]] &amp;&amp; tool="/usr/bin/pve8to9"
  [[ -z "$tool" &amp;&amp; -x /usr/sbin/pve8to9 ]] &amp;&amp; tool="/usr/sbin/pve8to9"
  [[ -z "$tool" ]] &amp;&amp; tool="$(/usr/bin/which pve8to9 2&gt;/dev/null || true)"
  if [[ -z "$tool" ]] &amp;&amp; command -v dpkg &gt;/dev/null 2&gt;&amp;1; then
    local cand
    cand="$(dpkg -L pve-manager 2&gt;/dev/null | grep -E '/pve8to9$' || true)"
    [[ -n "$cand" &amp;&amp; -x "$cand" ]] &amp;&amp; tool="$cand"
  fi
  echo "$tool"
}

run_pve8to9_precheck() {
  [[ "$SKIP_PRECHECK" == "1" ]] &amp;&amp; { msg "SKIP_PRECHECK=1 set — skipping pve8to9."; return 0; }

  msg "Running pve8to9 --full precheck..."
  msg "PATH=$PATH"
  type -a pve8to9 2&gt;&amp;1 | sed 's/^/[type] /' | tee -a "$LOG" || true
  [[ -e /usr/bin/pve8to9 ]] &amp;&amp; ls -l /usr/bin/pve8to9 | sed 's/^/[ls] /' | tee -a "$LOG" || true

  local tool; tool="$(locate_pve8to9)"

  if [[ -z "$tool" ]]; then
    msg "pve8to9 not found — attempting to ensure 'pve-manager' is installed..."
    apt-get update -y &gt;&gt; "$LOG" 2&gt;&amp;1 || true
    apt-get install -y pve-manager &gt;&gt; "$LOG" 2&gt;&amp;1 || true
    cleanup_nonlist_sources; verify_no_enterprise
    hash -r 2&gt;/dev/null || true
    tool="$(locate_pve8to9)"
  fi

  if [[ -z "$tool" ]]; then
    msg "pve8to9 still not available on this system. Continuing without precheck."
    return 0
  fi

  msg "pve8to9 found at: $tool"
  local tmp rc
  tmp="$(mktemp)"
  set +e
  "$tool" --full | tee -a "$LOG" | tee "$tmp" &gt;/dev/null
  rc=${PIPESTATUS[0]}
  set -e
  if grep -qE 'FAILURES:\s*[1-9]+' "$tmp"; then
    rm -f "$tmp"
    die "pve8to9 reported FAILURES. Check log above."
  fi
  rm -f "$tmp"
  msg "pve8to9 executed (rc=$rc). No FAILURES."
}
# ---------------------------------------------------------------

# ----- header / live log hint -----
echo "== Proxmox VE 8 -&gt; 9 upgrade started: $(date) ==" | tee -a "$LOG"
echo "$$" &gt; /run/pve8to9.pid
ln -sfn "$LOG" /root/pve-upgrade-latest.log
echo "Live log: tail -f /root/pve-upgrade-latest.log" | tee -a "$LOG"
echo "If started via nohup, also watch its file (example: /root/pve8to9.&lt;ts&gt;.nohup.log)" | tee -a "$LOG"

# 0) PRE-NUKE ENTERPRISE + move backups OUT of APT dir
msg "[PRE-NUKE] Backup APT lists and clean directory..."
mkdir -p "$APT_BACKUP_DIR"
cp -a /etc/apt/sources.list "$APT_BACKUP_DIR"/ 2&gt;/dev/null || true
cp -a /etc/apt/sources.list.d "$APT_BACKUP_DIR"/ 2&gt;/dev/null || true
cleanup_nonlist_sources

# Remove any *.sources referencing Enterprise
for s in /etc/apt/sources.list.d/*.sources; do
  [[ -f "$s" ]] || continue
  grep -qi 'enterprise\.proxmox\.com' "$s" &amp;&amp; { msg " -&gt; removing: $s"; sink "$s"; }
done
# Remove typical filenames
sink /etc/apt/sources.list.d/pve-enterprise.sources
sink /etc/apt/sources.list.d/pve-enterprise.list

# For *.list with Enterprise: comment lines or remove if Enterprise-only
for l in /etc/apt/sources.list.d/*.list; do
  [[ -f "$l" ]] || continue
  if grep -qi 'enterprise\.proxmox\.com' "$l"; then
    if awk 'BEGIN{IGNORECASE=1} /^[[:space:]]*deb/ &amp;&amp; $0 !~ /enterprise\.proxmox\.com/ {ok=1} END{exit ok?0:1}' "$l"; then
      msg " -&gt; commenting Enterprise lines in: $l"
      sed -ri 's|^\s*deb\s+https?://enterprise\.proxmox\.com|#DISABLED-BY-SCRIPT &amp;|I' "$l"
    else
      msg " -&gt; removing Enterprise-only list: $l"
      sink "$l"
    fi
  fi
done

# Comment Enterprise in main sources.list
[[ -f /etc/apt/sources.list ]] &amp;&amp; sed -ri 's|^\s*deb\s+https?://enterprise\.proxmox\.com|#DISABLED-BY-SCRIPT &amp;|I' /etc/apt/sources.list || true

# Diversions + disabled deb822 file (with example.invalid), then re-clean any .distrib/.bak
divert_add /etc/apt/sources.list.d/pve-enterprise.list
divert_add /etc/apt/sources.list.d/pve-enterprise.sources
write_disabled_enterprise_sources
cleanup_nonlist_sources
verify_no_enterprise

# 1) Sanity checks
if [[ $EUID -ne 0 ]]; then die "Run as root."; fi
if ! command -v pveversion &gt;/dev/null 2&gt;&amp;1; then die "Not a Proxmox VE host."; fi
CUR_VER_RAW="$(pveversion || true)"; msg "Current pveversion: $CUR_VER_RAW"
if ! echo "$CUR_VER_RAW" | grep -qE 'pve-manager/8\.'; then
  msg "Expected Proxmox 8.x. Detected: $CUR_VER_RAW"
  [[ "$FORCE_UPGRADE" == "1" ]] || die "Set FORCE_UPGRADE=1 to override."
fi

# BEFORE snapshot
{
  echo; echo "===== BEFORE UPGRADE ====="; date
  echo "# uname -a"; uname -a || true
  echo; echo "# pveversion"; pveversion || true
  echo; echo "# qm list"; qm list || true
  echo; echo "# pct list"; pct list || true
} &gt;&gt; "$LOG" 2&gt;&amp;1

# 2) pve8to9 precheck (robust)
run_pve8to9_precheck

# 3) Keyring + initial apt refresh
apt-get update -y &gt;&gt; "$LOG" 2&gt;&amp;1 || true
apt-get install -y proxmox-archive-keyring &gt;&gt; "$LOG" 2&gt;&amp;1 || true
verify_no_enterprise
cleanup_nonlist_sources

# 4) Switch bookworm -&gt; trixie
msg "Switching Debian repositories: bookworm -&gt; trixie ..."
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list || true
find /etc/apt/sources.list.d -maxdepth 1 -type f -exec sed -i 's/bookworm/trixie/g' {} \; || true

# 5) Ensure single no-subscription entry
sed -ri '/download\.proxmox\.com\/debian\/pve.*pve-no-subscription/s/^/#DUPLICATE-BY-SCRIPT /' /etc/apt/sources.list || true
for l in /etc/apt/sources.list.d/*.list; do
  [[ -f "$l" ]] || continue
  [[ "$l" == "/etc/apt/sources.list.d/pve-no-subscription.list" ]] &amp;&amp; continue
  sed -ri '/download\.proxmox\.com\/debian\/pve.*pve-no-subscription/s/^/#DUPLICATE-BY-SCRIPT /' "$l" || true
done
cat &gt; /etc/apt/sources.list.d/pve-no-subscription.list &lt;&lt;'EOF'
deb http://download.proxmox.com/debian/pve trixie pve-no-subscription
EOF
chmod 0644 /etc/apt/sources.list.d/pve-no-subscription.list

verify_no_enterprise
cleanup_nonlist_sources

# 6) Full non-interactive upgrade
msg "Running apt-get update + non-interactive upgrade/dist-upgrade..."
TMPU="$(mktemp)"
apt-get update 2&gt;&amp;1 | tee -a "$LOG" | tee "$TMPU" &gt;/dev/null
if grep -q 'enterprise\.proxmox\.com' "$TMPU"; then rm -f "$TMPU"; die "APT tried to reach Enterprise during update."; fi
rm -f "$TMPU"

apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade -y | tee -a "$LOG"
apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade -y | tee -a "$LOG"

# Second cleanup pass
cleanup_nonlist_sources

apt-get autoremove -y | tee -a "$LOG" || true
apt-get update -y &gt;&gt; "$LOG" 2&gt;&amp;1 || true

# 7) One-shot post-boot verification
POST_SH="/root/pve-postcheck.sh"
POST_SVC="/etc/systemd/system/pve-upgrade-postcheck.service"
cat &gt; "$POST_SH" &lt;&lt;'EOS'
#!/bin/bash
set -euo pipefail
LOG_FILE="/root/pve-upgrade-post-$(date +%Y%m%d-%H%M%S).log"
{
  echo "===== AFTER UPGRADE (first boot) ====="; date
  echo "# uname -a"; uname -a || true
  echo; echo "# pveversion"; pveversion || true
  echo; echo "# apt policy (trixie check)"; apt-cache policy | sed -n '1,120p' || true
} &gt;&gt; "$LOG_FILE" 2&gt;&amp;1
systemctl disable --now pve-upgrade-postcheck.service &gt;/dev/null 2&gt;&amp;1 || true
rm -f /root/pve-postcheck.sh
EOS
chmod +x "$POST_SH"
cat &gt; "$POST_SVC" &lt;&lt;'EOS'
[Unit]
Description=Proxmox upgrade post-check (one-shot)
After=multi-user.target pvedaemon.service pve-cluster.service
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/bin/bash /root/pve-postcheck.sh
[Install]
WantedBy=multi-user.target
EOS
systemctl daemon-reload
systemctl enable pve-upgrade-postcheck.service &gt;&gt; "$LOG" 2&gt;&amp;1 || true

# 8) Pre-reboot snapshot
{
  echo; echo "===== PRE-REBOOT SNAPSHOT ====="; date
  echo "# Installed pve kernels:"; dpkg -l | grep -E '^ii\s+pve-kernel' | sort -V || true
} &gt;&gt; "$LOG" 2&gt;&amp;1

msg "Upgrade phase completed. Log: $LOG"
if [[ "$NO_REBOOT" == "1" ]]; then
  msg "NO_REBOOT=1 set — skipping reboot. Please reboot manually."
else
  msg "Rebooting now to complete the upgrade..."
  sleep 3
  reboot
fi</pre></div>



<h2 class="wp-block-heading">Weryfikacja po aktualizacji</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">pveversion</pre></div>



<p>Oczekiwany wynik powinien wyglądać tak:</p>



<p>pve-manager/9.x.x/xxxxxxxx (running kernel: 6.x.x-x-pve)<br><br>Sprawdź wersję uruchomionego jądra:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">uname -a</pre></div>



<p>Przejrzyj log z aktualizacji, aby upewnić się, że nie wystąpiły błędy:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">less /root/pve-upgrade-*.log</pre></div>



<p>Jeśli użyłeś usługi post-check utworzonej przez skrypt, możesz zobaczyć jej wyniki:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">less /root/pve-upgrade-post-*.log</pre></div>
<p>Artykuł <a href="https://soban.pl/pl/jak-zaktualizowac-proxmox-ve-8-x-do-wersji-9-0-debian-12-do-debian-13-krok-po-kroku-za-pomoca-skryptu/">Jak zaktualizować Proxmox VE 8.x do wersji 9.0 (Debian 12 do Debian 13) – krok po kroku za pomocą skryptu</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ulepszanie zarządzania maszynami wirtualnymi za pomocą agenta gościa QEMU na Proxmox</title>
		<link>https://soban.pl/pl/ulepszanie-zarzadzania-maszynami-wirtualnymi-za-pomoca-agenta-goscia-qemu-na-proxmox/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Tue, 11 Feb 2025 14:51:01 +0000</pubDate>
				<category><![CDATA[Proxmox]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=605</guid>

					<description><![CDATA[<p>Zastanawiałeś się kiedyś, jak usprawnić zarządzanie i monitorowanie maszyn wirtualnych w swoim środowisku Proxmox? QEMU Guest Agent to prawdziwy przełom, oferujący narzędzia, które znacząco ułatwiają interakcję z wirtualnymi systemami. Przyjrzyjmy się, jak to narzędzie może zmienić twoje podejście. Dlaczego QEMU Guest Agent jest niezbędny? Konfiguracja QEMU Guest Agent na twoim serwerze Proxmox Uruchomienie QEMU Guest [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/pl/ulepszanie-zarzadzania-maszynami-wirtualnymi-za-pomoca-agenta-goscia-qemu-na-proxmox/">Ulepszanie zarządzania maszynami wirtualnymi za pomocą agenta gościa QEMU na Proxmox</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="502" height="504" src="https://soban.pl/wp-content/uploads/2025/02/image-1.png" alt="" class="wp-image-602" srcset="https://soban.pl/wp-content/uploads/2025/02/image-1.png 502w, https://soban.pl/wp-content/uploads/2025/02/image-1-300x300.png 300w, https://soban.pl/wp-content/uploads/2025/02/image-1-150x150.png 150w" sizes="auto, (max-width: 502px) 100vw, 502px" /></figure>



<p><br>Zastanawiałeś się kiedyś, jak usprawnić zarządzanie i monitorowanie maszyn wirtualnych w swoim środowisku Proxmox? QEMU Guest Agent to prawdziwy przełom, oferujący narzędzia, które znacząco ułatwiają interakcję z wirtualnymi systemami. Przyjrzyjmy się, jak to narzędzie może zmienić twoje podejście.</p>



<h3 class="wp-block-heading">Dlaczego QEMU Guest Agent jest niezbędny?</h3>



<ul class="wp-block-list">
<li><strong>Synchronizacja czasu:</strong> Utrzymanie spójnego czasu pomiędzy maszynami wirtualnymi a hostem może być trudne, ale QEMU Guest Agent automatyzuje to, zapewniając płynne działanie operacji zależnych od czasu.</li>



<li><strong>Zarządzanie zasilaniem:</strong> Wyobraź sobie możliwość wyłączania lub restartowania maszyn wirtualnych bezpośrednio z panelu Proxmox — nie ma potrzeby logowania się do każdej VM. To nie tylko wygodne, ale także oszczędza czas.</li>



<li><strong>Monitorowanie systemu:</strong> Uzyskaj szczegółowe informacje o systemach plików, aktywności sieciowej i innych parametrach operacyjnych bezpośrednio z hosta. Ten poziom monitorowania pozwala na terminową diagnostykę i regulacje.</li>



<li><strong>Zarządzanie dyskami:</strong> Obsługa operacji na dyskach bez konieczności bezpośredniej interwencji na VM ułatwia tworzenie kopii zapasowych i przywracanie danych jak nigdy dotąd.</li>
</ul>



<h3 class="wp-block-heading">Konfiguracja QEMU Guest Agent na twoim serwerze Proxmox</h3>



<p>Uruchomienie QEMU Guest Agent obejmuje kilka prostych kroków:</p>



<ul class="wp-block-list">
<li><strong>Aktywacja Agenta:</strong> Zaloguj się do panelu Proxmox, przejdź do sekcji 'Opcje&#8217; wybranej maszyny wirtualnej i upewnij się, że opcja 'QEMU Guest Agent&#8217; jest zaznaczona.</li>
</ul>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="685" height="500" src="https://soban.pl/wp-content/uploads/2025/02/image-2.png" alt="" class="wp-image-603" style="width:734px;height:auto" srcset="https://soban.pl/wp-content/uploads/2025/02/image-2.png 685w, https://soban.pl/wp-content/uploads/2025/02/image-2-300x219.png 300w" sizes="auto, (max-width: 685px) 100vw, 685px" /></figure>



<p>Następnie instalacja na maszynie wirtualnej Ubuntu:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt-get install qemu-guest-agent
sudo systemctl start qemu-guest-agent
sudo systemctl enable qemu-guest-agent</pre></div>



<p>W celu sprawdzenia, czy odpowiednio działa qeumu-guest-agent możesz wykonać polecenie:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">systemctl status qemu-guest-agent</pre></div>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="757" height="194" src="https://soban.pl/wp-content/uploads/2025/02/image-3.png" alt="" class="wp-image-610" srcset="https://soban.pl/wp-content/uploads/2025/02/image-3.png 757w, https://soban.pl/wp-content/uploads/2025/02/image-3-300x77.png 300w" sizes="auto, (max-width: 757px) 100vw, 757px" /></figure>



<p>QEMU Guest Agent nie tylko ułatwia życie, automatyzując rutynowe zadania — również zwiększa bezpieczeństwo i efektywność twojego wirtualnego środowiska. Niezależnie od tego, czy zarządzasz pojedynczą maszyną wirtualną czy całym zbiorem, jest to nieocenione narzędzie w twoim arsenale.</p>



<p></p>
<p>Artykuł <a href="https://soban.pl/pl/ulepszanie-zarzadzania-maszynami-wirtualnymi-za-pomoca-agenta-goscia-qemu-na-proxmox/">Ulepszanie zarządzania maszynami wirtualnymi za pomocą agenta gościa QEMU na Proxmox</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Rozwiązywanie problemów z klastrami Proxmox i przywracanie kontenera LXC</title>
		<link>https://soban.pl/pl/rozwiazywanie-problemow-z-klastrami-proxmox-i-przywracanie-kontenera-lxc/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Wed, 13 Nov 2024 10:56:38 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Proxmox]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=515</guid>

					<description><![CDATA[<p>Podczas zarządzania klastrami Proxmox można napotkać różne trudności techniczne, takie jak niespójności w konfiguracji klastra lub problemy z przywracaniem kontenerów LXC. Znalezienie i rozwiązanie tych problemów jest kluczowe dla utrzymania stabilności i wydajności środowiska wirtualizacji. W tym artykule przedstawiam szczegółowy przewodnik, jak zdiagnozować i rozwiązać problem z nieosiągalnym węzłem oraz jak pomyślnie przywrócić kontener LXC. [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/pl/rozwiazywanie-problemow-z-klastrami-proxmox-i-przywracanie-kontenera-lxc/">Rozwiązywanie problemów z klastrami Proxmox i przywracanie kontenera LXC</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="774" height="782" src="https://soban.pl/wp-content/uploads/2024/11/image.png" alt="" class="wp-image-520" style="width:455px;height:auto" srcset="https://soban.pl/wp-content/uploads/2024/11/image.png 774w, https://soban.pl/wp-content/uploads/2024/11/image-297x300.png 297w, https://soban.pl/wp-content/uploads/2024/11/image-768x776.png 768w" sizes="auto, (max-width: 774px) 100vw, 774px" /></figure>



<p>Podczas zarządzania klastrami Proxmox można napotkać różne trudności techniczne, takie jak niespójności w konfiguracji klastra lub problemy z przywracaniem kontenerów LXC. Znalezienie i rozwiązanie tych problemów jest kluczowe dla utrzymania stabilności i wydajności środowiska wirtualizacji. W tym artykule przedstawiam szczegółowy przewodnik, jak zdiagnozować i rozwiązać problem z nieosiągalnym węzłem oraz jak pomyślnie przywrócić kontener LXC.</p>



<p>Zanim przystąpisz do jakichkolwiek działań, upewnij się, że masz aktualny backup systemu.</p>



<h3 class="wp-block-heading">Diagnostyka stanu klastra Proxmox</h3>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">pvecm delnode up-page-02
Node/IP: up-page-02 is not a known host of the cluster.</pre></div>



<p>oraz:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">pct restore 107 vzdump-lxc-107-2024_11_12-03_00_01.tar.zst --storage local
CT 107 already exists on node 'up-page-02'</pre></div>



<p>Aby zrozumieć stan klastra, wykonaj na węźle <code>node-up-page-04</code> polecenie:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">pvecm nodes</pre></div>



<p>Oczekiwany output:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">Membership information
----------------------
    Nodeid      Votes Name
         1          1 node-up-page-01
         2          1 node-up-page-04 (local)</pre></div>



<p>Następnie sprawdź szczegółowe informacje o klastrze za pomocą polecenia:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">pvecm status</pre></div>



<p>Oczekiwany output:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">Cluster information
-------------------
Name:             soban-proxmox
Config Version:   4
Transport:        knet
Secure auth:      on

Quorum information
------------------
Date:             Wed Nov 13 10:40:12 2024
Quorum provider:  corosync_votequorum
Nodes:            2
Node ID:          0x00000002
Ring ID:          1.e6
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   2
Highest expected: 2
Total votes:      2
Quorum:           2
Flags:            Quorate

Membership information
----------------------
    Nodeid      Votes Name
0x00000001          1 &lt;masked IP&gt;
0x00000002          1 &lt;masked IP&gt; (local)</pre></div>



<h3 class="wp-block-heading">Usuwanie pliku konfiguracyjnego kontenera i czyszczenie danych</h3>



<p>Odkryłem, że plik konfiguracyjny kontenera 107 wciąż istnieje na systemie plików klastra w ścieżce:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">ls -ltr /etc/pve/nodes/node-up-page-02/lxc/107.conf</pre></div>



<p>Output:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">-rw-r----- 1 root www-data 235 Nov 12 21:35 /etc/pve/nodes/node-up-page-02/lxc/107.conf</pre></div>



<p>Aby usunąć ten plik i wszelkie pozostałości danych związanych z odłączonym węzłem, wykonaj:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">rm -rf /etc/pve/nodes/node-up-page-02/</pre></div>



<h3 class="wp-block-heading">Przywracanie kontenera</h3>



<p>Po usunięciu pliku konfiguracyjnego, przywróciłem kontener LXC na węźle <code>node-up-page-04</code> za pomocą polecenia:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">pct restore 107 /root/vzdump-lxc-107-2024_11_12-03_00_01.tar.zst --storage local</pre></div>



<p>Output:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">recovering backed-up configuration from '/root/vzdump-lxc-107-2024_11_12-03_00_01.tar.zst'
Formatting '/var/lib/vz/images/107/vm-107-disk-0.raw', fmt=raw size=59055800320 preallocation=off
Creating filesystem with 14417920 4k blocks and 3604480 inodes
Filesystem UUID: 8b707e55-5e14-4b20-8585-6cb09e0fa520
Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424
restoring '/root/vzdump-lxc-107-2024_11_12-03_00_01.tar.zst' now..
extracting archive '/root/vzdump-lxc-107-2024_11_12-03_00_01.tar.zst'</pre></div>



<p>Proces przywracania zakończył się pomyślnie, a kontener był gotowy do użycia. Ten przypadek pokazuje, jak ważna jest dokładna diagnostyka i zarządzanie plikami konfiguracyjnymi w Proxmox podczas pracy z klastrami. Warto prowadzić regularne przeglądy konfiguracji, aby unikać niespójności i problemów operacyjnych w przyszłości.</p>
<p>Artykuł <a href="https://soban.pl/pl/rozwiazywanie-problemow-z-klastrami-proxmox-i-przywracanie-kontenera-lxc/">Rozwiązywanie problemów z klastrami Proxmox i przywracanie kontenera LXC</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Rozszerzanie przestrzeni SWAP na Proxmoxie przy użyciu lvreduce</title>
		<link>https://soban.pl/pl/rozszerzanie-przestrzeni-swap-na-proxmoxie-przy-uzyciu-lvreduce/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Thu, 18 Apr 2024 10:51:09 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Proxmox]]></category>
		<category><![CDATA[SWAP]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=465</guid>

					<description><![CDATA[<p>Wprowadzenie Zarządzanie pamięcią SWAP jest kluczowym elementem administrowania systemami operacyjnymi Linux, szczególnie w środowiskach wirtualizacji takich jak Proxmox. SWAP służy jako &#8222;pamięć wirtualna&#8221;, która może być używana, gdy fizyczna pamięć RAM systemu jest zapełniona. W tym artykule pokażemy, jak zwiększyć przestrzeń SWAP na serwerze Proxmox, korzystając z narzędzia lvresize do zwolnienia miejsca na dysku, które [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/pl/rozszerzanie-przestrzeni-swap-na-proxmoxie-przy-uzyciu-lvreduce/">Rozszerzanie przestrzeni SWAP na Proxmoxie przy użyciu lvreduce</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="844" height="846" src="https://soban.pl/wp-content/uploads/2024/04/swap.png" alt="" class="wp-image-467" style="width:427px;height:auto" srcset="https://soban.pl/wp-content/uploads/2024/04/swap.png 844w, https://soban.pl/wp-content/uploads/2024/04/swap-300x300.png 300w, https://soban.pl/wp-content/uploads/2024/04/swap-150x150.png 150w, https://soban.pl/wp-content/uploads/2024/04/swap-768x770.png 768w" sizes="auto, (max-width: 844px) 100vw, 844px" /></figure>



<p><strong>Wprowadzenie</strong></p>



<p>Zarządzanie pamięcią SWAP jest kluczowym elementem administrowania systemami operacyjnymi Linux, szczególnie w środowiskach wirtualizacji takich jak Proxmox. SWAP służy jako &#8222;pamięć wirtualna&#8221;, która może być używana, gdy fizyczna pamięć RAM systemu jest zapełniona. W tym artykule pokażemy, jak zwiększyć przestrzeń SWAP na serwerze Proxmox, korzystając z narzędzia lvresize do zwolnienia miejsca na dysku, które można następnie przeznaczyć na SWAP.</p>



<h3 class="wp-block-heading">Przegląd problemu</h3>



<p>Użytkownik chce zwiększyć przestrzeń SWAP z 8 GB do 16 GB, ale napotyka problem braku dostępnej przestrzeni w grupie woluminów LVM, która jest wymagana do zwiększenia SWAP.</p>



<h3 class="wp-block-heading">Krok 1: Sprawdzenie dostępnej przestrzeni</h3>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">vgs</pre></div>



<p>To polecenie wyświetla grupy woluminów wraz z ich rozmiarami i dostępną przestrzenią.</p>



<h3 class="wp-block-heading">Krok 2: Zmniejszenie wolumenu</h3>



<p>Załóżmy, że istnieje wolumen <code>root</code> o rozmiarze 457.26 GB, który można zmniejszyć, aby uzyskać dodatkowe 8 GB na SWAP. Przed zmniejszeniem wolumenu konieczne jest zmniejszenie systemu plików na tym wolumenie.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">resize2fs /dev/pve/root 449.26G</pre></div>



<p>Jednakże w przypadku systemu plików XFS, zmniejszenie musi nastąpić w trybie offline lub z live CD.</p>



<h3 class="wp-block-heading">Krok 3: Użycie lvreduce</h3>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">lvreduce -L -8G /dev/pve/root</pre></div>



<p>To polecenie zmniejszy wolumen <code>root</code> o 8 GB, co potwierdza się komunikatem o zmianie rozmiaru wolumenu.</p>



<h3 class="wp-block-heading">Krok 4: Deaktywacja SWAP</h3>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">swapoff -a</pre></div>



<p>Przed rozpoczęciem zmian w rozmiarze SWAP, należy najpierw wyłączyć SWAP za pomocą powyższego polecenia.</p>



<h3 class="wp-block-heading">Krok 5: Rozszerzenie SWAP</h3>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">lvresize -L +8G /dev/pve/swap
mkswap /dev/pve/swap
swapon /dev/pve/swap</pre></div>



<p>Powyższe polecenia najpierw zwiększają przestrzeń SWAP, następnie formatują ją i aktywują ponownie.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">swapon --show</pre></div>



<p>Na koniec, weryfikujemy aktywne obszary SWAP używając polecenia powyżej, aby upewnić się, że wszystko zostało poprawnie skonfigurowane.</p>



<p>Proces ten pokazuje, jak można elastycznie zarządzać przestrzenią dyskową na serwerach Proxmox, dostosowując rozmiar SWAP w zależności od potrzeb. Użycie <code>lvreduce</code> wymaga ostrożności, gdyż każde działanie na partycjach i woluminach niesie ryzyko utraty danych, dlatego zawsze zalecane jest wykonanie kopii zapasowych przed przystąpieniem do zmian.</p>
<p>Artykuł <a href="https://soban.pl/pl/rozszerzanie-przestrzeni-swap-na-proxmoxie-przy-uzyciu-lvreduce/">Rozszerzanie przestrzeni SWAP na Proxmoxie przy użyciu lvreduce</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Automatyzacja Procesu Backupu w Proxmox: Praktyczny Skrypt i Konfiguracja Crontab</title>
		<link>https://soban.pl/pl/automatyzacja-procesu-backupu-w-proxmox-praktyczny-skrypt-i-konfiguracja-crontab/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Tue, 16 Apr 2024 11:47:44 +0000</pubDate>
				<category><![CDATA[Proxmox]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=435</guid>

					<description><![CDATA[<p>W dzisiejszych czasach, gdy dane stają się coraz bardziej wartościowe, odpowiednie zarządzanie backupami jest kluczowe dla bezpieczeństwa systemu informatycznego. W tym artykule przedstawiam skuteczny sposób na automatyzację backupu kluczowych plików konfiguracyjnych w systemach opartych na Proxmox za pomocą prostego skryptu bash oraz konfiguracji Crontab. Skrypt Bash do Backupu Katalogu /etc Plik /etc zawiera krytyczne pliki [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/pl/automatyzacja-procesu-backupu-w-proxmox-praktyczny-skrypt-i-konfiguracja-crontab/">Automatyzacja Procesu Backupu w Proxmox: Praktyczny Skrypt i Konfiguracja Crontab</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://soban.pl/wp-content/uploads/2024/04/image.png" alt="" class="wp-image-437" style="width:412px;height:auto" srcset="https://soban.pl/wp-content/uploads/2024/04/image.png 1024w, https://soban.pl/wp-content/uploads/2024/04/image-300x300.png 300w, https://soban.pl/wp-content/uploads/2024/04/image-150x150.png 150w, https://soban.pl/wp-content/uploads/2024/04/image-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>W dzisiejszych czasach, gdy dane stają się coraz bardziej wartościowe, odpowiednie zarządzanie backupami jest kluczowe dla bezpieczeństwa systemu informatycznego. W tym artykule przedstawiam skuteczny sposób na automatyzację backupu kluczowych plików konfiguracyjnych w systemach opartych na Proxmox za pomocą prostego skryptu bash oraz konfiguracji Crontab.</p>



<h4 class="wp-block-heading">Skrypt Bash do Backupu Katalogu <code>/etc</code></h4>



<p>Plik <code>/etc</code> zawiera krytyczne pliki konfiguracyjne systemu, które są niezbędne do prawidłowego funkcjonowania systemu operacyjnego i różnych aplikacji. Utrata lub uszkodzenie tych plików może prowadzić do poważnych problemów. Poniżej prezentuję skuteczny skrypt <code>backup-etc.sh</code>, który pozwala na zautomatyzowane tworzenie kopii zapasowych tego katalogu:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">#!/bin/bash
date_now=$(date +%Y_%m_%d-%H_%M_%S)
tar --use-compress-program zstd -cf /var/lib/vz/dump/vz-etc-$(hostname)-$date_now.tar.zst /etc/
find /var/lib/vz/dump/ -name vzup1-etc-* -type f -mtime +100 | xargs rm -f</pre></div>



<p>Ten skrypt wykonuje następujące operacje:</p>



<ol class="wp-block-list">
<li>Generuje aktualną datę i czas, które są dodawane do nazwy tworzonego archiwum, aby łatwo można było identyfikować poszczególne kopie.</li>



<li>Używa programu <code>tar</code> z kompresją <code>zstd</code> do stworzenia zarchiwizowanej i skompresowanej kopii katalogu <code>/etc</code>.</li>



<li>Usuwa archiwa starsze niż 100 dni z lokalizacji <code>/var/lib/vz/dump/</code>, dzięki czemu zapewniona jest optymalizacja przestrzeni dyskowej.</li>
</ol>



<h4 class="wp-block-heading">Dodanie Skryptu do Crontab</h4>



<p>Aby automatyzować proces tworzenia backupu, skrypt należy dodać do crontaba. Poniżej znajduje się przykładowa konfiguracja, która uruchamia skrypt codziennie o 2:40 nad ranem:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag"># crontab -e
40 2 * * * /root/backup-etc.sh &gt; /dev/null 2&gt;&amp;1</pre></div>



<p>Przekierowanie wyjścia do <code>/dev/null</code> zapewnia, że operacje są wykonywane cicho bez generowania dodatkowego outputu na standardowe wyjście.</p>



<h4 class="wp-block-heading">Pobranie Skryptu z Serwisu soban.pl</h4>



<p>Skrypt <code>backup-etc.sh</code> jest dostępny do pobrania również z serwisu soban.pl. Możesz go pobrać za pomocą poniższego polecenia <code>wget</code> i od razu zapisać jako plik <code>/root/backup-etc.sh</code>:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag"># wget -O /root/backup-etc.sh https://soban.pl/bash/backup-etc.sh &amp;&amp; chmod +x /root/backup-etc.sh</pre></div>



<p>Dzięki temu prostemu poleceniu, skrypt zostanie pobrany z serwera i nadany odpowiednie uprawnienia wykonywalności.</p>



<h4 class="wp-block-heading">Korzyści i Modyfikacje</h4>



<p>Skrypt <code>backup-etc.sh</code> jest elastyczny i można go łatwo modyfikować do potrzeb różnych systemów. Jest on domyślnie umieszczony w folderze <code>/var/lib/vz/dump/</code>, który jest standardowym miejscem przechowywania backupów w środowiskach Proxmox. Dzięki temu zarządzanie kopiami zapasowymi jest uproszczone i można je łatwo zintegrować z istniejącymi rozwiązaniami backupowymi.</p>



<p>Trzymając backupy przez 100 dni, zapewniamy równowagę między dostępnością a zarządzaniem przestrzenią dyskową. Stare kopie są automatycznie usuwane, co minimalizuje ryzyko przepełnienia dysku i zmniejsza koszty przechowywania danych.</p>



<h4 class="wp-block-heading">Podsumowanie</h4>



<p>Automatyzacja backupu za pomocą skryptu bash i Crontab to efektywna metoda na zabezpieczenie krytycznych danych systemowych. Skrypt <code>backup-etc.sh</code> zapewnia prostotę, elastyczność i efektywność, co czyni go doskonałym rozwiązaniem dla administratorów systemów Proxmox. Zachęcam do adaptacji i modyfikacji tego skryptu zgodnie z własnymi potrzebami, aby zapewnić jeszcze lepsze zabezpieczenie swojego środowiska IT.</p>
<p>Artykuł <a href="https://soban.pl/pl/automatyzacja-procesu-backupu-w-proxmox-praktyczny-skrypt-i-konfiguracja-crontab/">Automatyzacja Procesu Backupu w Proxmox: Praktyczny Skrypt i Konfiguracja Crontab</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Uproszczona instalacja Proxmox VE 8 na Debianie 12 Bookworm</title>
		<link>https://soban.pl/pl/uproszczona-instalacja-proxmox-ve-8-na-debianie-12-bookworm/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Thu, 22 Feb 2024 11:55:07 +0000</pubDate>
				<category><![CDATA[Patching]]></category>
		<category><![CDATA[Proxmox]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=403</guid>

					<description><![CDATA[<p>Proxmox VE to zaawansowana platforma do zarządzania serwerami open source, która integruje hypervisor KVM oraz kontenery LXC. Prezentujemy uproszczony proces instalacji Proxmox VE 8 na Debianie 12 Bookworm, oparty na oficjalnym przewodniku instalacji Proxmox VE &#8211; Proxmox VE Installation Guide. Wymagania wstępne: Skrypty instalacyjne Podzieliliśmy proces instalacji na dwa skrypty. Pierwszy skrypt przygotowuje system i [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/pl/uproszczona-instalacja-proxmox-ve-8-na-debianie-12-bookworm/">Uproszczona instalacja Proxmox VE 8 na Debianie 12 Bookworm</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>Proxmox VE</strong> to zaawansowana platforma do zarządzania serwerami open source, która integruje hypervisor KVM oraz kontenery LXC. Prezentujemy uproszczony proces instalacji Proxmox VE 8 na Debianie 12 Bookworm, oparty na oficjalnym przewodniku instalacji Proxmox VE &#8211; <a href="https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_12_Bookworm">Proxmox VE Installation Guide</a>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Wymagania wstępne:</h2>



<ul class="wp-block-list">
<li>Świeża instalacja <strong>Debiana 12 Bookworm</strong>.</li>



<li>Użytkownik z uprawnieniami sudo.</li>



<li>Dostęp do Internetu.</li>
</ul>



<h2 class="wp-block-heading">Skrypty instalacyjne</h2>



<p>Podzieliliśmy proces instalacji na dwa skrypty. Pierwszy skrypt przygotowuje system i instaluje jądro Proxmox VE. Drugi skrypt kontynuuje proces po restarcie systemu, instalując pozostałe pakiety Proxmox VE.</p>



<p>Pamiętaj, że wszystkie komendy należy wykonać z poziomu użytkownika root, więc:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag"># sudo su -</pre></div>



<h3 class="wp-block-heading">Pierwsza część: Przygotowanie systemu i instalacja jądra</h3>



<p>Rozpocznij od pobrania pierwszego skryptu, który przygotuje Twój system i zainstaluje jądro Proxmox VE:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag"># wget https://soban.pl/bash/install-proxmox-part1.sh
# chmod +x install-proxmox-part1.sh</pre></div>



<p>Uruchom skrypt następującym poleceniem:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag"># ./install-proxmox-part1.sh</pre></div>



<p>Oto zawartość skryptu:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">#!/bin/bash
# The script is an integral part of the article available at (part 1/2)
# https://soban.pl/simplified-proxmox-ve-8-installation-on-debian-12-bookworm/

# Introduction message
echo "Starting the setup for Proxmox VE installation on Debian Bookworm..."

# Display available network interfaces and their IP addresses
echo "Available network interfaces and IP addresses:"
ip -br -c a

# Retrieve the current hostname
CURRENT_HOSTNAME=$(hostname)

# Retrieve the current IP address
CURRENT_IP_ADDRESS=$(hostname -I | awk '{print $1}')

# Set up hostname
echo "Please enter the hostname for your Proxmox server (Press Enter to keep current: $CURRENT_HOSTNAME):"
read HOSTNAME
if [ -z "$HOSTNAME" ]; then
    HOSTNAME=$CURRENT_HOSTNAME
fi

# Set up IP address
echo "Based on the list above, please enter the IP address for your Proxmox server (Press Enter to keep current: $CURRENT_IP_ADDRESS):"
read IPADDRESS
if [ -z "$IPADDRESS" ]; then
    IPADDRESS=$CURRENT_IP_ADDRESS
fi

hostnamectl set-hostname "$HOSTNAME"

# Backup and configure /etc/hosts
cp /etc/hosts /etc/hosts.backup
cat &lt;&lt;EOF &gt; /etc/hosts
127.0.0.1       localhost
$IPADDRESS      $HOSTNAME

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
EOF

# Backup existing sources.list and prepare Proxmox VE repository
cp /etc/apt/sources.list /etc/apt/sources.list.backup
echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bookworm pve-no-subscription" &gt; /etc/apt/sources.list.d/pve-install-repo.list

# Add the Proxmox VE repository key
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
echo "Verifying the GPG key..."
sha512sum /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg | grep '7da6fe34168adc6e479327ba517796d4702fa2f8b4f0a9833f5ea6e6b48f6507a6da403a274fe201595edc86a84463d50383d07f64bdde2e3658108db7d6dc87'
if [ $? -ne 0 ]; then
    echo "GPG key verification failed. Aborting."
    exit 1
fi

# Update and upgrade the system
apt update &amp;&amp; apt full-upgrade -y

# Install the Proxmox VE kernel
apt install proxmox-default-kernel -y

# Install Proxmox VE and other necessary packages
apt install proxmox-ve postfix open-iscsi chrony -y

echo "Kernel installation completed. The system will now reboot. After rebooting, continue with the second part of the script."
reboot</pre></div>



<p>Po uruchomieniu pierwszego skryptu system zostanie ponownie uruchomiony. Na tym etapie mogą pojawić się różne dialogi systemowe, które są częścią standardowych kroków konfiguracji pakietów. Dla tej uproszczonej instalacji można zaakceptować domyślne opcje, naciskając Enter.</p>



<h3 class="wp-block-heading">Zrzuty ekranu podczas instalacji</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="221" src="https://soban.pl/wp-content/uploads/2024/02/grub-proxmox_installation-2-1024x221.png" alt="The selection of GRUB installation configuration." class="wp-image-374" srcset="https://soban.pl/wp-content/uploads/2024/02/grub-proxmox_installation-2-1024x221.png 1024w, https://soban.pl/wp-content/uploads/2024/02/grub-proxmox_installation-2-300x65.png 300w, https://soban.pl/wp-content/uploads/2024/02/grub-proxmox_installation-2-768x166.png 768w, https://soban.pl/wp-content/uploads/2024/02/grub-proxmox_installation-2.png 1353w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Konfiguracja <strong>GRUB</strong> – dostępna jest nowa wersja pliku konfiguracyjnego bootloadera GRUB. Zaleca się zachowanie aktualnie zainstalowanej wersji lokalnej, chyba że jesteś świadomy zmian. Tak jak w przypadku poprzednich dialogów, naciśnięcie Enter wybierze domyślną akcję.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="678" height="490" src="https://soban.pl/wp-content/uploads/2024/02/postfix-proxmox_installation.png" alt="The selection of postfix installation configuration." class="wp-image-357" srcset="https://soban.pl/wp-content/uploads/2024/02/postfix-proxmox_installation.png 678w, https://soban.pl/wp-content/uploads/2024/02/postfix-proxmox_installation-300x217.png 300w" sizes="auto, (max-width: 678px) 100vw, 678px" /></figure>



<p>Konfiguracja<strong> Postfix</strong> – ten dialog pojawia się podczas instalacji pakietu postfix, który jest agentem transportu poczty. Domyślna opcja „Internet Site” jest odpowiednia dla większości przypadków. Naciśnięcie Enter akceptuje tę konfigurację.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="344" src="https://soban.pl/wp-content/uploads/2024/02/system_FQND-proxmox_installation.png" alt="Setting the system mail name." class="wp-image-358" srcset="https://soban.pl/wp-content/uploads/2024/02/system_FQND-proxmox_installation.png 642w, https://soban.pl/wp-content/uploads/2024/02/system_FQND-proxmox_installation-300x161.png 300w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p><strong>System Mail Name</strong> &#8211; tutaj określasz FQDN (Fully Qualified Domain Name) dla poczty systemowej. Domyślna wartość jest zazwyczaj odpowiednia, chyba że masz określoną nazwę domeny dla swojego serwera. Ponownie, naciśnięcie Enter kontynuuje z domyślną konfiguracją.</p>



<p>Możliwe problemy napotkane pod koniec instalacji pierwszego skryptu, takie jak:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">Errors were encountered while processing:
 ifupdown2
 pve-manager
 proxmox-ve
E: Sub-process /usr/bin/dpkg returned an error code (1)</pre></div>



<p>Jednak druga część skryptu, wykonana po restarcie, rozwiązuje te problemy. Po pomyślnym restarcie maszyny zaloguj się do systemu i kontynuuj z drugim skryptem.</p>



<h3 class="wp-block-heading">Druga część: Zakończenie instalacji Proxmox VE</h3>



<p>Po restarcie systemu kontynuuj pobieranie drugiego skryptu:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag"># wget https://soban.pl/bash/install-proxmox-part2.sh
# chmod +x install-proxmox-part2.sh</pre></div>



<p>Wykonaj drugą część instalacji za pomocą polecenia:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag"># ./install-proxmox-part2.sh</pre></div>



<p>Oto zawartość drugiego skryptu:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">#!/bin/bash
# The script is an integral part of the article available at (part 2/2)
# https://soban.pl/simplified-proxmox-ve-8-installation-on-debian-12-bookworm/

# Introduction message
echo "Continuing Proxmox VE installation after reboot..."

# Install upgrade
apt upgrade -y

# Optional: Remove the Debian default kernel
apt remove linux-image-amd64 'linux-image-6.1*' -y
update-grub

# Optionally remove the os-prober package
apt remove os-prober -y

# Clean up installation repository entry
rm /etc/apt/sources.list.d/pve-install-repo.list

# Retrieve the server's IP address for the Proxmox web interface link
IP_ADDRESS=$(hostname -I | awk '{print $1}')
echo "Proxmox VE installation completed."
echo "You can now connect to the Proxmox VE web interface using:"
echo "https://$IP_ADDRESS:8006"
echo "Please log in using the 'root' username and your root password."</pre></div>



<p>Po zakończeniu działania drugiego skryptu, uzyskasz dostęp do interfejsu webowego Proxmox VE za pomocą adresu URL wyświetlonego na końcu skryptu. Zaloguj się używając nazwy użytkownika ‘root’ oraz swojego hasła root.</p>



<p>Podczas ładowania strony, możesz napotkać błąd zaufania certyfikatu – jest to normalne na tym etapie i bezpiecznie możesz zaakceptować, że jest to niebezpieczne i kontynuować dostęp do strony zarządzania Proxmox. Jeśli nie znasz hasła root, możesz je zresetować, wykonując ‘<code><strong>passwd</strong></code>‘ jako root. Powodzenia!</p>
<p>Artykuł <a href="https://soban.pl/pl/uproszczona-instalacja-proxmox-ve-8-na-debianie-12-bookworm/">Uproszczona instalacja Proxmox VE 8 na Debianie 12 Bookworm</a> pochodzi z serwisu <a href="https://soban.pl/pl">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
