非编网授时系统改造

(整期优先)网络出版时间:2020-07-26
/ 3

非编网授时系统改造

李荣玮 邓智 杨钦 田业平 黄禹德 韩羽

广西广播电视台 广西南宁 530000

摘要:本文介绍了在不联网情况下,利用现有设备TVZ3100和RaspberryPi服务器完成为非编网服务器和工作站授时的技术方案、服务安装配置、物理接线和PYTHON代码实现。

关键词:非编网;GPS授时;NTP集群

前言

我台新闻非编网在建设时并没有配套授时设备,但经过了一段时间的运行维护,发现各个设备的系统时钟误差越来越大,导致许多服务器的日志记录对比核查比较麻烦。恰巧,机房内有两台供演播室倒计时钟授时的TVZ3100 GPS校时钟,于是,我们结合现实条件,对系统进行改造,用较小的成本完成了这个需求。

一、技术方案

技术方案如下图1所示,用RaspberryPi服务器来获取TVZ3100 GPS校时钟的RS232时钟信号输出,然后RaspberryPi服务器安装配置NTP服务,为非编网服务器、工作站等设备提供标准的NTP授时服务。

5f1cee539642f_html_5d45a10b83fc316e.gif 图1

二、系统安装

首先,我们采用Raspberry Pi服务器官方定制的操作系统镜像(2020-02-13-raspbian-buster-full.img)来完成系统安装,只需用工具balenaEtcher或win32diskimager把镜像烧入TF卡,然后把TF卡插入

Raspberry Pi服务器卡机即可按提示完成系统安装。

系统安装好后,我们需要完成VNC、WIFI、NTP服务、keepalived服务、UFW服务、串口重分配的安装配置。

三、VNC配置

VNC服务用于我们远程登录、维护系统,我们安装的最新版系统已默认安装了VNC服务,只需要开启即可。

  1. 打开终端命令行,运行:sudo raspi-config

  2. 如下图2、3、4所示,开启VNC服务即可。

5f1cee539642f_html_93fa2bf8c5937c58.png

图2

5f1cee539642f_html_dae32ab2d40eaa60.png 图3

5f1cee539642f_html_70a424398228706d.png 图4

四、WiFi服务配置

配置WiFi服务同样也是为了方便我们登录、维护系统。配置好后,只要在服务器旁边打开手机热点,Raspberry Pi服务器会自动接入热点,然后我们可以通过热点手机上的VNC登录Raspberry Pi服务器了,非常方便。具体配置如下:

  1. 打开/etc/wpa_supplicant/wpa_supplicant.conf

  2. 增加一段配置:

network={

ssid="test"

psk="123245678"

key_mgmt=WPA-PSK

priority=1

}

其中,test为需要自动连接的手机热点的SSID,12345678为设计热点的密码,WPA-PSK为加密方式,priority=1是优先级。

五、NTP服务安装配置

NTP服务用于为非编网服务器和工作站提供标准的授时服务,具体安装、配置如下:

  1. 打开终端命令行,输入以下命令安装NTP服务:

sudo apt-get install ntp

  1. 修改/etc/ntp.conf如下:

driftfile /var/lib/ntp/drift

restrict default kod nomodify notarp nopeer noquery

restrict -6 default kod nomodify notarp nopeer noquery

restrict 192.168.50.0 mask 255.255.255.0 nomodify notrap

restrict 127.0.0.1

restrict ::1

server 127.127.1.0

fudge 127.127.1.0 stratum 2

  1. 输入以下命令启动NTP服务

service ntpd start

  1. 注意:NTP服务器配置、启动完毕后,需要等待5-10分钟才能与/etc/ntp.conf中配置的标准时间进行同步。

六、UFW服务配置

UFW是linux下的防火墙,配置简单方便,我们需要开启NTP服务、VNC服务、SSH服务的端口访问权限,禁止掉其他不用的端口访问权限,提高服务器的安全性,具体安装配置命令如下:

sudo apt-get install ufw

sudo ufw enable

sudo ufw default deny

sudo ufw allow 123

sudo ufw allow 5900

sudo ufw allow 22

以上命令的具体意思是:

  1. 安装ufw防火墙;

  2. 开启ufw防火墙;

  3. 默认禁止所有访问;

  4. 允许外部访问本机端口123(NTP服务)

  5. 运行外部访问本机端口5900(VNC服务)

  6. 运行外部访问本机端口22(ssh服务)

