Installation de Pi-Hole sur mon Raspberry Volumio

J’en avais parlé lors de l’installation de Volumio sur mon Raspberry, je pouvais aussi utiliser ce dernier pour d’autres choses, plutôt que de le laisser dédié à Volumio.

J’ai donc pensé à Pi-hole, une solution dont on dit du bien pour bloquer les publicités au niveau du réseau local (donc pour tous les appareils de la maison), qui agit au niveau des requêtes DNS, avec un système de « Adlists ».

Pi-hole va devenir votre serveur DNS, et comme il possède une liste de sites utilisés pour afficher la publicité, vous traquer, etc… Pi-hole va stopper ces requêtes, et faire suivre toutes les autres au DNS que vous choisirez pendant l’installation (les « upstream DNS »). C’est simple et efficace semble-t-il, et leur slogan est « Pihole, un trou noir pour les publicités ».

Autant vous le dire tout de suite, ça a été un peu plus compliqué que prévu ! Essentiellement parce que Volumio est fourni avec une version de Raspbian (v8 Jessie) qui commence à dater un peu et sur laquelle Pi-hole n’est pas supporté. Et comme les choses évoluent vite, je précise que cet article est basé sur Pi-Hole version 5.1.2 et Volumio version 2.779.

Il y a bien une variable PIHOLE_SKIP_OS_CHECK disponible et dont j’espérais qu’elle réglerait facilement le problème, mais l’installation échoue malgré tout avec des problèmes de dépendance qu’il faudra supprimer.

Une fois l’installation réussie, j’ai eu un petit problème de configuration réseau à résoudre pour que Pi-hole fonctionne. Et quand enfin Pi-hole était opérationnel, c’est Volumio qui ne marchait plus à cause d’une mise à jour du daemon MPD !

Tout a fini par rentrer dans l’ordre, voilà donc le détail de cette installation peu respectueuse des règles de l’art (!). Disons que cela fonctionne, mais il serait bon que Volumio sorte une version sur Raspbian 10 « Buster », cela simplifierait beaucoup les choses (c’est dans les tuyaux apparemment, mais ça n’avance pas vraiment).

C’est désormais chose faite avec Volumio 3 qui tourne sur Debian 10.
Voir cet article.

Préambule

Pour la petite histoire Volumio est toujours fourni à ce jour avec Raspbian 8.0 Jessie, version sortie en 2015, et qui a atteint son EOL (End Of Life) le 30 juin dernier. Depuis, deux versions sont sorties, la 9 (Stretch) en 2017; puis la 10 (Buster) en 2019 : ce serait donc bien que Volumio passe sur Buster.

Gageons que cela ne devrait pas tarder, et cela simplifiera énormément le cohabitation de ces deux softs !

Pré-requis : Comme Pi-hole va devenir notre serveur DNS, il faut affecter une adresse IP fixe au Raspberry, ce qui se fait via l’interface d’administration de la box. Dans mon cas, c’est l’adresse 192.168.1.17 qui était déjà assignée au Raspberry Volumio.

Installation de Pi-hole

Mais commençons par le commencement, à savoir l’installation standard de Pi-hole, qui s’effectue par le lancement de cette commande, une fois connecté sur le Raspberry (en ssh à priori, voir l’installation de Volumio) :

curl -sSL https://install.pi-hole.net | bash

L’installation échoue avec un message clair (et coloré) :

Pas de problème, je relance donc l’installation avec la commande indiquée sous le message d’erreur :

curl -sSL https://install.pi-hole.net | PIHOLE_SKIP_OS_CHECK=true sudo -E bash

Et là, si l’installation va plus loin, elle bloque soudainement après avoir sélectionné les « upstreams DNS » ; à ce stade, le Raspberry ne répond plus, il n’y a plus qu’à le redémarrer électriquement pour s’en sortir :

Ça commence à être très embêtant tout ça… Comme je vois le message me demandant de mettre mon système à jour, je le fais à toutes fins utiles :

sudo apt update ; sudo apt upgrade

Et là je vois que le service dhcpcd5 a été mal installé ou est incomplet (« Errors were encountered while processing: dhcpcd5 »). Après quelques recherches sur le net, il semble bien que l’installation de Pihole sur Jessie bloque sur le service dhcpcd5, ce qui confirme l’origine du problème.

