Chron0s-01 started as a Raspberry Pi 5-based GPS/GNSS time server, but the project goal became larger: build a reliable infrastructure time hierarchy for the homelab.
Learning Project - Infrastructure Services
Chron0s Phase 2 - Enterprise Time Architecture
The build evolved from a Raspberry Pi GPS/GNSS clock into an enterprise-style time hierarchy for identity, virtualization, firewall, backup, storage, AI infrastructure, and security monitoring systems.
- FocusEnterprise time architecture
- HardwareRaspberry Pi 5 + GPS/GNSS
- UpstreamChron0s-01 / 192.168.50.245
- Distributionmein01 / 192.168.50.5
- StorageNVMe boot
- StatusChron0s Phase 2 Complete
Project Goal
Build a reliable time layer that supports identity, logging, backups, and security monitoring.
Time sync is one of those quiet infrastructure services that usually only gets attention when it breaks. Phase 2 makes it visible, testable, centrally distributed, and easier to trust.
Executive Context
Time synchronization is quiet infrastructure until identity, audit trails, or incident response need it.
Time needed a trusted hierarchy
Inconsistent or legacy NTP references create risk for identity, logging, backups, security monitoring, auditability, and troubleshooting.
Centralize enterprise distribution
Evolve Chron0s from a Raspberry Pi GPS/GNSS clock into a time hierarchy using Meinberg distribution and Active Directory alignment.
Core systems integrated
Established Chron0s as the GPS-backed source, Meinberg as the distribution layer, and validated core infrastructure clients.
Better timestamp trust
Reduced risk from inconsistent time sources, weak log correlation, unclear NTP dependencies, and fragile timestamp assumptions.
Visible and testable time service
Improved infrastructure trust through centralized distribution, validation commands, client integration checks, and planned redundancy and monitoring.
Final Architecture
Chron0s-01 is the GPS-backed source of truth; Meinberg is the enterprise distribution layer.
The goal was not simply to build a Raspberry Pi GPS clock. Chron0s Phase 2 turns that clock into an infrastructure time hierarchy where core systems consume time from Meinberg instead of depending directly on the Raspberry Pi.
- GPS Satellites
- Chron0s-01 - 192.168.50.245 - Raspberry Pi 5 + GPS/GNSS
- mein01 - 192.168.50.5 - Meinberg NTP Distribution Layer
- DC1 - 192.168.50.3 - PDC Emulator
- DC2 - 192.168.50.4
- Infrastructure clients
Design Philosophy
GPS accuracy belongs upstream; stable distribution belongs in the enterprise layer.
- Chron0s provides accurate GPS-backed time.
- Meinberg provides enterprise time distribution.
- Active Directory continues to use its native hierarchy.
- Infrastructure systems consume time from Meinberg instead of directly from the Raspberry Pi.
- The design preserves GPS accuracy, centralized distribution, Internet fallback, reduced Raspberry Pi dependency, and easier troubleshooting.
| Before | After |
|---|---|
| Public NTP sources | GPS-backed authoritative source |
| Inconsistent infrastructure configuration | Centralized Meinberg distribution |
| Legacy and unknown NTP references | Consistent infrastructure synchronization |
| No GPS-backed source | Enterprise-style time hierarchy |
| Limited architecture evidence | Documented and validated architecture |
Future Enhancements
Keep the time layer boring, redundant, and observable after Phase 2.
- Chron0s-02 secondary GPS source
- PPS validation and optimization
- Prometheus/Grafana monitoring for Chron0s
- NTP drift dashboards
- Infrastructure-wide time monitoring
- Automatic alerting on Chron0s failures
Validation Results
Phase 2 was accepted only after GPS, distribution, client integration, and Security Onion communication were checked.
GPS-backed source stable
GPS lock maintained, 3D FIX confirmed, satellites tracked continuously, chronyd synchronized, NTP service enabled, vcgencmd get_throttled = 0x0, and the platform remained stable for more than 24 hours.
Distribution layer validated
mein01 successfully consumed Chron0s, reachability reached 377, and Chron0s participated in peer selection.
Core infrastructure moved to Meinberg
DC1, DC2, OPNsense, prox1, prox2, ark-core AI Host, PBS, and TrueNAS were successfully integrated.
Communication verified, observation continues
Security Onion communicated with Meinberg and chronyd detected it, but initially classified Meinberg as a falseticker due to disagreement with long-established public pool sources. Connectivity and NTP communication were verified, then left in observation mode.
Hardware Used
The first job was getting a stable Pi 5 NVMe platform before worrying about time accuracy.
Raspberry Pi 5
Base platform for the time server.
NVMe boot drive
Boot storage for the Pi 5 build.
Pi 5 NVMe HAT/ribbon
PCIe/NVMe connection stack used during the rebuild.
u-blox M10 GR-U01
USB GPS/GNSS receiver used as the time source.
USB-C power
USB-C power supply with a known-good USB-C cable.
Temporary Wi-Fi
Wi-Fi was used during setup. Wired Ethernet is planned later.
Build Notes and Troubleshooting
The NVMe drive looked suspicious at first, but the evidence kept pointing back to power, cable, or Pi behavior.
Initial Symptoms
Initial boot worked, but the first Pi showed EXT4 filesystem issues, input/output errors, and commands disappearing.
NVMe Health
The Lexar NM790 SMART report was clean: SMART passed, Critical Warning 0x0, Media and Data Integrity Errors 0, and Error Information Log Entries 0.
Ribbon Reseat
Reseating the Pi 5 PCIe/NVMe ribbon helped temporarily, which kept the connector path in the suspect list.
Second Pi
Moving the NVMe/HAT stack to a second Raspberry Pi 5 and switching to a known-good USB-C cable resulted in stable operation.
Working Theory
Pi #1 had shown throttled=0x50000. Pi #2 showed throttled=0x0. The likely cause was power/cable instability or Pi #1 hardware behavior, not the NVMe drive.
Useful Validation Commands
These are the quick checks that separate a hunch from an actual build log.
Platform, GPS, PPS, and chrony checks
vcgencmd get_throttled
vcgencmd measure_temp
mount | grep " / "
dmesg | grep -i nvme
dmesg | grep -iE "error|i/o|ext4"
sudo smartctl -a /dev/nvme0
chronyd -v
gpsd -V
cgps -s
gpspipe -r | head
gpspipe -w -n 20
ls -l /dev/pps*
sudo ppstest /dev/pps0
chronyc sources -v
chronyc tracking
GPS/GNSS Validation
The GPS receiver came up cleanly and proved live satellite data near a window.
/dev/ttyUSB0
The GR-U01 appeared as a USB serial device at /dev/ttyUSB0.
Prolific PL2303
The receiver presented through a Prolific PL2303 USB serial bridge.
u-blox M10
gpsd detected the u-blox M10 receiver.
3D FIX
GPS achieved a 3D fix near a window. cgps showed satellite count, latitude/longitude, altitude, and 3D FIX.
NMEA and JSON
gpspipe confirmed live NMEA/JSON output from gpsd.
PPS Status
GPS time works. PPS exists as a device, but the pulse is not validated yet.
/dev/pps0 existed, and ppstest found the PPS source, but it timed out waiting for pulses. gpsd also reported pps:false.
Current status: GPS time works; PPS device exists but PPS pulse is not yet validated. PPS investigation is deferred to a later phase.
Matt's Notes
Enterprise time distribution turned out to matter more than the GPS hardware by itself.
What surprised me
- The GPS receiver was easier than the platform stability issues.
- Most effort went into power, storage, and NTP architecture rather than GPS itself.
- Enterprise time distribution turned out to be more important than the GPS hardware.
What broke
- EXT4 filesystem corruption on the original Pi.
- Input/output errors.
- Historical undervoltage events.
- Security Onion initially rejected Meinberg as a falseticker.
What I learned
- Accurate time is infrastructure.
- GPS is only one piece of the solution.
- A distribution layer like Meinberg simplifies everything.
- Observability and validation are critical.
- Time synchronization affects security, virtualization, logging, backups, and troubleshooting.
What I would do differently
- Validate power delivery before building services.
- Check vcgencmd get_throttled immediately.
- Build the time hierarchy first instead of treating Chron0s as an isolated project.
- Document architecture decisions as they are made.
Current Status
Chron0s Phase 2 is complete and operational.
Chron0s-01 is stable as the GPS-backed upstream source, mein01 is distributing time, Active Directory keeps its native hierarchy, and the core infrastructure systems have been validated against the new enterprise-style time architecture.
Future Enhancements
Add redundancy, telemetry, drift visibility, and alerting around the completed Phase 2 architecture.
- Chron0s-02 secondary GPS source
- PPS validation and optimization
- Prometheus/Grafana monitoring for Chron0s
- NTP drift dashboards
- Infrastructure-wide time monitoring
- Automatic alerting on Chron0s failures