trinidad_init_services 1.1.3 → 1.1.4

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.
Files changed (61) hide show
  1. data/.gitignore +5 -0
  2. data/Gemfile +3 -0
  3. data/History.txt +6 -0
  4. data/README.md +95 -0
  5. data/Rakefile +9 -58
  6. data/bin/trinidad_init_service +3 -4
  7. data/init.d/trinidad.erb +33 -12
  8. data/jsvc-unix-src/CHANGES.txt +62 -0
  9. data/jsvc-unix-src/INSTALL.txt +81 -0
  10. data/jsvc-unix-src/Makedefs.in +32 -0
  11. data/jsvc-unix-src/Makefile.in +42 -0
  12. data/jsvc-unix-src/configure +4417 -0
  13. data/jsvc-unix-src/configure.in +141 -0
  14. data/jsvc-unix-src/man/README +20 -0
  15. data/jsvc-unix-src/man/fetch.sh +36 -0
  16. data/jsvc-unix-src/man/jsvc.1.xml +214 -0
  17. data/jsvc-unix-src/native/.indent.pro +7 -0
  18. data/jsvc-unix-src/native/Makefile.in +46 -0
  19. data/jsvc-unix-src/native/arguments.c +476 -0
  20. data/jsvc-unix-src/native/arguments.h +94 -0
  21. data/jsvc-unix-src/native/debug.c +87 -0
  22. data/jsvc-unix-src/native/debug.h +65 -0
  23. data/jsvc-unix-src/native/dso-dlfcn.c +62 -0
  24. data/jsvc-unix-src/native/dso-dyld.c +153 -0
  25. data/jsvc-unix-src/native/dso.h +38 -0
  26. data/jsvc-unix-src/native/help.c +106 -0
  27. data/jsvc-unix-src/native/help.h +24 -0
  28. data/jsvc-unix-src/native/home.c +265 -0
  29. data/jsvc-unix-src/native/home.h +47 -0
  30. data/jsvc-unix-src/native/java.c +608 -0
  31. data/jsvc-unix-src/native/java.h +35 -0
  32. data/jsvc-unix-src/native/jsvc-unix.c +1267 -0
  33. data/jsvc-unix-src/native/jsvc.h +55 -0
  34. data/jsvc-unix-src/native/location.c +151 -0
  35. data/jsvc-unix-src/native/location.h +29 -0
  36. data/jsvc-unix-src/native/locks.c +52 -0
  37. data/jsvc-unix-src/native/locks.h +40 -0
  38. data/jsvc-unix-src/native/replace.c +121 -0
  39. data/jsvc-unix-src/native/replace.h +39 -0
  40. data/jsvc-unix-src/native/signals.c +105 -0
  41. data/jsvc-unix-src/native/signals.h +34 -0
  42. data/jsvc-unix-src/native/version.h +63 -0
  43. data/jsvc-unix-src/support/apfunctions.m4 +110 -0
  44. data/jsvc-unix-src/support/apjava.m4 +94 -0
  45. data/jsvc-unix-src/support/apsupport.m4 +155 -0
  46. data/jsvc-unix-src/support/buildconf.sh +33 -0
  47. data/jsvc-unix-src/support/config.guess +1371 -0
  48. data/jsvc-unix-src/support/config.sub +1760 -0
  49. data/jsvc-unix-src/support/install.sh +128 -0
  50. data/jsvc-unix-src/support/mkdist.sh +104 -0
  51. data/lib/trinidad/daemon.rb +31 -0
  52. data/lib/trinidad_init_services.rb +2 -30
  53. data/lib/trinidad_init_services/configuration.rb +91 -14
  54. data/lib/trinidad_init_services/version.rb +5 -0
  55. data/spec/spec_helper.rb +5 -6
  56. data/spec/trinidad_daemon_spec.rb +0 -1
  57. data/spec/trinidad_init_services/configuration_spec.rb +34 -1
  58. data/trinidad_init_services.gemspec +14 -51
  59. metadata +146 -87
  60. data/README +0 -63
  61. data/trinidad-libs/jsvc_linux +0 -0