Il va falloir d’une part réinstaller correctement le service dhcpd5 sur Jessie :

sudo apt purge dhcpcd5 ; sudo apt install dhcpcd5

Je tente à tout hasard une réinstallation de Pi-hole une fois le service correctement installé, mais l’installation plante au même endroit. Je redémarre le Raspberry et nettoie le répertoire où Pi-hole a laissé des traces :

rm -rf /etc/pihole

Pour information, ce module dhcpcd5 sert quand vous utilisez le service DHCP (fournisseur d’adresse IP) de Pi-hole à la place de votre box qui a ce rôle par défaut. Comme je ne vais utiliser cette fonctionnalité, j’y reviendrai plus loin, retirer cette dépendance ne devrait donc pas avoir d’impact.

Pour ce faire, il va falloir procéder différemment pour l’installation ; on va d’abord télécharger le script d’installation :

wget -O basic-install.sh https://install.pi-hole.net

Puis l’éditer afin d’activer la variable PIHOLE_SKIP_OS_CHECK, et également supprimer la dépendance à dhcpcd5.

Pour la variable, je trouve une liste de déclaration de variables dans le script vers la ligne 58, j’y insère donc ma variable à cet endroit :

Et pour la dépendance à dhcpcd5, il faut aller à la ligne 324 et supprimer dhcpcd5 de la liste de INSTALLER_DEPS :

Script d’installation avant la modification
Script d’installation après la modification

Nouvel essai et nouvel échec : l’installation va enfin jusqu’au bout mais se termine par un message « Unable to locate package php5-xml« .

Il y a donc une autre dépendance à supprimer : php5-xml, autant le faire tout de suite, il faut supprimer "${phpVer}-xml" quelques lignes plus bas, dans la liste pour PIHOLE_WEB_DEPS (voir image ci-dessus). Une fois fait, voici ce que ça donne :

Ce module php5-xml sert sans doute quelque part dans la page d’admin de Pi-hole… Comme il n’existe pas sur Jessie, j’installe tout de même le paquet php5-xmlrpc qui lui existe pour cette version au cas où :

sudo apt install php-xmlrpc

Plusieurs mois plus tard, je n’ai observé aucun problème dans l’interface web de Pi-hole. Mais je ne peux rien garantir sur l’impact de cette dépendance non satisfaite.

On relance donc l’installation en exécutant le script modifié par nos soins :

sudo ./basic-install.sh

Et cette fois l’installation va jusqu’à son terme ! Je pousse un grand Ouf! de soulagement :

Installation complete !

À noter sur ce dernier écran le mot de passe pour s’identifer sur la page d’administration ! C’est le moment de le noter… Si vous l’oubliez, taper la commande suivante :

pihole -a -p

En cas de problème avec Pihole (pour reconfigurer ou réparer votre installation), il sera nécessaire de lancer la commande suivante :
sudo pihole -r
Dans ce cas, il faudra appliquer les mêmes modifications que précédemment au script suivant pour régler le problème des dépendances et permettre au script de s’exécuter :
/etc/.pihole/automated install/basic-install.sh

Mais il reste encore un peu de configuration à faire pour ne pas être en conflit avec Volumio.

Comme Pi-hole utilise lighttpd comme serveur web, il va falloir modifier la configuration pour utiliser un autre port que le port HTTP 80, déjà utilisé par Volumio. J’ai suivi les informations trouvées sur cette page, même si je n’ai pas compris pourquoi il faut modifier les fichiers de logs.

Bref, j’ai édité le fichier /etc/lighttpd/lighttpd.conf et modifié les lignes suivantes :

server.port                 = 8080
server.errorlog             = "/tmp/lighttpd_error.log"
accesslog.filename          = "/tmp/lighttpd_access.log"

Suivi d’un redémarrage du web server :

sudo systemctl restart lighttpd

Je croise les doigts et entre l’adresse http://192.168.1.17:8080/admin dans mon navigateur : ça marche, Pi-hole tourne et l’interface répond :

Le screenshot a été pris quelques jours après, sinon les compteurs seraient à zéro !

