Aller au contenu

🚀 Installation de DietPi

dietpi

Présentation

Au début, j'étais parti sur Raspberry Pi OS Lite. Cependant lors de la préparation du réseau avant le lancement de l'OS, la façon de faire avait changé sans donner pour autant les consignes sur comment le faire. Ça m'a franchement gonflé. Je suis tombé alors sur DietPi:

  • DietPi est basé du Debian : pas le peine de changer ses habitudes.
  • DietPi consomme moins de ressources : en termes de CPU et de RAM, on divise quasiment par deux comparé à Raspberry Pi OS Lite sans sacrifier les performances.
  • DietPi est hautement automatisable : on peut passer beaucoup de paramètres (TZ, réseau, paquets...) dans le fichier de préparation de l'OS dietpi.txt.
  • DietPi intègre la fonctionnalité de backup/restore vers un périphirique USB ou un point de montage réseau avec NFS par exemple.

Il ne m'en fallait pas plus pour le choisir.

Préparation du setup

Voici la base physique et logique du setup :

Schéma

Il faut récupérer dans une premier temps l'image adaptée à son matériel sur https://dietpi.com/#download.

Ensuite il suffit d'installer l'image sur la SD Card. Dans mon cas, j'ai utilisé Balena Etcher.

Automatisation de l'installation

Une fois l'image installée, j'ai monté la partition de boot et édité le fichier dietpi.txt et le fichier cmdline.txt pour chaque noeud de mon cluster RPI.

dietpi.txt

C'est une des fonctionnalités majeure de DietPi, puisqu'il permet de personnaliser le système en amont avec une déploiement automatique lors du premier boot. C'est dans ce fichier que l'on peut paramétrer le réseau, les locales, les paquets à installer...

Fichier dietpi.txt
# Option définie sur « 1 » indique que nous acceptons la licence DietPi GPLv2, disponible sur /boot/dietpi-LICENSE.txt, 
# Option remplaçant AUTO_SETUP_ACCEPT_LICENSE.
AUTO_SETUP_AUTOMATED=1
# Options de langage/Régional
AUTO_SETUP_LOCALE=fr_FR.UTF-8
AUTO_SETUP_KEYBOARD_LAYOUT=fr
# Option Timezone
AUTO_SETUP_TIMEZONE=Europe/Paris

# Options pour configurer le réseau
## Activation réseau filaire
AUTO_SETUP_NET_ETHERNET_ENABLED=1
## Désactivation du Wifi
AUTO_SETUP_NET_WIFI_ENABLED=0
## Réglage de la vitesse du réseau.
## Ici 0=automatic speed
AUTO_SETUP_NET_ETH_FORCE_SPEED=0
## Configration de l'adressage IP
AUTO_SETUP_NET_USESTATIC=1
AUTO_SETUP_NET_STATIC_IP=10.1.4.2
AUTO_SETUP_NET_STATIC_MASK=255.255.255.0
AUTO_SETUP_NET_STATIC_GATEWAY=10.1.4.1
AUTO_SETUP_NET_STATIC_DNS=10.1.4.1
## Réglez sur "1" pour convertir automatiquement les paramètres réseau 
## loués DHCP en paramètres statiques au premier démarrage.
AUTO_SETUP_DHCP_TO_STATIC=0

# Nom du noeud
AUTO_SETUP_NET_HOSTNAME=ds01

# Retarder le démarrage du service au démarrage jusqu'à 
# ce que le réseau soit établi : 0=désactivé | 1=activé
AUTO_SETUP_BOOT_WAIT_FOR_NETWORK=1

# Création de la taille du Swap. Ici 1=automatique
AUTO_SETUP_SWAPFILE_SIZE=1
# Emplacement de l'espace d'échange Swap. Ici le fichier d'échange swap.
# taille automatique = 2 Gio moins la taille de la RAM soit 2048-1024 dans le cas des raspberry pi 3.
AUTO_SETUP_SWAPFILE_LOCATION=/var/swap

# Réglage sur « 1 » pour désactiver la sortie HDMI/vidéo et les framebuffers sur Raspberry Pi, 
# afin de réduire la consommation d'énergie et l'utilisation de la mémoire.
AUTO_SETUP_HEADLESS=1

# Activer le service systemd-logind (y compris dbus), qui est désactivé par défaut sur DietPi
AUTO_UNMASK_LOGIND=0

