User Tools

Site Tools


virtualisierung:proxmox:pom_repo

This is an old revision of the document!


Proxmox Offline Mirror

blalb albla bla bla

Repos anlegen / verwalten

Es werden vier Repos angelegt.

  • 1x PVE
  • 3x Debian

PVE 8 Repo - non Sub

proxmox-offline-mirror config mirror add \
 --id pve-8-non-sub \
 --architectures amd64 \
 --architectures all \
 --repository 'deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription main contrib' \
 --key-path /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg \
 --sync true \
 --verify true \
 --base-dir /opt/pom


Debian 12 Repo - Main

proxmox-offline-mirror config mirror add \
 --id debian-12-main \
 --architectures amd64 \
 --architectures all \
 --repository 'deb http://debian.anexia.at/debian bookworm main contrib non-free' \
 --key-path /etc/apt/trusted.gpg.d/debian-archive-bookworm-automatic.asc \
 --sync true \
 --verify true \
 --base-dir /opt/pom \
 --skip-sections games \
 --skip-sections x11 \
 --skip-sections graphics \
 --skip-sections video \
 --skip-sections sound \
 --skip-sections hamradio \
 --skip-sections tex \
 --skip-packages .*desktop \
 --skip-packages gnome.* \
 --skip-packages .*gnome.* \
 --skip-packages gnome \
 --skip-packages gnome3 \
 --skip-packages gnome-shell.* \
 --skip-packages gnome-themes.* \
 --skip-packages gnome-session.* \
 --skip-packages gnome-control.* \
 --skip-packages gnome-panel.* \
 --skip-packages gnome-terminal.* \
 --skip-packages gnome-settings.* \
 --skip-packages gnome-online.* \
 --skip-packages gnome-keyring.* \
 --skip-packages libgnome.* \
 --skip-packages kde.* \
 --skip-packages .*kde.* \
 --skip-packages plasma.* \
 --skip-packages lxde.* \
 --skip-packages xfce.* \
 --skip-packages mate.* \
 --skip-packages cinnamon.* \
 --skip-packages xserver.* \
 --skip-packages xorg.* \
 --skip-packages wayland.* \
 --skip-packages fonts-.* \
 --skip-packages xfonts.* \
 --skip-packages themes.* \
 --skip-packages qt.* \
 --skip-packages libqt.* \
 --skip-packages libgtk.* \
 --skip-packages gtk.* \
 --skip-packages sddm.* \
 --skip-packages gdm.* \
 --skip-packages lightdm.* \
 --skip-packages dconf.* \
 --skip-packages ffmpeg.* \
 --skip-packages vlc.* \
 --skip-packages libreoffice.* \
 --skip-packages gimp.* \
 --skip-packages gedit.* \
 --skip-packages xterm.* \
 --skip-packages evince.* \
 --skip-packages nautilus.* \
 --skip-packages pulseaudio.* \
 --skip-packages pipewire.* \
 --skip-packages alsa.* \
 --skip-packages jack.* \
 --skip-packages sound.* \
 --skip-packages media.* \
 --skip-packages cups.* \
 --skip-packages printer.* \
 --skip-packages poppler.* \
 --skip-packages abiword.* \
 --skip-packages gnumeric.* \
 --skip-packages hunspell.* \
 --skip-packages aspell.* \
 --skip-packages ibus.* \
 --skip-packages uim.* \
 --skip-packages caribou.* \
 --skip-packages onboard.* \
 --skip-packages at-spi.* \
 --skip-packages speech-dispatcher.* \
 --skip-packages modemmanager.* \
 --skip-packages bluetooth.* \
 --skip-packages wpa.* \
 --skip-packages ppp \
 --skip-packages nodejs.* \
 --skip-packages npm.* \
 --skip-packages ruby.* 


Debian 12 Repo - Update