Utiliser Pi-hole avec le PC

Reste à utiliser Pi-hole maintenant. Pour cela, je vais commencer avec mon PC portable, qui est sous Ubuntu, connecté en wifi sur mon réseau local.

Le plus simple est de définir Pi-hole comme serveur DNS au niveau de la box : ainsi, toutes les machines de votre réseau l’utiliseront automatiquement. Comme je suis chez Orange, je vais sur la page admin de la box, mais mauvaise surprise : Orange ne permet pas de changer les DNS !!

Après quelques recherches sur le net, l’information est confirmée, Orange impose des limitations (des contraintes) comme celles-ci que j’ai trouvé sur reddit (je les note, c’est toujours utile) :

  • Tu veux un DNS autre que celui de ton FAI distribué en DHCP ? impossible à configurer dans la Livebox, l’option n’existe pas.
  • Tu as un autre serveur DHCP sur ton réseau qui peut remplacer la livebox ? Ok, mais dit adieu à la Box TV qui ne marche QUE avec le DHCP de la livebox.
  • Tu veux faire de la redirection de port ? OK mais pas sur une IP statique, uniquement sur un équipement enregistré en DHCP dans ta Livebox (une aberration).

Pas grave, comme je n’ai que deux PC à configurer, je vais le faire à leur niveau, ce n’est pas une grosse contrainte.

J’ai depuis changé d’avis sur la question, et j’utilise désormais Pi-hole comme serveur DHCP pour tous mes appareils (smartphone, TV, etc…) sauf pour le décodeur Orange qui doit obtenir son adresse de la box pour fonctionner. Voir cet article.
Et le serveur DHCP de Pi-hole fonctionne très bien ! 😉

Je prends mon PC portable pour ce premier test, et configure le wifi pour utiliser ce nouveau DNS (voir cette page pour plus de détails) :

Puis on se déconnecte/reconnecte du wifi pour que la modification soit prise en compte. Et on le vérifie par la commande suivante (appuyer sur la barre d’espace pour faire défiler jusqu’à la fin) :

$ systemd-resolve --status
...                                
  Current DNS Server: 192.168.1.17                          
         DNS Servers: 192.168.1.17                          
                      2a01:cb08:8928:f600:a3e:5dff:fe79:52bc
                      fe80::a3e:5dff:fe79:52bc              
          DNS Domain: ~.                                    
                      home                                  
lines 55-75/75 (END)

Attention à ce que ce soit bien l’adresse du serveur Pi-hole qui est affichée en « Current DNS Server », et pas l’adresse IPV6 : ça m’est arrivé de me retrouver dans cette situation (sans savoir pourquoi) et dans ce cas, Pi-hole n’est pas utilisé ! À moins que vous ayez déclaré une adresse IPV6 sur le Raspberry ET déclaré un DNS IPV6 sur Pi-hole, ce qi n’est pas mon cas ici.

Mon DNS est bien le Raspberry, tout semble correct. Hélas, Firefox sur le portable n’affiche plus rien, manifestement le DNS soit ne répond pas, soit ne reçoit pas les requêtes. C’est ce qu’il va falloir déterminer maintenant. L’occasion d’apprendre quelques commandes utiles pour dépanner (je me suis servi de cette page pour certaines commandes) :

D’abord on teste une requête DNS du portable, qui nous confirme qu’avec le nouveau DNS déclaré, la résolution ne fonctionne pas :

Ensuite, je teste le côté serveur. Les requêtes DNS sont envoyées sur le port 53, voyons donc si le port 53 est bien à l’écoute sur le réseau, cela nous donnera une bonne indication pour savoir si le service DNS tourne bien :

Ça a l’air de fonctionnern en UDP comme en TCP… Et puis je me souviens avoir sélectionné « eth0 » comme interface lors du script d’installation de Pi-hole…

Or mon Raspberry est connecté en wifi à mon réseau local !! Erreur, c’est « wlan0 » que je dois choisir dans ce cas. Il faut relancer le script d’installation de Pi-hole, puis choisir « Reconfigure », et choisir wlan0 comme interface réseau cette fois.

