trinidad_init_services 1.1.3 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
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,38 @@
1
+ /* Licensed to the Apache Software Foundation (ASF) under one or more
2
+ * contributor license agreements. See the NOTICE file distributed with
3
+ * this work for additional information regarding copyright ownership.
4
+ * The ASF licenses this file to You under the Apache License, Version 2.0
5
+ * (the "License"); you may not use this file except in compliance with
6
+ * the License. You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /* @version $Id: dso.h 921765 2010-03-11 10:03:32Z mturk $ */
18
+ #ifndef __JSVC_DSO_H__
19
+ #define __JSVC_DSO_H__
20
+
21
+ #include "jsvc.h"
22
+
23
+ /**
24
+ * A library handle represents a unique pointer to its location in memory.
25
+ */
26
+ #ifdef DSO_DYLD
27
+ #include <mach-o/dyld.h>
28
+ #endif
29
+ typedef void *dso_handle;
30
+
31
+ bool dso_init(void);
32
+ dso_handle dso_link(const char *pth);
33
+ bool dso_unlink(dso_handle lib);
34
+ void *dso_symbol(dso_handle lib, const char *nam);
35
+ char *dso_error(void);
36
+
37
+ #endif /* __JSVC_DSO_H__ */
38
+
@@ -0,0 +1,106 @@
1
+ /* Licensed to the Apache Software Foundation (ASF) under one or more
2
+ * contributor license agreements. See the NOTICE file distributed with
3
+ * this work for additional information regarding copyright ownership.
4
+ * The ASF licenses this file to You under the Apache License, Version 2.0
5
+ * (the "License"); you may not use this file except in compliance with
6
+ * the License. You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /* @version $Id: help.c 1196265 2011-11-01 20:43:52Z mturk $ */
18
+ #include "jsvc.h"
19
+
20
+ void help(home_data *data)
21
+ {
22
+ int x;
23
+
24
+ printf("Usage: %s [-options] class [args...]\n", log_prog);
25
+ printf("\n");
26
+ printf("Where options include:\n");
27
+ printf("\n");
28
+ printf(" -help | --help | -?\n");
29
+ printf(" show this help page (implies -nodetach)\n");
30
+ printf(" -jvm <JVM name>\n");
31
+ printf(" use a specific Java Virtual Machine. Available JVMs:\n");
32
+ printf(" ");
33
+ for (x = 0; x < data->jnum; x++) {
34
+ printf(" '%s'", PRINT_NULL(data->jvms[x]->name));
35
+ }
36
+ printf("\n");
37
+ printf(" -client\n");
38
+ printf(" use a client Java Virtual Machine.\n");
39
+ printf(" -server\n");
40
+ printf(" use a server Java Virtual Machine.\n");
41
+ printf(" -cp | -classpath <directories and zip/jar files>\n");
42
+ printf(" set search path for service classes and resouces\n");
43
+ printf(" -java-home | -home <directory>\n");
44
+ printf(" set the path of your JDK or JRE installation (or set\n");
45
+ printf(" the JAVA_HOME environment variable)\n");
46
+
47
+ printf(" -version\n");
48
+ printf(" show the current Java environment version (to check\n");
49
+ printf(" correctness of -home and -jvm. Implies -nodetach)\n");
50
+ printf(" -showversion\n");
51
+ printf(" show the current Java environment version (to check\n");
52
+ printf(" correctness of -home and -jvm) and continue execution.\n");
53
+ printf(" -nodetach\n");
54
+ printf(" don't detach from parent process and become a daemon\n");
55
+ printf(" -debug\n");
56
+ printf(" verbosely print debugging information\n");
57
+ printf(" -check\n");
58
+ printf(" only check service (implies -nodetach)\n");
59
+ printf(" -user <user>\n");
60
+ printf(" user used to run the daemon (defaults to current user)\n");
61
+ printf(" -verbose[:class|gc|jni]\n");
62
+ printf(" enable verbose output\n");
63
+ printf(" -outfile </full/path/to/file>\n");
64
+ printf(" Location for output from stdout (defaults to /dev/null)\n");
65
+ printf(" Use the value '&2' to simulate '1>&2'\n");
66
+ printf(" -errfile </full/path/to/file>\n");
67
+ printf(" Location for output from stderr (defaults to /dev/null)\n");
68
+ printf(" Use the value '&1' to simulate '2>&1'\n");
69
+ printf(" -pidfile </full/path/to/file>\n");
70
+ printf(" Location for output from the file containing the pid of jsvc\n");
71
+ printf(" (defaults to /var/run/jsvc.pid)\n");
72
+ printf(" -D<name>=<value>\n");
73
+ printf(" set a Java system property\n");
74
+ printf(" -X<option>\n");
75
+ printf(" set Virtual Machine specific option\n");
76
+ printf(" -ea[:<packagename>...|:<classname>]\n");
77
+ printf(" -enableassertions[:<packagename>...|:<classname>]\n");
78
+ printf(" enable assertions\n");
79
+ printf(" -da[:<packagename>...|:<classname>]\n");
80
+ printf(" -disableassertions[:<packagename>...|:<classname>]\n");
81
+ printf(" disable assertions\n");
82
+ printf(" -esa | -enablesystemassertions\n");
83
+ printf(" enable system assertions\n");
84
+ printf(" -dsa | -disablesystemassertions\n");
85
+ printf(" disable system assertions\n");
86
+ printf(" -agentlib:<libname>[=<options>]\n");
87
+ printf(" load native agent library <libname>, e.g. -agentlib:hprof\n");
88
+ printf(" -agentpath:<pathname>[=<options>]\n");
89
+ printf(" load native agent library by full pathname\n");
90
+ printf(" -javaagent:<jarpath>[=<options>]\n");
91
+ printf(" load Java programming language agent, see java.lang.instrument\n");
92
+ printf(" -procname <procname>\n");
93
+ printf(" use the specified process name\n");
94
+ printf(" -wait <waittime>\n");
95
+ printf(" wait waittime seconds for the service to start\n");
96
+ printf(" waittime should multiple of 10 (min=10)\n");
97
+ printf(" -stop\n");
98
+ printf(" stop the service using the file given in the -pidfile option\n");
99
+ printf(" -keepstdin\n");
100
+ printf(" does not redirect stdin to /dev/null\n");
101
+ printf("\njsvc (Apache Commons Daemon) " JSVC_VERSION_STRING "\n");
102
+ printf("Copyright (c) 1999-2011 Apache Software Foundation.\n");
103
+
104
+ printf("\n");
105
+ }
106
+
@@ -0,0 +1,24 @@
1
+ /* Licensed to the Apache Software Foundation (ASF) under one or more
2
+ * contributor license agreements. See the NOTICE file distributed with
3
+ * this work for additional information regarding copyright ownership.
4
+ * The ASF licenses this file to You under the Apache License, Version 2.0
5
+ * (the "License"); you may not use this file except in compliance with
6
+ * the License. You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /* @version $Id: help.h 921765 2010-03-11 10:03:32Z mturk $ */
18
+ #ifndef __JSVC_HELP_H__
19
+ #define __JSVC_HELP_H__
20
+
21
+ void help(home_data *data);
22
+
23
+ #endif /* __JSVC_HELP_H__ */
24
+
@@ -0,0 +1,265 @@
1
+ /*
2
+ Licensed to the Apache Software Foundation (ASF) under one or more
3
+ contributor license agreements. See the NOTICE file distributed with
4
+ this work for additional information regarding copyright ownership.
5
+ The ASF licenses this file to You under the Apache License, Version 2.0
6
+ (the "License"); you may not use this file except in compliance with
7
+ the License. You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
+ */
17
+ /* @version $Id: home.c 1000002 2010-09-22 14:48:37Z mturk $ */
18
+ #include "jsvc.h"
19
+
20
+ /* Check if a path is a directory */
21
+ static bool checkdir(char *path)
22
+ {
23
+ struct stat home;
24
+
25
+ if (path == NULL)
26
+ return (false);
27
+ if (stat(path, &home) != 0)
28
+ return (false);
29
+ if (S_ISDIR(home.st_mode))
30
+ return (true);
31
+ return (false);
32
+ }
33
+
34
+ /* Check if a path is a file */
35
+ static bool checkfile(char *path)
36
+ {
37
+ struct stat home;
38
+
39
+ if (path == NULL)
40
+ return (false);
41
+ if (stat(path, &home) != 0)
42
+ return (false);
43
+ if (S_ISREG(home.st_mode))
44
+ return (true);
45
+ return (false);
46
+ }
47
+
48
+ /* Parse a VM configuration file */
49
+ static bool parse(home_data *data)
50
+ {
51
+ FILE *cfgf = fopen(data->cfgf, "r");
52
+ char *ret = NULL, *sp;
53
+ char buf[1024];
54
+
55
+ if (cfgf == NULL) {
56
+ log_debug("Can't open %s\n", data->cfgf);
57
+ return (false);
58
+ }
59
+
60
+ data->jvms = (home_jvm **)malloc(256 * sizeof(home_jvm *));
61
+
62
+ while ((ret = fgets(buf, 1024, cfgf)) != NULL) {
63
+ char *tmp = strchr(ret, '#');
64
+ int pos;
65
+
66
+ /* Clear the string at the first occurrence of '#' */
67
+ if (tmp != NULL)
68
+ tmp[0] = '\0';
69
+
70
+ /* Trim the string (including leading '-' chars */
71
+ while ((ret[0] == ' ') || (ret[0] == '\t') || (ret[0] == '-'))
72
+ ret++;
73
+ pos = strlen(ret);
74
+ while (pos >= 0) {
75
+ if ((ret[pos] == '\r') || (ret[pos] == '\n') || (ret[pos] == '\t')
76
+ || (ret[pos] == '\0') || (ret[pos] == ' ')) {
77
+ ret[pos--] = '\0';
78
+ }
79
+ else
80
+ break;
81
+ }
82
+ /* Format changed for 1.4 JVMs */
83
+ sp = strchr(ret, ' ');
84
+ if (sp != NULL)
85
+ *sp = '\0';
86
+
87
+ /* Did we find something significant? */
88
+ if (strlen(ret) > 0) {
89
+ char *libf = NULL;
90
+ int x = 0;
91
+
92
+ log_debug("Found VM %s definition in configuration", ret);
93
+ while (location_jvm_configured[x] != NULL) {
94
+ char *orig = location_jvm_configured[x];
95
+ char temp[1024];
96
+ char repl[1024];
97
+ int k;
98
+
99
+ k = replace(temp, 1024, orig, "$JAVA_HOME", data->path);
100
+ if (k != 0) {
101
+ log_error("Can't replace home in VM library (%d)", k);
102
+ return (false);
103
+ }
104
+ k = replace(repl, 1024, temp, "$VM_NAME", ret);
105
+ if (k != 0) {
106
+ log_error("Can't replace name in VM library (%d)", k);
107
+ return (false);
108
+ }
109
+
110
+ log_debug("Checking library %s", repl);
111
+ if (checkfile(repl)) {
112
+ libf = strdup(repl);
113
+ break;
114
+ }
115
+ x++;
116
+ }
117
+
118
+ if (libf == NULL) {
119
+ log_debug("Cannot locate library for VM %s (skipping)", ret);
120
+ }
121
+ else {
122
+ data->jvms[data->jnum] = (home_jvm *)malloc(sizeof(home_jvm));
123
+ data->jvms[data->jnum]->name = strdup(ret);
124
+ data->jvms[data->jnum]->libr = libf;
125
+ data->jnum++;
126
+ data->jvms[data->jnum] = NULL;
127
+ }
128
+ }
129
+ }
130
+ return (true);
131
+ }
132
+
133
+ /* Build a Java Home structure for a path */
134
+ static home_data *build(char *path)
135
+ {
136
+ home_data *data = NULL;
137
+ char *cfgf = NULL;
138
+ char buf[1024];
139
+ int x = 0;
140
+ int k = 0;
141
+
142
+ if (path == NULL)
143
+ return (NULL);
144
+
145
+ log_debug("Attempting to locate Java Home in %s", path);
146
+ if (checkdir(path) == false) {
147
+ log_debug("Path %s is not a directory", path);
148
+ return (NULL);
149
+ }
150
+
151
+ while (location_jvm_cfg[x] != NULL) {
152
+ if ((k =
153
+ replace(buf, 1024, location_jvm_cfg[x], "$JAVA_HOME",
154
+ path)) != 0) {
155
+ log_error("Error replacing values for jvm.cfg (%d)", k);
156
+ return (NULL);
157
+ }
158
+ log_debug("Attempting to locate VM configuration file %s", buf);
159
+ if (checkfile(buf) == true) {
160
+ log_debug("Found VM configuration file at %s", buf);
161
+ cfgf = strdup(buf);
162
+ break;
163
+ }
164
+ x++;
165
+ }
166
+
167
+ data = (home_data *)malloc(sizeof(home_data));
168
+ data->path = strdup(path);
169
+ data->cfgf = cfgf;
170
+ data->jvms = NULL;
171
+ data->jnum = 0;
172
+
173
+ /* We don't have a jvm.cfg configuration file, so all we have to do is
174
+ trying to locate the "default" Java Virtual Machine library */
175
+ if (cfgf == NULL) {
176
+ log_debug("VM configuration file not found");
177
+ x = 0;
178
+ while (location_jvm_default[x] != NULL) {
179
+ char *libr = location_jvm_default[x];
180
+
181
+ if ((k = replace(buf, 1024, libr, "$JAVA_HOME", path)) != 0) {
182
+ log_error("Error replacing values for JVM library (%d)", k);
183
+ return (NULL);
184
+ }
185
+ log_debug("Attempting to locate VM library %s", buf);
186
+ if (checkfile(buf) == true) {
187
+ data->jvms = (home_jvm **)malloc(2 * sizeof(home_jvm *));
188
+ data->jvms[0] = (home_jvm *)malloc(sizeof(home_jvm));
189
+ data->jvms[0]->name = NULL;
190
+ data->jvms[0]->libr = strdup(buf);
191
+ data->jvms[1] = NULL;
192
+ data->jnum = 1;
193
+ return (data);
194
+ }
195
+ x++;
196
+ }
197
+
198
+ return (data);
199
+ }
200
+
201
+ /* If we got here, we most definitely found a jvm.cfg file */
202
+ if (parse(data) == false) {
203
+ log_error("Cannot parse VM configuration file %s", data->cfgf);
204
+ }
205
+
206
+ return (data);
207
+ }
208
+
209
+ /* Find the Java Home */
210
+ static home_data *find(char *path)
211
+ {
212
+ home_data *data = NULL;
213
+ int x = 0;
214
+
215
+ if (path == NULL) {
216
+ log_debug("Home not specified on command line, using environment");
217
+ path = getenv("JAVA_HOME");
218
+ }
219
+
220
+ if (path == NULL) {
221
+ log_debug("Home not on command line or in environment, searching");
222
+ while (location_home[x] != NULL) {
223
+ if ((data = build(location_home[x])) != NULL) {
224
+ log_debug("Java Home located in %s", data->path);
225
+ return (data);
226
+ }
227
+ x++;
228
+ }
229
+ }
230
+ else {
231
+ if ((data = build(path)) != NULL) {
232
+ log_debug("Java Home located in %s", data->path);
233
+ return (data);
234
+ }
235
+ }
236
+
237
+ return (NULL);
238
+ }
239
+
240
+ /* Main entry point: locate home and dump structure */
241
+ home_data *home(char *path)
242
+ {
243
+ home_data *data = find(path);
244
+ int x = 0;
245
+
246
+ if (data == NULL) {
247
+ log_error("Cannot locate Java Home");
248
+ return (NULL);
249
+ }
250
+
251
+ if (log_debug_flag == true) {
252
+ log_debug("+-- DUMPING JAVA HOME STRUCTURE ------------------------");
253
+ log_debug("| Java Home: \"%s\"", PRINT_NULL(data->path));
254
+ log_debug("| Java VM Config.: \"%s\"", PRINT_NULL(data->cfgf));
255
+ log_debug("| Found JVMs: %d", data->jnum);
256
+ for (x = 0; x < data->jnum; x++) {
257
+ home_jvm *jvm = data->jvms[x];
258
+ log_debug("| JVM Name: \"%s\"", PRINT_NULL(jvm->name));
259
+ log_debug("| \"%s\"", PRINT_NULL(jvm->libr));
260
+ }
261
+ log_debug("+-------------------------------------------------------");
262
+ }
263
+
264
+ return (data);
265
+ }
@@ -0,0 +1,47 @@
1
+ /*
2
+ Licensed to the Apache Software Foundation (ASF) under one or more
3
+ contributor license agreements. See the NOTICE file distributed with
4
+ this work for additional information regarding copyright ownership.
5
+ The ASF licenses this file to You under the Apache License, Version 2.0
6
+ (the "License"); you may not use this file except in compliance with
7
+ the License. You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
+ */
17
+ /* @version $Id: home.h 921765 2010-03-11 10:03:32Z mturk $ */
18
+ #ifndef __JSVC_HOME_H__
19
+ #define __JSVC_HOME_H__
20
+
21
+ typedef struct home_jvm home_jvm;
22
+ typedef struct home_data home_data;
23
+
24
+ struct home_jvm
25
+ {
26
+ char *name;
27
+ char *libr;
28
+ };
29
+
30
+ struct home_data
31
+ {
32
+ char *path;
33
+ char *cfgf;
34
+ home_jvm **jvms;
35
+ int jnum;
36
+ };
37
+
38
+ /**
39
+ * Attempt to locate a Java Home directory and build its structure.
40
+ *
41
+ * @param path The java home path specified on the command line.
42
+ * @return A home_data structure containing all informations related to
43
+ * the Java environment, or NULL if no home was found.
44
+ */
45
+ home_data *home(char *path);
46
+
47
+ #endif /* ifndef __JSVC_HOME_H__ */