|
1
|
#!/usr/bin/env bash
|
|
2
|
set -euo pipefail
|
|
3
|
|
|
4
|
function usage()
|
|
5
|
{
|
|
6
|
cat <<EOF
|
|
7
|
Usage: $0 [-d] [--classpath=<classpath>]
|
|
8
|
|
|
9
|
Position spawner files in ${spawn_dir}. Must run as sudo
|
|
10
|
|
|
11
|
Where:
|
|
12
|
-d = dryrun (just display commands)
|
|
13
|
--classpath = classpath that contains all the jars we will find our spawner files from.
|
|
14
|
|
|
15
|
-? or -h or --help = show usage.
|
|
16
|
EOF
|
|
17
|
}
|
|
18
|
|
|
19
|
# Function to find the given jar (or root of a jar) in the classpath
|
|
20
|
function find_jar()
|
|
21
|
{
|
|
22
|
local classpath="$1"
|
|
23
|
local query="$2"
|
|
24
|
|
|
25
|
local IFS=':'
|
|
26
|
for entry in $classpath; do
|
|
27
|
# Skip empty classpath elements
|
|
28
|
[[ -z "$entry" ]] && continue
|
|
29
|
|
|
30
|
# Only match actual files
|
|
31
|
[[ -f "$entry" ]] || continue
|
|
32
|
|
|
33
|
local base=$(basename "$entry")
|
|
34
|
|
|
35
|
if [[ "$query" == *.jar ]]; then
|
|
36
|
# Full file name match
|
|
37
|
if [[ "$base" == "$query" ]]; then
|
|
38
|
printf '%s\n' "$entry"
|
|
39
|
return 0
|
|
40
|
fi
|
|
41
|
else
|
|
42
|
# Root search: match "root-*.jar" or exactly "root.jar"
|
|
43
|
if [[ "$base" == "$query".jar || "$base" == "$query"-*.jar ]]; then
|
|
44
|
printf '%s\n' "$entry"
|
|
45
|
return 0
|
|
46
|
fi
|
|
47
|
fi
|
|
48
|
done
|
|
49
|
|
|
50
|
return 1
|
|
51
|
}
|
|
52
|
|
|
53
|
# defaults
|
|
54
|
spawn_dir=/opt/spawner
|
|
55
|
srv_certs="srv-certs.store"
|
|
56
|
mycmd=""
|
|
57
|
|
|
58
|
while getopts ":h?d-:" opt; do
|
|
59
|
case "$opt" in
|
|
60
|
d ) mycmd="echo" ;;
|
|
61
|
- ) case ${OPTARG} in
|
|
62
|
"help" ) usage
|
|
63
|
exit 1 ;;
|
|
64
|
"classpath="* ) cp=$(echo $OPTARG | cut -d "=" -f2) ;;
|
|
65
|
* ) echo "Unknown option: --${OPTARG}"
|
|
66
|
usage
|
|
67
|
exit 1 ;;
|
|
68
|
esac
|
|
69
|
;;
|
|
70
|
h | \? ) if [[ "$OPTARG" == "?" || "$opt" == "h" ]]; then
|
|
71
|
usage
|
|
72
|
exit 1
|
|
73
|
else
|
|
74
|
echo "Unknown option: -${OPTARG}"
|
|
75
|
usage
|
|
76
|
exit 1
|
|
77
|
fi
|
|
78
|
;;
|
|
79
|
esac
|
|
80
|
done
|
|
81
|
shift $(($OPTIND - 1))
|
|
82
|
|
|
83
|
P2J_JAR=$(find_jar "$cp" "p2j.jar")
|
|
84
|
if [[ $? -eq 0 ]]; then
|
|
85
|
echo "Matched p2j.jar: $P2J_JAR"
|
|
86
|
|
|
87
|
spawn_prog="${P2J_JAR%/lib/p2j.jar}/native/spawn"
|
|
88
|
echo "Derived spawn path: $spawn_prog"
|
|
89
|
else
|
|
90
|
echo "No matching p2j.jar found"
|
|
91
|
fi
|
|
92
|
|
|
93
|
ASPECTJ_RT=$(find_jar "$cp" "aspectjrt")
|
|
94
|
if [[ $? -eq 0 ]]; then
|
|
95
|
echo "Matched aspectjrt: $ASPECTJ_RT"
|
|
96
|
else
|
|
97
|
echo "No matching aspectjrt found"
|
|
98
|
fi
|
|
99
|
|
|
100
|
SLF4J_API=$(find_jar "$cp" "slf4j-api")
|
|
101
|
if [[ $? -eq 0 ]]; then
|
|
102
|
echo "Matched slf4j-api: $SLF4J_API"
|
|
103
|
else
|
|
104
|
echo "No matching slf4j-api found"
|
|
105
|
fi
|
|
106
|
|
|
107
|
echo "Installing..."
|
|
108
|
[ ! -d $spawn_dir ] && $mycmd mkdir -p $spawn_dir
|
|
109
|
|
|
110
|
if ! cmp -s "$spawn_prog" "${spawn_dir}/spawn"; then
|
|
111
|
echo " spawn tool: $spawn_prog to ${spawn_dir}/spawn"
|
|
112
|
$mycmd cp -f $spawn_prog ${spawn_dir}/spawn
|
|
113
|
fi
|
|
114
|
|
|
115
|
if ! cmp -s "$P2J_JAR" "${spawn_dir}/p2j.jar"; then
|
|
116
|
echo " p2j.jar: ${P2J_JAR} to ${spawn_dir}/p2j.jar"
|
|
117
|
$mycmd cp -f $P2J_JAR ${spawn_dir}/p2j.jar
|
|
118
|
$mycmd chown root:root ${spawn_dir}/spawn ${spawn_dir}/p2j.jar
|
|
119
|
$mycmd chmod 4755 ${spawn_dir}/spawn
|
|
120
|
$mycmd chmod 0550 ${spawn_dir}/p2j.jar
|
|
121
|
fi
|
|
122
|
|
|
123
|
if [ -f "$ASPECTJ_RT" ]; then
|
|
124
|
if ! cmp -s "$ASPECTJ_RT" "${spawn_dir}/aspectjrt.jar"; then
|
|
125
|
echo " aspectj_rt: ${ASPECTJ_RT} to ${spawn_dir}/aspectjrt.jar"
|
|
126
|
$mycmd cp -f $ASPECTJ_RT ${spawn_dir}/aspectjrt.jar
|
|
127
|
$mycmd chown root:root ${spawn_dir}/aspectjrt.jar
|
|
128
|
$mycmd chmod 0550 ${spawn_dir}/aspectjrt.jar
|
|
129
|
fi
|
|
130
|
else
|
|
131
|
echo "WARNING! The $ASPECTJ_RT file was not found."
|
|
132
|
fi
|
|
133
|
|
|
134
|
if [ -f "$SLF4J_API" ]; then
|
|
135
|
if ! cmp -s "$SLF4J_API" "${spawn_dir}/slf4j-api.jar"; then
|
|
136
|
echo " slf4j_api: ${SLF4J_API} to ${spawn_dir}/slf4j-api.jar"
|
|
137
|
$mycmd cp -f $SLF4J_API ${spawn_dir}/slf4j-api.jar
|
|
138
|
$mycmd chown root:root ${spawn_dir}/slf4j-api.jar
|
|
139
|
$mycmd chmod 0550 ${spawn_dir}/slf4j-api.jar
|
|
140
|
fi
|
|
141
|
else
|
|
142
|
echo "WARNING! The $SLF4J_API file was not found."
|
|
143
|
fi
|
|
144
|
|
|
145
|
if [ -f "$srv_certs" ]; then
|
|
146
|
if ! cmp -s "$srv_certs" "${spawn_dir}/srv-certs.store"; then
|
|
147
|
echo " certificate file: $srv_certs to ${spawn_dir}/srv-certs.store"
|
|
148
|
$mycmd cp -f $srv_certs ${spawn_dir}/srv-certs.store
|
|
149
|
$mycmd chown root:root ${spawn_dir}/srv-certs.store
|
|
150
|
$mycmd chmod 0550 ${spawn_dir}/srv-certs.store
|
|
151
|
fi
|
|
152
|
else
|
|
153
|
echo "WARNING! The $srv_certs file was not found."
|
|
154
|
fi
|