]>
Commit | Line | Data |
---|---|---|
b89c6db3 JM |
1 | #!/bin/bash |
2 | ||
3 | usage() { | |
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 | ||
22 | NAME="$(basename $0)" | |
b992f7c7 | 23 | HERE="$(cd "$(dirname "$0")" && pwd)" |
b89c6db3 JM |
24 | WEB_PORT="6080" |
25 | PROXY_PORT="6081" | |
26 | VNC_DEST="localhost:5900" | |
27 | web_pid="" | |
28 | proxy_pid="" | |
29 | ||
30 | die() { | |
31 | echo "$*" | |
32 | exit 1 | |
33 | } | |
34 | ||
35 | cleanup() { | |
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 | |
52 | while [ "$*" ]; 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 | |
62 | done | |
63 | ||
64 | # Sanity checks | |
65 | which netstat >/dev/null 2>&1 \ | |
66 | || die "Must have netstat installed" | |
67 | ||
68 | netstat -ltn | grep -qs "${WEB_PORT}.*LISTEN" \ | |
69 | && die "Port ${WEB_PORT} in use. Try --web WEB_PORT" | |
70 | ||
71 | netstat -ltn | grep -qs "${PROXY_PORT}.*LISTEN" \ | |
72 | && die "Port ${PROXY_PORT} in use. Try --proxy PROXY_PORT" | |
73 | ||
74 | trap "cleanup" TERM QUIT INT EXIT | |
75 | ||
0f7f146f JM |
76 | # Find vnc.html |
77 | if [ -e "$(pwd)/vnc.html" ]; then | |
78 | TOP=$(pwd) | |
79 | elif [ -e "${HERE}/../vnc.html" ]; then | |
80 | TOP=${HERE}/../ | |
81 | elif [ -e "${HERE}/vnc.html" ]; then | |
82 | TOP=${HERE} | |
83 | else | |
84 | die "Could not find vnc.html" | |
85 | fi | |
86 | cd ${TOP} | |
87 | ||
b89c6db3 JM |
88 | echo "Starting webserver on port ${WEB_PORT}" |
89 | ${HERE}/web.py ${WEB_PORT} >/dev/null & | |
90 | web_pid="$!" | |
91 | sleep 1 | |
92 | if ps -p ${web_pid} >/dev/null; then | |
93 | echo "Started webserver (pid: ${web_pid})" | |
94 | else | |
95 | web_pid= | |
96 | echo "Failed to start webserver" | |
97 | exit 1 | |
98 | fi | |
99 | ||
100 | echo "Starting WebSockets proxy on port ${PROXY_PORT}" | |
101 | ${HERE}/wsproxy.py -f ${PROXY_PORT} ${VNC_DEST} & | |
102 | proxy_pid="$!" | |
103 | sleep 1 | |
104 | if ps -p ${proxy_pid} >/dev/null; then | |
105 | echo "Started WebSockets proxy (pid: ${proxy_pid})" | |
106 | else | |
107 | proxy_pid= | |
108 | echo "Failed to start WebSockets proxy" | |
109 | exit 1 | |
110 | fi | |
111 | ||
112 | echo -e "\n\nNavigate to to this URL:\n" | |
113 | echo -e " http://$(hostname):${WEB_PORT}/vnc.html?host=$(hostname)&port=${PROXY_PORT}\n" | |
114 | echo -e "Press Ctrl-C to exit\n\n" | |
115 | ||
116 | wait ${web_pid} | |
117 |