Package init
This commit is contained in:
commit
724ef43798
BIN
chrony-3.4.tar.gz
Normal file
BIN
chrony-3.4.tar.gz
Normal file
Binary file not shown.
8
chrony-dnssrv@.service
Normal file
8
chrony-dnssrv@.service
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=DNS SRV lookup of %I for chrony
|
||||||
|
After=chronyd.service network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/usr/libexec/chrony-helper update-dnssrv-servers %I
|
||||||
9
chrony-dnssrv@.timer
Normal file
9
chrony-dnssrv@.timer
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Periodic DNS SRV lookup of %I for chrony
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnActiveSec=0
|
||||||
|
OnUnitInactiveSec=1h
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
||||||
11
chrony-service-helper.patch
Normal file
11
chrony-service-helper.patch
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
diff -up chrony-3.1/examples/chronyd.service.service-helper chrony-3.1/examples/chronyd.service
|
||||||
|
--- chrony-3.1/examples/chronyd.service.service-helper 2017-01-31 12:12:01.863772826 +0100
|
||||||
|
+++ chrony-3.1/examples/chronyd.service 2017-01-31 12:12:30.371860064 +0100
|
||||||
|
@@ -10,6 +10,7 @@ Type=forking
|
||||||
|
PIDFile=/var/run/chrony/chronyd.pid
|
||||||
|
EnvironmentFile=-/etc/sysconfig/chronyd
|
||||||
|
ExecStart=/usr/sbin/chronyd $OPTIONS
|
||||||
|
+ExecStartPost=/usr/libexec/chrony-helper update-daemon
|
||||||
|
PrivateTmp=yes
|
||||||
|
ProtectHome=yes
|
||||||
|
ProtectSystem=full
|
||||||
20
chrony.dhclient
Normal file
20
chrony.dhclient
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SERVERFILE=$SAVEDIR/chrony.servers.$interface
|
||||||
|
|
||||||
|
chrony_config() {
|
||||||
|
rm -f $SERVERFILE
|
||||||
|
if [ "$PEERNTP" != "no" ]; then
|
||||||
|
for server in $new_ntp_servers; do
|
||||||
|
echo "$server ${NTPSERVERARGS:-iburst}" >> $SERVERFILE
|
||||||
|
done
|
||||||
|
/usr/libexec/chrony-helper update-daemon || :
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
chrony_restore() {
|
||||||
|
if [ -f $SERVERFILE ]; then
|
||||||
|
rm -f $SERVERFILE
|
||||||
|
/usr/libexec/chrony-helper update-daemon || :
|
||||||
|
fi
|
||||||
|
}
|
||||||
252
chrony.helper
Normal file
252
chrony.helper
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# This script configures running chronyd to use NTP servers obtained from
|
||||||
|
# DHCP and _ntp._udp DNS SRV records. Files with servers from DHCP are managed
|
||||||
|
# externally (e.g. by a dhclient script). Files with servers from DNS SRV
|
||||||
|
# records are updated here using the dig utility. The script can also list
|
||||||
|
# and set static sources in the chronyd configuration file.
|
||||||
|
|
||||||
|
chronyc=/usr/bin/chronyc
|
||||||
|
chrony_conf=/etc/chrony.conf
|
||||||
|
chrony_service=chronyd.service
|
||||||
|
helper_dir=/var/run/chrony-helper
|
||||||
|
added_servers_file=$helper_dir/added_servers
|
||||||
|
|
||||||
|
network_sysconfig_file=/etc/sysconfig/network
|
||||||
|
dhclient_servers_files=/var/lib/dhclient/chrony.servers.*
|
||||||
|
dnssrv_servers_files=$helper_dir/dnssrv@*
|
||||||
|
dnssrv_timer_prefix=chrony-dnssrv@
|
||||||
|
|
||||||
|
. $network_sysconfig_file &> /dev/null
|
||||||
|
|
||||||
|
chrony_command() {
|
||||||
|
$chronyc -a -n -m "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
is_running() {
|
||||||
|
chrony_command "tracking" &> /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
get_servers_files() {
|
||||||
|
[ "$PEERNTP" != "no" ] && echo "$dhclient_servers_files"
|
||||||
|
echo "$dnssrv_servers_files"
|
||||||
|
}
|
||||||
|
|
||||||
|
is_update_needed() {
|
||||||
|
for file in $(get_servers_files) $added_servers_file; do
|
||||||
|
[ -e "$file" ] && return 0
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
update_daemon() {
|
||||||
|
local all_servers_with_args all_servers added_servers
|
||||||
|
|
||||||
|
if ! is_running; then
|
||||||
|
rm -f $added_servers_file
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
all_servers_with_args=$(cat $(get_servers_files) 2> /dev/null)
|
||||||
|
|
||||||
|
all_servers=$(
|
||||||
|
echo "$all_servers_with_args" |
|
||||||
|
while read server serverargs; do
|
||||||
|
echo "$server"
|
||||||
|
done | sort -u)
|
||||||
|
added_servers=$( (
|
||||||
|
cat $added_servers_file 2> /dev/null
|
||||||
|
echo "$all_servers_with_args" |
|
||||||
|
while read server serverargs; do
|
||||||
|
[ -z "$server" ] && continue
|
||||||
|
chrony_command "add server $server $serverargs" &> /dev/null &&
|
||||||
|
echo "$server"
|
||||||
|
done) | sort -u)
|
||||||
|
|
||||||
|
comm -23 <(echo -n "$added_servers") <(echo -n "$all_servers") |
|
||||||
|
while read server; do
|
||||||
|
chrony_command "delete $server" &> /dev/null
|
||||||
|
done
|
||||||
|
|
||||||
|
added_servers=$(comm -12 <(echo -n "$added_servers") <(echo -n "$all_servers"))
|
||||||
|
|
||||||
|
[ -n "$added_servers" ] && echo "$added_servers" > $added_servers_file ||
|
||||||
|
rm -f $added_servers_file
|
||||||
|
}
|
||||||
|
|
||||||
|
get_dnssrv_servers() {
|
||||||
|
local name=$1 output
|
||||||
|
|
||||||
|
if ! command -v dig &> /dev/null; then
|
||||||
|
echo "Missing dig (DNS lookup utility)" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
output=$(dig "$name" srv +short +ndots=2 +search 2> /dev/null)
|
||||||
|
[ $? -ne 0 ] && return 0
|
||||||
|
|
||||||
|
echo "$output" | while read prio weight port target; do
|
||||||
|
server=${target%.}
|
||||||
|
[ -z "$server" ] && continue
|
||||||
|
echo "$server port $port ${NTPSERVERARGS:-iburst}"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
check_dnssrv_name() {
|
||||||
|
local name=$1
|
||||||
|
|
||||||
|
if [ -z "$name" ]; then
|
||||||
|
echo "No DNS SRV name specified" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${name:0:9}" != _ntp._udp ]; then
|
||||||
|
echo "DNS SRV name $name doesn't start with _ntp._udp" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
update_dnssrv_servers() {
|
||||||
|
local name=$1
|
||||||
|
local srv_file=$helper_dir/dnssrv@$name servers
|
||||||
|
|
||||||
|
check_dnssrv_name "$name" || return 1
|
||||||
|
|
||||||
|
servers=$(get_dnssrv_servers "$name")
|
||||||
|
[ -n "$servers" ] && echo "$servers" > "$srv_file" || rm -f "$srv_file"
|
||||||
|
}
|
||||||
|
|
||||||
|
set_dnssrv_timer() {
|
||||||
|
local state=$1 name=$2
|
||||||
|
local srv_file=$helper_dir/dnssrv@$name servers
|
||||||
|
local timer=$dnssrv_timer_prefix$(systemd-escape "$name").timer
|
||||||
|
|
||||||
|
check_dnssrv_name "$name" || return 1
|
||||||
|
|
||||||
|
if [ "$state" = enable ]; then
|
||||||
|
systemctl enable "$timer"
|
||||||
|
systemctl start "$timer"
|
||||||
|
elif [ "$state" = disable ]; then
|
||||||
|
systemctl stop "$timer"
|
||||||
|
systemctl disable "$timer"
|
||||||
|
rm -f "$srv_file"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
list_dnssrv_timers() {
|
||||||
|
systemctl --all --full -t timer list-units | grep "^$dnssrv_timer_prefix" | \
|
||||||
|
sed "s|^$dnssrv_timer_prefix\(.*\)\.timer.*|\1|" |
|
||||||
|
while read -r name; do
|
||||||
|
systemd-escape --unescape "$name"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_helper_dir() {
|
||||||
|
mkdir -p $helper_dir
|
||||||
|
exec 100> $helper_dir/lock
|
||||||
|
if ! flock -w 20 100; then
|
||||||
|
echo "Failed to lock $helper_dir" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
is_source_line() {
|
||||||
|
local pattern="^[ \t]*(server|pool|peer|refclock)[ \t]+[^ \t]+"
|
||||||
|
[[ "$1" =~ $pattern ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
list_static_sources() {
|
||||||
|
while read line; do
|
||||||
|
is_source_line "$line" && echo "$line" || :
|
||||||
|
done < $chrony_conf
|
||||||
|
}
|
||||||
|
|
||||||
|
set_static_sources() {
|
||||||
|
local new_config tmp_conf
|
||||||
|
|
||||||
|
new_config=$(
|
||||||
|
sources=$(
|
||||||
|
while read line; do
|
||||||
|
is_source_line "$line" && echo "$line"
|
||||||
|
done)
|
||||||
|
|
||||||
|
while read line; do
|
||||||
|
if ! is_source_line "$line"; then
|
||||||
|
echo "$line"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
tmp_sources=$(
|
||||||
|
local removed=0
|
||||||
|
|
||||||
|
echo "$sources" | while read line2; do
|
||||||
|
[ "$removed" -ne 0 -o "$line" != "$line2" ] && \
|
||||||
|
echo "$line2" || removed=1
|
||||||
|
done)
|
||||||
|
|
||||||
|
[ "$sources" == "$tmp_sources" ] && continue
|
||||||
|
sources=$tmp_sources
|
||||||
|
echo "$line"
|
||||||
|
done < $chrony_conf
|
||||||
|
|
||||||
|
echo "$sources"
|
||||||
|
)
|
||||||
|
|
||||||
|
tmp_conf=${chrony_conf}.tmp
|
||||||
|
|
||||||
|
cp -a $chrony_conf $tmp_conf &&
|
||||||
|
echo "$new_config" > $tmp_conf &&
|
||||||
|
mv $tmp_conf $chrony_conf || return 1
|
||||||
|
|
||||||
|
systemctl try-restart $chrony_service
|
||||||
|
}
|
||||||
|
|
||||||
|
print_help() {
|
||||||
|
echo "Usage: $0 COMMAND"
|
||||||
|
echo
|
||||||
|
echo "Commands:"
|
||||||
|
echo " update-daemon"
|
||||||
|
echo " update-dnssrv-servers NAME"
|
||||||
|
echo " enable-dnssrv NAME"
|
||||||
|
echo " disable-dnssrv NAME"
|
||||||
|
echo " list-dnssrv"
|
||||||
|
echo " list-static-sources"
|
||||||
|
echo " set-static-sources < sources.list"
|
||||||
|
echo " is-running"
|
||||||
|
echo " command CHRONYC-COMMAND"
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
update-daemon|add-dhclient-servers|remove-dhclient-servers)
|
||||||
|
is_update_needed || exit 0
|
||||||
|
prepare_helper_dir && update_daemon
|
||||||
|
;;
|
||||||
|
update-dnssrv-servers)
|
||||||
|
prepare_helper_dir && update_dnssrv_servers "$2" && update_daemon
|
||||||
|
;;
|
||||||
|
enable-dnssrv)
|
||||||
|
set_dnssrv_timer enable "$2"
|
||||||
|
;;
|
||||||
|
disable-dnssrv)
|
||||||
|
set_dnssrv_timer disable "$2" && prepare_helper_dir && update_daemon
|
||||||
|
;;
|
||||||
|
list-dnssrv)
|
||||||
|
list_dnssrv_timers
|
||||||
|
;;
|
||||||
|
list-static-sources)
|
||||||
|
list_static_sources
|
||||||
|
;;
|
||||||
|
set-static-sources)
|
||||||
|
set_static_sources
|
||||||
|
;;
|
||||||
|
is-running)
|
||||||
|
is_running
|
||||||
|
;;
|
||||||
|
command|forced-command)
|
||||||
|
chrony_command "$2"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
print_help
|
||||||
|
exit 2
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit $?
|
||||||
143
chrony.spec
Normal file
143
chrony.spec
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
%global clknetsim_ver 774308
|
||||||
|
|
||||||
|
Name: chrony
|
||||||
|
Version: 3.4
|
||||||
|
Release: 2
|
||||||
|
Summary: An NTP client/server
|
||||||
|
License: GPLv2
|
||||||
|
URL: https://chrony.tuxfamily.org
|
||||||
|
Source0: https://download.tuxfamily.org/chrony/chrony-%{version}%{?prerelease}.tar.gz
|
||||||
|
Source1: chrony.dhclient
|
||||||
|
Source2: chrony.helper
|
||||||
|
Source3: chrony-dnssrv@.service
|
||||||
|
Source4: chrony-dnssrv@.timer
|
||||||
|
|
||||||
|
Source6: https://github.com/mlichvar/clknetsim/archive/%{clknetsim_ver}/clknetsim-%{clknetsim_ver}.tar.gz
|
||||||
|
|
||||||
|
#patch0 form fedora
|
||||||
|
Patch0: chrony-service-helper.patch
|
||||||
|
|
||||||
|
BuildRequires: gcc gcc-c++ bison systemd libcap-devel libedit-devel nettle-devel pps-tools-devel libseccomp-devel
|
||||||
|
|
||||||
|
Requires: shadow-utils systemd timedatex
|
||||||
|
|
||||||
|
%description
|
||||||
|
chrony is a versatile implementation of the Network Time Protocol (NTP).
|
||||||
|
It can synchronise the system clock with NTP servers, reference clocks
|
||||||
|
(e.g. GPS receiver), and manual input using wristwatch and keyboard. It can
|
||||||
|
also operate as an NTPv4 (RFC 5905) server and peer to provide a time
|
||||||
|
service to other computers in the network.
|
||||||
|
|
||||||
|
|
||||||
|
%package docs
|
||||||
|
Summary: Documentation files for chrony
|
||||||
|
|
||||||
|
%description docs
|
||||||
|
The chrony-docs package contains documentation files.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%autosetup -n %{name}-%{version} -p1
|
||||||
|
|
||||||
|
%setup -q -n %{name}-%{version} -a 6
|
||||||
|
mv clknetsim-%{clknetsim_ver}* test/simulation/clknetsim
|
||||||
|
|
||||||
|
|
||||||
|
%build
|
||||||
|
%configure \
|
||||||
|
--enable-debug --enable-ntp-signd --enable-scfilter --docdir=%{_docdir} \
|
||||||
|
--with-ntp-era=$(date -d '1970-01-01 00:00:00+00:00' +'%s') \
|
||||||
|
--with-user=chrony --with-hwclockfile=%{_sysconfdir}/adjtime --with-sendmail=%{_sbindir}/sendmail
|
||||||
|
%make_build
|
||||||
|
|
||||||
|
%install
|
||||||
|
%make_install
|
||||||
|
|
||||||
|
install -d $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
|
||||||
|
install -m 644 -p examples/chrony.conf.example2 $RPM_BUILD_ROOT%{_sysconfdir}/chrony.conf
|
||||||
|
install -m 640 -p examples/chrony.keys.example $RPM_BUILD_ROOT%{_sysconfdir}/chrony.keys
|
||||||
|
|
||||||
|
install -d $RPM_BUILD_ROOT%{_sysconfdir}/NetworkManager/dispatcher.d
|
||||||
|
install -m 755 -p examples/chrony.nm-dispatcher $RPM_BUILD_ROOT%{_sysconfdir}/NetworkManager/dispatcher.d/20-chrony
|
||||||
|
|
||||||
|
install -d $RPM_BUILD_ROOT%{_sysconfdir}/dhcp/dhclient.d
|
||||||
|
install -m 755 -p %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/dhcp/dhclient.d/chrony.sh
|
||||||
|
|
||||||
|
install -d $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
|
||||||
|
install -m 644 -p examples/chrony.logrotate $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/chrony
|
||||||
|
cat > $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/chronyd <<EOF
|
||||||
|
# Command-line options for chronyd
|
||||||
|
OPTIONS=""
|
||||||
|
EOF
|
||||||
|
|
||||||
|
install -d $RPM_BUILD_ROOT%{_libexecdir}
|
||||||
|
install -m 755 -p %{SOURCE2} $RPM_BUILD_ROOT%{_libexecdir}/chrony-helper
|
||||||
|
|
||||||
|
install -d $RPM_BUILD_ROOT%{_unitdir}
|
||||||
|
install -m 644 -p examples/chrony-wait.service $RPM_BUILD_ROOT%{_unitdir}/chrony-wait.service
|
||||||
|
install -m 644 -p examples/chronyd.service $RPM_BUILD_ROOT%{_unitdir}/chronyd.service
|
||||||
|
install -m 644 -p %{SOURCE3} $RPM_BUILD_ROOT%{_unitdir}/chrony-dnssrv@.service
|
||||||
|
install -m 644 -p %{SOURCE4} $RPM_BUILD_ROOT%{_unitdir}/chrony-dnssrv@.timer
|
||||||
|
|
||||||
|
|
||||||
|
install -d $RPM_BUILD_ROOT%{_prefix}/lib/systemd/ntp-units.d
|
||||||
|
echo 'chronyd.service' > $RPM_BUILD_ROOT%{_prefix}/lib/systemd/ntp-units.d/50-chronyd.list
|
||||||
|
|
||||||
|
install -d $RPM_BUILD_ROOT%{_localstatedir}/lib/chrony
|
||||||
|
install -d $RPM_BUILD_ROOT%{_localstatedir}/log/chrony
|
||||||
|
touch $RPM_BUILD_ROOT%{_localstatedir}/lib/chrony/{drift,rtc}
|
||||||
|
|
||||||
|
%check
|
||||||
|
%make_build -C test/simulation/clknetsim CLKNETSIM_RANDOM_SEED=16888
|
||||||
|
make quickcheck
|
||||||
|
|
||||||
|
|
||||||
|
%pre
|
||||||
|
if ! getent group chrony > /dev/null ; then
|
||||||
|
groupadd -r chrony
|
||||||
|
fi
|
||||||
|
if ! getent passwd chrony >/dev/null ; then
|
||||||
|
useradd -r -g chrony -d %{_localstatedir}/lib/chrony -s /sbin/nologin chrony
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
%preun
|
||||||
|
%systemd_preun chronyd.service chrony-wait.service
|
||||||
|
|
||||||
|
%post
|
||||||
|
%systemd_post chronyd.service chrony-wait.service
|
||||||
|
|
||||||
|
|
||||||
|
%postun
|
||||||
|
%systemd_postun_with_restart chronyd.service
|
||||||
|
|
||||||
|
%files
|
||||||
|
%license COPYING
|
||||||
|
|
||||||
|
%config(noreplace) %{_sysconfdir}/chrony.conf
|
||||||
|
%config(noreplace) %verify(not md5 size mtime) %attr(640,root,chrony) %{_sysconfdir}/chrony.keys
|
||||||
|
%config(noreplace) %{_sysconfdir}/logrotate.d/chrony
|
||||||
|
%config(noreplace) %{_sysconfdir}/sysconfig/chronyd
|
||||||
|
%{_sysconfdir}/NetworkManager/dispatcher.d/20-chrony
|
||||||
|
%{_sysconfdir}/dhcp/dhclient.d/chrony.sh
|
||||||
|
|
||||||
|
%{_bindir}/chronyc
|
||||||
|
%{_sbindir}/chronyd
|
||||||
|
%{_libexecdir}/chrony-helper
|
||||||
|
%{_prefix}/lib/systemd/ntp-units.d/*.list
|
||||||
|
%{_unitdir}/chrony*.service
|
||||||
|
%{_unitdir}/chrony*.timer
|
||||||
|
|
||||||
|
%dir %attr(-,chrony,chrony) %{_localstatedir}/lib/chrony
|
||||||
|
%ghost %attr(-,chrony,chrony) %{_localstatedir}/lib/chrony/drift
|
||||||
|
%ghost %attr(-,chrony,chrony) %{_localstatedir}/lib/chrony/rtc
|
||||||
|
%dir %attr(-,chrony,chrony) %{_localstatedir}/log/chrony
|
||||||
|
|
||||||
|
|
||||||
|
%files docs
|
||||||
|
%defattr(644,root,root)
|
||||||
|
%doc FAQ NEWS README
|
||||||
|
%{_mandir}/man[158]/%{name}*.[158]*
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Sat Sep 14 2019 hufeng <solar.hu@huawei.com> - 3.4.2
|
||||||
|
-Create chrony spec
|
||||||
BIN
clknetsim-774308.tar.gz
Normal file
BIN
clknetsim-774308.tar.gz
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user