====== 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 \\ ==== Löschen eines Repos ==== proxmox-offline-mirror config mirror remove --id --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/bookworm" 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 \\