mirror of
https://github.com/cmur2/dyndnsd.git
synced 2025-08-08 08:33:56 +02:00
Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
c3331d19ca | |||
d7b2250923 | |||
b2a408acba | |||
c6c10a5a69 | |||
0c0c2ffffb | |||
f3124d007c | |||
fcd963f4cf | |||
0b3d92e1f2 | |||
![]() |
a221fcc506 | ||
![]() |
b14da0df09 |
@@ -10,14 +10,14 @@ dyndnsd.rb is aimed to implement a small [DynDNS-compliant](http://dyn.com/suppo
|
||||
|
||||
The is currently one updater shipped with dyndnsd.rb `command_with_bind_zone` that writes out a zone file in BIND syntax onto the current system and invokes a user-supplied command afterwards that is assumed to trigger the DNS server (not necessarily BIND since it's zone files are read by other DNS servers too) to reload it's zone configuration.
|
||||
|
||||
Because of the mechanisms used dyndnsd.rb is known to work only on *nix systems.
|
||||
|
||||
## General Usage
|
||||
|
||||
Install the gem:
|
||||
|
||||
gem install dyndnsd
|
||||
|
||||
(Optionally install the `json` gem too if you're on Ruby 1.8.)
|
||||
|
||||
Create a configuration file in YAML format somewhere:
|
||||
|
||||
```yaml
|
||||
@@ -118,7 +118,7 @@ Use a webserver as a proxy to handle SSL and/or multiple listen addresses and po
|
||||
|
||||
### Init scripts
|
||||
|
||||
The [Debian 6 init.d script](init.d/debian-6-dyndnsd) assumes that dyndnsd.rb is installed into the system ruby (no RVM support) and the config.yaml is at /opt/dyndnsd/config.yaml.
|
||||
The [Debian 6 init.d script](init.d/debian-6-dyndnsd) assumes that dyndnsd.rb is installed into the system ruby (no RVM support) and the config.yaml is at /opt/dyndnsd/config.yaml. Modify to your needs.
|
||||
|
||||
## License
|
||||
|
||||
|
@@ -23,18 +23,21 @@ case "$1" in
|
||||
start)
|
||||
log_daemon_msg "Starting dyndnsd.rb" "dyndnsd"
|
||||
start-stop-daemon --start --quiet --oknodo --make-pidfile --pidfile "/var/run/dyndnsd.pid" --background --exec $DAEMON -- $DAEMON_OPTS
|
||||
log_end_msg $?
|
||||
;;
|
||||
stop)
|
||||
log_daemon_msg "Stopping dyndnsd.rb" "dyndnsd"
|
||||
start-stop-daemon --stop --quiet --oknodo --pidfile "/var/run/dyndnsd.pid"
|
||||
log_end_msg $?
|
||||
;;
|
||||
restart|force-reload)
|
||||
log_daemon_msg "Restarting dyndnsd.rb" "dyndnsd"
|
||||
start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile "/var/run/dyndsd.pid"
|
||||
start-stop-daemon --start --quiet --oknodo --make-pidfile --pidfile "/var/run/dyndnsd.pid" --background --exec $DAEMON -- $DAEMON_OPTS
|
||||
log_end_msg $?
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart|force-reload}" >&2
|
||||
exit 1
|
||||
log_action_msg "Usage: $0 {start|stop|restart|force-reload}"
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
|
@@ -7,6 +7,7 @@ require 'json'
|
||||
require 'yaml'
|
||||
require 'rack'
|
||||
require 'metriks'
|
||||
require 'metriks/reporter/graphite'
|
||||
|
||||
require 'dyndnsd/generator/bind'
|
||||
require 'dyndnsd/updater/command_with_bind_zone'
|
||||
@@ -151,14 +152,23 @@ module Dyndnsd
|
||||
Process::Sys.setuid(Etc.getpwnam(config['user']).uid) if config['user']
|
||||
|
||||
# configure metriks
|
||||
reporter = Metriks::Reporter::ProcTitle.new
|
||||
reporter.add 'good', 'sec' do
|
||||
Metriks.meter('requests.good').mean_rate
|
||||
if config['graphite']
|
||||
host = config['graphite']['host'] || 'localhost'
|
||||
port = config['graphite']['port'] || 2003
|
||||
options = {}
|
||||
options[:prefix] = config['graphite']['prefix'] if config['graphite']['prefix']
|
||||
reporter = Metriks::Reporter::Graphite.new(host, port, options)
|
||||
reporter.start
|
||||
else
|
||||
reporter = Metriks::Reporter::ProcTitle.new
|
||||
reporter.add 'good', 'sec' do
|
||||
Metriks.meter('requests.good').mean_rate
|
||||
end
|
||||
reporter.add 'nochg', 'sec' do
|
||||
Metriks.meter('requests.nochg').mean_rate
|
||||
end
|
||||
reporter.start
|
||||
end
|
||||
reporter.add 'nochg', 'sec' do
|
||||
Metriks.meter('requests.nochg').mean_rate
|
||||
end
|
||||
reporter.start
|
||||
|
||||
# configure daemon
|
||||
db = Database.new(config['db'])
|
||||
@@ -180,6 +190,10 @@ module Dyndnsd
|
||||
Dyndnsd.logger.info "Quitting..."
|
||||
Rack::Handler::WEBrick.shutdown
|
||||
end
|
||||
Signal.trap('TERM') do
|
||||
Dyndnsd.logger.info "Quitting..."
|
||||
Rack::Handler::WEBrick.shutdown
|
||||
end
|
||||
|
||||
Rack::Handler::WEBrick.run app, :Host => config['host'], :Port => config['port']
|
||||
end
|
||||
|
@@ -1,4 +1,4 @@
|
||||
|
||||
module Dyndnsd
|
||||
VERSION = "1.1.0"
|
||||
VERSION = "1.3.0"
|
||||
end
|
||||
|
@@ -40,7 +40,7 @@ describe Dyndnsd::Daemon do
|
||||
last_response.status.should == 405
|
||||
end
|
||||
|
||||
it 'provides only the /nic/update' do
|
||||
it 'provides only the /nic/update URL' do
|
||||
authorize 'test', 'secret'
|
||||
get '/other/url'
|
||||
last_response.status.should == 404
|
||||
@@ -99,7 +99,7 @@ describe Dyndnsd::Daemon do
|
||||
last_response.body.should == 'nohost'
|
||||
end
|
||||
|
||||
it 'updates a host on change' do
|
||||
it 'updates a host on IPv4 change' do
|
||||
authorize 'test', 'secret'
|
||||
|
||||
get '/nic/update?hostname=foo.example.org&myip=1.2.3.4'
|
||||
@@ -110,7 +110,7 @@ describe Dyndnsd::Daemon do
|
||||
last_response.body.should == 'good 1.2.3.40'
|
||||
end
|
||||
|
||||
it 'returns no change' do
|
||||
it 'returns IPv4 no change' do
|
||||
authorize 'test', 'secret'
|
||||
|
||||
get '/nic/update?hostname=foo.example.org&myip=1.2.3.4'
|
||||
@@ -121,7 +121,7 @@ describe Dyndnsd::Daemon do
|
||||
last_response.body.should == 'nochg 1.2.3.4'
|
||||
end
|
||||
|
||||
it 'outputs status per hostname' do
|
||||
it 'outputs IPv4 status per hostname' do
|
||||
authorize 'test', 'secret'
|
||||
|
||||
get '/nic/update?hostname=foo.example.org&myip=1.2.3.4'
|
||||
@@ -133,7 +133,7 @@ describe Dyndnsd::Daemon do
|
||||
last_response.body.should == "nochg 1.2.3.4\ngood 1.2.3.4"
|
||||
end
|
||||
|
||||
it 'uses clients remote address if myip not specified' do
|
||||
it 'uses clients remote IPv4 address if myip not specified' do
|
||||
authorize 'test', 'secret'
|
||||
get '/nic/update?hostname=foo.example.org'
|
||||
last_response.should be_ok
|
||||
|
Reference in New Issue
Block a user