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