七、串口重分配

Raspberry Pi服务器的串口默认被其他设备占用,我们需要重新配置释放之后才能使用它来进行串口通信。具体配置如下:

  1. 修改配置文件 sudo nano /boot/config.txt注释掉最后一行 dtovrtlay=w1-gpio

  2. 修改配置文件 sudo vim /boot/cmdline.txt 删掉console=serial0,115200 (可以先对文件备份,sudo cp /boot/cmdline.txt /boot/cmdline.txt.bak 方便以后对配置文档进行恢复 )

  3. 重启: sudo reboot

八、RS232物理连接

Raspberry Pi服务器没有现成的RS232接口,需要做线实现从GPIO接口到RS232接口的物理连接。Raspberry Pi服务器GPIO接口的针脚定义、标准的RS232针脚定义如图5、图6所示,TVZ3100卫星校时钟说明书中关于RS232输出的定义如图7所示。

5f1cee539642f_html_6d8fc8dba9776289.png

图5

5f1cee539642f_html_3cb4c937304c0487.png

图6

5f1cee539642f_html_f430478e24d498c1.png

图7

要实现双向串口通信,RS232和GPIO的对应针脚关系为:

RS232的2脚->GPIO的8脚

RS232的3脚-> GPIO的10脚

RS232的5脚->GPIO的6脚

而TVZ3100的说明书指出,TVZ3100是单向输出,不需要输入信号,所以,RS232的2脚->GPIO的8脚这一芯可以不用做。

九、PYTHON编程实现

完成物理连接后,我们就可以在PYTHON编程环境下,读取TVZ3100发送到授时信号,用来同步本机时间,再由NTP服务完成非编网服务器和工作站的授时需求。

具体代码如下:

import serial

import time

import datetime

import os

dc=1

#延时校正变量,根据服务器运行效率来设置,必须0<=dc<=5

while True:

ser = serial.Serial("/dev/ttyAMA0 ",4800,timeout=30)

#打开串口连接TVZ3100,波特率4800

while True:

while True:

if ser.read(1).hex() == "aa":

#检查信号同步字

break

print(datetime.datetime.now())

#本周期授时开始前,输出系统时间

dt1 = ser.read(8).hex()

#读取串口授时信号

if int(dt1[14:]) >= 15 :

continue

else:

dt2 =str(int(dt1[12:])-dc)

#校正时钟误差

setdate = 'sudo date -s "20' + dt1[2:8] + ' ' + dt1[10:12] + ':' + dt1[12:14] + ':' + dt2 + '"'

#拼接授时命令字符串

os.system(setdate)

#修改系统时钟

print(datetime.datetime.now())

#本周期授时完成后,输出系统时间

ser.close()

#关闭串口

time.sleep(600)

#延时600秒后,再循环获取授时信号

十、客户端配置

Windows系统的服务器和工作站只需要如下图8所示,填入NTP服务器的IP即可自动定期同步系统时钟;而linux系统的服务器则需要如前所述,安装NTP服务,把配置文件里的server 127.127.1.0的IP改成NTP服务器IP。

5f1cee539642f_html_bdb7a0572b662448.png

图8

需要注意到是,如果系统时钟误差太大(约16分钟左右),是无法通过NTP服务器来同步的,需要先手动调整时间到差不多,才能依赖NTP服务来自动校正。

十一、总结

广电业内非编网大多与互联网隔离,因此不能直接获取公网NTP服务器的授时服务。本文是基于现有设备和环境的一个较低成本的实现,相较于日常x86服务器万元以上的价格, 一台基于ARM芯片的RaspberryPi服务器仅需不到500元人民币,且功耗低、linux系统稳定性好。日后需求增多,还可以扩展为服务器集群,增强性能和健壮性;扩展各种传感器,增强运维功能等等,是我们在计算机系统运维工作中一种很不错的选择。

参考文献:

[1]龙波,张宇,黄徐瑞晗,王菊凤,韩锋.基于NTP协议的网络授时系统设计[J].计量与测试技术.2019-05-30.

[2]杨明.基于CentOS操作系统部署NTP服务 电子世界2018-12-08

[3]刘瑜.Python编程从零基础到项目实战[M].水利水电出版社.2018-10

[4]Raspberry Pi开发实战  Simon Monk[M].机械工业出版社出版.2015-04

[5]Python Programming with Raspberry Pi Sai Yamanoor Packt Publishing 2017-04-28