# Script personnalisé (installation post-réseau et post-DietPi)
# - Vous permet d'exécuter automatiquement un script personnalisé à la fin de l'installation de DietPi.
# - Option 0 = Copiez votre script dans /boot/Automation_Custom_Script.sh et il sera exécuté automatiquement.
# - Option 1 = Hébergez votre script en ligne, puis utilisez par ex. AUTO_SETUP_CUSTOM_SCRIPT_EXEC=https://myweb.com/myscript.sh et il sera téléchargé et exécuté automatiquement.
# - Journal du script exécuté : /var/tmp/dietpi/logs/dietpi-automation_custom_script.log
# Option laissée par défaut à "0"
AUTO_SETUP_CUSTOM_SCRIPT_EXEC=0

# Restaurer une sauvegarde DietPi au premier démarrage : 
# - 0 => désactiver (paramètre par défaut)
# - 1 => restauration interactive (afficher la liste des sauvegardes trouvées)
# - 2 => restauration non interactive (restaurer la première sauvegarde trouvée)
# - Si restauration -> Connectez simplement le lecteur/disque/clé contenant la sauvegarde. Tous les lecteurs connectés seront montés temporairement et recherchés automatiquement.
AUTO_SETUP_BACKUP_RESTORE=0

# Choix du serveur SSH : 0=aucun/personnalisé | -1=Dropbear | -2=OpenSSH
AUTO_SETUP_SSH_SERVER_INDEX=-2

# Choix du mode de journalisation : 0=aucun/personnalisé | -1 = RAMlog horaire effacé | -2=RAMlog sauvegarde horaire sur disque + effacement | -3=Rsyslog + Logrotation
AUTO_SETUP_LOGGING_INDEX=-1
# Taille tmpfs maximale du RAMlog (MiB). 50 Mio devraient suffire pour un usage unique. Plus de 200 Mio pour le journal d'accès au serveur Web volumineux, etc.
AUTO_SETUP_RAMLOG_MAXSIZE=200

# - Webserver preference: 0=Apache | -1=Nginx | -2=Lighttpd
AUTO_SETUP_WEB_SERVER_INDEX=0
# - Desktop preference: 0=LXDE | -1=Xfce | -2=MATE | -3=LXQt | -4=GNUstep
AUTO_SETUP_DESKTOP_INDEX=0
# - Browser preference: 0=None | -1=Firefox | -2=Chromium
AUTO_SETUP_BROWSER_INDEX=0

# DietPi-Autostart: 0=Console | 7=Console autologin | 1=Kodi | 2=Desktop autologin | 16=Desktop | 4=OpenTyrian | 5=DietPi-CloudShell | 6=Amiberry fast boot | 8=Amiberry standard boot | 9=DDX-Rebirth | 10=CAVA Spectrum | 11=Chromium kiosk | 14=Custom script (background) | 17=Custom script (foreground)
AUTO_SETUP_AUTOSTART_TARGET_INDEX=7

# Autologin user name
# - This user must exist before first run installs, otherwise it will be reverted to root.
# - Applies to all autostart options but: 0, 6, 14 and 16
AUTO_SETUP_AUTOSTART_LOGIN_USER=root
AUTO_SETUP_GLOBAL_PASSWORD=UNSUPERMOTDEPASSE

##### Non-interactive first run setup #####
# On first login, run update, initial setup and software installs without any user input
# - Setting this to "1" is required for AUTO_SETUP_GLOBAL_PASSWORD and AUTO_SETUP_INSTALL_SOFTWARE_ID.
# - Setting this to "1" indicates that you accept the DietPi GPLv2 license, available at /boot/dietpi-LICENSE.txt, superseding AUTO_SETUP_ACCEPT_LICENSE.
AUTO_SETUP_AUTOMATED=1


SURVEY_OPTED_IN=0

# Install des applications avec les ID -> https://github.com/MichaIng/DietPi/wiki/DietPi-Software-list
#OpenSSH Client
AUTO_SETUP_INSTALL_SOFTWARE_ID=0
#NFS Client
AUTO_SETUP_INSTALL_SOFTWARE_ID=110
#NeoVim
AUTO_SETUP_INSTALL_SOFTWARE_ID=127
#RPi.GPIO
AUTO_SETUP_INSTALL_SOFTWARE_ID=69
#OpenSSH Server
AUTO_SETUP_INSTALL_SOFTWARE_ID=105
#Python 3 pip
AUTO_SETUP_INSTALL_SOFTWARE_ID=130
#Docker compose
AUTO_SETUP_INSTALL_SOFTWARE_ID=134
#Docker
AUTO_SETUP_INSTALL_SOFTWARE_ID=162
#Git
AUTO_SETUP_INSTALL_SOFTWARE_ID=17