@@ -0,0 +1,128 @@
1
+ #!/bin/sh
2
+ #
3
+ # Licensed to the Apache Software Foundation (ASF) under one or more
4
+ # contributor license agreements. See the NOTICE file distributed with
5
+ # this work for additional information regarding copyright ownership.
6
+ # The ASF licenses this file to You under the Apache License, Version 2.0
7
+ # (the "License"); you may not use this file except in compliance with
8
+ # the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ ##
19
+ ## install.sh -- install a program, script or datafile
20
+ ##
21
+ ## Based on `install-sh' from the X Consortium's X11R5 distribution
22
+ ## as of 89/12/18 which is freely available.
23
+ ## Cleaned up for Apache's Autoconf-style Interface (APACI)
24
+ ## by Ralf S. Engelschall <rse@apache.org>
25
+ ##
26
+ #
27
+ # This script falls under the Apache License.
28
+ # See http://www.apache.org/docs/LICENSE
29
+
30
+
31
+ #
32
+ # put in absolute paths if you don't have them in your path;
33
+ # or use env. vars.
34
+ #
35
+ mvprog="${MVPROG-mv}"
36
+ cpprog="${CPPROG-cp}"
37
+ chmodprog="${CHMODPROG-chmod}"
38
+ chownprog="${CHOWNPROG-chown}"
39
+ chgrpprog="${CHGRPPROG-chgrp}"
40
+ stripprog="${STRIPPROG-strip}"
41
+ rmprog="${RMPROG-rm}"
42
+
43
+ #
44
+ # parse argument line
45
+ #
46
+ instcmd="$mvprog"
47
+ chmodcmd=""
48
+ chowncmd=""
49
+ chgrpcmd=""
50
+ stripcmd=""
51
+ rmcmd="$rmprog -f"
52
+ mvcmd="$mvprog"
53
+ ext=""
54
+ src=""
55
+ dst=""
56
+ while [ "x$1" != "x" ]; do
57
+ case $1 in
58
+ -c) instcmd="$cpprog"
59
+ shift; continue
60
+ ;;
61
+ -m) chmodcmd="$chmodprog $2"
62
+ shift; shift; continue
63
+ ;;
64
+ -o) chowncmd="$chownprog $2"
65
+ shift; shift; continue
66
+ ;;
67
+ -g) chgrpcmd="$chgrpprog $2"
68
+ shift; shift; continue
69
+ ;;
70
+ -s) stripcmd="$stripprog"
71
+ shift; continue
72
+ ;;
73
+ -S) stripcmd="$stripprog $2"
74
+ shift; shift; continue
75
+ ;;
76
+ -e) ext="$2"
77
+ shift; shift; continue
78
+ ;;
79
+ *) if [ "x$src" = "x" ]; then
80
+ src=$1
81
+ else
82
+ dst=$1
83
+ fi
84
+ shift; continue
85
+ ;;
86
+ esac
87
+ done
88
+ if [ "x$src" = "x" ]; then
89
+ echo "install.sh: no input file specified"
90
+ exit 1
91
+ fi
92
+ if [ "x$dst" = "x" ]; then
93
+ echo "install.sh: no destination specified"
94
+ exit 1
95
+ fi
96
+
97
+ #
98
+ # If destination is a directory, append the input filename; if
99
+ # your system does not like double slashes in filenames, you may
100
+ # need to add some logic
101
+ #
102
+ if [ -d $dst ]; then
103
+ dst="$dst/`basename $src`"
104
+ fi
105
+
106
+ # Add a possible extension (such as ".exe") to src and dst
107
+ src="$src$ext"
108
+ dst="$dst$ext"
109
+
110
+ # Make a temp file name in the proper directory.
111
+ dstdir=`dirname $dst`
112
+ dsttmp=$dstdir/#inst.$$#
113
+
114
+ # Move or copy the file name to the temp name
115
+ $instcmd $src $dsttmp
116
+
117
+ # And set any options; do chmod last to preserve setuid bits
118
+ if [ "x$chowncmd" != "x" ]; then $chowncmd $dsttmp; fi
119
+ if [ "x$chgrpcmd" != "x" ]; then $chgrpcmd $dsttmp; fi
120
+ if [ "x$stripcmd" != "x" ]; then $stripcmd $dsttmp; fi
121
+ if [ "x$chmodcmd" != "x" ]; then $chmodcmd $dsttmp; fi
122
+
123
+ # Now rename the file to the real destination.
124
+ $rmcmd $dst
125
+ $mvcmd $dsttmp $dst
126
+
127
+ exit 0
128
+
@@ -0,0 +1,104 @@
1
+ #!/bin/sh
2
+ #
3
+ # Licensed to the Apache Software Foundation (ASF) under one or more
4
+ # contributor license agreements. See the NOTICE file distributed with
5
+ # this work for additional information regarding copyright ownership.
6
+ # The ASF licenses this file to You under the Apache License, Version 2.0
7
+ # (the "License"); you may not use this file except in compliance with
8
+ # the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ # Create Commons Daemon native package distribution on UNIX systems.
19
+ # You should execute this script from the src/native/unix directory
20
+ #
21
+ # support/mkdist.sh <arch> [os]
22
+ #
23
+ # This will create something like commons-daemon-1.2.3-bin-os-arch.tar.gz
24
+ # The version numbers are parsed from the native/version.h file.
25
+ # If the os argument is not provided current os name will be used.
26
+ #
27
+ #
28
+ gpgopts="-ba"
29
+ arch=""
30
+ for o
31
+ do
32
+ case "$o" in
33
+ *=*) a=`echo "$o" | sed 's/^[-_a-zA-Z0-9]*=//'`
34
+ ;;
35
+ *) a=''
36
+ ;;
37
+ esac
38
+ case "$o" in
39
+ --passphrase=* )
40
+ gpgopts="$gpgopts --passphrase $a"
41
+ shift
42
+ ;;
43
+ --arch=* )
44
+ arch="$a"
45
+ shift
46
+ ;;
47
+ --os=* )
48
+ osname="$a"
49
+ shift
50
+ ;;
51
+ * )
52
+ break
53
+ ;;
54
+ esac
55
+ done
56
+
57
+
58
+ if [ ".$arch" = . ];then
59
+ arch=`uname -m 2>/dev/null | tr '[A-Z]' '[a-z]'` || arch="unknown"
60
+ echo "No architecture provided. Using $arch"
61
+ fi
62
+ if [ ".$osname" = . ];then
63
+ osname=`uname -s 2>/dev/null | tr '[A-Z]' '[a-z]'` || osname="unknown"
64
+ echo "No OS name provided. Using $osname"
65
+ fi
66
+ topdir=.
67
+ major_sed='/#define.*JSVC_MAJOR_VERSION/s/^[^0-9]*\([0-9]*\).*$/\1/p'
68
+ minor_sed='/#define.*JSVC_MINOR_VERSION/s/^[^0-9]*\([0-9]*\).*$/\1/p'
69
+ patch_sed='/#define.*JSVC_PATCH_VERSION/s/^[^0-9]*\([0-9]*\).*$/\1/p'
70
+ vmajor="`sed -n $major_sed $topdir/native/version.h`"
71
+ vminor="`sed -n $minor_sed $topdir/native/version.h`"
72
+ vpatch="`sed -n $patch_sed $topdir/native/version.h`"
73
+ verdst="commons-daemon-$vmajor.$vminor.$vpatch-bin-$osname-$arch"
74
+ extfiles="LICENSE.txt NOTICE.txt RELEASE-NOTES.txt"
75
+ for i in $extfiles
76
+ do
77
+ cp ../../../$i .
78
+ done
79
+ # Try to locate a MD5 binary
80
+ md5_bin="`which md5sum 2>/dev/null || type md5sum 2>&1`"
81
+ if [ -x "$md5_bin" ]; then
82
+ MD5SUM="$md5_bin --binary "
83
+ else
84
+ MD5SUM="echo 00000000000000000000000000000000 "
85
+ fi
86
+ # Try to locate a SHA1 binary
87
+ sha1_bin="`which sha1sum 2>/dev/null || type sha1sum 2>&1`"
88
+ if [ -x "$sha1_bin" ]; then
89
+ SHA1SUM="$sha1_bin --binary "
90
+ else
91
+ SHA1SUM="echo 0000000000000000000000000000000000000000 "
92
+ fi
93
+ dstfile=$verdst.tar.gz
94
+ echo "Creating $dstfile ..."
95
+ tar cfz $dstfile jsvc $extfiles
96
+ if [ ".$?" = .0 ]; then
97
+ echo "Signing $dstfile"
98
+ gpg $gpgopts $dstfile
99
+ $MD5SUM $dstfile > $dstfile.md5
100
+ $SHA1SUM $dstfile > $dstfile.sha1
101
+ else
102
+ rm $verdst.tar.gz >/dev/null 2>&1
103
+ fi
104
+ rm $extfiles
@@ -0,0 +1,31 @@
1
+ require 'rubygems'
2
+ require 'trinidad'
3
+
4
+ module Trinidad
5
+ module Daemon
6
+ require 'trinidad_init_services/version'
7
+ VERSION = Trinidad::InitServices::VERSION
8
+
9
+ def init
10
+ end
11
+
12
+ def setup?
13
+ true
14
+ end
15
+
16
+ def start(args = ARGV)
17
+ Trinidad::CommandLineParser.parse(args)
18
+ Trinidad.configuration.trap = false
19
+ @server = Trinidad::Server.new
20
+ @server.start
21
+ end
22
+
23
+ def stop
24
+ @server.stop
25
+ end
26
+
27
+ extend self
28
+ end
29
+ end
30
+
31
+ Trinidad::Daemon.init
@@ -1,30 +1,2 @@
1
- require 'rubygems'
2
- require 'trinidad'
3
-
4
- module Trinidad
5
- module Daemon
6
- VERSION = '1.1.3'
7
-
8
- def init
9
- end
10
-
11
- def setup?
12
- true
13
- end
14
-
15
- def start(args = ARGV)
16
- Trinidad::CommandLineParser.parse(args)
17
- Trinidad.configuration.trap = false
18
- @server = Trinidad::Server.new
19
- @server.start
20
- end
21
-
22
- def stop
23
- @server.stop
24
- end
25
-
26
- extend self
27
- end
28
- end
29
-
30
- Trinidad::Daemon.init
1
+ require 'trinidad_init_services/version'
2
+ require 'trinidad_init_services/configuration'
@@ -1,9 +1,11 @@
1
+ require 'erb'
2
+ require 'java'
3
+ require 'jruby'
4
+ require 'rbconfig'
5
+ require 'fileutils'
6
+
1
7
  module Trinidad
