trinidad_init_services 1.2.3 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|