Files
Pi-Hole-Alpine/pihole-alpine-install.sh

206 lines
5.4 KiB
Bash

#!/bin/bash
# pihole-alpine-install.sh
# Script d'installation et correction Pi-hole pour Alpine Linux
set -e
echo "=========================================="
echo " Installation Pi-hole sur Alpine Linux"
echo "=========================================="
# Vérifier que c'est Alpine
if [ ! -f /etc/alpine-release ]; then
echo "❌ Ce script est conçu pour Alpine Linux uniquement"
exit 1
fi
# Vérifier root
if [ "$EUID" -ne 0 ]; then
echo "❌ Veuillez exécuter en root: sudo bash $0"
exit 1
fi
# Couleurs
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# Fonction de log
log() {
echo -e "${GREEN}[INFO]${NC} $1"
}
warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Étape 1: Installation des dépendances
log "Étape 1: Installation des dépendances système..."
apk update
apk add sudo bash nano wget curl
# Étape 2: Téléchargement de l'installateur Pi-hole
log "Étape 2: Téléchargement de l'installateur Pi-hole..."
wget -O basic-install.sh https://install.pi-hole.net
if [ ! -f basic-install.sh ]; then
error "Échec du téléchargement de l'installateur"
exit 1
fi
chmod +x basic-install.sh
# Étape 3: Installation de Pi-hole
log "Étape 3: Installation de Pi-hole..."
log "⚠️ L'installation peut prendre plusieurs minutes..."
bash basic-install.sh
# Vérifier si l'installation a réussi
if [ $? -ne 0 ]; then
warn "L'installation a rencontré des erreurs, continuation des corrections..."
fi
# Étape 4: Correction du service FTL
log "Étape 4: Correction du service Pi-hole FTL..."
# Vérifier si le service existe
if [ ! -f /etc/init.d/pihole-FTL ]; then
error "Service pihole-FTL non trouvé, l'installation a peut-être échoué"
exit 1
fi
# Sauvegarder le service original
cp /etc/init.d/pihole-FTL /etc/init.d/pihole-FTL.backup
log "Sauvegarde créée: /etc/init.d/pihole-FTL.backup"
# Créer le service corrigé
cat > /tmp/pihole-FTL-fixed << 'EOF'
#!/sbin/openrc-run
# shellcheck shell=sh disable=SC2034
: "${PI_HOLE_SCRIPT_DIR:=/opt/pihole}"
command="/usr/bin/pihole-FTL"
command_user="pihole:pihole"
supervisor=supervise-daemon
command_args_foreground="-f"
command_background=true
pidfile="/run/${RC_SVCNAME}_openrc.pid"
extra_started_commands="reload"
respawn_max=5
respawn_period=60
# NOTE: Capabilities commentées - gérées manuellement
#capabilities="^CAP_NET_BIND_SERVICE,^CAP_NET_RAW,^CAP_NET_ADMIN,^CAP_SYS_NICE,^CAP_IPC_LOCK,^CAP_CHOWN,^CAP_SYS_TIME"
depend() {
want net
provide dns
}
checkconfig() {
$command -f test
}
start_pre() {
# Appliquer manuellement la capacité NET_BIND_SERVICE
setcap cap_net_bind_service=+ep /usr/bin/pihole-FTL 2>/dev/null || true
sh "${PI_HOLE_SCRIPT_DIR}/pihole-FTL-prestart.sh"
}
stop_post() {
sh "${PI_HOLE_SCRIPT_DIR}/pihole-FTL-poststop.sh"
}
reload() {
checkconfig || return $?
ebegin "Reloading ${RC_SVCNAME}"
start-stop-daemon --signal HUP --pidfile "${pidfile}"
eend $?
}
EOF
# Appliquer le correctif
mv /tmp/pihole-FTL-fixed /etc/init.d/pihole-FTL
chmod +x /etc/init.d/pihole-FTL
# Appliquer la capacité manuellement
# log "Application des capacités réseau..."
# setcap cap_net_bind_service=+ep /usr/bin/pihole-FTL 2>/dev/null || true
# Vérifier la capacité
#if getcap /usr/bin/pihole-FTL | grep -q "cap_net_bind_service"; then
# log "✅ Capacité NET_BIND_SERVICE appliquée avec succès"
#else
# warn "⚠️ Impossible d'appliquer la capacité, vérification manuelle nécessaire"
#fi
# Étape 5: Démarrer le service
log "Étape 5: Démarrage du service Pi-hole FTL..."
rc-update add pihole-FTL default
service pihole-FTL restart
# Attendre que le service se stabilise
sleep 5
# Étape 6: Vérifications finales
log "Étape 6: Vérifications finales..."
echo "--- Statut du service ---"
service pihole-FTL status
echo "--- Processus Pi-hole ---"
ps aux | grep pihole | grep -v grep || warn "Aucun processus Pi-hole trouvé"
echo "--- Port DNS (53) ---"
netstat -tulpn | grep ':53' || ss -tulpn | grep ':53' || warn "Aucun service sur le port 53"
echo "--- Test DNS local ---"
if nslookup google.com 127.0.0.1 >/dev/null 2>&1; then
log "✅ Test DNS réussi"
else
warn "⚠️ Test DNS échoué"
fi
# Étape 7: Définir un mot de passe admin
log "Étape 8: Configuration du mot de passe admin..."
# Générer un mot de passe aléatoire
PASSWORD=$(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 12)
# Définir le mot de passe
if pihole setpassword "$PASSWORD" >/dev/null 2>&1; then
log "✅ Mot de passe admin défini avec succès"
echo ""
echo "🔐 MOT DE PASSE ADMIN: ${GREEN}$PASSWORD${NC}"
echo "📝 Vous pouvez le changer avec: pihole setpassword"
echo ""
else
warn "⚠️ Impossible de définir le mot de passe automatiquement"
echo "📝 Définissez-le manuellement avec: pihole setpassword"
fi
# Étape 8: Instructions finales
log "Installation terminée!"
echo ""
echo "📋 PROCHAINES ÉTAPES:"
echo "1. Configurer vos appareils pour utiliser cette machine comme DNS"
echo "2. Accéder à l'interface web: http://$(hostname -s | awk '{print $1}')/admin/"
echo ""
echo "🔄 Redémarrage recommandé pour s'assurer que tout fonctionne correctement:"
echo " reboot"
echo ""
echo "🐛 En cas de problème:"
echo " sudo tail -f /var/log/pihole/FTL.log"
echo " sudo service pihole-FTL status"
# Nettoyage
rm -f basic-install.sh
echo ""
log "Script d'installation terminé avec succès! 🎉"