#!/usr/bin/env bash # ══════════════════════════════════════════════════════════════════ # setup-local-cache.sh — Configure apt-cacher-ng + local SecuBox repo # Usage: sudo bash scripts/setup-local-cache.sh # ══════════════════════════════════════════════════════════════════ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" REPO_DIR="$(dirname "$SCRIPT_DIR")" CACHE_DIR="${REPO_DIR}/cache" LOCAL_REPO="${CACHE_DIR}/repo" CACHE_PORT="3142" RED='\033[0;31m'; CYAN='\033[0;36m'; GOLD='\033[0;33m' GREEN='\033[0;32m'; NC='\033[0m'; BOLD='\033[1m' log() { echo -e "${CYAN}[cache]${NC} $*"; } ok() { echo -e "${GREEN}[ OK ]${NC} $*"; } err() { echo -e "${RED}[FAIL ]${NC} $*" >&2; exit 1; } warn() { echo -e "${GOLD}[ WARN]${NC} $*"; } [[ $EUID -ne 0 ]] && err "Ce script doit être exécuté en root (sudo)" log "══════════════════════════════════════════════════════════" log "Configuration du cache local APT + repo SecuBox" log "══════════════════════════════════════════════════════════" # ── 1. apt-cacher-ng pour cacher les paquets Debian ────────────── log "1/4 Installation apt-cacher-ng..." if ! dpkg -l apt-cacher-ng >/dev/null 2>&1; then apt-get update -q apt-get install -y -q apt-cacher-ng ok "apt-cacher-ng installé" else ok "apt-cacher-ng déjà installé" fi # Configuration apt-cacher-ng mkdir -p /etc/apt-cacher-ng/acng.conf.d mkdir -p "${CACHE_DIR}/apt-cacher-ng" chown apt-cacher-ng:apt-cacher-ng "${CACHE_DIR}/apt-cacher-ng" cat > /etc/apt-cacher-ng/acng.conf.d/secubox.conf </dev/null 2>&1; then apt-get install -y -q reprepro gnupg fi # Config reprepro cat > "${LOCAL_REPO}/conf/distributions" < "${LOCAL_REPO}/conf/options" </dev/null && [[ -d /etc/nginx/sites-available ]]; then cat > /etc/nginx/sites-available/secubox-local-repo </dev/null || true nginx -t && systemctl reload nginx ok "Repo local accessible sur http://localhost:8080" else # Fallback avec Python http.server cat > /etc/systemd/system/secubox-local-repo.service < "${REPO_DIR}/scripts/local-repo-add.sh" <<'SCRIPT' #!/usr/bin/env bash # Ajouter un .deb au repo local set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" REPO_DIR="$(dirname "$SCRIPT_DIR")" LOCAL_REPO="${REPO_DIR}/cache/repo" SUITE="${1:-bookworm}" shift || true for DEB in "$@"; do [[ -f "$DEB" ]] || { echo "SKIP: $DEB (not found)"; continue; } reprepro -b "${LOCAL_REPO}" includedeb "${SUITE}" "$DEB" echo "OK: Added $(basename "$DEB") to ${SUITE}" done SCRIPT chmod +x "${REPO_DIR}/scripts/local-repo-add.sh" # Script pour builder et ajouter un package cat > "${REPO_DIR}/scripts/build-add-local.sh" <<'SCRIPT' #!/usr/bin/env bash # Builder un package et l'ajouter au repo local set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" REPO_DIR="$(dirname "$SCRIPT_DIR")" PKG="${1:-}" SUITE="${2:-bookworm}" ARCH="${3:-$(dpkg --print-architecture)}" [[ -z "$PKG" ]] && { echo "Usage: $0 [suite] [arch]"; exit 1; } PKG_DIR="${REPO_DIR}/packages/${PKG}" [[ -d "$PKG_DIR" ]] || { echo "Package not found: $PKG_DIR"; exit 1; } cd "$PKG_DIR" if [[ "$ARCH" == "arm64" ]] && [[ "$(uname -m)" != "aarch64" ]]; then dpkg-buildpackage -a arm64 --host-arch arm64 -us -uc -b else dpkg-buildpackage -us -uc -b fi # Find generated .deb cd "${REPO_DIR}/packages" DEB=$(ls -t ${PKG}_*.deb 2>/dev/null | head -1) [[ -n "$DEB" ]] && bash "${SCRIPT_DIR}/local-repo-add.sh" "$SUITE" "$DEB" SCRIPT chmod +x "${REPO_DIR}/scripts/build-add-local.sh" ok "Scripts helper créés" # ── Résumé ─────────────────────────────────────────────────────── echo "" echo -e "${GOLD}${BOLD}════════════════════════════════════════════════════════${NC}" echo -e "${GREEN}${BOLD} Cache local configuré !${NC}" echo "" echo -e " APT Cache (apt-cacher-ng) : http://localhost:${CACHE_PORT}" echo -e " Local Repo : http://localhost:8080" echo -e " Repo path : ${LOCAL_REPO}" echo "" echo -e "${CYAN} Commandes utiles :${NC}" echo -e " # Builder et ajouter un package au repo local" echo -e " bash scripts/build-add-local.sh secubox-crowdsec bookworm" echo "" echo -e " # Ajouter un .deb existant" echo -e " bash scripts/local-repo-add.sh bookworm packages/*.deb" echo "" echo -e " # Builder une image avec le cache local" echo -e " sudo bash image/build-image.sh --board vm-x64 --local-cache" echo -e "${GOLD}${BOLD}════════════════════════════════════════════════════════${NC}"