proxmox-offline-mirror config mirror add \
 --id debian-12-updates \
 --architectures amd64 --architectures all \
 --repository 'deb http://debian.anexia.at/debian bookworm-updates main contrib non-free' \
 --key-path /etc/apt/trusted.gpg.d/debian-archive-bookworm-automatic.asc \
 --sync true --verify true \
 --base-dir /opt/pom \
 --skip-sections games \
 --skip-sections x11 \
 --skip-sections graphics \
 --skip-sections video \
 --skip-sections sound \
 --skip-sections hamradio \
 --skip-sections tex \
 --skip-packages .*desktop \
 --skip-packages gnome.* \
 --skip-packages .*gnome.* \
 --skip-packages gnome \
 --skip-packages gnome3 \
 --skip-packages gnome-shell.* \
 --skip-packages gnome-themes.* \
 --skip-packages gnome-session.* \
 --skip-packages gnome-control.* \
 --skip-packages gnome-panel.* \
 --skip-packages gnome-terminal.* \
 --skip-packages gnome-settings.* \
 --skip-packages gnome-online.* \
 --skip-packages gnome-keyring.* \
 --skip-packages libgnome.* \
 --skip-packages kde.* \
 --skip-packages .*kde.* \
 --skip-packages plasma.* \
 --skip-packages lxde.* \
 --skip-packages xfce.* \
 --skip-packages mate.* \
 --skip-packages cinnamon.* \
 --skip-packages xserver.* \
 --skip-packages xorg.* \
 --skip-packages wayland.* \
 --skip-packages fonts-.* \
 --skip-packages xfonts.* \
 --skip-packages themes.* \
 --skip-packages qt.* \
 --skip-packages libqt.* \
 --skip-packages libgtk.* \
 --skip-packages gtk.* \
 --skip-packages sddm.* \
 --skip-packages gdm.* \
 --skip-packages lightdm.* \
 --skip-packages dconf.* \
 --skip-packages ffmpeg.* \
 --skip-packages vlc.* \
 --skip-packages libreoffice.* \
 --skip-packages gimp.* \
 --skip-packages gedit.* \
 --skip-packages xterm.* \
 --skip-packages evince.* \
 --skip-packages nautilus.* \
 --skip-packages pulseaudio.* \
 --skip-packages pipewire.* \
 --skip-packages alsa.* \
 --skip-packages jack.* \
 --skip-packages sound.* \
 --skip-packages media.* \
 --skip-packages cups.* \
 --skip-packages printer.* \
 --skip-packages poppler.* \
 --skip-packages abiword.* \
 --skip-packages gnumeric.* \
 --skip-packages hunspell.* \
 --skip-packages aspell.* \
 --skip-packages ibus.* \
 --skip-packages uim.* \
 --skip-packages caribou.* \
 --skip-packages onboard.* \
 --skip-packages at-spi.* \
 --skip-packages speech-dispatcher.* \
 --skip-packages modemmanager.* \
 --skip-packages bluetooth.* \
 --skip-packages wpa.* \
 --skip-packages ppp \
 --skip-packages nodejs.* \
 --skip-packages npm.* \
 --skip-packages ruby.* 


Debian 12 Repo - Security

proxmox-offline-mirror config mirror add \
 --id debian-12-security \
 --architectures amd64 --architectures all \
 --repository 'deb http://security.debian.org/debian-security bookworm-security main contrib non-free' \
 --key-path /etc/apt/trusted.gpg.d/debian-archive-bookworm-security-automatic.asc \
 --sync true --verify true \
 --base-dir /opt/pom \
 --skip-sections games \
 --skip-sections x11 \
 --skip-sections graphics \
 --skip-sections video \
 --skip-sections sound \
 --skip-sections hamradio \
 --skip-sections tex \
 --skip-packages .*desktop \
 --skip-packages gnome.* \
 --skip-packages .*gnome.* \
 --skip-packages gnome \
 --skip-packages gnome3 \
 --skip-packages gnome-shell.* \
 --skip-packages gnome-themes.* \
 --skip-packages gnome-session.* \
 --skip-packages gnome-control.* \
 --skip-packages gnome-panel.* \
 --skip-packages gnome-terminal.* \
 --skip-packages gnome-settings.* \
 --skip-packages gnome-online.* \
 --skip-packages gnome-keyring.* \
 --skip-packages libgnome.* \
 --skip-packages kde.* \
 --skip-packages .*kde.* \
 --skip-packages plasma.* \
 --skip-packages lxde.* \
 --skip-packages xfce.* \
 --skip-packages mate.* \
 --skip-packages cinnamon.* \
 --skip-packages xserver.* \
 --skip-packages xorg.* \
 --skip-packages wayland.* \
 --skip-packages fonts-.* \
 --skip-packages xfonts.* \
 --skip-packages themes.* \
 --skip-packages qt.* \
 --skip-packages libqt.* \
 --skip-packages libgtk.* \
 --skip-packages gtk.* \
 --skip-packages sddm.* \
 --skip-packages gdm.* \
 --skip-packages lightdm.* \
 --skip-packages dconf.* \
 --skip-packages ffmpeg.* \
 --skip-packages vlc.* \
 --skip-packages libreoffice.* \
 --skip-packages gimp.* \
 --skip-packages gedit.* \
 --skip-packages xterm.* \
 --skip-packages evince.* \
 --skip-packages nautilus.* \
 --skip-packages pulseaudio.* \
 --skip-packages pipewire.* \
 --skip-packages alsa.* \
 --skip-packages jack.* \
 --skip-packages sound.* \
 --skip-packages media.* \
 --skip-packages cups.* \
 --skip-packages printer.* \
 --skip-packages poppler.* \
 --skip-packages abiword.* \
 --skip-packages gnumeric.* \
 --skip-packages hunspell.* \
 --skip-packages aspell.* \
 --skip-packages ibus.* \
 --skip-packages uim.* \
 --skip-packages caribou.* \
 --skip-packages onboard.* \
 --skip-packages at-spi.* \
 --skip-packages speech-dispatcher.* \
 --skip-packages modemmanager.* \
 --skip-packages bluetooth.* \
 --skip-packages wpa.* \
 --skip-packages ppp \
 --skip-packages nodejs.* \
 --skip-packages npm.* \
 --skip-packages ruby.* 


Anzeigen Repo Liste

proxmox-offline-mirror config mirror list


Syncen der Repos

