#!/usr/bin/env bash set -u echo echo "==============================================" echo " Docker APT Repo HTTPS -> HTTP LXC Converter" echo "==============================================" echo for CTID in $(pct list | awk 'NR>1 {print $1}'); do STATUS=$(pct status "$CTID" 2>/dev/null | awk '{print $2}') NAME=$(pct config "$CTID" 2>/dev/null | awk -F': ' '/^hostname:/ {print $2}') echo "----------------------------------------------" echo "Container: $CTID${NAME:+ ($NAME)}" echo "Status: $STATUS" if [[ "$STATUS" != "running" ]]; then echo "SKIP: Container is not running." continue fi OS_ID=$(pct exec "$CTID" -- sh -c \ '. /etc/os-release 2>/dev/null && echo "$ID"' \ 2>/dev/null || true) if [[ "$OS_ID" != "debian" ]]; then echo "SKIP: Not Debian." continue fi MATCHES=$(pct exec "$CTID" -- sh -c ' grep -RIl \ "https://download\.docker\.com" \ /etc/apt/sources.list \ /etc/apt/sources.list.d \ 2>/dev/null || true ') if [[ -z "$MATCHES" ]]; then echo "OK: No HTTPS Docker APT repo found." continue fi echo "Found Docker repo in:" while IFS= read -r FILE; do [[ -z "$FILE" ]] && continue echo " $FILE" TIMESTAMP=$(date +%Y%m%d-%H%M%S) BASENAME=$(basename "$FILE") BACKUP_DIR="/root/apt-backups/docker" BACKUP="${BACKUP_DIR}/${BASENAME}.${TIMESTAMP}.bak" pct exec "$CTID" -- sh -c " mkdir -p '$BACKUP_DIR' && cp '$FILE' '$BACKUP' && sed -i \ 's|https://download\.docker\.com|http://download.docker.com|g' \ '$FILE' " if [[ $? -eq 0 ]]; then echo " CHANGED: https -> http" echo " Backup: $BACKUP" else echo " ERROR: Failed to modify $FILE" fi done <<< "$MATCHES" echo echo "Current Docker repo entries:" pct exec "$CTID" -- sh -c ' grep -RHn \ "download\.docker\.com" \ /etc/apt/sources.list \ /etc/apt/sources.list.d \ 2>/dev/null || true ' echo done echo "==============================================" echo " Finished" echo "=============================================="