dust-deploy 0.8.0 → 0.8.1
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.
- data/changelog.md +7 -0
- data/lib/dust/recipes/cjdroute.rb +230 -0
- data/lib/dust/server.rb +20 -0
- data/lib/dust/version.rb +1 -1
- metadata +4 -3
data/changelog.md
CHANGED
@@ -0,0 +1,230 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
class Cjdroute< Recipe
|
4
|
+
desc 'cjdroute:deploy', 'installs / updates cjdns'
|
5
|
+
def deploy
|
6
|
+
# apply default configuration
|
7
|
+
@config = default_config.merge @config
|
8
|
+
|
9
|
+
return unless install_dependencies
|
10
|
+
return unless get_latest_version
|
11
|
+
return unless @node.mkdir "#{@config['build_dir']}/build"
|
12
|
+
|
13
|
+
# clean up building directory, if --restart is given
|
14
|
+
# using --restart, since there's no --cleanup
|
15
|
+
return unless make_clean if @options.restart?
|
16
|
+
|
17
|
+
# compiling action
|
18
|
+
return unless run_cmake
|
19
|
+
return unless run_make
|
20
|
+
|
21
|
+
stop_cjdroute
|
22
|
+
|
23
|
+
# copy binary
|
24
|
+
return unless @node.mkdir @config['bin_dir']
|
25
|
+
return unless @node.cp "#{@config['build_dir']}/build/cjdroute", "#{@config['bin_dir']}/cjdroute"
|
26
|
+
|
27
|
+
# create the config file and place it into etc_dir
|
28
|
+
return unless generate_config
|
29
|
+
|
30
|
+
# create the tuntap interface
|
31
|
+
return unless create_tuntap
|
32
|
+
|
33
|
+
# add route for cjdns network
|
34
|
+
return unless add_route
|
35
|
+
|
36
|
+
start_cjdroute
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
private
|
41
|
+
def default_config
|
42
|
+
{
|
43
|
+
'git_repo' => 'git://github.com/cjdelisle/cjdns.git',
|
44
|
+
'build_dir' => '/tmp/cjdns-tmp',
|
45
|
+
'bin_dir' => '/usr/local/bin',
|
46
|
+
'etc_dir' => '/etc/cjdns/',
|
47
|
+
'tun' => 'cjdroute0',
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
def public_peers
|
52
|
+
# list of public peers, taken from https://wiki.projectmeshnet.org/Public_peers
|
53
|
+
{
|
54
|
+
# derps nodes
|
55
|
+
'173.255.219.67:10000' => {
|
56
|
+
'password' => 'null',
|
57
|
+
'publicKey' => 'lj52930v1vmg3jqyb399us501svntt499bvgk0c1fud4pmy42gj0.k',
|
58
|
+
'trust' => 5000,
|
59
|
+
'authType' => 1
|
60
|
+
},
|
61
|
+
|
62
|
+
'96.126.112.124:10000' => {
|
63
|
+
'password' => 'null',
|
64
|
+
'publicKey' => '7zy1gb9bw4xp82kjvh66w01jdgh6y3lk7cfnl0pgb0xnn26b2jn0.k',
|
65
|
+
'trust' => 5000,
|
66
|
+
'authType' => 1
|
67
|
+
},
|
68
|
+
|
69
|
+
# rainfly x
|
70
|
+
'76.105.229.241:13982' => {
|
71
|
+
'password' => 'general_public_1985',
|
72
|
+
'publicKey' => '7pu8nlqphgd1bux9sdpjg0c104217r3b3m1bvmdtbn7uwcj5cky0.k',
|
73
|
+
'trust' => 5000,
|
74
|
+
'authType' => 1
|
75
|
+
},
|
76
|
+
|
77
|
+
# grey
|
78
|
+
'199.180.252.227:19081' => {
|
79
|
+
'password' => 'public_7h4yTNEnRSEUvfFLtsM3',
|
80
|
+
'publicKey' => 'z5htnv9jsj85b64cf61lbnl3dmqk5lpv3vxtz9g1jqlvb3b30b90.k',
|
81
|
+
'trust' => 5000,
|
82
|
+
'authType' => 1
|
83
|
+
},
|
84
|
+
|
85
|
+
# waaghals, expires 01.05.2012
|
86
|
+
'37.34.49.56:61530' => {
|
87
|
+
'password' => 'public-expires-may-ghsfYATSvjh65SFgd',
|
88
|
+
'publicKey' => 'jcvn5bvvfkxt3pmhj8bqzm6y20unc7cd5vuyhg01tmbh7bvswqq0.k',
|
89
|
+
'trust' => 5000,
|
90
|
+
'authType' => 1
|
91
|
+
}
|
92
|
+
}
|
93
|
+
end
|
94
|
+
|
95
|
+
# installs cmake, git and other building tools needed
|
96
|
+
def install_dependencies
|
97
|
+
::Dust.print_msg "installing build dependencies\n"
|
98
|
+
|
99
|
+
return false unless @node.install_package 'cmake', :indent => 2
|
100
|
+
|
101
|
+
if @node.uses_apt?
|
102
|
+
return false unless @node.install_package 'git-core', :indent => 2
|
103
|
+
return false unless @node.install_package 'build-essential', :indent => 2
|
104
|
+
return false unless @node.install_package 'coreutils', :indent => 2
|
105
|
+
elsif @node.uses_rpm?
|
106
|
+
return false unless @node.install_package 'git', :indent => 2
|
107
|
+
return false unless @node.install_package 'make', :indent => 2
|
108
|
+
else
|
109
|
+
return ::Dust.print_failed 'sorry, your os is not supported by this script'
|
110
|
+
end
|
111
|
+
|
112
|
+
puts
|
113
|
+
true
|
114
|
+
end
|
115
|
+
|
116
|
+
# gets/updates latest version from cjdns git repository
|
117
|
+
def get_latest_version
|
118
|
+
if @node.dir_exists? @config['build_dir'], :quiet => true
|
119
|
+
|
120
|
+
# check if build directory is maintained by git
|
121
|
+
unless @node.dir_exists? "#{@config['build_dir']}/.git", :quiet => true
|
122
|
+
return ::Dust.print_failed "#{@config['build_dir']} doesn't appear to be a git repository"
|
123
|
+
end
|
124
|
+
|
125
|
+
# git pull latest changes
|
126
|
+
::Dust.print_msg "pulling latest changes from repository\n"
|
127
|
+
ret = @node.exec "cd #{@config['build_dir']}; git pull", :live => true
|
128
|
+
return ::Dust.print_failed 'error pulling from git repository' unless ret[:exit_code] == 0
|
129
|
+
|
130
|
+
else
|
131
|
+
# create build directory
|
132
|
+
unless @node.mkdir @config['build_dir']
|
133
|
+
return ::Dust.print_failed "couldn't create build directory #{@config['build_dir']}"
|
134
|
+
end
|
135
|
+
|
136
|
+
# git clone cjdns repository
|
137
|
+
::Dust.print_msg "cloning cjdns repository into #{@config['build_dir']}\n"
|
138
|
+
ret = @node.exec "git clone #{@config['git_repo']} #{@config['build_dir']}", :live => true
|
139
|
+
return ::Dust.print_failed 'error cloning git repository' unless ret[:exit_code] == 0
|
140
|
+
end
|
141
|
+
|
142
|
+
puts
|
143
|
+
true
|
144
|
+
end
|
145
|
+
|
146
|
+
# remove and recreate building directory
|
147
|
+
def make_clean
|
148
|
+
::Dust.print_msg 'cleaning build directory'
|
149
|
+
return false unless ::Dust.print_result @node.exec("rm -rf #{@config['build_dir']}/build")[:exit_code]
|
150
|
+
true
|
151
|
+
end
|
152
|
+
|
153
|
+
|
154
|
+
def run_cmake
|
155
|
+
::Dust.print_msg "running cmake\n"
|
156
|
+
ret = @node.exec "cd #{@config['build_dir']}/build; cmake ..", :live => true
|
157
|
+
return ::Dust.print_failed 'error running cmake' unless ret[:exit_code] == 0
|
158
|
+
true
|
159
|
+
end
|
160
|
+
|
161
|
+
def run_make
|
162
|
+
::Dust.print_msg "compiling cjdns\n"
|
163
|
+
ret = @node.exec "cd #{@config['build_dir']}/build; make", :live => true
|
164
|
+
return ::Dust.print_failed 'error compiling cjdroute' unless ret[:exit_code] == 0
|
165
|
+
true
|
166
|
+
end
|
167
|
+
|
168
|
+
# generate cjdroute.conf
|
169
|
+
def generate_config
|
170
|
+
if @node.file_exists? "#{@config['etc_dir']}/cjdroute.conf", :quiet => true
|
171
|
+
::Dust.print_warning 'found a cjdroute.conf, not overwriting'
|
172
|
+
return true
|
173
|
+
end
|
174
|
+
|
175
|
+
::Dust.print_msg 'generating config file'
|
176
|
+
ret = @node.exec("#{@config['bin_dir']}/cjdroute --genconf")
|
177
|
+
return false unless ::Dust.print_result ret[:exit_code]
|
178
|
+
|
179
|
+
# parse generated json
|
180
|
+
cjdroute_conf = JSON.parse ret[:stdout]
|
181
|
+
|
182
|
+
# add some public peers, so we can get started directly
|
183
|
+
::Dust.print_msg 'adding public peers', :indent => 2
|
184
|
+
cjdroute_conf['interfaces']['UDPInterface']['connectTo'] = public_peers
|
185
|
+
::Dust.print_ok
|
186
|
+
|
187
|
+
# exchange tun0 with configured tun device
|
188
|
+
cjdroute_conf['router']['interface']['tunDevice'] = @config['tun']
|
189
|
+
|
190
|
+
return false unless @node.mkdir @config['etc_dir']
|
191
|
+
return @node.write "#{@config['etc_dir']}/cjdroute.conf", JSON.pretty_generate(cjdroute_conf)
|
192
|
+
end
|
193
|
+
|
194
|
+
# creates the cjdroute tuntap device
|
195
|
+
def create_tuntap
|
196
|
+
unless @node.exec("/sbin/ip tuntap list |grep #{@config['tun']}")[:exit_code] == 0
|
197
|
+
::Dust.print_msg "creating tun interface #{@config['tun']}"
|
198
|
+
return false unless ::Dust.print_result @node.exec("/sbin/ip tuntap add mode tun dev #{@config['tun']}")[:exit_code]
|
199
|
+
else
|
200
|
+
::Dust.print_msg "tun interface #{@config['tun']} already exists, flushing ip addresses"
|
201
|
+
::Dust.print_result @node.exec("ip addr flush dev #{@config['tun']}")[:exit_code]
|
202
|
+
end
|
203
|
+
|
204
|
+
true
|
205
|
+
end
|
206
|
+
|
207
|
+
# set the route for the cjdns network
|
208
|
+
def add_route
|
209
|
+
::Dust.print_msg 'getting routing information'
|
210
|
+
ret = @node.exec "#{@config['bin_dir']}/cjdroute --getcmds < #{@config['etc_dir']}/cjdroute.conf"
|
211
|
+
return false unless ::Dust.print_result ret[:exit_code]
|
212
|
+
|
213
|
+
::Dust.print_msg 'applying cjdns routes'
|
214
|
+
::Dust.print_result @node.exec(ret[:stdout])[:exit_code]
|
215
|
+
end
|
216
|
+
|
217
|
+
# kill any cjdroute processes that might be running
|
218
|
+
def stop_cjdroute
|
219
|
+
::Dust.print_msg 'stopping cjdroute'
|
220
|
+
pids = @node.exec("ps ax |grep cjdroute |grep -v grep |awk '{print $1}'")[:stdout]
|
221
|
+
pids.each_line { |pid| @node.exec "kill #{pid}" }
|
222
|
+
::Dust.print_ok
|
223
|
+
end
|
224
|
+
|
225
|
+
# fire up cjdroute
|
226
|
+
def start_cjdroute
|
227
|
+
::Dust.print_msg 'fireing up cjdroute'
|
228
|
+
::Dust.print_result @node.exec("nohup #{@config['bin_dir']}/cjdroute < #{@config['etc_dir']}/cjdroute.conf &> /dev/null &")[:exit_code]
|
229
|
+
end
|
230
|
+
end
|
data/lib/dust/server.rb
CHANGED
@@ -190,6 +190,26 @@ module Dust
|
|
190
190
|
Dust.print_result exec("rm -rf #{file}")[:exit_code], options
|
191
191
|
end
|
192
192
|
|
193
|
+
def cp source, destination, options = {}
|
194
|
+
options = default_options.merge options
|
195
|
+
|
196
|
+
# get rid of overly careful aliases
|
197
|
+
exec 'unalias -a'
|
198
|
+
|
199
|
+
Dust.print_msg "copying #{source} to #{destination}", options
|
200
|
+
Dust.print_result exec("cp -a #{source} #{destination}")[:exit_code], options
|
201
|
+
end
|
202
|
+
|
203
|
+
def mv source, destination, options = {}
|
204
|
+
options = default_options.merge options
|
205
|
+
|
206
|
+
# get rid of overly careful aliases
|
207
|
+
exec 'unalias -a'
|
208
|
+
|
209
|
+
Dust.print_msg "moving #{source} to #{destination}", options
|
210
|
+
Dust.print_result exec("mv #{source} #{destination}")[:exit_code], options
|
211
|
+
end
|
212
|
+
|
193
213
|
def mkdir dir, options = {}
|
194
214
|
options = default_options.merge options
|
195
215
|
|
data/lib/dust/version.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 8
|
8
|
-
-
|
9
|
-
version: 0.8.
|
8
|
+
- 1
|
9
|
+
version: 0.8.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- kris kechagia
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2012-03-
|
17
|
+
date: 2012-03-12 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -123,6 +123,7 @@ files:
|
|
123
123
|
- lib/dust/recipe.rb
|
124
124
|
- lib/dust/recipes/aliases.rb
|
125
125
|
- lib/dust/recipes/basic_setup.rb
|
126
|
+
- lib/dust/recipes/cjdroute.rb
|
126
127
|
- lib/dust/recipes/cups_client.rb
|
127
128
|
- lib/dust/recipes/debsecan.rb
|
128
129
|
- lib/dust/recipes/duplicity.rb
|