A lightweight, high-performance NTP (Network Time Protocol) daemon written in C++.
- High Performance: Optimized for low-latency time synchronization
- Cross-Platform: Supports macOS, Linux, and Windows
- Multi-Format Configuration: INI, JSON, and YAML configuration support
- Structured Logging: JSON structured logging with configurable output
- Enhanced Validation: Comprehensive NTP packet validation and error reporting
- Comprehensive Testing: Unit tests with automated test framework
- Secure: Built with security best practices
- Containerized: Full Docker support for development and deployment
# Build for all platforms
./scripts/build-docker.sh -d all
# Run the NTP daemon
docker-compose --profile runtime up simple-ntpd
# Development environment
docker-compose --profile dev up dev# Install dependencies
make deps
# Build the project
make build
# Run tests
make test
# Run specific tests
make test-ntp-packet # NTP packet functionality tests
make test-ntp-config # Configuration system tests
# Install
make installThe daemon supports multiple configuration formats:
# INI format
./simple-ntpd --config config.ini
# JSON format
./simple-ntpd --config config.json
# YAML format
./simple-ntpd --config config.yamlExample configurations are available in config/examples/:
simple-ntpd.json- JSON configuration examplesimple-ntpd.yaml- YAML configuration examplesimple-ntpd.conf- INI configuration example
The project includes a comprehensive modular help system:
# Quick reference
make help
# Complete reference
make help-all
# Category-specific help
make help-build # Build and development targets
make help-package # Package creation targets
make help-deps # Dependency management targets
make help-service # Service management targets
make help-docker # Docker targets
make help-config # Configuration management targets
make help-platform # Platform-specific targetsThe project includes comprehensive unit tests:
# Run all tests
make test
# Run specific test suites
cd build && ./test_ntp_packet # NTP packet functionality
cd build && ./test_ntp_config # Configuration system
# Run tests with verbose output
make test-verbose
# Run tests in debug mode
make dev-testCreate self-contained static binaries:
# Build static binary
make static-build
# Test static binary
make static-test
# Create static binary packages
make static-package # Platform-specific package
make static-zip # Cross-platform ZIP package
make static-all # All static binary formatsThe Docker setup supports multiple Linux distributions and architectures:
- Distributions: Ubuntu, CentOS, Alpine Linux
- Architectures: x86_64, arm64, armv7
# Development environment
docker-compose --profile dev up dev
# Runtime container
docker-compose --profile runtime up simple-ntpd
# Build for specific distribution
docker-compose --profile build build build-ubuntu
docker-compose --profile build build build-centos
docker-compose --profile build build build-alpineUse the build script for automated cross-platform building:
# Build for all distributions
./scripts/build-docker.sh -d all
# Build for specific distribution
./scripts/build-docker.sh -d ubuntu
# Clean build cache
./scripts/build-docker.sh --cleanThe daemon supports three configuration formats with automatic detection:
[ntp]
listen_address = 0.0.0.0
listen_port = 123
log_level = info
log_json = false
reference_id = LOCL{
"ntp": {
"listen_address": "0.0.0.0",
"listen_port": 123,
"log_level": "info",
"log_json": true,
"reference_id": "LOCL"
}
}ntp:
listen_address: "0.0.0.0"
listen_port: 123
log_level: "info"
log_json: true
reference_id: "LOCL"- Automatic Format Detection: Based on file extension (.ini, .json, .yaml)
- Structured Logging: JSON output with
log_json = true - Validation: Comprehensive configuration validation
- Error Reporting: Detailed error messages for invalid configurations
- CMake 3.15+
- C++17 compatible compiler
- OpenSSL
- JsonCPP
# Install development tools (macOS)
make dev-deps
# Install development tools (Homebrew alternative)
make dev-deps-brew
# Run code quality checks
make format
make lint
make security-scan# Run all tests
make test
# Run specific test suites
cd build && ./test_ntp_packet # NTP packet functionality
cd build && ./test_ntp_config # Configuration system
# Run tests with verbose output
make test-verbose
# Run tests in debug mode
make dev-test# Standard build
make build
# Debug build
make debug
# Release build
make release
# Development build
make dev-build# Create platform-specific packages
make package
# Create source package
make package-source
# Create all package formats
make package-allCreate self-contained static binaries:
# Build static binary
make static-build
# Test static binary
make static-test
# Create static binary packages
make static-package # Platform-specific package
make static-zip # Cross-platform ZIP package
make static-all # All static binary formats# Install system service
make service-install
# Check service status
make service-status
# Start service
make service-start
# Stop service
make service-stop- macOS: launchd service
- Linux: systemd service
- Windows: Windows Service
# Install configuration files
make config-install
# Backup configuration
make config-backup
# Install log rotation
make log-rotateThe project includes comprehensive security scanning:
# Run security scan
make security-scan
# Run static analysis
make analyze
# Check code style
make check-styleAggregate logs via syslog, stdout JSON, or rotated files:
- Enable syslog for system collectors
- Enable console logging with JSON for container scraping
- Use rotated files with agents (Fluent Bit/Filebeat)
Configuration examples:
# INI
enable_syslog = true
enable_console_logging = true
log_json = true
log_file = /var/log/simple-ntpd/simple-ntpd.log
log_max_size_bytes = 10485760
log_max_files = 5# YAML
enable_syslog: true
enable_console_logging: true
log_json: true
log_file: /var/log/simple-ntpd/simple-ntpd.log
log_max_size_bytes: 10485760
log_max_files: 5{
"enable_syslog": true,
"enable_console_logging": true,
"log_json": true,
"log_file": "/var/log/simple-ntpd/simple-ntpd.log",
"log_max_size_bytes": 10485760,
"log_max_files": 5
}- Fork the repository
- Create a feature branch
- Make your changes
- Run tests and quality checks
- Submit a pull request
# Format code
make format
# Run linting
make lint
# Run security scan
make security-scanThis project is licensed under the Apache License, Version 2.0 - see the LICENSE file for details.
Copyright 2024 SimpleDaemons
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
See CHANGELOG.md for a detailed history of changes.