我正在尝试配置 ntpd 以从 gps 接收器获取时间(BU-353S4
)但出现了一些错误。
我在 Arch Linux Arm 上使用 ntpd 4.2.8.p6-3 和 gpsd 3.16-2。我一直在关注arch wiki 上的教程但它没有任何故障排除信息。
gpsd 日志包含以下条目
gpsd:ERROR: response: {"class":"ERROR","message":"No such device as /dev/gps0"}\x0d\x0a
每 6 秒左右重复一次,除了开始、停止消息外没有其他内容。
/var/log/ntp.log 包含:
Listen and drop on 0 v6wildcard [::]:123
Listen and drop on 1 v4wildcard 0.0.0.0:123
Listen normally on 2 lo 127.0.0.1:123
Listen normally on 3 eth0 172.10.10.75:123
Listen normally on 4 lo [::1]:123
Listen normally on 5 eth0 [fe80::ba27:ebff:feba:af05%2]:123
Listening on routing socket on fd #22 for interface updates
GPSD_JSON(0): GPSD revision=3.16 release=3.16 protocol=3.11
ntpq -p
输出
remote refid st t when poll reach delay offset jitter
==============================================================================
GPSD_JSON(0) .GPS. 0 l - 64 0 0.000 0.000 0.000
/etc/ntp.conf
包含
restrict 127.0.0.1
restrict ::1
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
# GPSD config
server 127.127.46.0
fudge 127.127.46.0 time1 0.0 time2 0.0 refid GPS
driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntp.log
然而sudo gpscat /dev/gps0
输出(在我未经训练的眼睛看来)有效的 nmea gps 信息,并且cgps
所有gpsmon
信息都得到修复并输出有用的信息。
/dev/ttyUSB0
具有权限crw-rw---- 1 root uucp 188
。
gpsd
正在用户下运行nobody
并ntpd
以用户身份运行ntp
答案1
gpsd
以 nobody 的身份运行,因此没有读取权限/dev/ttyUSB0
,这正是它所抱怨的。
如果您将nobody
用户添加到组uucp
,应该可以解决问题,但不建议这样做。或者您可以将模式更改/dev/ttyUSB0
为 666,这稍微不那么可怕。最好的方法是编辑gpsd
启动配置,使其以其他用户的身份运行,可能是gpsd
,并使的主要组/dev/ttyUSB0
拥有gpsd
该组(也可能是gpsd
)。
假设gpsd
一旦它可以正确读取 GPS 就设置时间,这将能够ntpd
宣传时间,知道(因为您已经配置了它)它是从 stratum-0(ntp)源获取的。
答案2
请注意,您必须“在链接的服务器上运行 gpsd /dev/gps0
,以便 GPSD_JSON 行按预期显示”。因此,请检查您的 GPSD 是否在运行/dev/gps0
。我的 GPSD 在我的服务器上运行,在/dev/ttyS0
我将 DEVICES 更改为 后,NTPd 可以成功链接 GPSD。/dev/gps0
/etc/default/gpsd