Désactivation des services inutiles#

Pourquoi#

Chaque service actif est soit une source potentielle de latence (consommation CPU imprévisible), soit une surface d’attaque, soit les deux. Un serveur de référence temporelle doit tourner avec le minimum strict de services actifs, et certains d’entre eux entrent carrément en conflit avec le matériel dédié au GNSS (le port série, en particulier).

Comment#

Concurrents du port série et de l’heure#

# Démon Bluetooth UART (libère ttyAMA0 pour le récepteur GNSS)
systemctl disable --now hciuart

# Console système sur le port série utilisé par le GNSS
systemctl disable --now serial-getty@ttyAMA0.service
systemctl mask serial-getty@ttyAMA0.service

# Démon de date système concurrent (chrony s'en charge)
systemctl disable --now systemd-timedated
systemctl disable --now systemd-timesyncd 2>/dev/null

Découverte réseau et radios inutilisées#

systemctl disable --now avahi-daemon.service avahi-daemon.socket
systemctl disable --now bluetooth.service 2>/dev/null
systemctl disable --now wpa_supplicant.service 2>/dev/null
systemctl disable --now ModemManager.service 2>/dev/null

Désactivation complète du swap#

# 1) Désactivation immédiate
swapoff /dev/zram0 2>/dev/null

# 2) Persistance : empêcher la génération du device au prochain boot
mkdir -p /etc/systemd
cat > /etc/systemd/zram-generator.conf <<'EOF'
# Stratum 1 : zram désactivé (pas de swap autorisé)
EOF

# 3) Masquer les unités générées, filet de sécurité
systemctl mask dev-zram0.swap
systemctl mask "systemd-zram-setup@zram0.service"
systemctl mask rpi-zram-writeback.timer 2>/dev/null
systemctl mask rpi-zram-writeback.service 2>/dev/null

systemctl daemon-reload
swapon --show   # doit être vide

Conserver la console de secours#

# À CONSERVER actif : accès clavier/écran HDMI en cas de perte SSH
systemctl enable --now getty@tty1.service

Erreurs à éviter#

Un simple swapoff ne survit pas au reboot. Les distributions Pi OS récentes utilisent zram (swap compressé généré dynamiquement en RAM à chaque démarrage par systemd-zram-generator), pas l’historique dphys-swapfile. Désactiver le device actif sans neutraliser le générateur signifie que le swap reviendra au prochain redémarrage, sans message d’erreur, silencieusement.

  • Désactiver getty@tty1 “pour la sécurité”. C’est une fausse bonne idée : sans console de secours, une erreur de configuration réseau ou SSH (règle nftables trop stricte, sshd cassé) rend le serveur totalement inaccessible sans démontage physique de la carte SD. Le coût en ressources d’une console HDMI en attente est nul.
  • Oublier serial-getty@ttyAMA0. Si ce service reste actif, il entre en compétition directe avec le récepteur GNSS pour l’accès au port série, les deux ne peuvent pas fonctionner simultanément sur le même UART.

Vérifier#

systemctl list-units --type=service --state=running
# Passer en revue : aucun service inattendu ne doit apparaître

swapon --show
systemctl list-units --type=swap --all
# Doit montrer dev-zram0.swap "masked" ou totalement absent

systemctl is-active getty@tty1.service
# Doit retourner "active" : c'est la seule console qu'on garde volontairement

ls -l /dev/ttyAMA0
# Le port doit être libre pour gpsd (chapitre Acquisition GNSS/PPS), pas occupé par un getty

Un échange disque (swap), même en RAM compressée, provoque une faute de page susceptible d’introduire un jitter de l’ordre de la milliseconde pendant la boucle de discipline d’horloge de chrony, inacceptable pour un objectif de précision autour de la microseconde. C’est pourquoi le swap est totalement proscrit ici plutôt que simplement réduit.