pangdudu-robots 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
@@ -1,21 +1,5 @@
|
|
1
1
|
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
|
2
2
|
<busconfig>
|
3
|
-
<policy user="root">
|
4
|
-
<allow own="org.robots.Service" />
|
5
|
-
<allow own="org.ruby.Service" />
|
6
|
-
</policy>
|
7
|
-
<policy group="netdev">
|
8
|
-
<allow own="org.robots.Service" />
|
9
|
-
<allow own="org.ruby.Service" />
|
10
|
-
</policy>
|
11
|
-
<policy group="robots">
|
12
|
-
<allow own="org.robots.Service" />
|
13
|
-
<allow own="org.ruby.Service" />
|
14
|
-
</policy>
|
15
|
-
<policy at_console="true">
|
16
|
-
<allow own="org.robots.Service" />
|
17
|
-
<allow own="org.ruby.Service" />
|
18
|
-
</policy>
|
19
3
|
<policy context="default">
|
20
4
|
<allow send_destination="org.robots.Service"/>
|
21
5
|
<allow receive_sender="org.robots.Service"/>
|
@@ -1,7 +1,3 @@
|
|
1
|
-
<!-- This configuration file controls the per-user-login-session message bus.
|
2
|
-
Add a session-local.conf and edit that rather than changing this
|
3
|
-
file directly. -->
|
4
|
-
|
5
1
|
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
|
6
2
|
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
|
7
3
|
<busconfig>
|
@@ -10,15 +6,13 @@
|
|
10
6
|
|
11
7
|
<!-- If we fork, keep the user's original umask to avoid affecting
|
12
8
|
the behavior of child processes. -->
|
13
|
-
<keep_umask/>
|
9
|
+
<!-- <keep_umask/> -->
|
14
10
|
|
15
11
|
<!-- Listen to everything on tcp! -->
|
16
12
|
<listen>tcp:host=0.0.0.0,port=2687,family=ipv4</listen>
|
17
13
|
<!-- Listen on socket at this file location -->
|
18
|
-
<listen>unix:path=/tmp/robots_session_bus_socket</listen>
|
14
|
+
<!-- <listen>unix:path=/tmp/robots_session_bus_socket</listen> -->
|
19
15
|
|
20
|
-
<standard_session_servicedirs />
|
21
|
-
|
22
16
|
<policy context="default">
|
23
17
|
<!-- Allow everything to be sent -->
|
24
18
|
<allow send_destination="*" eavesdrop="true"/>
|
@@ -32,10 +26,4 @@
|
|
32
26
|
further restrict the above policy for specific services. -->
|
33
27
|
<include>org.robots.service.conf</include>
|
34
28
|
|
35
|
-
<!-- raise the service start timeout to 40 seconds as it can timeout
|
36
|
-
on the live cd on slow machines -->
|
37
|
-
<limit name="service_start_timeout">60000</limit>
|
38
|
-
|
39
|
-
<include if_selinux_enabled="yes" selinux_root_relative="yes">contexts/dbus_contexts</include>
|
40
|
-
|
41
29
|
</busconfig>
|
@@ -1,2 +1,2 @@
|
|
1
1
|
#!/bin/bash
|
2
|
-
dbus-daemon --config-file
|
2
|
+
dbus-daemon --config-file=$HOME/.robots/config/remote.session.dbus.conf
|
@@ -67,7 +67,7 @@ class VisualizerAgent
|
|
67
67
|
@gui.resize(@width, @height)
|
68
68
|
@gui.show()
|
69
69
|
#just because it's fun
|
70
|
-
add_dbug_agents
|
70
|
+
#add_dbug_agents
|
71
71
|
@app.exec()
|
72
72
|
end
|
73
73
|
|
@@ -92,9 +92,9 @@ Thread.new do
|
|
92
92
|
loop do
|
93
93
|
sleep 1
|
94
94
|
#send an xml message over the system
|
95
|
-
|
96
|
-
|
97
|
-
|
95
|
+
alive_msg = va.create_xml_alive_msg
|
96
|
+
dlog "alive_msg: #{alive_msg.to_s}"
|
97
|
+
va.send_msg alive_msg
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
data/lib/robots_agent.rb
CHANGED
@@ -13,24 +13,23 @@ class Robot
|
|
13
13
|
|
14
14
|
def initialize
|
15
15
|
dlog "new Robot initialized."
|
16
|
-
@
|
17
|
-
@
|
18
|
-
@
|
19
|
-
@
|
20
|
-
@
|
21
|
-
@
|
16
|
+
@localhost = Socket.gethostname
|
17
|
+
@daemonhost = "127.0.0.1"
|
18
|
+
@remote = false #if you want to connect remotely, change this value
|
19
|
+
@sessiontype = "robots" #could be session,system or robots (use robots, if you want it to work over multiple hosts)
|
20
|
+
@daemonconfig = "~/.robots/config/remote.session.dbus.conf" #listens on tcp
|
21
|
+
@robots_socket_name = "tcp:host=#{@daemonhost},port=2687,family=ipv4" #look at: ~/.robots/config/remote.session.dbus.conf
|
22
22
|
@robotsservice = "org.robots.Service"
|
23
23
|
@emitterpath = "/org/robots/Service/Emitter"
|
24
|
-
@emitterinterface = "org.
|
25
|
-
@
|
26
|
-
@emitters = {}
|
27
|
-
@infrastructure = {} #holds infrastructure objects
|
24
|
+
@emitterinterface = "org.robots.Service.EmitterInterface"
|
25
|
+
@coreservice, @dbussession, @dbusdaemon = nil,nil,nil
|
26
|
+
@listeners,@emitters,@infrastructure = [],{},{}
|
28
27
|
@servicetypes = fill_servicetypes #refer to robots_infrastructure.rb
|
29
28
|
end
|
30
29
|
|
31
30
|
#start the mojo
|
32
31
|
def run
|
33
|
-
check_for_dbus_daemon if @sessiontype.eql? "robots" #will start a daemon if necessary
|
32
|
+
check_for_dbus_daemon if @sessiontype.eql? "robots" #will start a dbus-daemon if necessary
|
34
33
|
setup_robots_service
|
35
34
|
register_callbacks
|
36
35
|
#test_messages; #main_loop;
|
@@ -56,22 +55,24 @@ class Robot
|
|
56
55
|
|
57
56
|
#check if a dbus-daemon suitable for robots is running, otherwise start one
|
58
57
|
def check_for_dbus_daemon
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
58
|
+
unless @remote
|
59
|
+
@daemonconfig = File.expand_path(@daemonconfig) #dbus-daemon won't accept otherwise
|
60
|
+
#ok, no config file, not good!
|
61
|
+
unless File.exist? @daemonconfig
|
62
|
+
wlog "no daemon config: #{@daemonconfig}!"
|
63
|
+
wlog "will sleep for 5 seconds,..."
|
64
|
+
sleep 5 #give the user time to realize
|
65
|
+
end
|
66
|
+
#if the config file is there
|
67
|
+
if File.exist? @daemonconfig
|
68
|
+
@dbusdaemon = DbusDaemon.new @daemonconfig
|
69
|
+
got_twins = @dbusdaemon.got_twin_daemon? #check if a daemon like this is already running
|
70
|
+
ilog "custom dbus-daemon is already running." if got_twins #inform user
|
71
|
+
unless got_twins #no suitable dbus-daemon running, start one
|
72
|
+
@dbusdaemon.start_daemon
|
73
|
+
ilog "custom dbus-daemon started and running, check \"ps x | grep \"dbus-daemon\", if plan a CTRL-C."
|
74
|
+
#@dbusdaemon.stop_daemon #must get called sometimes, super nasty, use " ps x | grep "dbus-daemon" "
|
75
|
+
end
|
75
76
|
end
|
76
77
|
end
|
77
78
|
end
|
@@ -127,11 +128,16 @@ class Robot
|
|
127
128
|
def register_callbacks
|
128
129
|
#setup callbacks for infrastructure emitters
|
129
130
|
@emitters.each { |name,emitter| register_emitter_callback name,emitter }
|
130
|
-
#
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
131
|
+
#old systems sometimes don't have avahi
|
132
|
+
if DBus::SystemBus.instance.proxy.ListNames[0].include? "org.freedesktop.Avahi"
|
133
|
+
#setup service browser
|
134
|
+
bus = DBus::SystemBus.instance #needs to be the system bus for the avahi stuff
|
135
|
+
proxy = bus.introspect("org.freedesktop.Avahi","/")
|
136
|
+
@avahi = proxy["org.freedesktop.Avahi.Server"]
|
137
|
+
@servicetypes.each { |name,type| register_service_callback name,type }
|
138
|
+
else
|
139
|
+
wlog "Sorry, no Avahi service running, no magic service discovery."
|
140
|
+
end
|
135
141
|
end
|
136
142
|
|
137
143
|
#register an emitter callback
|
@@ -212,9 +218,8 @@ class Robot
|
|
212
218
|
@dbussession = DBus::SystemBus.instance if @sessiontype.eql? "system"
|
213
219
|
@dbussession = DBus::SessionBus.instance if @sessiontype.eql? "session"
|
214
220
|
if @sessiontype.eql? "robots"
|
215
|
-
#i somehow feel bad for doing it like this with ENV[]:
|
216
|
-
@robots_socket_name = "unix:path=/tmp/robots_session_bus_socket" #look at: config/remote.session.dbus.conf
|
217
221
|
DBus.const_set("SessionSocketName", @robots_socket_name) #overwrite the modules constant
|
222
|
+
evil_hack_remote_cookie if @remote #i need not say more,...
|
218
223
|
@dbussession = DBus::SessionBus.instance
|
219
224
|
end
|
220
225
|
end
|
@@ -226,6 +231,27 @@ class Robot
|
|
226
231
|
return @dbussession
|
227
232
|
end
|
228
233
|
|
234
|
+
#because dbus remote auth still betrays us, we need to hack it
|
235
|
+
def evil_hack_remote_cookie
|
236
|
+
if @robots_socket_name.include? "tcp:"
|
237
|
+
af, port, daemon_name, daemon_addr = (Socket::getaddrinfo(@daemonhost, 2687)).first
|
238
|
+
ilog "Trying to get/hack remote cookie from: #{daemon_name}."
|
239
|
+
begin
|
240
|
+
cookiepath = "#{ENV['HOME']}/.dbus-keyrings/org_freedesktop_general"
|
241
|
+
#oki, the scp magic only works, if you use sshkeys
|
242
|
+
`scp #{daemon_addr}:.dbus-keyrings/org_freedesktop_general #{cookiepath}`
|
243
|
+
if File.exist? cookiepath
|
244
|
+
cookie = File.open(cookiepath)
|
245
|
+
dlog "Got cookie: #{cookie.gets}"
|
246
|
+
end
|
247
|
+
rescue
|
248
|
+
elog "Oops, something is wrong."
|
249
|
+
end
|
250
|
+
else
|
251
|
+
dlog "Nothing to hack, boring."
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
229
255
|
#functions used by the module end here
|
230
256
|
|
231
257
|
#dbus main loop
|
data/lib/robots_xml.rb
CHANGED
@@ -27,9 +27,9 @@ module RobotsXml
|
|
27
27
|
|
28
28
|
#create an alive message
|
29
29
|
def create_xml_alive_msg
|
30
|
-
@
|
30
|
+
@localhost = "localhost" if @localhost.nil? #more fun with hostname
|
31
31
|
@roboname = "Nameless" if @roboname.nil? #at least it's nameless
|
32
|
-
robotsid = "#{@
|
32
|
+
robotsid = "#{@localhost}.#{@roboname.gsub(" ","_")}" #looks cooler
|
33
33
|
msg = create_xml_msg { |b| b.info("#{@roboname} alive","alive"=>"#{robotsid}","timestamp" => "#{Time.now}") }
|
34
34
|
return msg
|
35
35
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pangdudu-robots
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- pangdudu
|
@@ -9,9 +9,19 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-07-
|
12
|
+
date: 2009-07-27 00:00:00 -07:00
|
13
13
|
default_executable: robots
|
14
14
|
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: pangdudu-ruby-dbus-daemon
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
15
25
|
- !ruby/object:Gem::Dependency
|
16
26
|
name: pangdudu-ruby-dbus
|
17
27
|
type: :runtime
|
@@ -61,6 +71,7 @@ files:
|
|
61
71
|
- funky-examples/memory-agent/memory_generator_agent.rb
|
62
72
|
has_rdoc: true
|
63
73
|
homepage: http://github.com/pangdudu/robots
|
74
|
+
licenses:
|
64
75
|
post_install_message:
|
65
76
|
rdoc_options: []
|
66
77
|
|
@@ -81,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
92
|
requirements: []
|
82
93
|
|
83
94
|
rubyforge_project: http://github.com/pangdudu/robots
|
84
|
-
rubygems_version: 1.
|
95
|
+
rubygems_version: 1.3.5
|
85
96
|
signing_key:
|
86
97
|
specification_version: 2
|
87
98
|
summary: more robots!
|