Installation d'un PiHole custom

Installation d'un PiHole custom

Installations

Raspbian

J'ai simplement pris la dernière image de Raspbian sans les application additionnelles.

Installation de l'écran TFT 2.8" d'Adafruit

wget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/adafruit-pitft.sh
chmod +x adafruit-pitft.sh
sudo ./adafruit-pitft.sh

Installation du service PiHole

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

Configurations

Modifier le nom d'hôte

Attention à bien effectuer cette modification dans le fichier /etc/hostname et dans sa correspondance sous /etc/hosts

Lancer Chromium au démarrage

J'ai préparé un Chromium avec la page admin du pihole en onglet par défaut au démarrage, puis spécifié un zoom de 110% par défaut.

Pour démarrer directement sur cette page, il suffit de rajouter un fichier .desktop en créant un fichier comme dans l'exemple de .config/autostart/pihole.desktop:

[Desktop Entry]
Type=Application
Exec=chromium-browser --start-fullscreen

Enlever le curseur de la souris

C'est en allant modifier le desktop manager (/etc/lightdm/lightdm.conf) qu'on pourra effectuer modifier la section [Seat*]

xserver-command = X -nocursor

Action des boutons

J'ai écris un petit script pour éteindre le raspberry avec le premier bouton ou aussi activer/désactiver le rétro éclairage du PiTFT.

#!/usr/bin/python3

# standard
import time
import subprocess
from functools import partial

# third-party
import RPi.GPIO as GPIO

class Button:
    def __init__(self, num, action=None):
        self.active = False
        self.num = num
        if action:
            self.action = partial(action, self)
        # Setup the specified GPIO button
        GPIO.setup(num, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    def check(self):
        if not(GPIO.input(self.num)) and not self.active:
            self.active = True
            self.action()
        if GPIO.input(self.num) and self.active:
            self.active = False
    def action(self):
        print("Button " + str(self.num) + " pressed")

def bl_action(self):
    if getattr(self, "bl", False):
        subprocess.call(["gpio", "-g", "pwm", "18", "0"])
        self.bl = False
    else:
        subprocess.call(["gpio", "-g", "pwm", "18", "511"])
        self.bl = True

def main():
    # Init GPIO buttons context
    GPIO.setmode(GPIO.BCM)
    # Init GPIO screen
    subprocess.call(["gpio", "-g", "mode", "18", "pwm"])

    # Init vars
    bl = False
    b27 = Button(27, lambda self: subprocess.call(["sudo", "poweroff"]))
    b23 = Button(23)
    b22 = Button(22)
    b17 = Button(17, bl_action)

    # Listen actions
    while True:
        # First button poweroff the Pi
        b27.check()

        # Second button do ... nothing
        b23.check()

        # Third button do ... nothing
        b22.check()

        # Fourth button toggle screen backlight
        b17.check()

        # Wait for 100ms to reduce resource consumption
        time.sleep(0.1)

if __name__ == "__main__":
    main()

Puis rapidement créé un script dans systemd pour le lancer au démarrage et le garder actif en arrière plan.

[Unit]
Description=TFT Screen Control

[Service]
Type=simple
Restart=always
ExecStart=/usr/bin/python3 /home/pi/pitft

[Install]
WantedBy=multi-user.target

Autres documentations intéressantes

Simuler un F11 sur Chromium
http://paulsrandomcontent.blogspot.com/2013/10/for-project-i-wanted-to-send-key.html

L'IPv6 n'est pas configuré

Il est possible que raspbian n'ait pas activé l'IPv6 par défaut dans votre installation pour cela il vous suffira de lancer la commande suivante:

sudo modprobe ipv6

Si vous deviez activer l'IPv6 après coup, il sera nécessaire d'inscrire l'adresse dans dans le fichier de configuration /etc/pihole/setupVars.conf

Améliorer le blockage

Le site firebog.net référence plusieurs listes de noms de domaine à blacklister en plus de celles fournies de base par le pi-hole.