dns_one 0.5.12 → 0.5.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/dns_one.gemspec +0 -3
- data/lib/dns_one.rb +8 -7
- data/lib/dns_one/backend/db.rb +1 -2
- data/lib/dns_one/cli.rb +6 -30
- data/lib/dns_one/req_log/db.rb +1 -1
- data/lib/dns_one/req_log/file.rb +5 -3
- data/lib/dns_one/server.rb +1 -0
- data/lib/dns_one/setup.rb +94 -58
- data/lib/dns_one/version.rb +1 -1
- metadata +2 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e10df9846e483364575b961388bc6836684c112
|
4
|
+
data.tar.gz: 81347e9f92e59419489a07f0a727654fce46d166
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c3473af08292f70ff5558b6d0bba02daa508580bedc5d8659b4e73de50cb21ea0841ffac7a78103aabd88904a0f81b90553caccb35912e7d6d8f8c15c6f1a938
|
7
|
+
data.tar.gz: ccef86c94a4e2046cf89d466ec4cec5a944e8c23613d6f81c2133e967c64f8d9c29a7d3a8a8083255910cf5d8205e1a2b6bd87a1ea0ff7ca26662b6af7bbc286
|
data/dns_one.gemspec
CHANGED
@@ -28,8 +28,5 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_runtime_dependency "thor", '~> 0.19'
|
29
29
|
spec.add_runtime_dependency "rubydns", '~> 2.0'
|
30
30
|
spec.add_runtime_dependency "rexec", '~> 1.6'
|
31
|
-
spec.add_runtime_dependency "pg", '~> 0.21'
|
32
|
-
spec.add_runtime_dependency "activerecord", '~> 5.0'
|
33
|
-
spec.add_runtime_dependency "sqlite3", '~> 1.3'
|
34
31
|
|
35
32
|
end
|
data/lib/dns_one.rb
CHANGED
@@ -23,22 +23,21 @@ require "dns_one/core_ext/hash"
|
|
23
23
|
require "dns_one/global"
|
24
24
|
require "dns_one/util"
|
25
25
|
require "dns_one/server"
|
26
|
-
require "dns_one/req_log/db"
|
27
26
|
|
28
27
|
module DnsOne; class DnsOne
|
29
28
|
|
30
29
|
DEFAULTS = {
|
31
|
-
conf_file: "/etc/
|
32
|
-
work_dir: "/var/local/
|
33
|
-
log_file: "/var/log/dns_one/
|
34
|
-
rubydns_log_file: "/var/log/dns_one/
|
30
|
+
conf_file: "/etc/dnsone.yml",
|
31
|
+
work_dir: "/var/local/dnsone",
|
32
|
+
log_file: "/var/log/dns_one/dnsone.log",
|
33
|
+
rubydns_log_file: "/var/log/dns_one/dnsone_rubydns.log",
|
35
34
|
run_as: "dnsone",
|
36
35
|
interfaces: [ [:udp, "0.0.0.0", 53],
|
37
36
|
[:tcp, "0.0.0.0", 53],
|
38
37
|
[:udp, "::", 5300],
|
39
38
|
[:tcp, "::", 5300]
|
40
39
|
],
|
41
|
-
log_req_socket_file: '/tmp/
|
40
|
+
log_req_socket_file: '/tmp/dnsone_log_result.sock'
|
42
41
|
}
|
43
42
|
|
44
43
|
def initialize conf_file: nil
|
@@ -55,7 +54,9 @@ module DnsOne; class DnsOne
|
|
55
54
|
|
56
55
|
def load_conf conf_file
|
57
56
|
conf = DEFAULTS.clone
|
58
|
-
|
57
|
+
if File.exists? conf_file
|
58
|
+
conf.merge! YAML.load_file(conf_file).symbolize_keys
|
59
|
+
end
|
59
60
|
Util.hash_to_ostruct_deep conf
|
60
61
|
|
61
62
|
rescue => e
|
data/lib/dns_one/backend/db.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
module DnsOne; module Backend; class DB < Base
|
3
2
|
|
4
3
|
def initialize conf
|
@@ -45,7 +44,7 @@ module DnsOne; module Backend; class DB < Base
|
|
45
44
|
end
|
46
45
|
|
47
46
|
def setup_db
|
48
|
-
|
47
|
+
require_deps
|
49
48
|
ActiveRecord::Base.logger = Global.logger
|
50
49
|
ActiveRecord::Base.establish_connection @conf
|
51
50
|
end
|
data/lib/dns_one/cli.rb
CHANGED
@@ -18,40 +18,16 @@ class DnsOne::CLI < Thor
|
|
18
18
|
).start
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
def install
|
25
|
-
DnsOne::Setup.new.install
|
21
|
+
desc "setup", "setup dnsone"
|
22
|
+
def setup
|
23
|
+
DnsOne::Setup.new.setup
|
26
24
|
end
|
27
25
|
|
28
|
-
desc "
|
29
|
-
def
|
30
|
-
DnsOne::Setup.new.
|
26
|
+
desc "remove", "remove dnsone"
|
27
|
+
def remove
|
28
|
+
DnsOne::Setup.new.remove
|
31
29
|
end
|
32
30
|
|
33
|
-
# MANAGE
|
34
|
-
|
35
|
-
desc "start", "start dns_one"
|
36
|
-
def start
|
37
|
-
DnsOne::Util.ensure_sytemd
|
38
|
-
DnsOne::Util.run "systemctl start #{DnsOne::Setup::SERVICE_NAME}"
|
39
|
-
end
|
40
|
-
|
41
|
-
desc "stop", "stop dns_one"
|
42
|
-
def stop
|
43
|
-
DnsOne::Util.ensure_sytemd
|
44
|
-
DnsOne::Util.run "systemctl stop #{DnsOne::Setup::SERVICE_NAME}"
|
45
|
-
end
|
46
|
-
|
47
|
-
desc "status", "check dns_one status"
|
48
|
-
def status
|
49
|
-
DnsOne::Util.ensure_sytemd
|
50
|
-
DnsOne::Util.run "systemctl status #{DnsOne::Setup::SERVICE_NAME}"
|
51
|
-
end
|
52
|
-
|
53
|
-
# STATS
|
54
|
-
|
55
31
|
desc "stats", "show counters"
|
56
32
|
def stats
|
57
33
|
DnsOne::Stat.print
|
data/lib/dns_one/req_log/db.rb
CHANGED
data/lib/dns_one/req_log/file.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
module DnsOne; module
|
2
|
-
if
|
3
|
-
path = @conf.req_log_file.is_a?(String) ? @conf.req_log_file :
|
1
|
+
module DnsOne; module ReqLog; class File
|
2
|
+
if self.set_logger
|
3
|
+
path = @conf.req_log_file.is_a?(String) ? @conf.req_log_file : STDOUT
|
4
|
+
|
4
5
|
l = Logger.new @conf.ruby_dns_logger, 10, (10 * 2**20)
|
5
6
|
l.level = Logger::WARN
|
7
|
+
|
6
8
|
Global.ruby_dns_logger = l
|
7
9
|
end
|
8
10
|
|
data/lib/dns_one/server.rb
CHANGED
data/lib/dns_one/setup.rb
CHANGED
@@ -1,115 +1,151 @@
|
|
1
1
|
module DnsOne; class Setup
|
2
|
-
# Currently tested version
|
3
|
-
# TODO: flexibilize version and make checks/prompts/warnings during install
|
4
|
-
REQUIRED_RUBY_VERSION = '2.3.3'
|
5
|
-
|
6
2
|
SYSTEMD_SERVICES_DIR = "/lib/systemd/system/"
|
7
|
-
SERVICE_NAME = '
|
3
|
+
SERVICE_NAME = 'dnsone'
|
8
4
|
SYSTEMD_SERVICE_FILE = "#{SYSTEMD_SERVICES_DIR}/#{SERVICE_NAME}.service"
|
9
5
|
|
6
|
+
attr_accessor :conf
|
10
7
|
|
11
8
|
def initialize
|
12
9
|
@thisdir = File.join File.dirname(__FILE__)
|
10
|
+
DnsOne.new # just to load the configuration
|
11
|
+
# TODO: move conf to own class
|
12
|
+
@conf = Global.conf
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
16
|
-
|
17
|
-
#check_ruby_version
|
18
|
-
unless Util.has_systemd?
|
19
|
-
STDERR.puts "DnsOne requires systemd. Aborting install."
|
20
|
-
exit 1
|
21
|
-
end
|
15
|
+
def setup
|
16
|
+
check_reqs
|
22
17
|
add_user
|
23
18
|
mkdirs
|
24
|
-
#set_ruby_version
|
25
19
|
copy_sample_conf
|
26
20
|
install_systemd_service
|
27
21
|
setup_finished_msg
|
28
22
|
end
|
29
23
|
|
30
|
-
def
|
31
|
-
|
32
|
-
|
24
|
+
def remove
|
25
|
+
unless is_setup?
|
26
|
+
die "Nothing to remove. Exiting."
|
27
|
+
end
|
28
|
+
|
29
|
+
# SYSTEMD_SERVICE_FILE
|
30
|
+
if Util.has_systemd? and File.exist? SYSTEMD_SERVICE_FILE
|
33
31
|
Util.run "systemctl stop #{SERVICE_NAME}"
|
34
32
|
Util.run "systemctl disable #{SERVICE_NAME}"
|
35
33
|
File.delete SYSTEMD_SERVICE_FILE
|
36
34
|
end
|
37
|
-
|
38
|
-
#
|
39
|
-
|
35
|
+
|
36
|
+
# conf_file
|
37
|
+
if File.exists? conf.conf_file
|
38
|
+
if confirm? "Delete #{conf.conf_file}?"
|
39
|
+
FileUtils.rm conf.conf_file
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# work_dir
|
44
|
+
if conf.work_dir == '/var/local/dnsone' # Only deletes if path matches the hardcoded one
|
45
|
+
if Dir.exists? conf.work_dir
|
46
|
+
if confirm? "Delete #{conf.work_dir}?"
|
47
|
+
FileUtils.rm_rf conf.work_dir
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
puts "Removed."
|
40
53
|
end
|
41
54
|
|
42
55
|
private
|
43
56
|
|
44
|
-
def
|
45
|
-
|
46
|
-
|
47
|
-
|
57
|
+
def check_reqs
|
58
|
+
unless Process.uid == 0
|
59
|
+
die "Install requires root privileges. Run with sudo or login as root. Aborting."
|
60
|
+
end
|
61
|
+
unless Util.has_systemd?
|
62
|
+
warn "DnsOne will install without systemd."
|
48
63
|
end
|
49
64
|
end
|
50
65
|
|
51
66
|
def add_user
|
52
|
-
if `cat /etc/passwd|grep ^#{
|
53
|
-
|
54
|
-
|
55
|
-
# TODO: prompt user
|
56
|
-
system "adduser --system --no-create-home #{Server::DEFAULT_RUN_AS}"
|
67
|
+
if `cat /etc/passwd|grep ^#{conf.run_as}:`.strip.present?
|
68
|
+
warn "User #{conf.run_as} exists, skipping creation."
|
69
|
+
return
|
57
70
|
end
|
58
|
-
|
59
|
-
|
60
|
-
def set_ruby_version
|
61
|
-
File.write "#{DnsOne::WORK_DIR}/.ruby-version", REQUIRED_RUBY_VERSION
|
71
|
+
system "adduser --system --no-create-home '#{conf.run_as}'"
|
62
72
|
end
|
63
73
|
|
64
74
|
def mkdirs
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
75
|
+
if Dir.exists? conf.work_dir
|
76
|
+
warn "Work dir #{conf.work_dir} exists, skipping creation."
|
77
|
+
return
|
78
|
+
end
|
79
|
+
FileUtils.mkdir_p conf.work_dir
|
80
|
+
File.chmod 0755, conf.work_dir
|
81
|
+
File.chown `id -u #{conf.run_as}`.to_i, nil, conf.work_dir
|
70
82
|
end
|
71
83
|
|
72
84
|
def setup_finished_msg
|
73
|
-
|
74
|
-
puts "Now:"
|
75
|
-
puts "1) Edit #{DnsOne::DEFAULT_CONF_FILE}. You can run 'ruby -Ilib/ exe/dns_one --conf util/dev_conf.yml --log=/dev/stdout' to test and adjust your configuration."
|
76
|
-
puts "2) After configure run 'dns_one start'."
|
77
|
-
puts "See startup logs with 'tail -f /var/log/syslog'"
|
78
|
-
puts "See run logs with 'tail -f /var/log/dns_one.log' (or /var/log/dns_one_rubydns.log)"
|
79
|
-
end
|
85
|
+
print <<~HEREDOC
|
80
86
|
|
81
|
-
|
82
|
-
|
83
|
-
|
87
|
+
Installed successfully
|
88
|
+
|
89
|
+
Now:
|
90
|
+
1) Edit #{conf.conf_file}
|
91
|
+
2) After configuration run 'dnsone' (or 'systemctl start dnsone' if systemd is available)
|
92
|
+
|
93
|
+
Logs are sent to /var/log/dnsone.log
|
94
|
+
/var/log/dnsone_rubydns.log
|
95
|
+
|
96
|
+
HEREDOC
|
84
97
|
end
|
85
98
|
|
86
|
-
def
|
87
|
-
|
88
|
-
STDERR.puts "Install requires root privileges. Run with sudo or login as root. Aborting."
|
89
|
-
exit 1
|
90
|
-
end
|
99
|
+
def is_setup?
|
100
|
+
File.exist? conf.conf_file
|
91
101
|
end
|
92
102
|
|
93
103
|
def install_systemd_service
|
94
|
-
copy "#{@thisdir}/../../util/
|
104
|
+
copy "#{@thisdir}/../../util/dnsone.service",
|
95
105
|
SYSTEMD_SERVICE_FILE
|
96
106
|
|
97
107
|
Util.run "systemctl enable #{SERVICE_NAME}"
|
98
108
|
end
|
99
109
|
|
100
110
|
def copy_sample_conf
|
101
|
-
if File.exist?
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
DnsOne::DEFAULT_CONF_FILE
|
111
|
+
if File.exist? conf.conf_file
|
112
|
+
unless confirm? "File #{conf.conf_file} exists. Override it?"
|
113
|
+
return
|
114
|
+
end
|
106
115
|
end
|
116
|
+
copy "#{@thisdir}/../../util/sample_conf.yml",
|
117
|
+
conf.conf_file
|
107
118
|
end
|
108
119
|
|
109
120
|
def copy from, to, mod = 0600
|
110
121
|
puts "Copying #{from} to #{to}..."
|
111
122
|
FileUtils.cp from, to
|
112
123
|
FileUtils.chmod mod, to
|
124
|
+
|
125
|
+
rescue => e
|
126
|
+
warn "Error when copying #{from} to #{to}: #{e.message}"
|
127
|
+
unless confirm? "Ignore error?"
|
128
|
+
die "exiting"
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def die msg
|
133
|
+
STDERR.puts msg
|
134
|
+
exit 1
|
135
|
+
end
|
136
|
+
|
137
|
+
def warn msg
|
138
|
+
STDERR.puts msg
|
139
|
+
end
|
140
|
+
|
141
|
+
def confirm? msg
|
142
|
+
typed = nil
|
143
|
+
loop do
|
144
|
+
print "#{msg} (y/n): "
|
145
|
+
typed = STDIN.gets.chomp
|
146
|
+
break if %w(y n).include? typed
|
147
|
+
end
|
148
|
+
typed == 'y'
|
113
149
|
end
|
114
150
|
|
115
151
|
end; end
|
data/lib/dns_one/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dns_one
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Lobato
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -94,48 +94,6 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '1.6'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: pg
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0.21'
|
104
|
-
type: :runtime
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0.21'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: activerecord
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '5.0'
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '5.0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: sqlite3
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '1.3'
|
132
|
-
type: :runtime
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '1.3'
|
139
97
|
description: Instead having a complex data schema to assign record sets to DNS zones,
|
140
98
|
dns_one assigns one or a few record sets to many zones. Configure your record sets
|
141
99
|
in YML files and fetch your domains from a database or YML backend.
|