• Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Search
  • Register
  • Login
Netgate Discussion Forum
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Search
  • Register
  • Login

Building a Stratum 1 NTP Server Using Raspberry Pi

Scheduled Pinned Locked Moved Off-Topic & Non-Support Discussion
57 Posts 9 Posters 26.8k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A
    athurdent
    last edited by May 30, 2019, 2:25 PM

    @tman222 Thanks! :)
    I went with a USB receiver, because it's just a little home project and I did not want to spend too much money on it. I wanted to show my son how to disassemble something electronic and (hopefully) not break it, also how to solder without completely melting anything.
    I had a good laugh on this one, when it came to configure NTP and compare time sources:
    “A man with one watch knows what time it is. A man with two watches is never sure.”

    While I am no expert on NTP and did not really dive into all the background info, I think this is important to note:
    "/dev/ttyAMA0
    The UART device on a Raspberry Pi. Has the side effect of opening /dev/pps0 for RFC2783 1PPS data." (http://www.catb.org/gpsd/gpsd.html)

    So, you probably don't need to specify a separate PPS source in ntp.conf because of that. At least here that did not work anyways, maybe because GPSD already uses PPS that way.

    Also, on the lastest Raspbian, there is no need to compile NTP yourself, everything is build in already now. You just have to get the symlinks for GPS and PPS in place.
    This took care of it here, if I documented it right:

    systemctl disable hciuart
    systemctl mask serial-getty@ttyAMA0.service
    
    vi /etc/udev/rules.d/09.pps.rules
    KERNEL=="pps0", OWNER="root", GROUP="tty", MODE="0660", SYMLINK+="gpspps0"
    

    I have not tried that nohz option. I think jitter is OK and does not vary too much. But then again, I am far from an expert, just the firewall guy trying to play a little with something else :)

    1 Reply Last reply Reply Quote 0
    • Q
      q54e3w
      last edited by q54e3w Jun 1, 2019, 6:55 AM Jun 1, 2019, 4:25 AM

      I've been meaning to put a quick how-to together for a NTP server based on a pcengine apu2 which offers much better performance at a slightly higher price. You may not need the increased accuracy but its available if you want to join the ranks of time-nuts.

      chronyc tracking
      Reference ID    : 47505330 (GPS0)
      Stratum         : 1
      Ref time (UTC)  : Sat Jun 01 06:56:35 2019
      System time     : 0.000000004 seconds fast of NTP time
      Last offset     : +0.000000004 seconds
      RMS offset      : 0.000000008 seconds
      Frequency       : 4.568 ppm fast
      Residual freq   : +0.000 ppm
      Skew            : 0.001 ppm
      Root delay      : 0.000000001 seconds
      Root dispersion : 0.000000941 seconds
      Update interval : 1.0 seconds
      Leap status     : Normal
      
      T 1 Reply Last reply Jun 1, 2019, 12:53 PM Reply Quote 0
      • S
        stephenw10 Netgate Administrator
        last edited by Jun 1, 2019, 9:02 AM

        That 4ns fast? Nice!

        1 Reply Last reply Reply Quote 0
        • T
          tman222 @q54e3w
          last edited by Jun 1, 2019, 12:53 PM

          @q54e3w said in Building a Stratum 1 NTP Server Using Raspberry Pi:

          I've been meaning to put a quick how-to together for a NTP server based on a pcengine apu2 which offers much better performance at a slightly higher price. You may not need the increased accuracy but its available if you want to join the ranks of time-nuts.

          chronyc tracking
          Reference ID    : 47505330 (GPS0)
          Stratum         : 1
          Ref time (UTC)  : Sat Jun 01 06:56:35 2019
          System time     : 0.000000004 seconds fast of NTP time
          Last offset     : +0.000000004 seconds
          RMS offset      : 0.000000008 seconds
          Frequency       : 4.568 ppm fast
          Residual freq   : +0.000 ppm
          Skew            : 0.001 ppm
          Root delay      : 0.000000001 seconds
          Root dispersion : 0.000000941 seconds
          Update interval : 1.0 seconds
          Leap status     : Normal
          

          Hi @q54e3w - those are some very impressive figures! As someone who is a always obsessed with performance and efficiency I just may have to try this too. :) Do you mind sharing with us what parts you used for this setup? In particular, I'm quite curious what you chose for the GPS receiver module in the APU2 box. Also, what OS did you end up running on the machine to get that level of performance (accuracy)? Was it a flavor of Linux (e.g. Debian) or something more custom?

          Thanks again!

          1 Reply Last reply Reply Quote 0
          • T
            tman222
            last edited by Jun 29, 2019, 7:11 PM

            With the Raspberry Pi 4 having just been released, do you guys think it will perform better for this purpose given the improvements to the network on the SoC?

            Also, @q54e3w - when you have a moment, could you please share some additional details with us what you are using for an APU2 based setup? I'm very curious. Thanks again!

            1 Reply Last reply Reply Quote 0
            • K
              kiokoman LAYER 8
              last edited by kiokoman Jul 2, 2019, 1:24 PM Jun 30, 2019, 6:05 PM

              i will tell you in a few days, i'm waiting for the courier ...
              raspberry pi 4, but gps is from adafruit.
              this will be my first experiment with this toys
              ...
              reviced it today, i just had the time to install raspbian and soldered the gps hat, now i need to find a way to have a gps fix. i don't have the time now to do any test, the only first impression is that the board become very hot, i will probably buy something to cool it down

              @johnpoz maybe you know, do you think it will be possible to add a display on top of the gps hat or it will not work ? RX/TX pins are for gps data and pin #4 is used for PPS on my case

              ̿' ̿'\̵͇̿̿\з=(◕_◕)=ε/̵͇̿̿/'̿'̿ ̿
              Please do not use chat/PM to ask for help
              we must focus on silencing this @guest character. we must make up lies and alter the copyrights !
              Don't forget to Upvote with the 👍 button for any post you find to be helpful.

              1 Reply Last reply Reply Quote 0
              • K
                kiokoman LAYER 8
                last edited by kiokoman Jul 3, 2019, 5:13 PM Jul 3, 2019, 5:08 PM

                and this is how it work here, i have some trouble because the "howto" available are a little outdated, i need to do some research

                pi@raspberrypi:~ $ ntpq -crv -pn
                associd=0 status=0115 leap_none, sync_pps, 1 event, clock_sync,
                version="ntpd 4.2.8p13@1.3847-o Tue Jul  2 16:07:07 UTC 2019 (2)",
                processor="armv7l", system="Linux/4.19.50-v7l+", leap=00, stratum=1,
                precision=-20, rootdelay=0.000, rootdisp=1938.001, refid=PPS,
                reftime=e0c75f48.32187a6c  Wed, Jul  3 2019 19:07:20.195,
                clock=e0c75f56.2a9026ff  Wed, Jul  3 2019 19:07:34.166, peer=43403, tc=4,
                mintc=3, offset=-0.147120, frequency=-17.048, sys_jitter=0.036991,
                clk_jitter=0.118, clk_wander=0.024
                
                     remote           refid      st t when poll reach   delay   offset  jitter
                ==============================================================================
                *172.16.0.100    193.204.114.232  2 u   32   32    3    0.468    0.169   0.027
                +31.14.131.188   195.113.144.238  2 u   56   64    1   18.466    0.815   0.075
                -213.251.52.250  193.0.0.229      2 u   55   64    1   21.270    4.187  21.794
                +85.199.214.99   .GPS.            1 u   54   64    1   35.809   -0.642   0.217
                -185.19.184.35   193.204.114.233  2 u   53   64    1   22.388    4.127  23.813
                o127.127.22.0    .PPS.            0 l   14   16    7    0.000   -0.147   0.037
                 127.127.20.0    .GPS.            0 l    -   64    0    0.000    0.000   0.000
                

                ̿' ̿'\̵͇̿̿\з=(◕_◕)=ε/̵͇̿̿/'̿'̿ ̿
                Please do not use chat/PM to ask for help
                we must focus on silencing this @guest character. we must make up lies and alter the copyrights !
                Don't forget to Upvote with the 👍 button for any post you find to be helpful.

                1 Reply Last reply Reply Quote 0
                • K
                  kiokoman LAYER 8
                  last edited by kiokoman Jul 3, 2019, 8:11 PM Jul 3, 2019, 8:11 PM

                  ok this is working now, i found out that on my raspberry pi 4 the gps is not on ttyAMA0 as all the tutorial around is based on, but under ttyS0, took my awhile to find out what was wrong ...

                  pi@raspberrypi:~ $ ntpq -crv -pn
                  associd=0 status=0115 leap_none, sync_pps, 1 event, clock_sync,
                  version="ntpd 4.2.8p12@1.3728-o (1)", processor="armv7l",
                  system="Linux/4.19.50-v7l+", leap=00, stratum=1, precision=-20,
                  rootdelay=0.000, rootdisp=7938.582, refid=PPS,
                  reftime=e0c78921.5335fc30  Wed, Jul  3 2019 22:05:53.325,
                  clock=e0c7892f.6faf75ea  Wed, Jul  3 2019 22:06:07.436, peer=4517, tc=4,
                  mintc=3, offset=-0.858325, frequency=-16.929, sys_jitter=0.000954,
                  clk_jitter=0.406, clk_wander=0.000, tai=37, leapsec=201701010000,
                  expire=201912280000
                  
                       remote           refid      st t when poll reach   delay   offset  jitter
                  ==============================================================================
                  *172.16.0.100    134.64.19.180    2 u   23   32    1    0.474    0.189   0.167
                   it.pool.ntp.org .POOL.          16 p    - 1024    0    0.000    0.000   0.001
                  x127.127.20.0    .GPS.            0 l   31   64    1    0.000   -1.180   0.001
                  o127.127.22.0    .PPS.            0 l   14   16    1    0.000   -0.858   0.001
                  +37.247.53.178   193.204.114.232  2 u   20 1024    1   12.891   -0.781   0.375
                  -213.251.52.250  193.0.0.229      2 u   14 1024    1   21.182    3.930   0.230
                  +85.199.214.99   .GPS.            1 u   13 1024    1   36.061   -1.087   7.806
                  -185.19.184.35   193.204.114.233  2 u   12 1024    1   22.180    3.048   0.105
                  

                  ̿' ̿'\̵͇̿̿\з=(◕_◕)=ε/̵͇̿̿/'̿'̿ ̿
                  Please do not use chat/PM to ask for help
                  we must focus on silencing this @guest character. we must make up lies and alter the copyrights !
                  Don't forget to Upvote with the 👍 button for any post you find to be helpful.

                  1 Reply Last reply Reply Quote 0
                  • S
                    stephenw10 Netgate Administrator
                    last edited by Jul 4, 2019, 6:05 PM

                    Looks like it's marked the GPS as a false ticker. You probably need to adjust the fudge time.

                    Steve

                    1 Reply Last reply Reply Quote 0
                    • K
                      kiokoman LAYER 8
                      last edited by Jul 4, 2019, 6:37 PM

                      yes, indeed, it's still a work in progress

                      as i say a have trouble because i was unable to find any recent howto, anyway now i have this

                      pi@raspberrypi:~ $ ntpq -crv -pn
                      associd=0 status=0115 leap_none, sync_pps, 1 event, clock_sync,
                      version="ntpd 4.2.8p12@1.3728-o (1)", processor="armv7l",
                      system="Linux/4.19.50-v7l+", leap=00, stratum=1, precision=-20,
                      rootdelay=0.000, rootdisp=500.060, refid=PPS,
                      reftime=e0c8c525.ed3084d9  Thu, Jul  4 2019 20:34:13.926,
                      clock=e0c8c52a.0f3a2862  Thu, Jul  4 2019 20:34:18.059, peer=42571, tc=4,
                      mintc=3, offset=0.000149, frequency=-19.939, sys_jitter=0.000954,
                      clk_jitter=0.001, clk_wander=0.000, tai=37, leapsec=201701010000,
                      expire=201912280000
                      
                           remote           refid      st t when poll reach   delay   offset  jitter
                      ==============================================================================
                      o127.127.22.0    .PPS.            0 l    5   16  377    0.000    0.000   0.001
                      *127.127.28.0    .GPS.            1 l    4   16  377    0.000  -146.34  85.899
                      +193.204.114.232 .CTD.            1 u   41   64  377   30.981    0.240   0.166
                      +193.204.114.233 .CTD.            1 u   38   64  377   30.653    0.695   0.148
                      +79.36.117.15    .GPS.            1 u   60   64  377   37.111   -1.756   0.177
                      +2001:4b20::beef 85.158.25.74     2 u   65   64  377   17.923   -0.204   2.899
                      +2001:67c:8:abcd .PPS.            1 u   33   64  377   31.323    0.117   6.783
                      +81.94.123.17    85.158.25.74     2 u    3   64  377   21.208   -2.684   5.947
                      

                      ̿' ̿'\̵͇̿̿\з=(◕_◕)=ε/̵͇̿̿/'̿'̿ ̿
                      Please do not use chat/PM to ask for help
                      we must focus on silencing this @guest character. we must make up lies and alter the copyrights !
                      Don't forget to Upvote with the 👍 button for any post you find to be helpful.

                      1 Reply Last reply Reply Quote 0
                      • K
                        kiokoman LAYER 8
                        last edited by kiokoman Jul 7, 2019, 8:39 PM Jul 6, 2019, 12:33 PM

                        ok i'm putting here what i have done so far, if someone can check and give feedback pls

                        inside /boot/config.txt :

                        dtoverlay=pi3-disable-bt
                        force_turbo=1
                        init_uart_baud=9600
                        dtoverlay=pps-gpio,gpiopin=4
                        

                        inside /boot/cmdline.txt

                        dwc_otg.lpm_enable=0 console=tty1 root=PARTUUID=b55c365b-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles nohz=off
                        

                        inside /etc/modules

                        # /etc/modules: kernel modules to load at boot time.
                        #
                        # This file contains the names of kernel modules that should be loaded
                        # at boot time, one per line. Lines beginning with "#" are ignored.
                        
                        i2c-dev
                        pps-gpio
                        

                        i have created /etc/udev/rules.d/99-gps.rules :

                        KERNEL=="pps0",SYMLINK+="gpspps0"
                        KERNEL=="ttyAMA0",SUBSYSTEM=="tty",MODE=="0777", SYMLINK+="gps0"
                        
                        sudo apt update
                        sudo apt dist-upgrade
                        sudo systemctl disable hciuart
                        sudo systemctl disable serial-getty@ttyAMA0.service
                        sudo apt-get install pps-tools ntp dnsutils setserial
                        

                        inside /etc/rc.local

                        systemctl stop ntp #otherwise the next command will not work
                        stty -F /dev/ttyAMA0 raw 9600 cs8 clocal -cstopb #set to 9600bps as per adafruit spec
                        setserial /dev/ttyAMA0 low_latency # improve latency.. maybe
                        #we need only GPMRC out
                        /bin/echo -e '$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\r\n' > /dev/ttyAMA0 
                        systemctl start ntp
                        

                        inside /etc/ntp.conf

                        # /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help
                        
                        driftfile /var/lib/ntp/ntp.drift
                        
                        # Leap seconds definition provided by tzdata
                        leapfile /usr/share/zoneinfo/leap-seconds.list
                        
                        # Enable this if you want statistics to be logged.
                        #statsdir /var/log/ntpstats/
                        
                        statistics loopstats peerstats clockstats
                        filegen loopstats file loopstats type day enable
                        filegen peerstats file peerstats type day enable
                        filegen clockstats file clockstats type day enable
                        
                        # By default, exchange time with everybody, but don't allow configuration.
                        restrict default kod notrap nomodify nopeer noquery limited
                        restrict -6 default kod notrap nomodify nopeer noquery limited
                        
                        # Local users may interrogate the ntp server more closely.
                        restrict 127.0.0.1
                        restrict -6 ::1
                        
                        # Needed for adding pool entries
                        restrict source notrap nomodify noquery
                        
                        # Clients from this (example!) subnet have unlimited access, but only if
                        # cryptographically authenticated.
                        restrict 192.168.1.0 mask 255.255.255.0
                        
                        # If you want to provide time to your local subnet, change the next line.
                        # (Again, the address is an example only.)
                        #broadcast 192.168.123.255
                        
                        # If you want to listen to time broadcasts on your local subnet, de-comment the
                        # next lines.  Please do this only if you trust everybody on the network!
                        #disable auth
                        #broadcastclient
                        logfile /var/log/ntp.log
                        
                        server 127.127.20.0 mode 17 minpoll 4 maxpoll 4 iburts prefer
                        fudge 127.127.20.0 flag1 1 time2 0.350 refid GPS
                        
                        pool 0.it.pool.ntp.org
                        pool 1.it.pool.ntp.org
                        pool 2.it.pool.ntp.org
                        pool 3.it.pool.ntp.org
                        

                        result is:

                        pi@raspberrypi:~ $ ntpq -crv -pn
                        associd=0 status=0418 leap_none, sync_uhf_radio, 1 event, no_sys_peer,
                        version="ntpd 4.2.8p12@1.3728-o (1)", processor="armv7l",
                        system="Linux/4.19.50-v7l+", leap=00, stratum=1, precision=-19,
                        rootdelay=0.000, rootdisp=1.180, refid=GPS,
                        reftime=e0cb6dbc.b9fa8540  Sat, Jul  6 2019 20:58:04.726,
                        clock=e0cb6dc9.863ed46d  Sat, Jul  6 2019 20:58:17.524, peer=65419, tc=4,
                        mintc=3, offset=-0.000335, frequency=-18.876, sys_jitter=0.001907,
                        clk_jitter=0.002, clk_wander=0.000, tai=37, leapsec=201701010000,
                        expire=201912280000
                        
                             remote           refid      st t when poll reach   delay   offset  jitter
                        ==============================================================================
                        o127.127.20.0    .GPS.            0 l   13   16  377    0.000    0.000   0.002
                         0.it.pool.ntp.o .POOL.          16 p    -   64    0    0.000    0.000   0.002
                         1.it.pool.ntp.o .POOL.          16 p    -   64    0    0.000    0.000   0.002
                         2.it.pool.ntp.o .POOL.          16 p    -   64    0    0.000    0.000   0.002
                         3.it.pool.ntp.o .POOL.          16 p    -   64    0    0.000    0.000   0.002
                        -213.251.52.250  193.0.0.229      2 u   21   64  377   20.446    3.853   0.146
                        -94.177.187.22   193.204.114.233  2 u   14   64  377   16.930   -0.241   0.118
                        -147.135.207.213 85.199.214.99    2 u   17   64  337   28.742   -0.525   0.150
                        -212.45.144.3    193.204.114.232  2 u   18   64  377   11.872    0.162   0.148
                        -188.213.165.209 193.204.114.232  2 u   19   64  377   17.956    0.459   0.136
                        -80.211.52.109   85.199.214.99    2 u   22   64  377   21.608   -1.141   0.134
                        #5.158.71.217    94.177.187.22    3 u   17   64  377   30.960   -3.933   0.626
                        +85.199.214.99   .GPS.            1 u   13   64  377   35.659   -0.337   0.172
                        +37.247.53.178   193.204.114.233  2 u   16   64  377   12.341    0.191   0.159
                        +185.19.184.35   193.204.114.233  2 u   21   64  377   22.090    3.996   0.139
                        -80.211.178.99   194.146.251.100  2 u   10   64  377   18.669   -2.758   6.145
                        
                        pi@raspberrypi:~ $ sudo lsof /dev/pps0 /dev/gps0
                        COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
                        ntpd    11340  ntp    4u   CHR 204,64      0t0 1165 /dev/ttyAMA0
                        ntpd    11340  ntp    5u   CHR  242,0      0t0 1495 /dev/pps0
                        

                        from what i understand there is no need for gpsd as it was causing alot of offset/jitter
                        plus from what i have read around ntp now bind to /dev/pps0 and /dev/ttyAMA0 (GPS) automatically. mode 17 is 16+1 so 9600bps + GPMRC
                        rif. https://www.eecis.udel.edu/~mills/ntp/html/drivers/driver20.html
                        fudge 127.127.20.0 flag1 1 this flag tell ntp to use PPS, i can set flag1 0 and eventually add 127.127.0.22 back and adjust offset, but i don't see why if ntp do the work for me?
                        my score on pool.ntp.org si now 20 and identified as stratum 1

                        pi@raspberrypi:~ $ iperf -c 192.168.1.90
                        ------------------------------------------------------------
                        Client connecting to 192.168.1.90, TCP port 5001
                        TCP window size:  232 KByte (default)
                        ------------------------------------------------------------
                        [  3] local 192.168.1.89 port 52616 connected with 192.168.1.90 port 5001
                        [ ID] Interval       Transfer     Bandwidth
                        [  3]  0.0-10.0 sec  1.08 GBytes   931 Mbits/sec
                        

                        ̿' ̿'\̵͇̿̿\з=(◕_◕)=ε/̵͇̿̿/'̿'̿ ̿
                        Please do not use chat/PM to ask for help
                        we must focus on silencing this @guest character. we must make up lies and alter the copyrights !
                        Don't forget to Upvote with the 👍 button for any post you find to be helpful.

                        T 1 Reply Last reply Jul 4, 2020, 2:14 PM Reply Quote 0
                        • T
                          tman222 @kiokoman
                          last edited by Jul 4, 2020, 2:14 PM

                          Hi @kiokoman - thanks for posting your experience using a Raspberry Pi 4. I'm looking to give this project another go this summer and catching up again on the instructions/advice in this thread and the equipment I would need to purchase. Do you mind listing what exact equipment you ended up using and any steps you took that weren't detailed in your prior posts? At this point, I'm looking to generally follow this guide I found, however, using a Raspberry Pi 4 B instead of the Odroid C2 board.

                          https://nguvu.org/pfsense/network%20time%20protocol%20(ntp)/ntp-server/

                          At the time this was written the Pi 4 had not been released yet and the Odroid presented a better option over the Pi 3 given true gigabit network support. I also like the PoE hat integration which helps simplify cabling.

                          Thanks in advance for any help and advice you can provide.

                          1 Reply Last reply Reply Quote 0
                          • K
                            kiokoman LAYER 8
                            last edited by Jul 4, 2020, 2:52 PM

                            1. Raspberry PI 4
                            2. Memory Card with raspian
                            3. GPS Adafruit ultimate GPS hat
                            4. battery cr1220
                            5. external active antenna
                            6. uFL to SMA converter

                            https://www.kiokoman.eu.org/index.php/per-non-dimenticare/24-howto-raspberry-pi-4-headless-ntp-stratum-1-gps-pps

                            https://www.ntppool.org/scores/ntp.kiokoman.eu.org

                            ̿' ̿'\̵͇̿̿\з=(◕_◕)=ε/̵͇̿̿/'̿'̿ ̿
                            Please do not use chat/PM to ask for help
                            we must focus on silencing this @guest character. we must make up lies and alter the copyrights !
                            Don't forget to Upvote with the 👍 button for any post you find to be helpful.

                            1 Reply Last reply Reply Quote 0
                            • T
                              tman222
                              last edited by Nov 28, 2020, 10:09 PM

                              Thanks @kiokoman for sharing your setup and instructions, I really appreciate it. I wanted to bring this thread back up because I'm looking into this again as a small tinkering project and was also curious to learn more about the alternative APU2 based Stratum 1 NTP server setup @q54e3w mentioned above. @q54e3w - could you share some more details on your setup? Thanks in advance.

                              1 Reply Last reply Reply Quote 0
                              • Q
                                q54e3w
                                last edited by Nov 28, 2020, 10:30 PM

                                I had a half finished build and setup guide I was in the process of putting finishing touches to but didn't get to. I'll push it to the top of the list.
                                The downside of the PTP protocol is that the accuracy isn't preserved across the LAN unless you have hardware that supports it and because of the clients who typically care about this level of accuracy, its seems to be only available in more expensive switches etc, take a look here for a starter and please follow up if you find any more home lab friendly pieces.
                                https://en.wikipedia.org/wiki/List_of_PTP_implementations
                                My hardware solution that data came from was a Intel i210 based SBC that supports IEEE1588 and a regular GPS received running stock debian with mild kernel optimization.

                                I've migrated from using NTP to Chrony which syncs up quicker especially from a cold start which was one of the drawbacks of the NTP implementation. I tried the Odroid C4 which is an updated C2 but the earlier kernels didn't have PPS deciding included and I didn't have the time to build a custom kernel. Im sure things have evolved since then.

                                All of this is perhaps irrelevant though as Ive had great success with a LeoNTP server, unbelievably accurate and consistent across the year through temperature fluctuations etc and outperforms a non temperature controlled Pi substantially.
                                http://leobodnar.com/shop/index.php?main_page=product_info&products_id=272
                                When I update that guide I'll include some performance graphs etc.

                                T 1 Reply Last reply Nov 28, 2020, 10:46 PM Reply Quote 0
                                • T
                                  tman222 @q54e3w
                                  last edited by Nov 28, 2020, 10:46 PM

                                  @q54e3w said in Building a Stratum 1 NTP Server Using Raspberry Pi:

                                  I had a half finished build and setup guide I was in the process of putting finishing touches to but didn't get to. I'll push it to the top of the list.
                                  The downside of the PTP protocol is that the accuracy isn't preserved across the LAN unless you have hardware that supports it and because of the clients who typically care about this level of accuracy, its seems to be only available in more expensive switches etc, take a look here for a starter and please follow up if you find any more home lab friendly pieces.
                                  https://en.wikipedia.org/wiki/List_of_PTP_implementations
                                  My hardware solution that data came from was a Intel i210 based SBC that supports IEEE1588 and a regular GPS received running stock debian with mild kernel optimization.

                                  I've migrated from using NTP to Chrony which syncs up quicker especially from a cold start which was one of the drawbacks of the NTP implementation. I tried the Odroid C4 which is an updated C2 but the earlier kernels didn't have PPS deciding included and I didn't have the time to build a custom kernel. Im sure things have evolved since then.

                                  All of this is perhaps irrelevant though as Ive had great success with a LeoNTP server, unbelievably accurate and consistent across the year through temperature fluctuations etc and outperforms a non temperature controlled Pi substantially.
                                  http://leobodnar.com/shop/index.php?main_page=product_info&products_id=272
                                  When I update that guide I'll include some performance graphs etc.

                                  Thanks @q54e3w, I really appreciate the response. If you don't mind me asking, where did you purchase the LeoNTP server? Is there a US distributor or did you purchase directly from the UK? Thanks again.

                                  Q 1 Reply Last reply Nov 28, 2020, 10:56 PM Reply Quote 0
                                  • Q
                                    q54e3w @tman222
                                    last edited by Nov 28, 2020, 10:56 PM

                                    @tman222 https://v3.airspy.us/product/upu-leontp/

                                    1 Reply Last reply Reply Quote 0
                                    • K
                                      kiokoman LAYER 8
                                      last edited by kiokoman Dec 1, 2020, 8:38 PM Dec 1, 2020, 8:34 PM

                                      yesterday I received the waveshare max-m8q GPS hat for raspberry, I have configured it with the shared memory with gpsd, I still need to understand how to remove unnecessary GPS sentences, this is based on ublox, the adafruit was easier to configure. it seems to me that with SHM the offset is more unstable

                                      UBLOX
                                      status=0115 leap_none, sync_pps, 1 event, clock_sync,
                                      version="ntpd ntpsec-1.1.3 2019-11-18T06:04:00Z", processor="armv7l", system="Linux/5.4.72-v7l+", leap=00, stratum=1, precision=-20, rootdelay=0.0, rootdisp=1.135, refid=PPS, reftime=e37124c1.ed9d57a5 2020-12-01T20:23:29.928Z,
                                      clock=e37124cb.3ec99709 2020-12-01T20:23:39.245Z, peer=13250, tc=4, mintc=0, offset=0.000691, frequency=-18.836975, sys_jitter=0.000413, clk_jitter=0.000419, clk_wander=0.000275, tai=37, leapsec="2017-01-01T00:00Z",
                                      expire="2021-06-28T00:00Z"
                                           remote                                 refid      st t when poll reach   delay   offset   jitter
                                      =====================================================================================================
                                      *SHM(0)                                .GPS.            0 l   10   16  377   0.0000   2.6169   1.5005
                                      oPPS(0)                                .PPS.            0 l    9   16  377   0.0000   0.0007   0.0004
                                      -192.168.10.200                        .GPS.            1 u   63   64  377   0.0923  -2.0291   0.0163
                                      -151.3.106.211                         .GPS.            1 u   64   64  376  31.6928  -1.2702   1.2323
                                      +193.204.114.232                       .CTD.            1 u   27   64  377  39.7531   0.6983   0.9118
                                      +193.204.114.233                       .CTD.            1 u   20   64  375  30.1307   5.2933   0.7851
                                       0.it.pool.ntp.org                     .POOL.          16 p    -  256    0   0.0000   0.0000   0.0010
                                       1.it.pool.ntp.org                     .POOL.          16 p    -  256    0   0.0000   0.0000   0.0010
                                      -194.0.5.123                           85.199.214.100   2 u   58   64  377  20.8733  -0.5592   1.2309
                                      +37.247.53.178                         193.204.114.232  2 u    -   64  375  19.3794   0.6783   0.8454
                                      
                                      ADAFRUIT
                                      status=0415 leap_none, sync_uhf_radio, 1 event, clock_sync,
                                      version="ntpd ntpsec-1.1.3 2019-11-18T06:04:00Z", processor="armv7l", system="Linux/5.4.72-v7l+", leap=00, stratum=1, precision=-20, rootdelay=0.0, rootdisp=100.12, refid=GPS, reftime=e37127b4.87c1698d 2020-12-01T20:36:04.530Z,
                                      clock=e37127bc.a80fc6d1 2020-12-01T20:36:12.656Z, peer=52517, tc=6, mintc=0, offset=-0.392457, frequency=-12.429184, sys_jitter=1.986283, clk_jitter=2.402087, clk_wander=0.192477, tai=37, leapsec="2017-01-01T00:00Z",
                                      expire="2021-06-28T00:00Z"
                                           remote                                   refid      st t when poll reach   delay   offset   jitter
                                      =====================================================================================================
                                      oNMEA(0)                               .GPS.            0 l    8   64  373   0.0000  -0.3925   1.9863
                                      +192.168.10.203                        .PPS.            1 u   30   64  377   0.1134   2.0148   0.2716
                                       193.204.114.232                       .CTD.            1 u    -   64  375  31.0446   6.9845   0.8522
                                       193.204.114.233                       .CTD.            1 u   30   64  377  32.4280   6.2898   0.5521
                                       0.it.pool.ntp.org                     .POOL.          16 p    -  256    0   0.0000   0.0000   0.0010
                                       1.it.pool.ntp.org                     .POOL.          16 p    -  256    0   0.0000   0.0000   0.0010
                                      +212.45.144.88                         193.204.114.233  2 u   60   64  377  18.1799   1.5251   1.2220
                                      +95.110.248.206                        193.204.114.233  2 u   14   64  377  29.5371   3.1092   0.6852
                                      -162.159.200.123                       10.48.8.4        3 u   83  128  257  45.1323  -3.8529  11.8599
                                      -80.211.178.99                         216.239.35.0     2 u   33  128  337  29.3981   3.7633  20.6043
                                      

                                      ̿' ̿'\̵͇̿̿\з=(◕_◕)=ε/̵͇̿̿/'̿'̿ ̿
                                      Please do not use chat/PM to ask for help
                                      we must focus on silencing this @guest character. we must make up lies and alter the copyrights !
                                      Don't forget to Upvote with the 👍 button for any post you find to be helpful.

                                      1 Reply Last reply Reply Quote 0
                                      • Q
                                        q54e3w
                                        last edited by q54e3w Dec 2, 2020, 4:45 AM Dec 1, 2020, 8:44 PM

                                        How long has it been running? Give it 24 hours to find its groove.

                                        1 Reply Last reply Reply Quote 0
                                        • K
                                          kiokoman LAYER 8
                                          last edited by kiokoman Dec 1, 2020, 9:15 PM Dec 1, 2020, 9:14 PM

                                          yeah i'm still playing with both.. you know start / restart / reconfigure / compare :)

                                          ̿' ̿'\̵͇̿̿\з=(◕_◕)=ε/̵͇̿̿/'̿'̿ ̿
                                          Please do not use chat/PM to ask for help
                                          we must focus on silencing this @guest character. we must make up lies and alter the copyrights !
                                          Don't forget to Upvote with the 👍 button for any post you find to be helpful.

                                          1 Reply Last reply Reply Quote 0
                                          • First post
                                            Last post
                                          Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.
                                            This community forum collects and processes your personal information.
                                            consent.not_received