CONFIG_CPU_GOVERNOR=schedutil
CONFIG_CPU_ONDEMAND_SAMPLE_RATE=25000
CONFIG_CPU_ONDEMAND_SAMPLE_DOWNFACTOR=40
CONFIG_CPU_USAGE_THROTTLE_UP=50

CONFIG_CPU_MAX_FREQ=Disabled
CONFIG_CPU_MIN_FREQ=Disabled

CONFIG_CPU_DISABLE_TURBO=0

CONFIG_G_CHECK_URL_TIMEOUT=10
CONFIG_G_CHECK_URL_ATTEMPTS=5
CONFIG_CHECK_CONNECTION_IP=8.8.8.8
CONFIG_CHECK_DNS_DOMAIN=google.com

CONFIG_CHECK_DIETPI_UPDATES=1
# Daily check for APT package updates: 0=disable | 1=check only | 2=check and upgrade automatically
# - Upgrade logs can be found at: /var/tmp/dietpi/logs/dietpi-update_apt.log
CONFIG_CHECK_APT_UPDATES=1
CONFIG_NTP_MODE=2
CONFIG_SERIAL_CONSOLE_ENABLE=0
CONFIG_SOUNDCARD=none
CONFIG_LCDPANEL=none
CONFIG_ENABLE_IPV6=0

CONFIG_APT_RASPBIAN_MIRROR=http://raspbian.raspberrypi.org/raspbian/
CONFIG_APT_DEBIAN_MIRROR=https://deb.debian.org/debian/

# NTP server(s) applied to /etc/systemd/timesyncd.conf
# - "default": Use the NTP server(s) provided via DHCP, else the debian.pool.ntp.org NTP pool.
# - "gateway": Use the router/gateway as NTP server. Recommended, if it does provide this functionality.
# - To use another public NTP pool, see the full list at: https://www.ntppool.org/zone/@
#   Use the pool domain without leading integer and dot (without "0."), like "debian.pool.ntp.org", "pool.ntp.org" or "uk.pool.ntp.org".
# - You can also use a custom IP address, hostname or any combination of space-separated IP addresses, hostnames and NTP pool domains
CONFIG_NTP_MIRROR=gateway

#----------------------------------------------------------------------------------
##### DietPi-Software settings #####
#----------------------------------------------------------------------------------
# SSH Server
# - Disable SSH password logins, e.g. when using pubkey authentication
#   0=Allow password logins for all users, including root
#   root=Disable password login for root user only
#   1=Disable password logins for all users, assure that you have a valid SSH key applied!
SOFTWARE_DISABLE_SSH_PASSWORD_LOGINS=0

#----------------------------------------------------------------------------------
##### Dev settings #####
#----------------------------------------------------------------------------------
DEV_GITBRANCH=master
DEV_GITOWNER=MichaIng

#----------------------------------------------------------------------------------
##### Settings, automatically added by dietpi-update #####
#---

Activation des fonctionnalités du système de gestion de conteneurs Linux, indispensable pour faire tourner Docker :

Fichier cmdline.txt
root=PARTUUID=9443ff51-02 rootfstype=ext4 rootwait net.ifnames=0 logo.nologo console=serial0,115200 console=tty1 group_enable=cpuset cgroup_enable=memory cgroup_memory=1

Configuration des règles firewall sur OPNSense

Voici les ports que j'ai ouverts :

  • NTP 123/UDP -> Any : le temps de l'installation lors du premier boot.
  • NTP 123/UDP -> OPNSense : une fois l'installation terminée.
  • ICMP -> OPNSense.
  • ICMP -> 8.8.8.8 : pour le test de connectivité à Internet.
  • 29248/TCP -> 185.101.93.93 : pour vérifier les màj de dietpi.
  • 80,443/TCP -> Les dépôts (Debian, DietPi, Docker...) et les URLs de Docker
  • 80,443/TCP -> ouvert complet vers Internet sauf vers mes autres LAN car j'ai eu pas mal de problèmes pour le lancement de certains conteneurs.

J'ai également créé des règles NAT pour pouvoir me connecter en SSH dessus depuis mon poste.

Pour affiner ces règles, je me suis rendu sur OPNSense > Pare-feu -> Fichiers journaux > Vue en direct.

Lancement des RPI

Une fois la préparation terminée, j'ai branché les SD Card et lancé les RPI. Il faut ensuite patienter le temps d'installation. Vous pouvez suivre l'état d'avancement en vous connectant en SSH sur les noeuds.

Création d'un user

Une fois les RPI déployé, j'ai créé un user avec la possibilité d'escalade des privilèges avec sudo et je l'ai ajouté dans le groupe docker puisque je me servirai de ce user pour lancer les conteneurs.