proxmox-offline-mirror mirror snapshot create REPO
proxmox-offline-mirror mirror snapshot create-all


Anzeigen der Snapshots

proxmox-offline-mirror mirror snapshot list


Löschen eines Snapshots

proxmox-offline-mirror mirror snapshot remove <repoid> <snapshot>


Löschen eines Repos

proxmox-offline-mirror config mirror remove --id <repoid> --remove-data 


proxmox-offline-mirror mirror gc


NGINX vorbereiten

Damit die Repos abgeholt werden können wird NGINX als Webserver her halten.

apt install nginx


NGINX Config

/etc/nginx/sites-enabled/default

root /var/www/html;

location / {
    try_files $uri $uri/ =404;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
    gzip off;
    add_header Cache-Control no-cache;
}


Sync Script

Dieses Script synct die Repos und verlinkt den aktuellen Snapshot zum NGINX.

#!/bin/bash

#####################
### Configuration ###
#####################
BASE_DIR="/opt/pom"
WEB_DIR="/var/www/html"
REPOS=("debian-12-main" "debian-12-updates" "debian-12-security" "pve-8-non-sub")
SYMLINK_NAMES=("debian" "debian-updates" "debian-security" "pve-non-sub")
KEEP_SNAPSHOTS=3  # How many snapshots to keep per repo



##############
### Colors ###
##############
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color

echo_info() {
    echo -e "${GREEN}[INFO] $1${NC}"
}

echo_error() {
    echo -e "${RED}[ERROR] $1${NC}" >&2
}



########################
### Sync all mirrors ###
########################
echo_info "Syncing all configured mirrors..."
if ! proxmox-offline-mirror mirror snapshot create-all; then
    echo_error "Failed to sync mirrors with 'snapshot create-all'."
    exit 1
fi



###########################################
### Remove existing symlinks in WEB_DIR ###
###########################################
echo_info "Removing old symlinks in $WEB_DIR..."
for link in "${SYMLINK_NAMES[@]}"; do
    if [[ -L "$WEB_DIR/$link" || -e "$WEB_DIR/$link" ]]; then
        rm -rf "$WEB_DIR/$link" || {
            echo_error "Failed to remove $WEB_DIR/$link"
            exit 1
        }
    fi
done



##################################################
### Create new symlinks to the latest snapshot ###
##################################################
echo_info "Creating symlinks to latest snapshots..."
for i in "${!REPOS[@]}"; do
    REPO="${REPOS[$i]}"
    LINK_NAME="${SYMLINK_NAMES[$i]}"
    SNAPSHOT_DIR="$BASE_DIR/$REPO/"

    if [[ ! -d "$SNAPSHOT_DIR" ]]; then
        echo_error "Snapshot directory $SNAPSHOT_DIR does not exist."
        continue
    fi

    # Find latest snapshot (sorted lexically, newest last)
    LATEST_SNAPSHOT=$(ls -1 "$SNAPSHOT_DIR" | sort | tail -n 1)

    if [[ -z "$LATEST_SNAPSHOT" ]]; then
        echo_error "No snapshots found for $REPO."
        continue
    fi

    SNAPSHOT_PATH="$SNAPSHOT_DIR/$LATEST_SNAPSHOT"

    if [[ ! -d "$SNAPSHOT_PATH" ]]; then
        echo_error "Snapshot path $SNAPSHOT_PATH is not a directory."
        continue
    fi

    ln -s "$SNAPSHOT_PATH" "$WEB_DIR/$LINK_NAME" || {
        echo_error "Failed to create symlink for $LINK_NAME"
        exit 1
    }
    echo_info "Linked $SNAPSHOT_PATH → $WEB_DIR/$LINK_NAME"
done



############################
### Delete old snapshots ###
############################
echo_info "Pruning old snapshots (keeping latest $KEEP_SNAPSHOTS)..."
for REPO in "${REPOS[@]}"; do
    SNAPSHOT_LIST=$(proxmox-offline-mirror mirror snapshot list "$REPO" | grep '^-' | sed 's/- //' | sort)

    TOTAL=$(echo "$SNAPSHOT_LIST" | wc -l)

    if (( TOTAL > KEEP_SNAPSHOTS )); then
        TO_DELETE=$(echo "$SNAPSHOT_LIST" | head -n -$KEEP_SNAPSHOTS)
        while read -r SNAP_ID; do
            if [[ -n "$SNAP_ID" ]]; then
                echo_info "Deleting snapshot $SNAP_ID from $REPO..."
                proxmox-offline-mirror mirror snapshot remove "$REPO" "$SNAP_ID" || {
                    echo_error "Failed to delete snapshot $SNAP_ID for $REPO"
                }
            fi
        done <<< "$TO_DELETE"
    else
        echo_info "No old snapshots to delete for $REPO."
    fi
done



##########################
### Garbage collection ###
##########################
echo_info "Running garbage collection..."
if ! proxmox-offline-mirror mirror gc; then
    echo_error "Garbage collection failed."
    exit 1
fi

echo_info "Mirror update and cleanup done."
exit 0


virtualisierung/proxmox/pom_repo.1753437182.txt.gz · Last modified: by stone