Il faudra aussi reconfigurer le service lighttpd car les modifications faites précédemment seront écrasées. Je termine par un reboot du Raspberry car le service lighttpd refuse de redémarrer. Vérification sur la page d’admin de Pi-hole du changement d’interface réseau :

Cette fois c’est bon, et je le vois tout de suite : les compteurs ne sont plus à zéro ! Je vérifie avec le PC portable, tout fonctionne désormais… côté Pi-hole !

Configuration Pi-hole (AdLists)

On l’a vu, Pi-hole fonctionne avec un système de listes. Rien de très nouveau ici, et comme toujours cela implique de mettre les listes à jour. De base, Pi-hole est fourni avec 2 listes :

  • https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
  • https://mirror1.malwaredomains.com/files/justdomains

On les retrouve sur la page d’administration, après s’être identifié, dans « Group Management – Adlists ».

J’ai trouvé sur cette page d’autres listes à ajouter (on peut en ajouter plusieurs en même temps en les séparant par un espace). Une fois ceci fait, il faut lancer la commande sudo pihole -g pour mettre à jour les listes (il faut le faire même si vous décidez de n’utiliser que les deux listes fournies par défaut) :

J’ai ensuite supprimé les listes qui étaient en erreur lors de cette mise à jour des « Adlists ».

Exemple de « Whitelist »

Après la mise en place de Pi-hole, j’ai observé qu’un site ne fonctionnait plus : c’était « pressreader », dont l’accès m’est offert par la médiathèque de ma commune, et qui permet de lire en ligne un certain nombre de publications, dont la presse régionale. Après l’identification, le site restait bloqué…

Il suffit alors d’aller dans la page d’admin de Pi-hole, et de sélectionner « Query log » : après avoir rafraîchit la page qui pose problème, j’ai pu voir que certaines requêtes étaient bloquées :

Il suffit alors de cliquer sur le bouton « Whitelist » pour l’entrée « cdnj.cloudflare.com » (j’ai laissé les google fonts bloquées), puis de recharger la page du site en question : le problème était résolu !

Il faudra par fois tâtonner un peu en autorisant (ou pas) certaines requêtes pour débloquer un site, mais j’ai été agréablement surpris par la facilité de l’opération. L’interface de Pi-hole est apparemment bien conçue.

Problème MPD avec Volumio

Mais voilà, Volumio ne fonctionne plus, mon client Android MPDroid ne se connecte plus au serveur. Même approche, je teste d’abord le port 6600 sur lequel MPD est censé écouter :

sudo nmap -sT -p 6600 192.168.1.17

Et je vois qu’effectivement, le service MPD n’est pas à l’écoute. Je vérifie alors l’état du service avec la commande sudo systemctl status -l mpd.service :

Le service ne démarre pas. et l’on voit pourquoi : le fichier libbcm_host.so n’est pas trouvé (il s’agit d’une ‘library’ utilisée par mpd). Que s’est-il passé ? Il semble que la version de MPD ait été mise à jour (certainement lors du « apt update » exécuté plus haut). J’ai désormais la version 0.20.18-1 :

volumio@volumio:~$ sudo apt list mpd
[sudo] password for volumio: 
Listing... Done
mpd/now 0.20.18-1 armhf [installed,local]
N: There is 1 additional version. Please use the '-a' switch to see it
volumio@volumio:~$ sudo apt list -a mpd
Listing... Done
mpd/now 0.20.18-1 armhf [installed,local]
mpd/oldstable 0.19.1-1.1 armhf

Et si la lib libbcm_hpst.so existe toujours, elle n’est plus au même endroit ! Un simple lien symbolique va résoudre le problème :

sudo ln -s /opt/vc/lib/libbcm_host.so  /usr/lib/

Et hop ! on relance le service MPD et on vérifie qu’il a bien démarré :

Et voilà, tout fonctionne enfin, Volumio et Pi-hole cohabitent sur mon Raspberry. Cool ! 😎

3 réflexions sur « Installation de Pi-Hole sur mon Raspberry Volumio »

  1. Merci pour ta doc, j’avais en tête de faire exactement la même chose et hop, magie de l’internet.
    Dommage en effet que Volumio traîne une vielle version de raspbian :/

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *