File size: 3,155 Bytes
021894c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5b0c352
 
b772e78
5b0c352
 
 
 
 
b772e78
5b0c352
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b772e78
021894c
9c993dc
 
 
 
021894c
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/env bash
set -Eeuo pipefail

: "${VNC_PORT:="5900"}"    # VNC port
: "${MON_PORT:="7100"}"    # Monitor port
: "${WEB_PORT:="8006"}"    # Webserver port
: "${WSD_PORT:="8004"}"    # Websockets port
: "${WSS_PORT:="5700"}"    # Websockets port

if (( VNC_PORT < 5900 )); then
  warn "VNC port cannot be set lower than 5900, ignoring value $VNC_PORT."
  VNC_PORT="5900"
fi

cp -r /var/www/* /run/shm
rm -f /var/run/websocketd.pid

html "Starting $APP for $ENGINE..."

if [[ "${WEB:-}" != [Nn]* ]]; then

  mkdir -p /etc/nginx/sites-enabled
  cp /etc/nginx/default.conf /etc/nginx/sites-enabled/web.conf

  user="admin"
  [ -n "${USER:-}" ] && user="${USER:-}"

  if [ -n "${PASS:-}" ]; then

    # Set password
    echo "$user:{PLAIN}${PASS:-}" > /etc/nginx/.htpasswd

    sed -i "s/auth_basic off/auth_basic \"NoVNC\"/g" /etc/nginx/sites-enabled/web.conf

  fi

  sed -i "s/listen 8006 default_server;/listen $WEB_PORT default_server;/g" /etc/nginx/sites-enabled/web.conf
  sed -i "s/proxy_pass http:\/\/127.0.0.1:5700\/;/proxy_pass http:\/\/127.0.0.1:$WSS_PORT\/;/g" /etc/nginx/sites-enabled/web.conf
  sed -i "s/proxy_pass http:\/\/127.0.0.1:8004\/;/proxy_pass http:\/\/127.0.0.1:$WSD_PORT\/;/g" /etc/nginx/sites-enabled/web.conf

  # shellcheck disable=SC2143
  if [ -f /proc/net/if_inet6 ] && [ -n "$(ifconfig -a | grep inet6)" ]; then

    sed -i "s/listen $WEB_PORT default_server;/listen [::]:$WEB_PORT default_server ipv6only=off;/g" /etc/nginx/sites-enabled/web.conf

  fi

  # Start webserver
  # Prefer using pid directive from /etc/nginx/nginx.conf if present to avoid
  # duplicate-pid errors when passing -g. Otherwise fall back to passing -g.
  mkdir -p /run /run/shm
  CONF_PID=$(sed -n 's/^[[:space:]]*pid[[:space:]]\+\([^;]*\);.*/\1/p' /etc/nginx/nginx.conf 2>/dev/null | tr -d '"' | head -n1 || true)

  if [ -n "$CONF_PID" ]; then
    PID_FILE="$CONF_PID"
    mkdir -p "$(dirname "$PID_FILE")" 2>/dev/null || true
    touch "$PID_FILE" 2>/dev/null || true
    if [ -w "$PID_FILE" ] 2>/dev/null; then
      info "Starting nginx (using pid from config): $PID_FILE"
      nginx -e stderr
    else
      # If we can't write the config-specified pid, try to create a fallback
      PID_FILE="/run/shm/nginx.pid"
      mkdir -p "$(dirname "$PID_FILE")" 2>/dev/null || true
      touch "$PID_FILE" 2>/dev/null || true
      info "Config pid $CONF_PID not writable, starting nginx with fallback pid: $PID_FILE"
      nginx -g "pid $PID_FILE;" -e stderr
    fi
  else
    # No pid directive in config: use runtime-chosen pid file
    PID_FILE="/run/nginx.pid"
    if ! touch "$PID_FILE" 2>/dev/null || [ ! -w "$PID_FILE" ] 2>/dev/null; then
      PID_FILE="/run/shm/nginx.pid"
      mkdir -p "$(dirname "$PID_FILE")" 2>/dev/null || true
      touch "$PID_FILE" 2>/dev/null || true
    fi
    info "Starting nginx with pid file: $PID_FILE"
    nginx -g "pid $PID_FILE;" -e stderr
  fi

  # Start websocket server — write logs to /run/shm (writable in non-root mode)
  mkdir -p /run/shm
  websocketd --address 127.0.0.1 --port="$WSD_PORT" /run/socket.sh >/run/shm/websocketd.log 2>&1 &
  echo "$!" > /run/websocketd.pid

fi

return 0