7
7
echo " $( date +" [%Y-%m-%d %T,%3N]" ) <docker-entrypoint> $* "
8
8
}
9
9
10
+ set_java_home () {
11
+ JAVA_HOME=$( readlink -f /usr/bin/java | sed " s:/jre/bin/java::" )
12
+ if [ ! -d " ${JAVA_HOME} " ]; then
13
+ # For some reason readlink failed so lets just make some assumptions instead
14
+ # We're assuming openjdk 8 since thats what we install in Dockerfile
15
+ arch=` dpkg --print-architecture 2> /dev/null`
16
+ JAVA_HOME=/usr/lib/jvm/java-17-openjdk-${arch}
17
+ fi
18
+ }
19
+
20
+ instPkg () {
21
+ for pkg in $* ; do
22
+ if [ $( dpkg-query -W -f=' ${Status}' " ${pkg} " 2> /dev/null | grep -c " ok installed" ) -eq 0 ];
23
+ then
24
+ apt-get -qy install " ${pkg} " ;
25
+ fi
26
+ done
27
+ }
28
+
29
+ # Validate that any included hotfixes have been applied
30
+ validate () (
31
+ shopt -s nullglob
32
+ for i in /usr/local/unifi/hotfixes/* -validate.md5sum; do
33
+ md5sum -c " $i " > /dev/null 2>&1 || return 1
34
+ echo " Hotfix validated: $( basename ${i::- 16} ) "
35
+ done
36
+ )
37
+
38
+
39
+ # Check that any included hotfixes have been properly applied and exit if not
40
+ if ! validate; then
41
+ echo " Missing an included hotfix"
42
+ exit 1
43
+ fi
44
+
45
+
10
46
exit_handler () {
11
47
log " Exit signal received, shutting down"
12
- java -cp /usr/share/java/javax.activation. jar: ${BASEDIR} /lib/ace.jar com.ubnt.ace.Launcher stop
48
+ java -jar ${BASEDIR} /lib/ace.jar stop
13
49
for i in ` seq 1 10` ; do
14
50
[ -z " $( pgrep -f ${BASEDIR} /lib/ace.jar) " ] && break
15
51
# graceful shutdown
@@ -27,20 +63,18 @@ exit_handler() {
27
63
28
64
trap ' kill ${!}; exit_handler' SIGHUP SIGINT SIGQUIT SIGTERM
29
65
66
+ [ " x${JAVA_HOME} " != " x" ] || set_java_home
67
+
68
+
30
69
# vars similar to those found in unifi.init
31
- RUNAS_UID0=true
32
70
MONGOPORT=27117
33
- BASEDIR=/usr/lib/unifi/
34
71
35
72
CODEPATH=${BASEDIR}
36
73
DATALINK=${BASEDIR} /data
37
74
LOGLINK=${BASEDIR} /logs
38
75
RUNLINK=${BASEDIR} /run
39
- DATADIR=${DATADIR:-/ unifi/ data}
40
- LOGDIR=${LOGDIR:-/ usr/ lib/ unifi/ logs}
41
- CERTDIR=${CERTDIR:-/ unifi/ cert}
42
- RUNDIR=${RUNDIR:-/ var/ run/ unifi}
43
76
77
+ rm $DATALINK
44
78
ln -sf $DATADIR $DATALINK
45
79
46
80
DIRS=" ${RUNDIR} ${LOGDIR} ${DATADIR} ${BASEDIR} "
@@ -54,7 +88,7 @@ JVM_MAX_HEAP_SIZE=${JVM_MAX_HEAP_SIZE:-1024M}
54
88
55
89
56
90
MONGOLOCK=" ${DATAPATH} /db/mongod.lock"
57
- JVM_EXTRA_OPTS=" ${JVM_EXTRA_OPTS} -Dunifi.datadir=${DATADIR} -Dunifi.logdir=${LOGDIR} -Dunifi.rundir=${RUNDIR} "
91
+ JVM_EXTRA_OPTS=" ${JVM_EXTRA_OPTS} --add-opens=java.base/java.time=ALL-UNNAMED - Dunifi.datadir=${DATADIR} -Dunifi.logdir=${LOGDIR} -Dunifi.rundir=${RUNDIR} "
58
92
PIDFILE=/var/run/unifi/unifi.pid
59
93
60
94
if [ ! -z " ${JVM_MAX_HEAP_SIZE} " ]; then
83
117
if [ -d " /usr/unifi/init.d" ]; then
84
118
run-parts /usr/unifi/init.d
85
119
fi
120
+
86
121
if [ -d " /unifi/init.d" ]; then
87
122
run-parts " /unifi/init.d"
88
123
fi
@@ -124,6 +159,9 @@ if ! [[ -z "$LOTSOFDEVICES" ]]; then
124
159
settings[" unifi.G1GC.enabled" ]=" true"
125
160
settings[" unifi.xms" ]=" $( h2mb $JVM_INIT_HEAP_SIZE ) "
126
161
settings[" unifi.xmx" ]=" $( h2mb ${JVM_MAX_HEAP_SIZE:- 1024M} ) "
162
+ # Reduce MongoDB I/O (issue #300)
163
+ settings[" unifi.db.nojournal" ]=" true"
164
+ settings[" unifi.db.extraargs" ]=" --quiet"
127
165
fi
128
166
129
167
# Implements issue #30
@@ -134,6 +172,14 @@ if ! [[ -z "$DB_URI" || -z "$STATDB_URI" || -z "$DB_NAME" ]]; then
134
172
settings[" unifi.db.name" ]=" $DB_NAME "
135
173
fi
136
174
175
+ if ! [[ -z " $PORTAL_HTTP_PORT " ]]; then
176
+ settings[" portal.http.port" ]=" $PORTAL_HTTP_PORT "
177
+ fi
178
+
179
+ if ! [[ -z " $PORTAL_HTTPS_PORT " ]]; then
180
+ settings[" portal.https.port" ]=" $PORTAL_HTTPS_PORT "
181
+ fi
182
+
137
183
if ! [[ -z " $UNIFI_HTTP_PORT " ]]; then
138
184
settings[" unifi.http.port" ]=" $UNIFI_HTTP_PORT "
139
185
fi
@@ -142,15 +188,24 @@ if ! [[ -z "$UNIFI_HTTPS_PORT" ]]; then
142
188
settings[" unifi.https.port" ]=" $UNIFI_HTTPS_PORT "
143
189
fi
144
190
145
- for key in " ${! settings[@]} " ; do
146
- confSet " $confFile " " $key " " ${settings[$key]} "
147
- done
148
- UNIFI_CMD=" java ${JVM_OPTS} -cp /usr/share/java/javax.activation.jar:${BASEDIR} /lib/ace.jar com.ubnt.ace.Launcher start"
191
+ if [[ " $UNIFI_ECC_CERT " == " true" ]]; then
192
+ settings[" unifi.https.sslEnabledProtocols" ]=" TLSv1.2"
193
+ settings[" unifi.https.ciphers" ]=" TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
194
+ fi
195
+
196
+ if [[ " $UNIFI_STDOUT " == " true" ]]; then
197
+ settings[" unifi.logStdout" ]=" true"
198
+ fi
199
+
200
+ UNIFI_CMD=" java ${JVM_OPTS} -jar ${BASEDIR} /lib/ace.jar start"
201
+
202
+ if [ " $EUID " -ne 0 ] && command -v permset & > /dev/null
203
+ then
204
+ permset
205
+ fi
149
206
150
207
# controller writes to relative path logs/server.log
151
208
cd ${BASEDIR}
152
- mkdir -p ${LOGDIR}
153
- touch ${LOGDIR} /server.log
154
209
155
210
CUID=$( id -u)
156
211
@@ -165,15 +220,18 @@ if [[ "${@}" == "unifi" ]]; then
165
220
mkdir -p " ${dir} "
166
221
fi
167
222
done
223
+ for key in " ${! settings[@]} " ; do
224
+ confSet " $confFile " " $key " " ${settings[$key]} "
225
+ done
168
226
if [ " ${RUNAS_UID0} " == " true" ] || [ " ${CUID} " != " 0" ]; then
169
227
if [ " ${CUID} " == 0 ]; then
170
228
log ' WARNING: Running UniFi in insecure (root) mode'
171
229
fi
230
+ echo ${UNIFI_CMD}
172
231
${UNIFI_CMD} &
173
- WAIT_PID=" $! "
174
232
elif [ " ${RUNAS_UID0} " == " false" ]; then
175
233
if [ " ${BIND_PRIV} " == " true" ]; then
176
- if setcap ' cap_net_bind_service=+ep' " ${JAVA_HOME} /jre/ bin/java" ; then
234
+ if setcap ' cap_net_bind_service=+ep' " ${JAVA_HOME} /bin/java" ; then
177
235
sleep 1
178
236
else
179
237
log " ERROR: setcap failed, can not continue"
@@ -193,10 +251,8 @@ if [[ "${@}" == "unifi" ]]; then
193
251
fi
194
252
done
195
253
gosu unifi:unifi ${UNIFI_CMD} &
196
- WAIT_PID=" $! "
197
254
fi
198
- tail -f ${LOGDIR} /server.log &
199
- wait $WAIT_PID
255
+ wait
200
256
log " WARN: unifi service process ended without being signaled? Check for errors in ${LOGDIR} ." >&2
201
257
else
202
258
log " Executing: ${@ } "
0 commit comments