Project

General

Profile

set_spawner.sh

Roger Borrello, 12/11/2025 04:37 PM

Download (4.1 KB)

 
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