2
8
  module InitServices
3
- require 'erb'
4
- require 'java'
5
- require 'rbconfig'
6
- require 'fileutils'
7
9
 
8
10
  class Configuration
9
11
  def initialize(stdin = STDIN, stdout = STDOUT)
@@ -12,7 +14,7 @@ module Trinidad
12
14
  end
13
15
 
14
16
  def initialize_paths
15
- @trinidad_daemon_path = File.expand_path('../../trinidad_init_services.rb', __FILE__)
17
+ @trinidad_daemon_path = File.expand_path('../../trinidad/daemon.rb', __FILE__)
16
18
  @jars_path = File.expand_path('../../../trinidad-libs', __FILE__)
17
19
 
18
20
  @classpath = ['jruby-jsvc.jar', 'commons-daemon.jar'].map { |jar| File.join(@jars_path, jar) }
@@ -54,8 +56,16 @@ module Trinidad
54
56
  end
55
57
 
56
58
  def configure_unix_daemon(defaults)
57
- @jsvc = defaults["jsvc_path"] || jsvc_path
58
59
  @java_home = defaults["java_home"] || ask_path('Java home?', default_java_home)
60
+ unless @jsvc = defaults["jsvc_path"] || detect_jsvc_path
61
+ @jsvc = ask_path("path to jsvc binary (leave blank and we'll try to compile)?", '')
62
+ if @jsvc.empty? # unpack and compile :
63
+ jsvc_unpack_dir = defaults["jsvc_unpack_dir"] || ask_path("dir where jsvc dist should be unpacked?", '/usr/local/src')
64
+ @jsvc = compile_jsvc(jsvc_unpack_dir, @java_home)
65
+ puts "jsvc binary available at: #{@jsvc} " +
66
+ "(consider adding it to $PATH if you plan to re-run trinidad_init_service)"
67
+ end
68
+ end
59
69
  @output_path = defaults["output_path"] || ask_path('init.d output path?', '/etc/init.d')
