0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry pi3でStratum1のNTPサーバを構築(Linux 4.6)

0
Posted at

はじめに

以前ここの記事で書いたraspberry piのStratum1 NTPサーバ(chrony)が大分古くになったため、2026年3月時点での最新OSで再構築しました。

使用機材

利用環境

Raspberry Pi ImagerでイメージをSDカードに焼いたものを利用してます。
今回の環境では、事前にapt updateapt upgradeは実行しています。

root@chrony-server:~# uname -a
Linux chrony-server 6.12.62+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.62-1+rpt1 (2025-12-18) aarch64 GNU/Linux

配線

GYSFFMANC と Raspberry Pi 3 の GPIO ピンを以下のように接続。

  • VCC: 3.3V (Pin 1)
  • GND: GND (Pin 6 など)
  • TXD (GYSFFMANC): RXD (Pin 10 / GPIO 15)
  • RXD (GYSFFMANC): TXD (Pin 8 / GPIO 14)。今回は14へ接続

環境構築

シリアルコンソールを無効化

  1. sudo raspi-configを入力し実行
  2. 3 Interface Options > I6 Serial Port を選択
  3. "Would you like a login shell to be accessible over serial?" → No (いいえ)
  4. "Would you like the serial port hardware to be enabled?" → Yes (はい)
  5. 設定後、Raspberry Pi を再起動

パッケージのインストールと設定

  1. 管理者権限のアカウント(例えばroot)に切り替え
    sudo su -

  2. 必要パッケージをインストール
    apt-get install chrony gpsd gpsd-clients

  3. vi /boot/firmware/config.txtで下記の通りに修正

    • 最後の行にdtoverlay=pps-gpio,gpiopin=18を追記
    /boot/firmware/config.txt
    (省略)
    [all]
    enable_uart=1
    dtoverlay=pps-gpio,gpiopin=18
    
  4. vi /etc/default/gpsdで下記の通りに修正

    • DEVICESにGPSモジュールを指定し、シリアル接続および1PPS信号の読み取りを行う
    • GPSD_OPTIONS-nを指定することで、NTPクライアントが一人もアクティブでない状態でも更新するように動作させられる(ここの「Running GPSD」の項目で確認可能)
    /etc/default/gpsd
    # Devices gpsd should collect to at boot time.
    # They need to be read/writeable, either by user gpsd or the group dialout.
    DEVICES="/dev/ttyS0 /dev/pps0"
    
    # Other options you want to pass to gpsd
    GPSD_OPTIONS="-n"
    
    # Automatically hot add/remove USB GPS devices via gpsdctl
    USBAUTO="false"
    
    START_DAEMON="true"
    
  5. vi /etc/chrony/chrony.confで下記の通りに修正
    chronyがGPSモジュールで受信した信号をもとに時刻提供するように設定する。設定ファイルの上の方に同期先設定がまとまって記載されているので、そのあたりに記載するといいでしょう。
    今回は他の時刻同期先をすべてコメントアウトで切ってます。

    /etc/chrony/chrony.conf
    # Use NTP sources found in /etc/chrony/sources.d.
    # sourcedir /etc/chrony/sources.d
    
    # setting for GPS
    refclock SHM 0 offset 0.125 delay 0.2 refid NMEA
    refclock PPS /dev/pps0 lock NMEA refid PPS
    
  6. rebootで再起動

動作確認

各サービスの起動

gpsdchronyのサービスが、それぞれactive (running) であれば正常。

root@chrony-server:~# systemctl status gpsd
● gpsd.service - GPS (Global Positioning System) Daemon
     Loaded: loaded (/usr/lib/systemd/system/gpsd.service; disabled; preset: enabled)
     Active: active (running) since Mon 2026-03-09 18:27:33 JST; 1h 59min ago
root@chrony-server:~# systemctl status chrony
● chrony.service - chrony, an NTP client/server
     Loaded: loaded (/usr/lib/systemd/system/chrony.service; enabled; preset: enabled)
     Active: active (running) since Mon 2026-03-09 18:29:51 JST; 1h 57min ago

GPS信号の受信

gpsmonで確認可能。
画面中央付近の「Latitude」や「Longitude」といった緯度経度の値が表示されていること、画面下側に(99) $GNRXX,9999.999,A,9999.9999,N,9999.9999,E...のような表示が沢山流れてれば正常となる。

異常があれば、cat /dev/serial0で文字が大量に流れてくるか確認すること。
もし流れていない場合は、「GPS信号を受信できていない」か「GPS信号の情報がうまくRaspberry piに伝えられていない」場合が多く、後者の場合は、stty -F /dev/serial0 9600などのコマンドでGPSモジュールのボーレートと合わせること。

PPSの認識

lsmod | grep ppsを実行し、pps_gpioが出力されることを確認する。

root@chrony-server:~# lsmod | grep pps
pps_ldisc              12288  1
pps_gpio               12288  0

同期状況の確認

PPS の行に * (同期中) または # (良好な同期元) が付けばよい。
同期しない場合はapt install pps-toolsでPPSツールをインストールし、ppstest /dev/pps0で1秒おきにsource 0 - assert 172xxxxxxx.xxxxxxxxxのようなログが流れるか確認してください。流れなければGPS信号を受信できてないか、PPSの配線が誤ってる可能性があります。

root@chrony-server:~# chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
#- NMEA                          0   4   377     9   +107ms[ +107ms] +/-  103ms
#* PPS                           0   4   377     9    -63ns[  -25ns] +/-  177ns

あとがき

Raspberry Piを再起動し、GPSモジュールが信号を受信して5~10分くらいしてから、chronyで正常に時刻同期できるようになります。

今回はGeminiに質問しながら構築してみましたが、余分な手順があまりなく良い感じに構築できました。
ここ2、3年でだいぶ便利になりましたね。

Gemini投げた質問

  1. 受信モジュールGYSFFMANCをraspberry pi3 model Bにて、「6.12.47+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.47-1+rpt1 (2025-09-16) aarch64 GNU/Linux」のOS上でGPSモジュールとして認識させたい
  2. 1PPS 信号 を使った高精度な計測を行い、かつChronyにもこの GPS 情報を使用したい
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?