cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu
Ce billet a été édité le : 2021-11-23

Petite astuce rapide pour mettre à jour votre Raspberry PI à la bonne date et à la bonne heure quand plus rien ne va.

Les versions récentes de Raspbian et de Raspberry PI OS gèrent, par défaut, l’heure à l’aide de timedatectl. timedatectl fait partie de systemd

La configuration par défaut attend que la synchronisation de l’heure se fasse au travers du protocole ntp (« Net Time Protocol »).

Lorsque votre machine n’est pas à l’heure, il n’est pas possible de faire des mises à jours ou d’installer de nouveaux paquets.

Vous pouvez résoudre cela à l’aide d’une commande du type :

sudo timedatectl set-ntp False
sudo timedatectl set-time "Fri 2021-10-08 12:01:06 CEST"
sudo timedatectl set-ntp True

Le principe est d’exécuter les commandes en tant qu'administrateur de la machine et de commencer par désactiver la synchronisation ntp.

Notez que le format suivant est valide, mais qu'il ne prend pas en compte le décalage horaire.

sudo timedatectl set-ntp False
sudo timedatectl set-time "2021-10-08 12:01:06"
sudo timedatectl set-ntp True

Le plus gros problème qui vous reste à résoudre étant de donner une chaîne pour la date correcte.

Pour vous donner une idée, je vous propose de regarder ce que vous retournent les 3 commandes suivantes :

timedatectl status ; date ; date -u

Vous obtiendrez quelque chose comme suit :


               Local time: jeu. 2021-10-14 16:13:41 CEST
           Universal time: jeu. 2021-10-14 14:13:41 UTC
                 RTC time: jeu. 2021-10-14 14:13:41
                Time zone: Europe/Paris (CEST, +0200)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
jeu. 14 oct. 2021 16:13:41 CEST
jeu. 14 oct. 2021 14:13:41 UTC


               Local time: Thu 2021-10-14 16:13:17 CEST
           Universal time: Thu 2021-10-14 14:13:17 UTC
                 RTC time: n/a
                Time zone: Europe/Paris (CEST, +0200)
System clock synchronized: yes
              NTP service: inactive
          RTC in local TZ: no
Thu 14 Oct 2021 04:13:17 PM CEST
Thu 14 Oct 2021 02:13:17 PM UTC

Et cela devrait vous permettre de bricoler quelque chose d’adapter à l’heure en cours.

Vous pouvez également utiliser ce site https://www.unixtimestamp.com/ pour avoir l’heure actuelle au bon format.

Dans l’hypothèse d’une automatisation depuis une machine Linux ayant la bonne date/heure, vous pouvez construire la date à l’aide de :

date +'%Y-%m-%d %H:%M:%S %Z'

Et pour mettre à jour Ce qui vous permet de faire un truc du genre :

function update_remote_date {
  local -r ip="$1"
  local -r user="${2:-pi}"

  echo "Locale date: $( date +'%Y-%m-%d %H:%M:%S %Z' )"
  local cdate=
  cdate="$( date +'%Y-%m-%d %H:%M:%S' )"
  echo "Local date: ${cdate}"
  ssh "${user}@${ip}" "sudo timedatectl set-ntp False ; sudo timedatectl set-time '${cdate}' ; sudo timedatectl set-ntp True ; echo 'Remote date: $( date +'%Y-%m-%d %H:%M:%S %Z' )'"
}

update_remote_date '192.168.1.86'


Pour aller un peu plus loin

  • A qui demandez-vous l'heure ?

    A qui demandez-vous l’heure ?

    La configuration de timedatectl ce trouve dans le fichier :

    cat /etc/systemd/timesyncd.conf
    

    Le contenu par défaut sous Raspberry Pi OS est :

    
    #  This file is part of systemd.
    #
    #  systemd is free software; you can redistribute it and/or modify it
    #  under the terms of the GNU Lesser General Public License as published by
    #  the Free Software Foundation; either version 2.1 of the License, or
    #  (at your option) any later version.
    #
    # Entries in this file show the compile time defaults.
    # You can change settings by editing this file.
    # Defaults can be restored by simply deleting this file.
    #
    # See timesyncd.conf(5) for details.
    
    [Time]
    #NTP=
    #FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
    #RootDistanceMaxSec=5
    #PollIntervalMinSec=32
    #PollIntervalMaxSec=2048
    
    

    Il sert principalement à définir à qui la machine demande l'heure.

  • Comment c'est passé la synchronisation ?

    Comment c’est passé la synchronisation ?

    Pour afficher l’état de la dernière synchronisation, utilisez :

    timedatectl timesync-status
    

    Pour suivre ce qu’il se passe :

    timedatectl timesync-status --monitor
    

    Pour voir les logs :

    journalctl --unit=systemd-timesyncd.service --no-pager
    

ᦿ


ℹ 2006 - 2021 | 🏠 Retour à l'accueil du domaine | 🏡 Retour à l'accueil du blog