60
70
  @pid_file = defaults["pid_file"] || ask_path('pid file?', '/var/run/trinidad/trinidad.pid')
61
71
  @log_file = defaults["log_file"] || ask_path('log file?', '/var/log/trinidad/trinidad.log')
@@ -65,7 +75,9 @@ module Trinidad
65
75
  raise ArgumentError, "user '#{@run_user}' does not exist (leave blank if you're planning to `useradd' later)"
66
76
  end
67
77
 
78
+ @pid_file = File.join(@pid_file, 'trinidad.pid') if File.exist?(@pid_file) && File.directory?(@pid_file)
68
79
  make_path_dir(@pid_file, "could not create dir for '#{@pid_file}', make sure dir exists before running daemon")
80
+ @log_file = File.join(@log_file, 'trinidad.log') if File.exist?(@log_file) && File.directory?(@log_file)
69
81
  make_path_dir(@log_file, "could not create dir for '#{@log_file}', make sure dir exists before running daemon")
70
82
 
71
83
  daemon = ERB.new(
@@ -81,7 +93,7 @@ module Trinidad
81
93
  end
82
94
 
83
95
  def configure_windows_service
84
- srv_path = prunsrv_path
96
+ srv_path = bundled_prunsrv_path
85
97
  trinidad_service_id = @trinidad_name.gsub(/\W/, '')
86
98
 
87
99
  command = %Q{//IS//#{trinidad_service_id} --DisplayName="#{@trinidad_name}" \
@@ -111,11 +123,11 @@ module Trinidad
111
123
  end
112
124
 
113
125
  def default_java_home
114
- Java::JavaLang::System.get_property("java.home")
126
+ ENV['JAVA_HOME'] || Java::JavaLang::System.get_property("java.home")
115
127
  end
116
-
128
+
117
129
  def default_ruby_compat_version
118
- "RUBY1_8"
130
+ JRuby.runtime.is1_9 ? "RUBY1_9" : "RUBY1_8"
119
131
  end
120
132
 
121
133
  def windows?
@@ -130,12 +142,75 @@ module Trinidad
130
142
  RbConfig::CONFIG['arch'] =~ /i686|ia64/i
131
143
  end
132
144
 
133
- def jsvc_path
145
+ def bundled_jsvc_path
134
146
  jsvc = 'jsvc_' + (macosx? ? 'darwin' : 'linux')
135
- File.join(@jars_path, jsvc)
147
+ jsvc_path = File.join(@jars_path, jsvc)
148
+ # linux version is no longer bundled - as long as it is not present jsvc
149
+ # will be compiled from src (if not installed already #detect_jsvc_path)
150
+ File.exist?(jsvc_path) ? jsvc_path : nil
136
151
  end
137
152
 
138
- def prunsrv_path
153
+ def detect_jsvc_path
154
+ jsvc_path = `which jsvc` # "/usr/bin/jsvc\n"
155
+ jsvc_path.chomp!
156
+ jsvc_path.empty? ? bundled_jsvc_path : jsvc_path
157
+ end
158
+
159
+ def compile_jsvc(jsvc_unpack_dir, java_home = default_java_home)
160
+ unless File.exist?(jsvc_unpack_dir)
161
+ raise "specified path does not exist: #{jsvc_unpack_dir.inspect}"
162
+ end
163
+ unless File.directory?(jsvc_unpack_dir)
164
+ raise "specified path: #{jsvc_unpack_dir.inspect} is not a directory"
165
+ end
166
+ unless File.writable?(jsvc_unpack_dir)
167
+ raise "specified path: #{jsvc_unpack_dir.inspect} is not writable"
168
+ end
169
+
170
+ jsvc_unix_src = File.expand_path('../../jsvc-unix-src', File.dirname(__FILE__))
171
+ FileUtils.cp_r(jsvc_unix_src, jsvc_unpack_dir)
172
+
173
+ jsvc_dir = File.expand_path('jsvc-unix-src', jsvc_unpack_dir)
174
+ File.chmod(0755, File.join(jsvc_dir, "configure"))
175
+ # ./configure
176
+ unless jdk_home = detect_jdk_home(java_home)
177
+ warn "seems you only have a JRE installed, a JDK is needed to compile jsvc"
178
+ jdk_home = java_home # it's still worth trying
179
+ end
180
+ command = "cd #{jsvc_dir} && ./configure --with-java=#{jdk_home}"
181
+ puts "configuring jsvc ..."
182
+ command_output = `#{command}`
183
+ if $?.exitstatus != 0
184
+ puts command_output
185
+ raise "`#{command}` failed with status: #{$?.exitstatus}"
186
+ end
187
+
188
+ # make
189
+ command = "cd #{jsvc_dir} && make"
190
+ puts "compiling jsvc ..."
191
+ command_output = `#{command}`
192
+ if $?.exitstatus != 0
193
+ puts command_output
194
+ raise "`#{command}` failed with status: #{$?.exitstatus}"
195
+ end
196
+
197
+ File.expand_path('jsvc', jsvc_dir) # return path to compiled jsvc binary
198
+ end
199
+
200
+ def detect_jdk_home(java_home = default_java_home)
201
+ # JDK has an include directory with headers :
202
+ if File.directory?(File.join(java_home, 'include'))
203
+ return java_home
204
+ end
205
+ # java_home might be a nested JDK path e.g. /opt/java/jdk/jre
206
+ jdk_home = File.dirname(java_home) # /opt/jdk/jre -> /opt/jdk
207
+ if File.exist?(File.join(jdk_home, 'bin/java'))
208
+ return jdk_home
209
+ end
210
+ nil
211
+ end
212
+
213
+ def bundled_prunsrv_path
139
214
  prunsrv = 'prunsrv_' + (ia64? ? 'ia64' : 'amd64') + '.exe'
140
215
  File.join(@jars_path, prunsrv)
141
216
  end
@@ -152,7 +227,8 @@ module Trinidad
152
227
  end
153
228
 
154
229
  def ask_path(question, default = nil)
155
- File.expand_path(ask(question, default))
230
+ path = ask(question, default)
231
+ path.empty? ? path : File.expand_path(path)
156
232
  end
157
233
 
158
234
  def ask(question, default = nil)
@@ -181,6 +257,7 @@ module Trinidad
181
257
  end
182
258
  return result
183
259
  end
260
+
184
261
  end
185
262
  end
186
263
  end