]> git.proxmox.com Git - mirror_novnc.git/blame - utils/launch.sh
wsproxy: warn when no cert. C sock close cleanup.
[mirror_novnc.git] / utils / launch.sh
CommitLineData
b89c6db3
JM
1#!/bin/bash
2
3usage() {
4 if [ "$*" ]; then
5 echo "$*"
6 echo
7 fi
8 echo "Usage: ${NAME} [--web WEB_PORT] [--proxy PROXY_PORT] [--vnc VNC_HOST:PORT]"
9 echo
10 echo "Starts a mini-webserver and the WebSockets proxy and"
11 echo "provides a cut and paste URL to go to."
12 echo
13 echo " --web WEB_PORT Port to serve web pages at"
14 echo " Default: 8080"
15 echo " --proxy PROXY_PORT Port for proxy to listen on"
16 echo " Default: 8081"
17 echo " --vnc VNC_HOST:PORT VNC server host:port proxy target"
18 echo " Default: localhost:5900"
19 exit 2
20}
21
22NAME="$(basename $0)"
b992f7c7 23HERE="$(cd "$(dirname "$0")" && pwd)"
b89c6db3
JM
24WEB_PORT="6080"
25PROXY_PORT="6081"
26VNC_DEST="localhost:5900"
27web_pid=""
28proxy_pid=""
29
30die() {
31 echo "$*"
32 exit 1
33}
34
35cleanup() {
36 trap - TERM QUIT INT EXIT
37 trap "true" CHLD # Ignore cleanup messages
38 echo
39 if [ -n "${web_pid}" ]; then
40 echo "Terminating webserver (${web_pid})"
41 kill ${web_pid}
42 fi
43 if [ -n "${proxy_pid}" ]; then
44 echo "Terminating WebSockets proxy (${proxy_pid})"
45 kill ${proxy_pid}
46 fi
47}
48
49# Process Arguments
50
51# Arguments that only apply to chrooter itself
52while [ "$*" ]; do
53 param=$1; shift; OPTARG=$1
54 case $param in
55 --web) WEB_PORT="${OPTARG}"; shift ;;
56 --proxy) PROXY_PORT="${OPTARG}"; shift ;;
57 --vnc) VNC_DEST="${OPTARG}"; shift ;;
58 -h|--help) usage ;;
59 -*) usage "Unknown chrooter option: ${param}" ;;
60 *) break ;;
61 esac
62done
63
64# Sanity checks
65which netstat >/dev/null 2>&1 \
66 || die "Must have netstat installed"
67
68netstat -ltn | grep -qs "${WEB_PORT}.*LISTEN" \
69 && die "Port ${WEB_PORT} in use. Try --web WEB_PORT"
70
71netstat -ltn | grep -qs "${PROXY_PORT}.*LISTEN" \
72 && die "Port ${PROXY_PORT} in use. Try --proxy PROXY_PORT"
73
74trap "cleanup" TERM QUIT INT EXIT
75
0f7f146f
JM
76# Find vnc.html
77if [ -e "$(pwd)/vnc.html" ]; then
78 TOP=$(pwd)
79elif [ -e "${HERE}/../vnc.html" ]; then
80 TOP=${HERE}/../
81elif [ -e "${HERE}/vnc.html" ]; then
82 TOP=${HERE}
83else
84 die "Could not find vnc.html"
85fi
86cd ${TOP}
87
b89c6db3
JM
88echo "Starting webserver on port ${WEB_PORT}"
89${HERE}/web.py ${WEB_PORT} >/dev/null &
90web_pid="$!"
91sleep 1
92if ps -p ${web_pid} >/dev/null; then
93 echo "Started webserver (pid: ${web_pid})"
94else
95 web_pid=
96 echo "Failed to start webserver"
97 exit 1
98fi
99
100echo "Starting WebSockets proxy on port ${PROXY_PORT}"
101${HERE}/wsproxy.py -f ${PROXY_PORT} ${VNC_DEST} &
102proxy_pid="$!"
103sleep 1
104if ps -p ${proxy_pid} >/dev/null; then
105 echo "Started WebSockets proxy (pid: ${proxy_pid})"
106else
107 proxy_pid=
108 echo "Failed to start WebSockets proxy"
109 exit 1
110fi
111
112echo -e "\n\nNavigate to to this URL:\n"
113echo -e " http://$(hostname):${WEB_PORT}/vnc.html?host=$(hostname)&port=${PROXY_PORT}\n"
114echo -e "Press Ctrl-C to exit\n\n"
115
116wait ${web_pid}
117