trinidad_init_services 1.2.3 → 1.3.0
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 +7 -0
- data/.travis.yml +12 -0
- data/CHANGELOG.md +123 -0
- data/Gemfile +7 -1
- data/LICENSE +1 -1
- data/README.md +45 -34
- data/Rakefile +1 -6
- data/bin/trinidad_init_service +15 -11
- data/init.d/trinidad.erb +120 -51
- data/jsvc-unix-src/configure +733 -58
- data/jsvc-unix-src/native/arguments.c +3 -2
- data/jsvc-unix-src/native/jsvc-unix.c +11 -1
- data/jsvc-unix-src/native/location.c +3 -1
- data/jsvc-unix-src/native/version.h +2 -2
- data/jsvc-unix-src/support/apsupport.m4 +94 -32
- data/jsvc-unix-src/support/config.guess +770 -610
- data/jsvc-unix-src/support/config.sub +84 -59
- data/lib/trinidad/daemon.rb +11 -4
- data/lib/trinidad_init_services/configuration.rb +461 -138
- data/lib/trinidad_init_services/version.rb +1 -1
- data/spec/trinidad_init_services/configuration_spec.rb +221 -96
- data/spec/trinidad_init_services/init_service_config.yml +11 -0
- data/trinidad-libs/commons-daemon.jar +0 -0
- data/trinidad-libs/windows/amd64/prunsrv.exe +0 -0
- data/trinidad-libs/windows/ia64/prunsrv.exe +0 -0
- data/trinidad-libs/windows/prunsrv.exe +0 -0
- data/trinidad_init_services.gemspec +7 -7
- metadata +151 -147
- data/History.txt +0 -74
@@ -1,38 +1,31 @@
|
|
1
1
|
#! /bin/sh
|
2
2
|
# Configuration validation subroutine script.
|
3
|
-
# Copyright
|
4
|
-
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
5
|
-
# 2011 Free Software Foundation, Inc.
|
3
|
+
# Copyright 1992-2013 Free Software Foundation, Inc.
|
6
4
|
|
7
|
-
timestamp='
|
5
|
+
timestamp='2013-02-04'
|
8
6
|
|
9
|
-
# This file is
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
# This file is free software; you can redistribute it and/or modify
|
14
|
-
# it under the terms of the GNU General Public License as published by
|
15
|
-
# the Free Software Foundation; either version 2 of the License, or
|
7
|
+
# This file is free software; you can redistribute it and/or modify it
|
8
|
+
# under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation; either version 3 of the License, or
|
16
10
|
# (at your option) any later version.
|
17
11
|
#
|
18
|
-
# This program is distributed in the hope that it will be useful,
|
19
|
-
#
|
20
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21
|
-
#
|
12
|
+
# This program is distributed in the hope that it will be useful, but
|
13
|
+
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
15
|
+
# General Public License for more details.
|
22
16
|
#
|
23
17
|
# You should have received a copy of the GNU General Public License
|
24
|
-
# along with this program; if not,
|
25
|
-
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
|
26
|
-
# 02110-1301, USA.
|
18
|
+
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
27
19
|
#
|
28
20
|
# As a special exception to the GNU General Public License, if you
|
29
21
|
# distribute this file as part of a program that contains a
|
30
22
|
# configuration script generated by Autoconf, you may include it under
|
31
|
-
# the same distribution terms that you use for the rest of that
|
23
|
+
# the same distribution terms that you use for the rest of that
|
24
|
+
# program. This Exception is an additional permission under section 7
|
25
|
+
# of the GNU General Public License, version 3 ("GPLv3").
|
32
26
|
|
33
27
|
|
34
|
-
# Please send patches to
|
35
|
-
# diff and a properly formatted GNU ChangeLog entry.
|
28
|
+
# Please send patches with a ChangeLog entry to config-patches@gnu.org.
|
36
29
|
#
|
37
30
|
# Configuration subroutine to validate and canonicalize a configuration type.
|
38
31
|
# Supply the specified configuration type as an argument.
|
@@ -75,9 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
|
|
75
68
|
version="\
|
76
69
|
GNU config.sub ($timestamp)
|
77
70
|
|
78
|
-
Copyright
|
79
|
-
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free
|
80
|
-
Software Foundation, Inc.
|
71
|
+
Copyright 1992-2013 Free Software Foundation, Inc.
|
81
72
|
|
82
73
|
This is free software; see the source for copying conditions. There is NO
|
83
74
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
@@ -125,13 +116,17 @@ esac
|
|
125
116
|
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
126
117
|
case $maybe_os in
|
127
118
|
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
|
128
|
-
linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
|
119
|
+
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
|
129
120
|
knetbsd*-gnu* | netbsd*-gnu* | \
|
130
121
|
kopensolaris*-gnu* | \
|
131
122
|
storm-chaos* | os2-emx* | rtmk-nova*)
|
132
123
|
os=-$maybe_os
|
133
124
|
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
134
125
|
;;
|
126
|
+
android-linux)
|
127
|
+
os=-linux-android
|
128
|
+
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
|
129
|
+
;;
|
135
130
|
*)
|
136
131
|
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
|
137
132
|
if [ $basic_machine != $1 ]
|
@@ -154,7 +149,7 @@ case $os in
|
|
154
149
|
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
155
150
|
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
156
151
|
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
157
|
-
-apple | -axis | -knuth | -cray | -microblaze)
|
152
|
+
-apple | -axis | -knuth | -cray | -microblaze*)
|
158
153
|
os=
|
159
154
|
basic_machine=$1
|
160
155
|
;;
|
@@ -223,6 +218,12 @@ case $os in
|
|
223
218
|
-isc*)
|
224
219
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
225
220
|
;;
|
221
|
+
-lynx*178)
|
222
|
+
os=-lynxos178
|
223
|
+
;;
|
224
|
+
-lynx*5)
|
225
|
+
os=-lynxos5
|
226
|
+
;;
|
226
227
|
-lynx*)
|
227
228
|
os=-lynxos
|
228
229
|
;;
|
@@ -247,20 +248,27 @@ case $basic_machine in
|
|
247
248
|
# Some are omitted here because they have special meanings below.
|
248
249
|
1750a | 580 \
|
249
250
|
| a29k \
|
251
|
+
| aarch64 | aarch64_be \
|
250
252
|
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
251
253
|
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
252
254
|
| am33_2.0 \
|
253
|
-
| arc
|
255
|
+
| arc \
|
256
|
+
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
|
257
|
+
| avr | avr32 \
|
258
|
+
| be32 | be64 \
|
254
259
|
| bfin \
|
255
260
|
| c4x | clipper \
|
256
261
|
| d10v | d30v | dlx | dsp16xx \
|
262
|
+
| epiphany \
|
257
263
|
| fido | fr30 | frv \
|
258
264
|
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
265
|
+
| hexagon \
|
259
266
|
| i370 | i860 | i960 | ia64 | ia64[nw] \
|
260
267
|
| ip2k | iq2000 \
|
268
|
+
| le32 | le64 \
|
261
269
|
| lm32 \
|
262
270
|
| m32c | m32r | m32rle | m68000 | m68k | m88k \
|
263
|
-
| maxq | mb | microblaze | mcore | mep | metag \
|
271
|
+
| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
|
264
272
|
| mips | mipsbe | mipseb | mipsel | mipsle \
|
265
273
|
| mips16 \
|
266
274
|
| mips64 | mips64el \
|
@@ -278,20 +286,21 @@ case $basic_machine in
|
|
278
286
|
| mipsisa64r2 | mipsisa64r2el \
|
279
287
|
| mipsisa64sb1 | mipsisa64sb1el \
|
280
288
|
| mipsisa64sr71k | mipsisa64sr71kel \
|
289
|
+
| mipsr5900 | mipsr5900el \
|
281
290
|
| mipstx39 | mipstx39el \
|
282
291
|
| mn10200 | mn10300 \
|
283
292
|
| moxie \
|
284
293
|
| mt \
|
285
294
|
| msp430 \
|
286
295
|
| nds32 | nds32le | nds32be \
|
287
|
-
| nios | nios2 \
|
296
|
+
| nios | nios2 | nios2eb | nios2el \
|
288
297
|
| ns16k | ns32k \
|
289
298
|
| open8 \
|
290
299
|
| or32 \
|
291
300
|
| pdp10 | pdp11 | pj | pjl \
|
292
301
|
| powerpc | powerpc64 | powerpc64le | powerpcle \
|
293
302
|
| pyramid \
|
294
|
-
| rx \
|
303
|
+
| rl78 | rx \
|
295
304
|
| score \
|
296
305
|
| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
|
297
306
|
| sh64 | sh64le \
|
@@ -300,7 +309,7 @@ case $basic_machine in
|
|
300
309
|
| spu \
|
301
310
|
| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
|
302
311
|
| ubicom32 \
|
303
|
-
| v850 | v850e \
|
312
|
+
| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
|
304
313
|
| we32k \
|
305
314
|
| x86 | xc16x | xstormy16 | xtensa \
|
306
315
|
| z8k | z80)
|
@@ -315,8 +324,7 @@ case $basic_machine in
|
|
315
324
|
c6x)
|
316
325
|
basic_machine=tic6x-unknown
|
317
326
|
;;
|
318
|
-
m6811 | m68hc11 | m6812 | m68hc12 | picochip)
|
319
|
-
# Motorola 68HC11/12.
|
327
|
+
m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
|
320
328
|
basic_machine=$basic_machine-unknown
|
321
329
|
os=-none
|
322
330
|
;;
|
@@ -329,7 +337,10 @@ case $basic_machine in
|
|
329
337
|
strongarm | thumb | xscale)
|
330
338
|
basic_machine=arm-unknown
|
331
339
|
;;
|
332
|
-
|
340
|
+
xgate)
|
341
|
+
basic_machine=$basic_machine-unknown
|
342
|
+
os=-none
|
343
|
+
;;
|
333
344
|
xscaleeb)
|
334
345
|
basic_machine=armeb-unknown
|
335
346
|
;;
|
@@ -352,11 +363,13 @@ case $basic_machine in
|
|
352
363
|
# Recognize the basic CPU types with company name.
|
353
364
|
580-* \
|
354
365
|
| a29k-* \
|
366
|
+
| aarch64-* | aarch64_be-* \
|
355
367
|
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
356
368
|
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
|
357
369
|
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
|
358
370
|
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
359
371
|
| avr-* | avr32-* \
|
372
|
+
| be32-* | be64-* \
|
360
373
|
| bfin-* | bs2000-* \
|
361
374
|
| c[123]* | c30-* | [cjt]90-* | c4x-* \
|
362
375
|
| clipper-* | craynv-* | cydra-* \
|
@@ -365,12 +378,15 @@ case $basic_machine in
|
|
365
378
|
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
|
366
379
|
| h8300-* | h8500-* \
|
367
380
|
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
381
|
+
| hexagon-* \
|
368
382
|
| i*86-* | i860-* | i960-* | ia64-* | ia64[nw]-* \
|
369
383
|
| ip2k-* | iq2000-* \
|
384
|
+
| le32-* | le64-* \
|
370
385
|
| lm32-* \
|
371
386
|
| m32c-* | m32r-* | m32rle-* \
|
372
387
|
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
373
|
-
| m88110-* | m88k-* | maxq-* | mcore-* | metag-*
|
388
|
+
| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
|
389
|
+
| microblaze-* | microblazeel-* \
|
374
390
|
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
375
391
|
| mips16-* \
|
376
392
|
| mips64-* | mips64el-* \
|
@@ -388,19 +404,20 @@ case $basic_machine in
|
|
388
404
|
| mipsisa64r2-* | mipsisa64r2el-* \
|
389
405
|
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
390
406
|
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
407
|
+
| mipsr5900-* | mipsr5900el-* \
|
391
408
|
| mipstx39-* | mipstx39el-* \
|
392
409
|
| mmix-* \
|
393
410
|
| mt-* \
|
394
411
|
| msp430-* \
|
395
412
|
| nds32-* | nds32le-* | nds32be-* \
|
396
|
-
| nios-* | nios2-* \
|
413
|
+
| nios-* | nios2-* | nios2eb-* | nios2el-* \
|
397
414
|
| none-* | np1-* | ns16k-* | ns32k-* \
|
398
415
|
| open8-* \
|
399
416
|
| orion-* \
|
400
417
|
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
401
418
|
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
|
402
419
|
| pyramid-* \
|
403
|
-
| romp-* | rs6000-* | rx-* \
|
420
|
+
| rl78-* | romp-* | rs6000-* | rx-* \
|
404
421
|
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
|
405
422
|
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
406
423
|
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
|
@@ -408,10 +425,11 @@ case $basic_machine in
|
|
408
425
|
| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
|
409
426
|
| tahoe-* \
|
410
427
|
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
|
411
|
-
| tile
|
428
|
+
| tile*-* \
|
412
429
|
| tron-* \
|
413
430
|
| ubicom32-* \
|
414
|
-
| v850-* | v850e-* |
|
431
|
+
| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
|
432
|
+
| vax-* \
|
415
433
|
| we32k-* \
|
416
434
|
| x86-* | x86_64-* | xc16x-* | xps100-* \
|
417
435
|
| xstormy16-* | xtensa*-* \
|
@@ -711,7 +729,6 @@ case $basic_machine in
|
|
711
729
|
i370-ibm* | ibm*)
|
712
730
|
basic_machine=i370-ibm
|
713
731
|
;;
|
714
|
-
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
715
732
|
i*86v32)
|
716
733
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
717
734
|
os=-sysv32
|
@@ -769,9 +786,13 @@ case $basic_machine in
|
|
769
786
|
basic_machine=ns32k-utek
|
770
787
|
os=-sysv
|
771
788
|
;;
|
772
|
-
microblaze)
|
789
|
+
microblaze*)
|
773
790
|
basic_machine=microblaze-xilinx
|
774
791
|
;;
|
792
|
+
mingw64)
|
793
|
+
basic_machine=x86_64-pc
|
794
|
+
os=-mingw64
|
795
|
+
;;
|
775
796
|
mingw32)
|
776
797
|
basic_machine=i386-pc
|
777
798
|
os=-mingw32
|
@@ -808,10 +829,18 @@ case $basic_machine in
|
|
808
829
|
ms1-*)
|
809
830
|
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
|
810
831
|
;;
|
832
|
+
msys)
|
833
|
+
basic_machine=i386-pc
|
834
|
+
os=-msys
|
835
|
+
;;
|
811
836
|
mvs)
|
812
837
|
basic_machine=i370-ibm
|
813
838
|
os=-mvs
|
814
839
|
;;
|
840
|
+
nacl)
|
841
|
+
basic_machine=le32-unknown
|
842
|
+
os=-nacl
|
843
|
+
;;
|
815
844
|
ncr3000)
|
816
845
|
basic_machine=i486-ncr
|
817
846
|
os=-sysv4
|
@@ -992,7 +1021,11 @@ case $basic_machine in
|
|
992
1021
|
basic_machine=i586-unknown
|
993
1022
|
os=-pw32
|
994
1023
|
;;
|
995
|
-
rdos)
|
1024
|
+
rdos | rdos64)
|
1025
|
+
basic_machine=x86_64-pc
|
1026
|
+
os=-rdos
|
1027
|
+
;;
|
1028
|
+
rdos32)
|
996
1029
|
basic_machine=i386-pc
|
997
1030
|
os=-rdos
|
998
1031
|
;;
|
@@ -1120,13 +1153,8 @@ case $basic_machine in
|
|
1120
1153
|
basic_machine=t90-cray
|
1121
1154
|
os=-unicos
|
1122
1155
|
;;
|
1123
|
-
# This must be matched before tile*.
|
1124
|
-
tilegx*)
|
1125
|
-
basic_machine=tilegx-unknown
|
1126
|
-
os=-linux-gnu
|
1127
|
-
;;
|
1128
1156
|
tile*)
|
1129
|
-
basic_machine
|
1157
|
+
basic_machine=$basic_machine-unknown
|
1130
1158
|
os=-linux-gnu
|
1131
1159
|
;;
|
1132
1160
|
tx39)
|
@@ -1324,21 +1352,21 @@ case $os in
|
|
1324
1352
|
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
1325
1353
|
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
|
1326
1354
|
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
|
1327
|
-
| -sym* | -kopensolaris* \
|
1355
|
+
| -sym* | -kopensolaris* | -plan9* \
|
1328
1356
|
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
1329
1357
|
| -aos* | -aros* \
|
1330
1358
|
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
1331
1359
|
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
1332
1360
|
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
1333
|
-
| -openbsd* | -solidbsd* \
|
1361
|
+
| -bitrig* | -openbsd* | -solidbsd* \
|
1334
1362
|
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
|
1335
1363
|
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
1336
1364
|
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
1337
1365
|
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
1338
1366
|
| -chorusos* | -chorusrdb* | -cegcc* \
|
1339
|
-
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
1340
|
-
| -mingw32* | -linux-gnu* | -linux-android* \
|
1341
|
-
| -linux-newlib* | -linux-uclibc* \
|
1367
|
+
| -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
1368
|
+
| -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
|
1369
|
+
| -linux-newlib* | -linux-musl* | -linux-uclibc* \
|
1342
1370
|
| -uxpv* | -beos* | -mpeix* | -udk* \
|
1343
1371
|
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
1344
1372
|
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
@@ -1470,9 +1498,6 @@ case $os in
|
|
1470
1498
|
-aros*)
|
1471
1499
|
os=-aros
|
1472
1500
|
;;
|
1473
|
-
-kaos*)
|
1474
|
-
os=-kaos
|
1475
|
-
;;
|
1476
1501
|
-zvmoe)
|
1477
1502
|
os=-zvmoe
|
1478
1503
|
;;
|
@@ -1521,6 +1546,9 @@ case $basic_machine in
|
|
1521
1546
|
c4x-* | tic4x-*)
|
1522
1547
|
os=-coff
|
1523
1548
|
;;
|
1549
|
+
hexagon-*)
|
1550
|
+
os=-elf
|
1551
|
+
;;
|
1524
1552
|
tic54x-*)
|
1525
1553
|
os=-coff
|
1526
1554
|
;;
|
@@ -1548,9 +1576,6 @@ case $basic_machine in
|
|
1548
1576
|
;;
|
1549
1577
|
m68000-sun)
|
1550
1578
|
os=-sunos3
|
1551
|
-
# This also exists in the configure program, but was not the
|
1552
|
-
# default.
|
1553
|
-
# os=-sunos4
|
1554
1579
|
;;
|
1555
1580
|
m68*-cisco)
|
1556
1581
|
os=-aout
|
data/lib/trinidad/daemon.rb
CHANGED
@@ -7,7 +7,7 @@ end
|
|
7
7
|
|
8
8
|
module Trinidad
|
9
9
|
module Daemon
|
10
|
-
|
10
|
+
|
11
11
|
def init
|
12
12
|
end
|
13
13
|
|
@@ -21,9 +21,16 @@ module Trinidad
|
|
21
21
|
# called from com.msp.jsvc.JRubyDaemon.start
|
22
22
|
# as Trinidad::Daemon#start
|
23
23
|
def start(args = ARGV)
|
24
|
-
Trinidad
|
25
|
-
|
26
|
-
|
24
|
+
if Trinidad.const_defined?(:CLI)
|
25
|
+
config = Trinidad::CLI.parse(args)
|
26
|
+
config[:trap] = false
|
27
|
+
@server = Trinidad::Server.new(config)
|
28
|
+
else # backwards (< 1.5) compatibility :
|
29
|
+
Trinidad::CommandLineParser.parse(args)
|
30
|
+
Trinidad.configuration.trap = false
|
31
|
+
@server = Trinidad::Server.new
|
32
|
+
end
|
33
|
+
|
27
34
|
@server.start
|
28
35
|
end
|
29
36
|
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'erb'
|
2
1
|
require 'java'
|
3
2
|
require 'jruby'
|
4
3
|
require 'fileutils'
|
@@ -8,7 +7,7 @@ require 'shellwords'
|
|
8
7
|
module Trinidad
|
9
8
|
module InitServices
|
10
9
|
class Configuration
|
11
|
-
|
10
|
+
|
12
11
|
def self.windows?
|
13
12
|
RbConfig::CONFIG['host_os'] =~ /mswin|mingw/i
|
14
13
|
end
|
@@ -16,166 +15,483 @@ module Trinidad
|
|
16
15
|
def self.macosx?
|
17
16
|
RbConfig::CONFIG['host_os'] =~ /darwin/i
|
18
17
|
end
|
19
|
-
|
18
|
+
|
20
19
|
def initialize(stdin = STDIN, stdout = STDOUT)
|
21
20
|
@stdin, @stdout = stdin, stdout
|
22
21
|
end
|
23
22
|
|
24
|
-
|
25
|
-
@trinidad_daemon_path = File.expand_path('../../trinidad/daemon.rb', __FILE__)
|
26
|
-
@jars_path = File.expand_path('../../../trinidad-libs', __FILE__)
|
27
|
-
|
28
|
-
@classpath = ['jruby-jsvc.jar', 'commons-daemon.jar'].map { |jar| File.join(@jars_path, jar) }
|
29
|
-
@classpath << File.join(jruby_home, 'lib', 'jruby.jar')
|
30
|
-
end
|
23
|
+
SERVICE_DESC = 'JRuby on Rails/Rack server'
|
31
24
|
|
32
25
|
def configure(defaults = {})
|
33
|
-
@app_path = defaults["app_path"]
|
34
|
-
|
26
|
+
if ( @app_path = defaults["app_path"] ).nil?
|
27
|
+
unless @base_path = defaults["base_path"]
|
28
|
+
@app_path = ask_path('Application (base - in case of multiple apps) path', false) do
|
29
|
+
raise "application/base path not provided (try . if current directory is the app)"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
35
34
|
options_ask = 'Trinidad options?'
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
@
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
35
|
+
|
36
|
+
@service_id = defaults['service_id'] || defaults['trinidad_service_id']
|
37
|
+
@service_name = defaults['service_name'] || defaults['trinidad_name']
|
38
|
+
@service_desc = defaults['service_desc'] || defaults['trinidad_service_desc']
|
39
|
+
|
40
|
+
if windows?
|
41
|
+
options_ask << ' (separated by `;`)'
|
42
|
+
|
43
|
+
@service_id ||= ask('Service ID? {alphanumeric and underscores only}', default_service_id)
|
44
|
+
name_default = @service_id.gsub('_', ' ')
|
45
|
+
@service_name ||= ask('Service (display) name? {alphanumeric and spaces only}', name_default)
|
46
|
+
@service_desc ||= ask('Service description? {alphanumeric and spaces only}', SERVICE_DESC)
|
47
|
+
else
|
48
|
+
@service_id ||= default_service_id
|
49
|
+
@service_name ||= @service_id
|
50
|
+
@service_desc ||= SERVICE_DESC
|
51
|
+
end
|
52
|
+
|
53
|
+
@trinidad_opts = defaults["trinidad_options"] || defaults["trinidad_opts"]
|
54
|
+
|
55
|
+
if @trinidad_opts.is_a?(String) # leave 'em as are
|
56
|
+
if @app_path && ! @trinidad_opts.index('-d') && ! @trinidad_opts.index('--dir')
|
57
|
+
@trinidad_opts = "--dir #{@app_path} #{@trinidad_opts}"
|
58
|
+
end
|
59
|
+
elsif @trinidad_opts
|
60
|
+
if @app_path && ! @trinidad_opts.find { |opt| opt.index('-d') || opt.index('--dir') }
|
61
|
+
@trinidad_opts.unshift("--dir #{@app_path}")
|
62
|
+
end
|
63
|
+
else
|
64
|
+
@trinidad_opts = [ ask(options_ask, '-e production') ]
|
65
|
+
end
|
66
|
+
|
67
|
+
if @trinidad_opts.is_a?(Array)
|
68
|
+
@trinidad_opts.map! { |opt| Shellwords.shellsplit(opt) }
|
69
|
+
@trinidad_opts.flatten! # split: 'opt' -> [ 'opt' ]
|
70
|
+
end
|
71
|
+
|
72
|
+
@jruby_home = defaults['jruby_home'] || ask_path('JRuby home', default_jruby_home)
|
73
|
+
@ruby_compat_version = defaults["ruby_compat_version"] || default_ruby_compat_version
|
74
|
+
@jruby_opts = configure_jruby_opts(@jruby_home, @ruby_compat_version)
|
44
75
|
initialize_paths(@jruby_home)
|
45
76
|
|
46
|
-
|
77
|
+
@java_home = defaults['java_home'] || ask_path('Java home', default_java_home)
|
78
|
+
|
79
|
+
@java_opts = defaults['java_opts'] || []
|
80
|
+
@java_opts = @java_opts.strip if @java_opts.is_a?(String)
|
81
|
+
|
82
|
+
# can be disabled with *configure_memory: false*
|
83
|
+
configure_memory_requirements(defaults, @java_home)
|
84
|
+
|
85
|
+
message = windows? ?
|
86
|
+
configure_windows_service(defaults, @java_home) :
|
87
|
+
configure_unix_daemon(defaults, @java_home)
|
47
88
|
say message if message.is_a?(String)
|
48
89
|
end
|
49
90
|
|
50
|
-
|
91
|
+
MEMORY_DEFAULT = 720
|
92
|
+
|
93
|
+
def configure_memory_requirements(defaults, java_home)
|
94
|
+
return if defaults.key?('configure_memory') && ! defaults['configure_memory']
|
95
|
+
|
96
|
+
if defaults['configure_memory'] || ask('Configure JVM memory (JAVA_OPTS)? y/n', 'n') == 'y'
|
97
|
+
|
98
|
+
total_memory = defaults['total_memory'] ||
|
99
|
+
ask('Total (max) memory dedicated to Trinidad? (in MB)', MEMORY_DEFAULT)
|
100
|
+
total_memory = total_memory.to_i
|
101
|
+
if total_memory <= 0
|
102
|
+
warn "changing total_memory to '#{MEMORY_DEFAULT}' default (provided value <= 0)"
|
103
|
+
total_memory = MEMORY_DEFAULT
|
104
|
+
end
|
105
|
+
if total_memory <= 160
|
106
|
+
warn "provided total_memory '#{total_memory}' seems low (server migh not start)"
|
107
|
+
end
|
108
|
+
|
109
|
+
if current_java_home?(java_home) && current_java_vendor_sun_or_oracle?
|
110
|
+
# 720 total memory: (Max) 144M PermGen, 72M CodeCache, 504M Heap
|
111
|
+
|
112
|
+
add_java_opt('-XX:+UseCodeCacheFlushing')
|
113
|
+
cache_size = total_memory >= 800 ? 80 : ( total_memory / 10 )
|
114
|
+
cache_size = 100 if total_memory >= 2000
|
115
|
+
cache_size = 120 if total_memory >= 3000
|
116
|
+
cache_size = 140 if total_memory >= 4000
|
117
|
+
add_java_opt('-XX:ReservedCodeCacheSize=', "#{cache_size}m")
|
118
|
+
|
119
|
+
heap_size = total_memory - cache_size
|
120
|
+
|
121
|
+
if ! defaults.key?('hot_deployment') || ! defaults['hot_deployment']
|
122
|
+
hot_deploy = ask('Support hot (re-)deployment? y/n', 'n') == 'y'
|
123
|
+
else
|
124
|
+
hot_deploy = true
|
125
|
+
end
|
126
|
+
|
127
|
+
if hot_deploy && current_java_version_6?
|
128
|
+
# on Java 7 G1 sweeps PermGen on full GC
|
129
|
+
add_java_opt('-XX:+UseConcMarkSweepGC') if hot_deploy
|
130
|
+
add_java_opt('-XX:+CMSClassUnloadingEnabled') if hot_deploy
|
131
|
+
end
|
132
|
+
|
133
|
+
if current_java_version_at_least_8?
|
134
|
+
# probably a good idea to limit meta-space size :
|
135
|
+
meta_size = heap_size / 5 # 20% (unlimited by default)
|
136
|
+
meta_size = min(heap_size / 4, meta_size + 100) if hot_deploy
|
137
|
+
|
138
|
+
unless defaults['total_memory'] # do not ask if configured
|
139
|
+
meta = ask('Confirm meta-space size limit: (-XX:MaxMetaspaceSize in MB)', meta_size)
|
140
|
+
meta_size = parse_memory_setting(meta, meta_size)
|
141
|
+
end
|
142
|
+
|
143
|
+
add_java_opt('-XX:MaxMetaspaceSize=', "#{meta_size}m") if meta_size
|
144
|
+
heap_size -= meta_size.to_i
|
145
|
+
else
|
146
|
+
perm_size = heap_size / 5 # 20%
|
147
|
+
perm_size = min(heap_size / 4, perm_size + 100) if hot_deploy
|
148
|
+
|
149
|
+
unless defaults['total_memory'] # do not ask if configured
|
150
|
+
perm = ask('Confirm perm-gen size limit: (-XX:MaxPermSize in MB)', perm_size)
|
151
|
+
perm_size = parse_memory_setting(perm, perm_size)
|
152
|
+
end
|
153
|
+
|
154
|
+
add_java_opt('-XX:MaxPermSize=', "#{perm_size}m") if perm_size
|
155
|
+
heap_size -= perm_size.to_i
|
156
|
+
end
|
157
|
+
|
158
|
+
heap_size = ( heap_size / 10 ) * 10
|
159
|
+
add_java_opt('-Xmx', "#{heap_size}m")
|
160
|
+
min_heap_size = min(heap_size / 2, 500)
|
161
|
+
add_java_opt('-Xms', "#{min_heap_size}m")
|
162
|
+
|
163
|
+
else # only try to limit heap (vendors such as IBM support it) :
|
164
|
+
|
165
|
+
heap_size = total_memory - ( total_memory / 15 ) # just a guess
|
166
|
+
|
167
|
+
heap_size = ( heap_size / 10 ) * 10
|
168
|
+
add_java_opt('-Xmx', "#{heap_size}m")
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
add_java_opt('-XX:+UseCompressedOops') if current_java_version_6? && os_arch =~ /64/
|
173
|
+
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
def add_java_opt(java_opt, opt_suffix = nil)
|
178
|
+
if @java_opts.is_a?(String)
|
179
|
+
return false if @java_opts.index(java_opt)
|
180
|
+
@java_opts << ( windows? ? ';' : ' ' ) unless @java_opts.strip.empty?
|
181
|
+
else
|
182
|
+
return false if @java_opts.find { |opt| opt.index(java_opt) }
|
183
|
+
end
|
184
|
+
@java_opts << "#{java_opt}#{opt_suffix}"
|
185
|
+
end
|
186
|
+
|
187
|
+
def configure_jruby_opts(jruby_home = @jruby_home, ruby_compat_version = @ruby_compat_version)
|
51
188
|
opts = []
|
52
|
-
opts << "-Djruby.home=#{
|
53
|
-
opts << "-Djruby.lib=#{File.join(
|
189
|
+
opts << "-Djruby.home=#{jruby_home}"
|
190
|
+
opts << "-Djruby.lib=#{File.join(jruby_home, 'lib')}"
|
54
191
|
opts << "-Djruby.script=jruby"
|
55
192
|
opts << "-Djruby.daemon.module.name=Trinidad"
|
56
|
-
opts << "-Djruby.compat.version=#{
|
193
|
+
opts << "-Djruby.compat.version=#{ruby_compat_version}"
|
57
194
|
opts
|
58
195
|
end
|
59
|
-
|
60
|
-
def
|
61
|
-
@
|
196
|
+
|
197
|
+
def initialize_paths(jruby_home = default_jruby_home)
|
198
|
+
@trinidad_daemon_path = File.expand_path('../../trinidad/daemon.rb', __FILE__)
|
199
|
+
@jars_path = File.expand_path('../../../trinidad-libs', __FILE__)
|
200
|
+
|
201
|
+
@classpath = ['jruby-jsvc.jar', 'commons-daemon.jar'].map { |jar| File.join(@jars_path, jar) }
|
202
|
+
@classpath << File.join(jruby_home, 'lib', 'jruby.jar')
|
203
|
+
end
|
204
|
+
|
205
|
+
def configure_unix_daemon(defaults, java_home = default_java_home)
|
62
206
|
unless @jsvc = defaults["jsvc_path"] || detect_jsvc_path
|
63
207
|
@jsvc = ask_path("path to jsvc binary (leave blank and we'll try to compile)", '')
|
64
208
|
if @jsvc.empty? # unpack and compile :
|
65
209
|
jsvc_unpack_dir = defaults["jsvc_unpack_dir"] || ask_path("dir where jsvc dist should be unpacked", '/usr/local/src')
|
66
|
-
@jsvc = compile_jsvc(jsvc_unpack_dir,
|
67
|
-
say "jsvc binary available at: #{@jsvc} " +
|
210
|
+
@jsvc = compile_jsvc(jsvc_unpack_dir, java_home)
|
211
|
+
say "jsvc binary available at: #{@jsvc} " +
|
68
212
|
"(consider adding it to $PATH if you plan to re-run trinidad_init_service)"
|
69
213
|
end
|
70
214
|
end
|
71
|
-
|
72
|
-
@pid_file = defaults[
|
73
|
-
@
|
74
|
-
|
75
|
-
|
76
|
-
if @run_user != '' && `id -u #{@run_user}` == ''
|
77
|
-
raise ArgumentError, "user '#{@run_user}' does not exist (leave blank if you're planning to `useradd' later)"
|
78
|
-
end
|
79
|
-
|
215
|
+
|
216
|
+
@pid_file = defaults['pid_file'] || ask_path('pid file', '/var/run/trinidad/trinidad.pid')
|
217
|
+
@out_file = defaults['out_file'] || defaults['log_file'] ||
|
218
|
+
ask_path('out file (where system out/err gets redirected)', '/var/log/trinidad/trinidad.out')
|
219
|
+
|
80
220
|
@pid_file = File.join(@pid_file, 'trinidad.pid') if File.exist?(@pid_file) && File.directory?(@pid_file)
|
81
221
|
make_path_dir(@pid_file, "could not create dir for '#{@pid_file}', make sure dir exists before running daemon")
|
82
|
-
@
|
83
|
-
make_path_dir(@
|
84
|
-
|
85
|
-
|
222
|
+
@out_file = File.join(@out_file, 'trinidad.out') if File.exist?(@out_file) && File.directory?(@out_file)
|
223
|
+
make_path_dir(@out_file, "could not create dir for '#{@out_file}', make sure dir exists before running daemon")
|
224
|
+
|
225
|
+
@run_user = defaults['run_user'] || ask('run daemon as user (enter a non-root username or leave blank)', '')
|
226
|
+
if ! @run_user.empty? && `id -u #{@run_user}` == ''
|
227
|
+
raise ArgumentError, "user '#{@run_user}' does not exist (leave blank if you're planning to `useradd' later)"
|
228
|
+
end
|
229
|
+
|
230
|
+
@output_path = defaults['output_path'] || ask_path('init.d output path', '/etc/init.d')
|
231
|
+
|
232
|
+
require('erb'); daemon = ERB.new(
|
86
233
|
File.read(
|
87
234
|
File.expand_path('../../init.d/trinidad.erb', File.dirname(__FILE__))
|
88
|
-
)
|
235
|
+
), nil, '-' # safe_level=nil, trim_mode=nil
|
89
236
|
).result(binding)
|
90
237
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
238
|
+
service_file = File.join(@output_path, @service_id ||= 'trinidad')
|
239
|
+
begin
|
240
|
+
File.open(service_file, 'w') { |file| file.write(daemon) }
|
241
|
+
rescue Errno::EACCES => e
|
242
|
+
begin
|
243
|
+
service_file = File.basename(service_file) # leave in current WD
|
244
|
+
service_file = File.expand_path(service_file)
|
245
|
+
File.open(service_file, 'w') { |file| file.write(daemon) }
|
246
|
+
warn "#{e.message} left init.d script at #{service_file}"
|
247
|
+
rescue
|
248
|
+
raise e
|
249
|
+
end
|
250
|
+
end
|
251
|
+
FileUtils.chmod @run_user.empty? ? 0744 : 0755, service_file
|
252
|
+
|
253
|
+
if chkconfig?
|
254
|
+
command = "chkconfig #{@service_id} on"
|
255
|
+
else
|
256
|
+
command = "update-rc.d -f #{@service_id} remove"
|
257
|
+
end
|
258
|
+
if service_file.start_with?('/etc')
|
259
|
+
unless exec_system(command, :allow_failure)
|
260
|
+
warn "\nNOTE: run `#{command}` as a super-used to enable service"
|
261
|
+
end
|
262
|
+
else
|
263
|
+
warn "\nNOTE: run `cp #{service_file} /etc/init.d` and `#{command}` as a super-used to enable service"
|
264
|
+
end
|
97
265
|
end
|
98
266
|
|
99
|
-
def
|
100
|
-
|
101
|
-
name_ask = 'Service name? {Alphanumeric and spaces only}'
|
102
|
-
name_default = 'Trinidad'
|
103
|
-
@trinidad_name = defaults["trinidad_name"] || ask(name_ask, name_default)
|
267
|
+
def configure_windows_service(defaults, java_home = default_java_home)
|
268
|
+
srv_path = detect_prunsrv_path
|
104
269
|
|
105
|
-
|
106
|
-
|
107
|
-
@trinidad_service_id = defaults["trinidad_service_id"] || ask(id_ask, id_default)
|
270
|
+
classpath = escape_windows_options(@classpath)
|
271
|
+
trinidad_options = escape_windows_options(@trinidad_opts, :split)
|
108
272
|
|
109
|
-
|
110
|
-
|
111
|
-
|
273
|
+
jvm_options = escape_windows_options(@jruby_opts)
|
274
|
+
unless @java_opts.empty?
|
275
|
+
jvm_options << ';' << escape_windows_options(@java_opts)
|
276
|
+
end
|
277
|
+
|
278
|
+
log_path = defaults['log_path'] || "%SystemRoot%\\System32\\LogFiles\\#{@service_id}"
|
279
|
+
@out_file = defaults['out_file'] || defaults['log_file'] ||
|
280
|
+
ask_path('out file (where system out/err gets redirected), leave blank for prunsrv default', '')
|
281
|
+
@pid_file = defaults['pid_file'] || "#{@service_id}.pid"
|
282
|
+
|
283
|
+
#stop_timeout = defaults['stop_timeout'] || 5
|
284
|
+
|
285
|
+
# //TS Run the service as a console application
|
286
|
+
# This is the default operation (if no option is provided).
|
287
|
+
# //RS Run the service Called only from ServiceManager
|
288
|
+
# //ES Start (execute) the service
|
289
|
+
# //SS Stop the service
|
290
|
+
# //US Update service parameters
|
291
|
+
# //IS Install service
|
292
|
+
# //DS Delete service Stops the service first if it is currently running
|
293
|
+
# //PP[//seconds] Pause Default is 60 seconds
|
294
|
+
|
295
|
+
if service_listed_windows?(@service_id)
|
296
|
+
say "service '#{@service_id}' already installed, will update instead of install"
|
297
|
+
command = %Q{//US//#{@service_id} --DisplayName="#{@service_name}"}
|
298
|
+
else
|
299
|
+
command = %Q{//IS//#{@service_id} --DisplayName="#{@service_name}"}
|
300
|
+
end
|
301
|
+
|
302
|
+
command << " --Description=\"#{@service_desc}\""
|
303
|
+
command << " --Install=#{srv_path} --Jvm=auto"
|
304
|
+
command << " --JavaHome=\"#{escape_windows_path(java_home)}\""
|
305
|
+
command << " --StartMode=jvm --StopMode=jvm"
|
306
|
+
command << " --StartClass=com.msp.procrun.JRubyService --StartMethod=start"
|
307
|
+
command << " --StartParams=\"#{escape_windows_path(@trinidad_daemon_path)};#{trinidad_options}\""
|
308
|
+
command << " --StopClass=com.msp.procrun.JRubyService --StopMethod=stop"
|
309
|
+
command << " --Classpath=\"#{classpath}\""
|
310
|
+
command << " ++JvmOptions=\"#{jvm_options}\""
|
311
|
+
command << " --LogPath=\"#{escape_windows_path(log_path)}\""
|
312
|
+
command << " --PidFile=#{@pid_file}" # always assumed log_path relative
|
313
|
+
|
314
|
+
if @out_file && ! @out_file.empty?
|
315
|
+
out_file = escape_windows_path(@out_file)
|
316
|
+
command << " --StdOutput=\"#{out_file}\" --StdError=\"#{out_file}\""
|
317
|
+
else
|
318
|
+
command << " --StdOutput=auto --StdError=auto"
|
319
|
+
end
|
320
|
+
|
321
|
+
exec_system "#{srv_path} #{command}"
|
322
|
+
|
323
|
+
warn "\nNOTE: service needs to be started manually, to start during boot run:\n" <<
|
324
|
+
"#{srv_path} //US//#{@service_id} --Startup=auto"
|
325
|
+
|
326
|
+
"\nHINT: you may use prunsrv to manage your service, try running:\n#{srv_path} help"
|
112
327
|
end
|
113
|
-
|
114
|
-
def configure_windows_service
|
115
|
-
srv_path = detect_prunsrv_path
|
116
328
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
--StartClass=com.msp.procrun.JRubyService --StartMethod=start \
|
121
|
-
--StartParams="#{escape_path(@trinidad_daemon_path)};#{format_options(@trinidad_options)}" \
|
122
|
-
--StopClass=com.msp.procrun.JRubyService --StopMethod=stop --Classpath="#{format_options(@classpath)}" \
|
123
|
-
--StdOutput=auto --StdError=auto \
|
124
|
-
--LogPrefix="#{@trinidad_service_id.downcase}" \
|
125
|
-
++JvmOptions="#{format_options(@jruby_opts)}"
|
126
|
-
}
|
127
|
-
system "#{srv_path} #{command}"
|
128
|
-
|
129
|
-
"\nNOTE: you may use prunsrv to manage your service, try running:\n" +
|
130
|
-
"#{srv_path} help"
|
131
|
-
end
|
132
|
-
|
133
|
-
def uninstall(service)
|
329
|
+
def uninstall(service = nil)
|
330
|
+
initialize_paths
|
331
|
+
service ||= default_service_id
|
134
332
|
windows? ? uninstall_windows_service(service) : uninstall_unix_daemon(service)
|
135
333
|
end
|
136
|
-
|
137
|
-
def uninstall_windows_service(
|
334
|
+
|
335
|
+
def uninstall_windows_service(service)
|
138
336
|
srv_path = detect_prunsrv_path
|
139
|
-
|
140
|
-
|
337
|
+
exec_system "#{srv_path} //DS//#{service}" # does stop first if needed
|
338
|
+
end
|
339
|
+
|
340
|
+
def service_listed_windows?(service)
|
341
|
+
# *sc* will allow SERVICE_NAME only (DISPLAY_NAME won't work)
|
342
|
+
out = `sc queryex type= service state= all | find "#{service}"`
|
343
|
+
return false if out.chomp.empty?
|
344
|
+
# "SERVICE_NAME: Trinidad\nDISPLAY_NAME: Trinidad\n"
|
345
|
+
!! ( out =~ /SERVICE_NAME: #{service}$/i )
|
141
346
|
end
|
142
347
|
|
143
348
|
def uninstall_unix_daemon(service)
|
144
|
-
name = File.basename(service) # e.g. /etc/init.d/trinidad
|
145
|
-
command = "update-rc.d -f #{name} remove"
|
146
|
-
system command
|
147
|
-
rescue => e
|
148
|
-
say "uninstall failed, try `sudo #{command}`"
|
149
|
-
raise e
|
150
|
-
ensure
|
151
349
|
unless File.exist?(service)
|
152
350
|
service = File.expand_path(service, '/etc/init.d')
|
153
351
|
end
|
352
|
+
name = File.basename(service) # e.g. /etc/init.d/trinidad
|
353
|
+
|
354
|
+
unless service_listed_unix?(service)
|
355
|
+
warn "service '#{service}' seems to be NOT installed/configured"
|
356
|
+
end
|
357
|
+
|
358
|
+
if chkconfig?
|
359
|
+
exec_system command = "chkconfig #{name} stop", :allow_failure
|
360
|
+
exec_system command = "chkconfig #{name} off"
|
361
|
+
else # assuming Debian based
|
362
|
+
exec_system command = "service #{name} stop", :allow_failure
|
363
|
+
exec_system command = "update-rc.d -f #{name} remove"
|
364
|
+
end
|
365
|
+
rescue => e
|
366
|
+
say "uninstall failed, maybe try running `#{command}` as super-user"
|
367
|
+
raise e
|
368
|
+
else
|
154
369
|
FileUtils.rm(service) if File.exist?(service)
|
155
370
|
end
|
156
|
-
|
371
|
+
|
372
|
+
def service_listed_unix?(service)
|
373
|
+
if chkconfig?
|
374
|
+
! `chkconfig --list | grep #{service}`.chomp.empty?
|
375
|
+
else
|
376
|
+
! `service --status-all | grep #{service}`.chomp.empty?
|
377
|
+
end
|
378
|
+
end
|
379
|
+
|
157
380
|
private
|
158
381
|
|
159
|
-
def
|
382
|
+
def exec_system(command, allow_failure = nil)
|
383
|
+
log_command command
|
384
|
+
ok = system command
|
385
|
+
unless allow_failure
|
386
|
+
raise "could not execute `#{command}`" if ok.nil?
|
387
|
+
raise "`#{command}` failed" unless ok
|
388
|
+
end
|
389
|
+
ok
|
390
|
+
end
|
391
|
+
|
392
|
+
def log_command(command)
|
393
|
+
say command
|
394
|
+
log && (log.puts "#{command}\n\n"; log.flush)
|
395
|
+
end
|
396
|
+
|
397
|
+
def log
|
398
|
+
return @_log || nil if defined?(@_log) && ! @_log.nil?
|
399
|
+
( @_log = File.open('trinidad_init_service.log', 'w') rescue false ) || nil
|
400
|
+
end
|
401
|
+
|
402
|
+
def log?; defined?(@_log) ? !! @_log : nil end
|
403
|
+
|
404
|
+
def escape_windows_path(path)
|
160
405
|
path.gsub(%r{/}, '\\')
|
161
406
|
end
|
162
|
-
|
163
|
-
def
|
164
|
-
options.
|
407
|
+
|
408
|
+
def escape_windows_options(options, split = nil)
|
409
|
+
if options.is_a?(String)
|
410
|
+
return escape_windows_path(options) unless split
|
411
|
+
options = options.split(' ')
|
412
|
+
end
|
413
|
+
options.map { |opt| escape_windows_path(opt) }.join(';')
|
165
414
|
end
|
166
415
|
|
167
|
-
def
|
416
|
+
def min(num1, num2); num1 <= num2 ? num1 : num2 end
|
417
|
+
|
418
|
+
def empty?(arg)
|
419
|
+
return true unless arg
|
420
|
+
! arg.respond_to?(:empty) || arg.empty?
|
421
|
+
end
|
422
|
+
|
423
|
+
def parse_memory_setting(memory, default = nil)
|
424
|
+
return default if empty?(memory)
|
425
|
+
return false if memory == 'n'
|
426
|
+
return default if memory == 'y'
|
427
|
+
memory = memory[0...-1] if memory.is_a?(String) && memory =~ /m$/i
|
428
|
+
memory
|
429
|
+
end
|
430
|
+
|
431
|
+
def chkconfig? # available in RH based distributions
|
432
|
+
return @chkconfig unless (@chkconfig ||= nil).nil?
|
433
|
+
@chkconfig = ! `which chkconfig`.chomp.empty?
|
434
|
+
end
|
435
|
+
|
436
|
+
def default_service_id; windows? ? 'Trinidad' : 'trinidad' end
|
437
|
+
|
438
|
+
def default_jruby_home; current_jruby_home end
|
439
|
+
|
440
|
+
def current_jruby_home
|
168
441
|
Java::JavaLang::System.get_property("jruby.home")
|
169
442
|
end
|
170
443
|
|
171
444
|
def default_java_home
|
172
|
-
ENV['JAVA_HOME'] ||
|
445
|
+
ENV['JAVA_HOME'] || current_java_home
|
446
|
+
end
|
447
|
+
|
448
|
+
def current_java_home
|
449
|
+
ENV_JAVA['java.home']
|
450
|
+
end
|
451
|
+
|
452
|
+
def current_java_home?(java_home)
|
453
|
+
java_home == current_java_home || begin
|
454
|
+
real_java_home = java.io.File.new(java_home).canonical_path
|
455
|
+
real_java_home == current_java_home || "#{real_java_home}/jre" == current_java_home
|
456
|
+
end
|
457
|
+
end
|
458
|
+
|
459
|
+
def current_java_vendor_sun_or_oracle?
|
460
|
+
ENV_JAVA['java.vendor'] =~ /^(Oracle|Sun)/
|
461
|
+
end
|
462
|
+
|
463
|
+
def current_java_version(split = nil)
|
464
|
+
version = ENV_JAVA['java.version']
|
465
|
+
return version unless split
|
466
|
+
@current_java_version ||= begin
|
467
|
+
# e.g. "1.7.0_51" -> [ 1, 7, 0 ]
|
468
|
+
# but "1.8.0" -> [ 1, 8, 0 ]
|
469
|
+
if i = version.index('_')
|
470
|
+
version = version[0, i]
|
471
|
+
end
|
472
|
+
version.split('.').map(&:to_i)
|
473
|
+
end
|
173
474
|
end
|
174
|
-
|
175
|
-
def
|
176
|
-
|
475
|
+
|
476
|
+
def current_java_version_6?
|
477
|
+
current_java_version(true)[1] == 6
|
478
|
+
end
|
479
|
+
|
480
|
+
def current_java_version_7?
|
481
|
+
current_java_version(true)[1] == 7
|
482
|
+
end
|
483
|
+
|
484
|
+
def current_java_version_at_least_8?
|
485
|
+
current_java_version(true)[1] >= 8
|
486
|
+
end
|
487
|
+
|
488
|
+
def default_ruby_compat_version; current_ruby_compat_version end
|
489
|
+
|
490
|
+
def current_ruby_compat_version
|
491
|
+
# deprecated on 9k but still working (returns RUBY2_1)
|
492
|
+
JRuby.runtime.getInstanceConfig.getCompatVersion.to_s
|
177
493
|
end
|
178
|
-
|
494
|
+
|
179
495
|
def windows?
|
180
496
|
self.class.windows?
|
181
497
|
end
|
@@ -183,11 +499,11 @@ module Trinidad
|
|
183
499
|
def macosx?
|
184
500
|
self.class.macosx?
|
185
501
|
end
|
186
|
-
|
502
|
+
|
187
503
|
def bundled_jsvc_path # only called on *nix
|
188
504
|
jsvc = 'jsvc_' + (macosx? ? 'darwin' : 'linux')
|
189
505
|
jsvc_path = File.join(@jars_path, jsvc)
|
190
|
-
# linux version is no longer bundled - as long as it is not present jsvc
|
506
|
+
# linux version is no longer bundled - as long as it is not present jsvc
|
191
507
|
# will be compiled from src (if not installed already #detect_jsvc_path)
|
192
508
|
File.exist?(jsvc_path) ? jsvc_path : nil
|
193
509
|
end
|
@@ -197,7 +513,7 @@ module Trinidad
|
|
197
513
|
jsvc_path.chomp!
|
198
514
|
jsvc_path.empty? ? bundled_jsvc_path : jsvc_path
|
199
515
|
end
|
200
|
-
|
516
|
+
|
201
517
|
def compile_jsvc(jsvc_unpack_dir, java_home = default_java_home)
|
202
518
|
unless File.exist?(jsvc_unpack_dir)
|
203
519
|
begin
|
@@ -212,10 +528,10 @@ module Trinidad
|
|
212
528
|
unless File.writable?(jsvc_unpack_dir)
|
213
529
|
raise "specified path: #{jsvc_unpack_dir.inspect} is not writable"
|
214
530
|
end
|
215
|
-
|
531
|
+
|
216
532
|
jsvc_unix_src = File.expand_path('../../jsvc-unix-src', File.dirname(__FILE__))
|
217
533
|
FileUtils.cp_r(jsvc_unix_src, jsvc_unpack_dir)
|
218
|
-
|
534
|
+
|
219
535
|
jsvc_dir = File.expand_path('jsvc-unix-src', jsvc_unpack_dir)
|
220
536
|
File.chmod(0755, File.join(jsvc_dir, "configure"))
|
221
537
|
# ./configure
|
@@ -230,7 +546,7 @@ module Trinidad
|
|
230
546
|
say command_output
|
231
547
|
raise "`#{command}` failed with status: #{$?.exitstatus}"
|
232
548
|
end
|
233
|
-
|
549
|
+
|
234
550
|
# make
|
235
551
|
command = "cd #{jsvc_dir} && make"
|
236
552
|
say "compiling jsvc ..."
|
@@ -239,10 +555,10 @@ module Trinidad
|
|
239
555
|
say command_output
|
240
556
|
raise "`#{command}` failed with status: #{$?.exitstatus}"
|
241
557
|
end
|
242
|
-
|
558
|
+
|
243
559
|
File.expand_path('jsvc', jsvc_dir) # return path to compiled jsvc binary
|
244
560
|
end
|
245
|
-
|
561
|
+
|
246
562
|
def detect_jdk_home(java_home = default_java_home)
|
247
563
|
# JDK has an include directory with headers :
|
248
564
|
if File.directory?(File.join(java_home, 'include'))
|
@@ -255,26 +571,30 @@ module Trinidad
|
|
255
571
|
end
|
256
572
|
nil
|
257
573
|
end
|
258
|
-
|
574
|
+
|
259
575
|
def detect_prunsrv_path # only called on windows
|
260
576
|
prunsrv_path = `for %i in (prunsrv.exe) do @echo.%~$PATH:i` rescue ''
|
261
577
|
# a kind of `which prunsrv.exe` (if not found returns "\n")
|
262
578
|
prunsrv_path.chomp!
|
263
579
|
prunsrv_path.empty? ? bundled_prunsrv_path : prunsrv_path
|
264
580
|
end
|
265
|
-
|
266
|
-
def bundled_prunsrv_path(arch =
|
581
|
+
|
582
|
+
def bundled_prunsrv_path(arch = os_arch)
|
267
583
|
# "amd64", "i386", "x86", "x86_64"
|
268
584
|
path = 'windows'
|
269
585
|
if arch =~ /amd64/i # amd64
|
270
|
-
path
|
586
|
+
path << '/amd64'
|
271
587
|
elsif arch =~ /64/i # x86_64
|
272
|
-
path
|
588
|
+
path << '/ia64'
|
273
589
|
# else "i386", "x86"
|
274
590
|
end
|
275
591
|
File.join(@jars_path, path, 'prunsrv.exe')
|
276
592
|
end
|
277
593
|
|
594
|
+
def os_arch
|
595
|
+
ENV_JAVA['os.arch']
|
596
|
+
end
|
597
|
+
|
278
598
|
def make_path_dir(path, error = nil)
|
279
599
|
dir = File.dirname(path)
|
280
600
|
return if File.exist?(dir)
|
@@ -285,21 +605,23 @@ module Trinidad
|
|
285
605
|
say "#{error} (#{e})"
|
286
606
|
end
|
287
607
|
end
|
288
|
-
|
608
|
+
|
609
|
+
public
|
610
|
+
|
289
611
|
def ask_path(question, default = nil)
|
290
|
-
path = ask(question, default)
|
291
|
-
|
292
|
-
raise
|
293
|
-
return path # nil
|
612
|
+
unless path = ask(question, default) # nil, false
|
613
|
+
return path if path.nil?
|
614
|
+
block_given? ? yield : raise("#{question.inspect} not provided!")
|
294
615
|
end
|
295
616
|
path.empty? ? path : File.expand_path(path)
|
296
617
|
end
|
297
618
|
|
298
619
|
def ask(question, default = nil)
|
299
|
-
return default if ! @stdin.tty? ||
|
300
|
-
|
301
|
-
question = "#{question}?"
|
302
|
-
question += " [#{default}]" if default &&
|
620
|
+
return default if ! @stdin.tty? || ! ask?
|
621
|
+
|
622
|
+
question = "#{question}?" if ! question.index('?') || ! question.index(':')
|
623
|
+
question += " [#{default}]" if default &&
|
624
|
+
( ! default.is_a?(String) || ! default.empty? )
|
303
625
|
|
304
626
|
result = nil
|
305
627
|
while result.nil?
|
@@ -310,29 +632,30 @@ module Trinidad
|
|
310
632
|
|
311
633
|
if result
|
312
634
|
result.chomp!
|
313
|
-
|
314
|
-
when /^$/
|
315
|
-
result = default
|
316
|
-
end
|
635
|
+
result = default if result.size == 0
|
317
636
|
end
|
318
637
|
end
|
319
638
|
result
|
320
639
|
end
|
321
|
-
|
322
|
-
def ask
|
323
|
-
@ask =
|
640
|
+
|
641
|
+
def ask?
|
642
|
+
@ask = true unless defined? @ask; return @ask
|
324
643
|
end
|
644
|
+
|
645
|
+
def ask=(flag); @ask = !!flag end
|
325
646
|
public :ask=
|
326
|
-
|
647
|
+
|
327
648
|
def say(msg)
|
328
|
-
puts msg
|
649
|
+
puts msg if say?
|
329
650
|
end
|
330
|
-
|
331
|
-
def say
|
332
|
-
@say =
|
651
|
+
|
652
|
+
def say?
|
653
|
+
@say = true unless defined? @say; return @say
|
333
654
|
end
|
655
|
+
|
656
|
+
def say=(flag); @say = !!flag end
|
334
657
|
public :say=
|
335
|
-
|
658
|
+
|
336
659
|
end
|
337
660
|
end
|
338
661
|
end
|