From f0525745920f6fe1dd87e9cc5e0e7180dcbf1455 Mon Sep 17 00:00:00 2001 From: florian Date: Sat, 17 Mar 2007 11:34:51 +0000 Subject: [PATCH] Add chrony from (#1388) git-svn-id: svn://svn.openwrt.org/openwrt/packages@6593 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- net/chrony/Makefile | 71 +++++++++++++++++++++++++ net/chrony/files/chrony.conf | 17 ++++++ net/chrony/files/chrony.keys | 1 + net/chrony/files/ntpd.config | 6 +++ net/chrony/files/ntpd.hotplug | 21 ++++++++ net/chrony/files/ntpd.init | 69 ++++++++++++++++++++++++ net/chrony/patches/001-crosscompile.patch | 26 +++++++++ net/chrony/patches/002-mips_ioc_constants.patch | 19 +++++++ 8 files changed, 230 insertions(+) create mode 100644 net/chrony/Makefile create mode 100644 net/chrony/files/chrony.conf create mode 100644 net/chrony/files/chrony.keys create mode 100644 net/chrony/files/ntpd.config create mode 100644 net/chrony/files/ntpd.hotplug create mode 100644 net/chrony/files/ntpd.init create mode 100644 net/chrony/patches/001-crosscompile.patch create mode 100644 net/chrony/patches/002-mips_ioc_constants.patch diff --git a/net/chrony/Makefile b/net/chrony/Makefile new file mode 100644 index 000000000..2b05ef98b --- /dev/null +++ b/net/chrony/Makefile @@ -0,0 +1,71 @@ +# +# Copyright (C) 2006 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +# $Id: $ + +include $(TOPDIR)/rules.mk + +PKG_NAME:=chrony +PKG_VERSION:=1.21 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:= ftp://chrony.sunsite.dk/projects/chrony/ \ + http://chrony.sunsite.dk/download/ +PKG_MD5SUM:=84f76a73dff5a3c9e9f11f3c29a4e93b +PKG_CAT:=zcat + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) + +include $(INCLUDE_DIR)/package.mk + +define Package/chrony + SECTION:=net + CATEGORY:=Network + TITLE:=NTP client/server for on-demand connections + DESCRIPTION:=\ + A NTP implementation that has been specifically written to work well in the case of an intermittent \ + (e.g. dial-on-demand) connection to the network where your NTP servers are. + URL:=http://chrony.sunsite.dk/ + MAINTAINER:=Richard Kunze + DEPENDS:=uclibc libreadline libncurses +endef + +define Package/chrony/conffiles +/etc/chrony/chrony.conf +endef + +define Build/Configure + $(call Build/Configure/Default, \ + --target=$(GNU_TARGET_NAME) \ + --prefix=/usr \ + --with-readline-includes=$(STAGING_DIR)/usr/include \ + --with-readline-library=$(STAGING_DIR)/usr/lib \ ) +endef + +define Build/Compile + $(MAKE) -C $(PKG_BUILD_DIR) \ + $(TARGET_CONFIGURE_OPTS) \ + prefix="$(PKG_INSTALL_DIR)/usr" +endef + +define Package/chrony/install + $(INSTALL_DIR) $(1)/usr/bin/ + $(INSTALL_DIR) $(1)/usr/sbin/ + $(INSTALL_BIN) $(PKG_BUILD_DIR)/chronyd $(1)$(PKG_INSTALL_DIR)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/chronyc $(1)$(PKG_INSTALL_DIR)/usr/bin + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_DIR) $(1)/etc/chrony + $(INSTALL_DIR) $(1)/etc/hotplug.d/iface + $(INSTALL_BIN) ./files/ntpd.hotplug $(1)/etc/hotplug.d/iface/20-ntpd + $(INSTALL_BIN) ./files/ntpd.init $(1)/etc/init.d/ntpd + $(INSTALL_CONF) ./files/ntpd.config $(1)/etc/config/ntpd + $(INSTALL_CONF) ./files/chrony.conf $(1)/etc/chrony/chrony.conf + $(INSTALL_CONF) ./files/chrony.keys $(1)/etc/chrony/chrony.keys +endef + +$(eval $(call BuildPackage,chrony)) diff --git a/net/chrony/files/chrony.conf b/net/chrony/files/chrony.conf new file mode 100644 index 000000000..508fdfb1c --- /dev/null +++ b/net/chrony/files/chrony.conf @@ -0,0 +1,17 @@ +# Chrony configuration + +# Note: time servers and ntp client access is configured in /etc/config/ntpd +# and automatically set at startup + +# Log clock errors above 0.5 seconds +logchange 0.5 + +# Allow command access only from localhost +cmdallow localhost +cmddeny + +# Password config for chronyc +# Note: Using a command key other than "1" will break +# /etc/init.d/ntpd and /etc/hotplug.d/iface/20-ntpd +keyfile /etc/chrony/chrony.keys +commandkey 1 diff --git a/net/chrony/files/chrony.keys b/net/chrony/files/chrony.keys new file mode 100644 index 000000000..c2d429eac --- /dev/null +++ b/net/chrony/files/chrony.keys @@ -0,0 +1 @@ +1 chronyc diff --git a/net/chrony/files/ntpd.config b/net/chrony/files/ntpd.config new file mode 100644 index 000000000..0ff590689 --- /dev/null +++ b/net/chrony/files/ntpd.config @@ -0,0 +1,6 @@ +# Generic NTP configuration +# Time servers and network(s) that may access the time service + +config ntpd + option TimeServers "0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.org" + option ClientAccessFrom "lan" diff --git a/net/chrony/files/ntpd.hotplug b/net/chrony/files/ntpd.hotplug new file mode 100644 index 000000000..9e06529e1 --- /dev/null +++ b/net/chrony/files/ntpd.hotplug @@ -0,0 +1,21 @@ +COMMAND=/usr/bin/chronyc +CHRONY_KEY=$(awk '/^1 / { print $2; }' /etc/chrony/chrony.keys) + +chrony_control() { +$COMMAND << EOF +password $CHRONY_KEY +$1 +EOF +} + +[ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ] && { + [ -x $COMMAND ] && [ -n "$CHRONY_KEY" ] &&{ + chrony_control online + } +} + +[ "$ACTION" = "ifdown" -a "$INTERFACE" = "wan" ] && { + [ -x $COMMAND ] && [ -n "$CHRONY_KEY" ] &&{ + chrony_control offline + } +} diff --git a/net/chrony/files/ntpd.init b/net/chrony/files/ntpd.init new file mode 100644 index 000000000..21fa35d82 --- /dev/null +++ b/net/chrony/files/ntpd.init @@ -0,0 +1,69 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2006 OpenWrt.org + +START=60 + +start() { + [ ! -f /var/run/chronyd.pid ] && ( + /usr/sbin/chronyd -f /etc/chrony/chrony.conf + + local NTP_SERVERS + local NTP_SERVER + local CLIENT_NETWORKS + local NETNAME + config_load ntpd + config_get NTP_SERVERS cfg1 TimeServers + config_get CLIENT_NETWORKS cfg1 ClientAccessFrom + CHRONY_KEY=$(awk '/^1 / { print $2; }' /etc/chrony/chrony.keys) + include /lib/network + scan_interfaces + + # Define servers and do a rapid series of time measurements + # to get up to date + ( + echo password $CHRONY_KEY + for NTP_SERVER in $NTP_SERVERS; do + echo add server $NTP_SERVER + done + echo burst 5/5 + ) | chronyc > /dev/null 2>&1 + + # ... wait until a reference ID is found ... + while chronyc tracking | grep 'Reference ID.*0.0.0.0' >/dev/null ; do sleep 1; done + + + # ... and finally, adjust the time in a single step + # and allow clients to access the server + ( + echo password $CHRONY_KEY + echo makestep + for NETNAME in $CLIENT_NETWORKS; do + local INTERFACE + local IP + local NETMASK + local BROADCAST + local NETWORK + local PREFIX + + config_get INTERFACE "$NETNAME" ifname + if [ -n "$INTERFACE" ] ; then + eval $(ifconfig $INTERFACE | grep inet | sed -e 's/.*addr:/IP=/' -e 's/ .*Mask:/; NETMASK=/') + eval $(ipcalc $IP $NETMASK) + echo allow $NETWORK/$PREFIX + fi + done + ) | chronyc > /dev/null 2>&1 + + ) +} + +stop() { + [ -r /var/run/chronyd.pid ] && PID=$(cat /var/run/chronyd.pid) + [ -n "$PID" ] && kill $PID +} + +restart() { + stop + while [ -r /var/run/chronyd.pid ] ; do sleep 1; done + start +} diff --git a/net/chrony/patches/001-crosscompile.patch b/net/chrony/patches/001-crosscompile.patch new file mode 100644 index 000000000..0c968a11d --- /dev/null +++ b/net/chrony/patches/001-crosscompile.patch @@ -0,0 +1,26 @@ +diff -ru chrony-1.21.orig/configure chrony-1.21/configure +--- chrony-1.21.orig/configure 2005-08-11 22:32:54.000000000 +0200 ++++ chrony-1.21/configure 2006-08-08 22:24:39.000000000 +0200 +@@ -185,6 +185,13 @@ + --prefix=* | --install_prefix=* ) + INSTALL_PREFIX=`echo $option | sed -e 's/[^=]*=//;'` + ;; ++ --target=* ) ++ TARGET=`echo $option | sed -e 's/[^=]*=//;'` ++ OPERATINGSYSTEM=`echo $TARGET | sed -e 's/.*-//;'` ++ MACHINE=`echo $TARGET | sed -e 's/-.*//;'` ++ VERSION="" ++ SYSTEM=${OPERATINGSYSTEM}-${MACHINE} ++ ;; + --trace ) + EXTRA_DEFS="-DTRACEON" + ;; +@@ -237,7 +244,7 @@ + ;; + esac + ;; +- Linux* ) ++ Linux* | linux* ) + EXTRA_OBJECTS="sys_linux.o wrap_adjtimex.o rtc_linux.o" + SYSDEFS="-DLINUX" + echo "Configuring for " $SYSTEM diff --git a/net/chrony/patches/002-mips_ioc_constants.patch b/net/chrony/patches/002-mips_ioc_constants.patch new file mode 100644 index 000000000..918994c6d --- /dev/null +++ b/net/chrony/patches/002-mips_ioc_constants.patch @@ -0,0 +1,19 @@ +diff -ru chrony-1.21.orig/io_linux.h chrony-1.21/io_linux.h +--- chrony-1.21.orig/io_linux.h 2005-08-11 22:32:54.000000000 +0200 ++++ chrony-1.21/io_linux.h 2006-08-08 22:24:43.000000000 +0200 +@@ -24,6 +24,15 @@ + #define CHRONY_IOC_NONE 1U + #define CHRONY_IOC_READ 2U + #define CHRONY_IOC_WRITE 4U ++#elif defined(__mips__) ++#define CHRONY_IOC_NRBITS 8 ++#define CHRONY_IOC_TYPEBITS 8 ++#define CHRONY_IOC_SIZEBITS 13 ++#define CHRONY_IOC_DIRBITS 3 ++ ++#define CHRONY_IOC_NONE 1U ++#define CHRONY_IOC_READ 2U ++#define CHRONY_IOC_WRITE 4U + #else + #error "I don't know the values of the _IOC_* constants for your architecture" + #endif -- 2.11.0