uckg2:index
Table des matières
UCK G2 Debian Docker
Prérequis
Avant de commencer suivez ces étapes :
- Restaurer le UCK G2 avec le dernier Firmware
- Fixer l'adresse ip, passerelle et DNS
- Configurer la console en mode off-line
- Donner lui un nom
- Activer SSH avec un password
Script
Avant d’exécuter le script modifier les adresse ip de la passerelle !!
Dans /root –> nano setup.sh –> copier le script –> chmod +x setup.sh –> ./setup.sh
#!/usr/bin/env bash # ============================================================================== # UCK Gen 2 / Gen 2 Plus - Conversion Debian & Déploiement Arcane.app # v10.7 - Network Fix + Immuto-SSH + 19GB Docker Storage + Real LAN IP # ============================================================================== set -uo pipefail RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' CYAN='\033[0;36m' NC='\033[0m' info() { echo -e "${CYAN}[INFO]${NC} $1"; } success() { echo -e "${GREEN}[OK]${NC} $1"; } warn() { echo -e "${YELLOW}[ATTENTION]${NC} $1"; } error() { echo -e "${RED}[ERREUR]${NC} $1"; exit 1; } check_liveness() { if ! systemctl is-active --quiet ssh || ! ss -tlnp 2>/dev/null | grep -q ':22\b'; then error "sshd s'est arrêté ou le port 22 ne répond plus. Interruption de sécurité !" fi } if [ "$EUID" -ne 0 ]; then error "Ce script doit être exécuté en tant que root." fi echo -e "${CYAN}" cat << "EOF" _ _ ___ _ __ ___ ___ ___ _ _ | || |/ __| |/ / / __|/ __|_ _| || | | || | (__| ' < | (_ | (__ | || __ | \___/ \___|_|\_\ \___|\___|___|_||_| Debian Conversion & Arcane Setup Script (v10.7) EOF echo -e "${NC}" # ------------------------------------------------------------------------------ # ÉTAPE 0 : VÉRIFICATION ET SÉCURISATION DU RÉSEAU (GW: 192.168.0.64) # ------------------------------------------------------------------------------ info "0/6 : Fixation de la passerelle (192.168.0.64) et des DNS..." IFACE=$(ip -4 route show default 2>/dev/null | awk '{print $5}' | head -n1) if [ -z "$IFACE" ]; then IFACE=$(ip -4 link show | grep -E 'eth0|enp|end' | cut -d: -f2 | tr -d ' ' | head -n1) fi # Application forcée de la passerelle ip route del default 2>/dev/null || true ip route add default via 192.168.0.64 dev "$IFACE" 2>/dev/null || true # Réécriture propre des DNS système rm -f /etc/resolv.conf cat << RESOLV_EOF > /etc/resolv.conf nameserver 1.1.1.1 nameserver 8.8.8.8 RESOLV_EOF # Purge des règles Iptables UniFi pour autoriser tout le trafic iptables -F 2>/dev/null || true iptables -X 2>/dev/null || true iptables -P INPUT ACCEPT 2>/dev/null || true iptables -P FORWARD ACCEPT 2>/dev/null || true iptables -P OUTPUT ACCEPT 2>/dev/null || true # Test d'accès IP direct avec le paramètre -n (évite le blocage DNS inversé) if ping -n -c 1 -W 2 1.1.1.1 &>/dev/null; then success "Connectivité réseau opérationnelle via 192.168.0.64." else warn "Attention: Impossible de joindre 1.1.1.1. Vérifiez que la passerelle est active." fi # ------------------------------------------------------------------------------ # ÉTAPE 1 : VERROUILLAGE IMMUABLE & WATCHDOG SSH (FIX NO-DISCONNECT) # ------------------------------------------------------------------------------ info "1/6 : Lock-out permanent et immuable d'OpenSSH..." apt-get update -y || true apt-get install -y openssh-server e2fsprogs rsync || true # Déverrouillage temporaire si déjà verrouillé pour appliquer la configuration chattr -i /etc/ssh/sshd_config 2>/dev/null || true systemctl unmask ssh 2>/dev/null || true sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config # Verrouillage immuable du fichier de configuration contre tout écrasement système chattr +i /etc/ssh/sshd_config # Déploiement du service Watchdog (relance SSH automatique si coupé) cat << 'WATCHDOG_EOF' > /etc/systemd/system/ssh-watchdog.service [Unit] Description=Watchdog SSH Maintien Port 22 After=network.target [Service] Type=simple ExecStart=/bin/bash -c 'while true; do if ! systemctl is-active --quiet ssh; then systemctl restart ssh; fi; sleep 10; done' Restart=always [Install] WantedBy=multi-user.target WATCHDOG_EOF systemctl daemon-reload systemctl enable ssh-watchdog.service systemctl start ssh-watchdog.service 2>/dev/null || true # Utilisation de RELOAD pour préserver la session SSH active sans provoquer de Broken pipe systemctl reload ssh || systemctl enable ssh check_liveness success "Serveur SSH rendu IMMUABLE et protégé par Watchdog." # ------------------------------------------------------------------------------ # ÉTAPE 2 : PURGE SÉCURISÉE DES PAQUETS ET SERVICES UNIFI (ANTI-BRICK) # ------------------------------------------------------------------------------ info "2/6 : Purge contrôlée des paquets UniFi..." # Garde-fou Anti-Brick (Ces paquets ne doivent JAMAIS être purgés) FORBIDDEN="ck-ui ubnt-tools" # Liste complète des paquets UniFi à cibler TARGET_PACKAGES="unifi-assets-uckp unifi-assets-uckg2 unifi-email-templates-all python3-unifi-console-protos mongodb-server mongodb-clients mongodb-server-core unifi unifi-core unifi-directory unifi-identity-update uid-agent ucs-agent uos-agent uos-discovery-client uos ulp-go ustd ubnt-systemhub ubnt-unifi-setup ucore-setup-listener" # Désactivation et MASK des services UniFi et de mise à jour/restauration UNITS="ck-splash-reboot.service ck-splash-shutdown.service ck-ui.service infctld-emergency.service infctld.service ubnt-systemhub.service ubnt-unifi-setup.service ucore-setup-listener.service ucs-agent.service uhwd.service uid-agent.service ulp-go.service unifi-core.service unifi-directory.service unifi-identity-update.service unifi.service uos-agent.service uos-discovery-client.service usd.service usdbd.service ubnt-dpkg-restore.service ubnt-archive.service" for u in $UNITS; do systemctl disable --now "$u" 2>/dev/null || true systemctl mask "$u" 2>/dev/null || true done # Identification et suppression des paquets présents TO_PURGE="" for pkg in $TARGET_PACKAGES; do if dpkg -l | grep -qE "^i[i|c]\s+${pkg}\b"; then if ! echo "$FORBIDDEN" | grep -qx "$pkg"; then TO_PURGE="$TO_PURGE $pkg" fi fi done if [ -n "$TO_PURGE" ]; then info "Suppression des paquets : $TO_PURGE" apt-get purge -y $TO_PURGE || true apt-get autoremove --purge -y apt-get clean check_liveness success "Surcouche applicative UniFi supprimée." else success "Aucun paquet UniFi résiduel à purger." fi # Nettoyage des dossiers de données UniFi & Bases Postgres résiduelles info "Nettoyage des résidus /data/ et bases PostgreSQL..." rm -rf /data/unifi /data/uos /data/autobackup if command -v psql >/dev/null 2>&1; then EXISTING_DBS=$(sudo -u postgres psql -lqt 2>/dev/null | cut -d'|' -f1 | tr -d ' ' || true) for db in unifi-core unifi-identity-update; do if echo "$EXISTING_DBS" | grep -qx "$db"; then sudo -u postgres dropdb "$db" 2>/dev/null || true sudo -u postgres dropuser "$db" 2>/dev/null || true fi done fi apt-get install -y curl wget ca-certificates openssl jq htop nano || true # ------------------------------------------------------------------------------ # ÉTAPE 3 : CONFIGURATION ÉCRAN OLED # ------------------------------------------------------------------------------ info "3/6 : Configuration de l'écran OLED..." if [ -f "/usr/local/bin/cloudkey" ] && systemctl is-active --quiet cloudkey 2>/dev/null; then success "Démon OLED déjà actif." else OLED_SUCCESS=false if curl -fsSL -k "https://github.com/jnovack/cloudkey/releases/download/v1.2.0/cloudkey-v1.2.0-linux-arm64" -o /usr/local/bin/cloudkey 2>/dev/null; then OLED_SUCCESS=true fi if [ "$OLED_SUCCESS" = true ]; then chmod +x /usr/local/bin/cloudkey cat << 'SERVICE_EOF' > /etc/systemd/system/cloudkey.service [Unit] Description=Custom OLED Display Daemon After=network-online.target Wants=network-online.target [Service] Type=simple ExecStart=/usr/local/bin/cloudkey Restart=always RestartSec=5 [Install] WantedBy=multi-user.target SERVICE_EOF systemctl daemon-reload systemctl enable --now cloudkey success "OLED configuré avec succès." fi fi # ------------------------------------------------------------------------------ # ÉTAPE 4 : DOCKER ENGINE (SUR PARTITION 19GB /srv) # ------------------------------------------------------------------------------ info "4/6 : Configuration de Docker Engine sur la partition 19GB (/srv)..." if ! command -v docker &> /dev/null; then curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh rm -f get-docker.sh fi systemctl stop docker 2>/dev/null || true # Création du dossier cible sur la grande partition de 19 Go mkdir -p /srv/docker mkdir -p /etc/docker # Utilisation des DNS de l'hôte (pas de blocage d'IPs externes pour Docker) cat << 'DOCKER_CONF_EOF' > /etc/docker/daemon.json { "data-root": "/srv/docker", "storage-driver": "vfs" } DOCKER_CONF_EOF systemctl restart docker systemctl enable docker success "Docker configuré pour utiliser la partition 19 Go (/srv/docker)." # ------------------------------------------------------------------------------ # ÉTAPE 5 : DÉPLOIEMENT ARCANE.APP # ------------------------------------------------------------------------------ info "5/6 : Déploiement d'Arcane.app..." ARCANE_DIR="/opt/arcane" mkdir -p "$ARCANE_DIR" ENCRYPTION_KEY="hex:$(openssl rand -hex 32)" JWT_SECRET=$(openssl rand -hex 32) cat << COMPOSE_EOF > "$ARCANE_DIR/docker-compose.yml" services: arcane: image: ghcr.io/getarcaneapp/manager:latest container_name: arcane network_mode: host volumes: - /var/run/docker.sock:/var/run/docker.sock - arcane-data:/app/data environment: - PORT=3552 - APP_URL=http://localhost:3552 - PUID=1000 - PGID=1000 - ENCRYPTION_KEY=${ENCRYPTION_KEY} - JWT_SECRET=${JWT_SECRET} cgroup: host restart: unless-stopped volumes: arcane-data: COMPOSE_EOF cd "$ARCANE_DIR" docker compose down -v 2>/dev/null || true docker pull ghcr.io/getarcaneapp/manager:latest docker compose up -d # Extraction garantie de l'IP de l'interface réseau active vers la passerelle FINAL_IP=$(ip route get 192.168.0.64 2>/dev/null | awk '{print $7}' | head -n1) # Secours si la passerelle ne répond pas if [ -z "$FINAL_IP" ]; then FINAL_IP=$(hostname -I | awk '{print $1}') fi echo "" echo -e "${GREEN}======================================================================${NC}" echo -e "${GREEN} CONVERSION & DÉPLOIEMENT TERMINÉS ! ${NC}" echo -e "${GREEN}======================================================================${NC}" echo -e " Accès SSH : ${CYAN}ssh root@${FINAL_IP}${NC}" echo -e " Accès Arcane.app : ${CYAN}http://${FINAL_IP}:3552${NC}" echo -e "${GREEN}======================================================================${NC}"
uckg2/index.txt · Dernière modification : de sylvain
