]> git.proxmox.com Git - mirror_novnc.git/blame - utils/launch.sh
Added an '--ssl-only' option to noVNC launch script. This will pass through to Webso...
[mirror_novnc.git] / utils / launch.sh
CommitLineData
e9155818 1#!/usr/bin/env bash
b89c6db3
JM
2
3usage() {
4 if [ "$*" ]; then
5 echo "$*"
6 echo
7 fi
c77d9fcc 8 echo "Usage: ${NAME} [--listen PORT] [--vnc VNC_HOST:PORT] [--cert CERT] [--ssl-only]"
b89c6db3 9 echo
f2538f33
JM
10 echo "Starts the WebSockets proxy and a mini-webserver and "
11 echo "provides a cut-and-paste URL to go to."
6f514864 12 echo
f2538f33 13 echo " --listen PORT Port for proxy/webserver to listen on"
96bc3d30 14 echo " Default: 6080"
b89c6db3
JM
15 echo " --vnc VNC_HOST:PORT VNC server host:port proxy target"
16 echo " Default: localhost:5900"
96bc3d30
JM
17 echo " --cert CERT Path to combined cert/key file"
18 echo " Default: self.pem"
3516bdf3
JM
19 echo " --web WEB Path to web files (e.g. vnc.html)"
20 echo " Default: ./"
c77d9fcc
WF
21 echo " --ssl-only Disable non-https connections."
22 echo " "
b89c6db3
JM
23 exit 2
24}
25
26NAME="$(basename $0)"
2ace90e6
SR
27REAL_NAME="$(readlink -f $0)"
28HERE="$(cd "$(dirname "$REAL_NAME")" && pwd)"
96bc3d30 29PORT="6080"
b89c6db3 30VNC_DEST="localhost:5900"
96bc3d30 31CERT=""
3516bdf3 32WEB=""
b89c6db3 33proxy_pid=""
c77d9fcc 34SSLONLY=""
b89c6db3
JM
35
36die() {
37 echo "$*"
38 exit 1
39}
40
41cleanup() {
42 trap - TERM QUIT INT EXIT
43 trap "true" CHLD # Ignore cleanup messages
44 echo
b89c6db3
JM
45 if [ -n "${proxy_pid}" ]; then
46 echo "Terminating WebSockets proxy (${proxy_pid})"
47 kill ${proxy_pid}
48 fi
49}
50
51# Process Arguments
52
53# Arguments that only apply to chrooter itself
54while [ "$*" ]; do
55 param=$1; shift; OPTARG=$1
56 case $param in
96bc3d30
JM
57 --listen) PORT="${OPTARG}"; shift ;;
58 --vnc) VNC_DEST="${OPTARG}"; shift ;;
59 --cert) CERT="${OPTARG}"; shift ;;
3516bdf3 60 --web) WEB="${OPTARG}"; shift ;;
c77d9fcc 61 --ssl-only) SSLONLY="--ssl-only" ;;
96bc3d30 62 -h|--help) usage ;;
b89c6db3 63 -*) usage "Unknown chrooter option: ${param}" ;;
96bc3d30 64 *) break ;;
b89c6db3
JM
65 esac
66done
67
68# Sanity checks
69which netstat >/dev/null 2>&1 \
70 || die "Must have netstat installed"
71
cf068be2 72netstat -ltn | grep -qs "${PORT} .*LISTEN" \
96bc3d30 73 && die "Port ${PORT} in use. Try --listen PORT"
b89c6db3
JM
74
75trap "cleanup" TERM QUIT INT EXIT
76
0f7f146f 77# Find vnc.html
3516bdf3
JM
78if [ -n "${WEB}" ]; then
79 if [ ! -e "${WEB}/vnc.html" ]; then
80 die "Could not find ${WEB}/vnc.html"
81 fi
82elif [ -e "$(pwd)/vnc.html" ]; then
96bc3d30 83 WEB=$(pwd)
0f7f146f 84elif [ -e "${HERE}/../vnc.html" ]; then
96bc3d30 85 WEB=${HERE}/../
0f7f146f 86elif [ -e "${HERE}/vnc.html" ]; then
96bc3d30 87 WEB=${HERE}
3516bdf3
JM
88elif [ -e "${HERE}/../share/novnc/vnc.html" ]; then
89 WEB=${HERE}/../share/novnc/
0f7f146f
JM
90else
91 die "Could not find vnc.html"
92fi
0f7f146f 93
96bc3d30
JM
94# Find self.pem
95if [ -n "${CERT}" ]; then
96 if [ ! -e "${CERT}" ]; then
97 die "Could not find ${CERT}"
98 fi
99elif [ -e "$(pwd)/self.pem" ]; then
100 CERT="$(pwd)/self.pem"
101elif [ -e "${HERE}/../self.pem" ]; then
102 CERT="${HERE}/../self.pem"
103elif [ -e "${HERE}/self.pem" ]; then
104 CERT="${HERE}/self.pem"
b89c6db3 105else
96bc3d30 106 echo "Warning: could not find self.pem"
b89c6db3
JM
107fi
108
6f514864
SR
109# try to find websockify (prefer local, try global, then download local)
110if [[ -e ${HERE}/websockify ]]; then
111 WEBSOCKIFY=${HERE}/websockify/run
112
113 if [[ ! -x $WEBSOCKIFY ]]; then
114 echo "The path ${HERE}/websockify exists, but $WEBSOCKIFY either does not exist or is not executable."
54e835ee 115 echo "If you intended to use an installed websockify package, please remove ${HERE}/websockify."
6f514864
SR
116 exit 1
117 fi
118
119 echo "Using local websockify at $WEBSOCKIFY"
120else
121 WEBSOCKIFY=$(which websockify 2>/dev/null)
122
123 if [[ $? -ne 0 ]]; then
124 echo "No installed websockify, attempting to clone websockify..."
125 WEBSOCKIFY=${HERE}/websockify/run
9db6a906 126 git clone https://github.com/kanaka/websockify ${HERE}/websockify
6f514864
SR
127
128 if [[ ! -e $WEBSOCKIFY ]]; then
129 echo "Unable to locate ${HERE}/websockify/run after downloading"
130 exit 1
131 fi
132
133 echo "Using local websockify at $WEBSOCKIFY"
134 else
135 echo "Using installed websockify at $WEBSOCKIFY"
136 fi
137fi
138
96bc3d30 139echo "Starting webserver and WebSockets proxy on port ${PORT}"
6f514864 140#${HERE}/websockify --web ${WEB} ${CERT:+--cert ${CERT}} ${PORT} ${VNC_DEST} &
c77d9fcc 141${WEBSOCKIFY} ${SSLONLY} --web ${WEB} ${CERT:+--cert ${CERT}} ${PORT} ${VNC_DEST} &
b89c6db3
JM
142proxy_pid="$!"
143sleep 1
f2538f33 144if ! ps -p ${proxy_pid} >/dev/null; then
b89c6db3
JM
145 proxy_pid=
146 echo "Failed to start WebSockets proxy"
147 exit 1
148fi
149
19ed81fd 150echo -e "\n\nNavigate to this URL:\n"
96bc3d30 151echo -e " http://$(hostname):${PORT}/vnc.html?host=$(hostname)&port=${PORT}\n"
b89c6db3
JM
152echo -e "Press Ctrl-C to exit\n\n"
153
96bc3d30 154wait ${proxy_pid}