zeus
4 years ago
3 changed files with 411 additions and 0 deletions
@ -0,0 +1,187 @@ |
|||||
|
#!/usr/bin/env bash |
||||
|
|
||||
|
# Copyright (C) 2018 The noVNC Authors |
||||
|
# Licensed under MPL 2.0 or any later version (see LICENSE.txt) |
||||
|
|
||||
|
usage() { |
||||
|
if [ "$*" ]; then |
||||
|
echo "$*" |
||||
|
echo |
||||
|
fi |
||||
|
echo "Usage: ${NAME} [--listen PORT] [--vnc VNC_HOST:PORT] [--cert CERT] [--ssl-only]" |
||||
|
echo |
||||
|
echo "Starts the WebSockets proxy and a mini-webserver and " |
||||
|
echo "provides a cut-and-paste URL to go to." |
||||
|
echo |
||||
|
echo " --listen PORT Port for proxy/webserver to listen on" |
||||
|
echo " Default: 6080" |
||||
|
echo " --vnc VNC_HOST:PORT VNC server host:port proxy target" |
||||
|
echo " Default: localhost:5900" |
||||
|
echo " --cert CERT Path to combined cert/key file, or just" |
||||
|
echo " the cert file if used with --key" |
||||
|
echo " Default: self.pem" |
||||
|
echo " --key KEY Path to key file, when not combined with cert" |
||||
|
echo " --web WEB Path to web files (e.g. vnc.html)" |
||||
|
echo " Default: ./" |
||||
|
echo " --ssl-only Disable non-https connections." |
||||
|
echo " " |
||||
|
echo " --record FILE Record traffic to FILE.session.js" |
||||
|
echo " " |
||||
|
exit 2 |
||||
|
} |
||||
|
|
||||
|
NAME="$(basename $0)" |
||||
|
REAL_NAME="$(readlink -f $0)" |
||||
|
HERE="$(cd "$(dirname "$REAL_NAME")" && pwd)" |
||||
|
PORT="6080" |
||||
|
VNC_DEST="localhost:5900" |
||||
|
CERT="" |
||||
|
KEY="" |
||||
|
WEB="" |
||||
|
proxy_pid="" |
||||
|
SSLONLY="" |
||||
|
RECORD_ARG="" |
||||
|
|
||||
|
die() { |
||||
|
echo "$*" |
||||
|
exit 1 |
||||
|
} |
||||
|
|
||||
|
cleanup() { |
||||
|
trap - TERM QUIT INT EXIT |
||||
|
trap "true" CHLD # Ignore cleanup messages |
||||
|
echo |
||||
|
if [ -n "${proxy_pid}" ]; then |
||||
|
echo "Terminating WebSockets proxy (${proxy_pid})" |
||||
|
kill ${proxy_pid} |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
# Process Arguments |
||||
|
|
||||
|
# Arguments that only apply to chrooter itself |
||||
|
while [ "$*" ]; do |
||||
|
param=$1; shift; OPTARG=$1 |
||||
|
case $param in |
||||
|
--listen) PORT="${OPTARG}"; shift ;; |
||||
|
--vnc) VNC_DEST="${OPTARG}"; shift ;; |
||||
|
--cert) CERT="${OPTARG}"; shift ;; |
||||
|
--key) KEY="${OPTARG}"; shift ;; |
||||
|
--web) WEB="${OPTARG}"; shift ;; |
||||
|
--ssl-only) SSLONLY="--ssl-only" ;; |
||||
|
--record) RECORD_ARG="--record ${OPTARG}"; shift ;; |
||||
|
-h|--help) usage ;; |
||||
|
-*) usage "Unknown chrooter option: ${param}" ;; |
||||
|
*) break ;; |
||||
|
esac |
||||
|
done |
||||
|
|
||||
|
# Sanity checks |
||||
|
if bash -c "exec 7<>/dev/tcp/localhost/${PORT}" &> /dev/null; then |
||||
|
exec 7<&- |
||||
|
exec 7>&- |
||||
|
die "Port ${PORT} in use. Try --listen PORT" |
||||
|
else |
||||
|
exec 7<&- |
||||
|
exec 7>&- |
||||
|
fi |
||||
|
|
||||
|
trap "cleanup" TERM QUIT INT EXIT |
||||
|
|
||||
|
# Find vnc.html |
||||
|
if [ -n "${WEB}" ]; then |
||||
|
if [ ! -e "${WEB}/vnc.html" ]; then |
||||
|
die "Could not find ${WEB}/vnc.html" |
||||
|
fi |
||||
|
elif [ -e "$(pwd)/vnc.html" ]; then |
||||
|
WEB=$(pwd) |
||||
|
elif [ -e "${HERE}/../vnc.html" ]; then |
||||
|
WEB=${HERE}/../ |
||||
|
elif [ -e "${HERE}/vnc.html" ]; then |
||||
|
WEB=${HERE} |
||||
|
elif [ -e "${HERE}/../share/novnc/vnc.html" ]; then |
||||
|
WEB=${HERE}/../share/novnc/ |
||||
|
else |
||||
|
die "Could not find vnc.html" |
||||
|
fi |
||||
|
|
||||
|
# Find self.pem |
||||
|
if [ -n "${CERT}" ]; then |
||||
|
if [ ! -e "${CERT}" ]; then |
||||
|
die "Could not find ${CERT}" |
||||
|
fi |
||||
|
elif [ -e "$(pwd)/self.pem" ]; then |
||||
|
CERT="$(pwd)/self.pem" |
||||
|
elif [ -e "${HERE}/../self.pem" ]; then |
||||
|
CERT="${HERE}/../self.pem" |
||||
|
elif [ -e "${HERE}/self.pem" ]; then |
||||
|
CERT="${HERE}/self.pem" |
||||
|
else |
||||
|
echo "Warning: could not find self.pem" |
||||
|
fi |
||||
|
|
||||
|
# Check key file |
||||
|
if [ -n "${KEY}" ]; then |
||||
|
if [ ! -e "${KEY}" ]; then |
||||
|
die "Could not find ${KEY}" |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
# try to find websockify (prefer local, try global, then download local) |
||||
|
if [[ -d ${HERE}/websockify ]]; then |
||||
|
WEBSOCKIFY=${HERE}/websockify/run |
||||
|
|
||||
|
if [[ ! -x $WEBSOCKIFY ]]; then |
||||
|
echo "The path ${HERE}/websockify exists, but $WEBSOCKIFY either does not exist or is not executable." |
||||
|
echo "If you intended to use an installed websockify package, please remove ${HERE}/websockify." |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
echo "Using local websockify at $WEBSOCKIFY" |
||||
|
else |
||||
|
WEBSOCKIFY_FROMSYSTEM=$(which websockify 2>/dev/null) |
||||
|
WEBSOCKIFY_FROMSNAP=${HERE}/../usr/bin/python2-websockify |
||||
|
[ -f $WEBSOCKIFY_FROMSYSTEM ] && WEBSOCKIFY=$WEBSOCKIFY_FROMSYSTEM |
||||
|
[ -f $WEBSOCKIFY_FROMSNAP ] && WEBSOCKIFY=$WEBSOCKIFY_FROMSNAP |
||||
|
|
||||
|
if [ ! -f "$WEBSOCKIFY" ]; then |
||||
|
echo "No installed websockify, attempting to clone websockify..." |
||||
|
WEBSOCKIFY=${HERE}/websockify/run |
||||
|
git clone https://github.com/novnc/websockify ${HERE}/websockify |
||||
|
|
||||
|
if [[ ! -e $WEBSOCKIFY ]]; then |
||||
|
echo "Unable to locate ${HERE}/websockify/run after downloading" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
echo "Using local websockify at $WEBSOCKIFY" |
||||
|
else |
||||
|
echo "Using installed websockify at $WEBSOCKIFY" |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
echo "Starting webserver and WebSockets proxy on port ${PORT}" |
||||
|
echo ${WEBSOCKIFY} > /tmp/1 |
||||
|
|
||||
|
if [ "$SERVERROLE" == "master" ] ; then |
||||
|
${WEBSOCKIFY} ${SSLONLY} --web ${WEB} ${CERT:+--cert ${CERT}} ${KEY:+--key ${KEY}} --log-file ${HERE}/vnvlog ${PORT} --token-plugin TokenFile --token-source /home/ubuntu/vnc.config.d/ ${RECORD_ARG} & |
||||
|
fi |
||||
|
|
||||
|
proxy_pid="$!" |
||||
|
sleep 1 |
||||
|
if ! ps -p ${proxy_pid} >/dev/null; then |
||||
|
proxy_pid= |
||||
|
echo "Failed to start WebSockets proxy" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
echo -e "\n\nNavigate to this URL:\n" |
||||
|
if [ "x$SSLONLY" == "x" ]; then |
||||
|
echo -e " http://$(hostname):${PORT}/vnc.html?host=$(hostname)&port=${PORT}\n" |
||||
|
else |
||||
|
echo -e " https://$(hostname):${PORT}/vnc.html?host=$(hostname)&port=${PORT}\n" |
||||
|
fi |
||||
|
|
||||
|
echo -e "Press Ctrl-C to exit\n\n" |
||||
|
|
||||
|
wait ${proxy_pid} |
@ -0,0 +1,192 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
if [ ! -f $HOME/.vnc/passwd ] ; then |
||||
|
|
||||
|
if [ -z "$PASSWORD" ] ; then |
||||
|
PASSWORD=`pwgen -c -n -1 12` |
||||
|
echo -e "PASSWORD = $PASSWORD" > $HOME/password.txt |
||||
|
fi |
||||
|
|
||||
|
echo "$USER:$PASSWORD" | chpasswd |
||||
|
|
||||
|
# Set up vncserver |
||||
|
su $USER -c "mkdir $HOME/.vnc && echo '$PASSWORD' | vncpasswd -f > $HOME/.vnc/passwd && chmod 600 $HOME/.vnc/passwd && touch $HOME/.Xresources" |
||||
|
#vncpasswd -f <<<"write"$'\n'"view" >"$HOME/.vnc/passwd" |
||||
|
vncpasswd -f >"$HOME/.vnc/passwd" <<EOF |
||||
|
$PASSWORD |
||||
|
$PASSWORDVIEW |
||||
|
EOF |
||||
|
|
||||
|
chown -R $USER:$USER $HOME |
||||
|
|
||||
|
if [ ! -z "$SUDO" ]; then |
||||
|
case "$SUDO" in |
||||
|
[yY]|[yY][eE][sS]) |
||||
|
adduser $USER sudo |
||||
|
esac |
||||
|
fi |
||||
|
|
||||
|
/bin/cp -f /home/ubuntu/xstartup /home/ubuntu/.vnc/xstartup |
||||
|
|
||||
|
else |
||||
|
|
||||
|
VNC_PID=`find $HOME/.vnc -name '*.pid'` |
||||
|
if [ ! -z "$VNC_PID" ] ; then |
||||
|
vncserver -kill :1 |
||||
|
rm -rf /tmp/.X1* |
||||
|
fi |
||||
|
|
||||
|
fi |
||||
|
|
||||
|
if [ ! -z "$NGROK" ] ; then |
||||
|
case "$NGROK" in |
||||
|
[yY]|[yY][eE][sS]) |
||||
|
su ubuntu -c "$HOME/ngrok/ngrok http 6080 --log $HOME/ngrok/ngrok.log --log-format json" & |
||||
|
sleep 5 |
||||
|
NGROK_URL=`curl -s http://127.0.0.1:4040/status | grep -P "http://.*?ngrok.io" -oh` |
||||
|
su ubuntu -c "echo -e 'Ngrok URL = $NGROK_URL/vnc.html' > $HOME/ngrok/Ngrok_URL.txt" |
||||
|
esac |
||||
|
fi |
||||
|
|
||||
|
if [ "$SERVERROLE" == "master" ] ; then |
||||
|
IP=$(ifconfig eth1 | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p') |
||||
|
mkdir -p /tmp/vnc1 |
||||
|
echo "s$TASKREPID: $IP:5901" > /tmp/vnc1/mpi$TASKREPID.server |
||||
|
rm -f /home/ubuntu/vnc.config.d/token.list |
||||
|
rm -f /home/ubuntu/vnc.config.d/ls1.conf |
||||
|
|
||||
|
cp /tmp/vnc1/mpi$TASKREPID.server /home/ubuntu/vnc.config.d/token.list |
||||
|
|
||||
|
if [ ! -z "$GIT_TUTOR" ] ; then |
||||
|
mkdir -p $HOME/tutor |
||||
|
cd $HOME/tutor |
||||
|
/usr/bin/git clone $GIT_REPO_TUTOR |
||||
|
fi |
||||
|
|
||||
|
|
||||
|
fi |
||||
|
|
||||
|
|
||||
|
|
||||
|
# --------------------------- |
||||
|
# create scripts |
||||
|
# -------------------------- |
||||
|
if [ "$GIT_TUTOR" ] ; then |
||||
|
|
||||
|
REPO=${GIT_TUTOR##*/} |
||||
|
REPO=${REPO%.git} |
||||
|
|
||||
|
# --------------------------- |
||||
|
# start playground |
||||
|
# -------------------------- |
||||
|
|
||||
|
read -r -d '' VAR <<EOF |
||||
|
#!/bin/bash |
||||
|
|
||||
|
pm2-runtime /home/ubuntu/crond/playground.config.js |
||||
|
|
||||
|
EOF |
||||
|
echo "$VAR" > /home/ubuntu/crond/playground-start.sh |
||||
|
chmod +x /home/ubuntu/crond/playground-start.sh |
||||
|
|
||||
|
read -r -d '' VAR <<EOF |
||||
|
module.exports = { |
||||
|
"apps": [{ |
||||
|
"name" : "playground-nodejs", |
||||
|
"autorestart" : true, |
||||
|
"watch" : true, |
||||
|
"script" : "/home/ubuntu/project/tutor/$REPO/swarmlab-app/src/run/app.js", |
||||
|
"args" : "start", |
||||
|
"pid_file" : "/home/ubuntu/run/pid.pid", |
||||
|
"log_type" : "json", |
||||
|
"log_file" : "/home/ubuntu/logs/logfile", |
||||
|
"error_file" : "/home/ubuntu/logs/errorfile", |
||||
|
"out_file" : "/home/ubuntu/logs/outfile", |
||||
|
"log_date_format": "YYYY-MM-DD HH:mm Z", |
||||
|
"merge_logs" : true, |
||||
|
"exec_mode" : "fork", |
||||
|
"max_restarts": 10, |
||||
|
"max_memory_restart": "500M", |
||||
|
"restart_delay": 1000 |
||||
|
}] |
||||
|
} |
||||
|
EOF |
||||
|
echo "$VAR" > /home/ubuntu/crond/playground.config.js |
||||
|
chmod +x /home/ubuntu/crond/playground.config.js |
||||
|
|
||||
|
# --------------------------- |
||||
|
# sync playground |
||||
|
# -------------------------- |
||||
|
read -r -d '' VAR <<EOF |
||||
|
#!/bin/bash |
||||
|
|
||||
|
cd /home/ubuntu/project/tutor/$REPO |
||||
|
git fetch origin master |
||||
|
git reset --hard FETCH_HEAD |
||||
|
git clean -df |
||||
|
|
||||
|
|
||||
|
|
||||
|
EOF |
||||
|
echo "$VAR" > /home/ubuntu/crond/playground-sync.sh |
||||
|
chmod +x /home/ubuntu/crond/playground-sync.sh |
||||
|
|
||||
|
# ***************************************************** |
||||
|
# ***************************************************** |
||||
|
# ELSE |
||||
|
# ***************************************************** |
||||
|
# ***************************************************** |
||||
|
|
||||
|
else |
||||
|
|
||||
|
# --------------------------- |
||||
|
# hello world! |
||||
|
# -------------------------- |
||||
|
read -r -d '' VAR <<EOF |
||||
|
#!/bin/bash |
||||
|
|
||||
|
echo "Hello World!" |
||||
|
|
||||
|
EOF |
||||
|
echo "$VAR" > /home/ubuntu/crond/playground-start.sh |
||||
|
chmod +x /home/ubuntu/crond/playground-start.sh |
||||
|
|
||||
|
# --------------------------- |
||||
|
# NO sync playground |
||||
|
# -------------------------- |
||||
|
read -r -d '' VAR <<EOF |
||||
|
#!/bin/bash |
||||
|
|
||||
|
|
||||
|
echo "Hello World!" |
||||
|
|
||||
|
EOF |
||||
|
echo "$VAR" > /home/ubuntu/crond/playground-sync.sh |
||||
|
chmod +x /home/ubuntu/crond/playground-sync.sh |
||||
|
|
||||
|
fi |
||||
|
|
||||
|
read -r -d '' VAR <<EOF |
||||
|
#!/bin/bash |
||||
|
|
||||
|
$NODENAME |
||||
|
$NODEID |
||||
|
$SERVICEID |
||||
|
$SERVICENAME |
||||
|
$TASKID |
||||
|
$TASKNAME |
||||
|
$TASKREPID |
||||
|
|
||||
|
|
||||
|
EOF |
||||
|
echo "$VAR" > /home/ubuntu/crond/info |
||||
|
|
||||
|
|
||||
|
chown -R $USER.$USER /home/$USER |
||||
|
chmod -R 755 /home/$USER |
||||
|
|
||||
|
/home/ubuntu/crond/playground-start.sh |
||||
|
/home/ubuntu/crond/playground-sync.sh |
||||
|
|
||||
|
ipfs get /ipns/QmQ1R6HEG1tTChyzYdqmt1rSbUMoD4K4oN9Db6DN7g3PpR -o $HOME/bin |
||||
|
/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf |
@ -0,0 +1,32 @@ |
|||||
|
[program:apache2] |
||||
|
command=bash -c 'sleep 5 && /usr/sbin/apache2 -DFOREGROUND' |
||||
|
autorestart=true |
||||
|
|
||||
|
[program:sshd] |
||||
|
#command=bash -c 'sleep 5 && /usr/sbin/sshd -D' |
||||
|
command=/usr/sbin/sshd -D |
||||
|
stdout_logfile=/var/log/sshd.log |
||||
|
autorestart=true |
||||
|
|
||||
|
[program:ttyd] |
||||
|
command=bash -c 'sleep 5 && cd /home/ubuntu/project && sudo -u ubuntu ttyd --ssl --ssl-cert /home/ubuntu/ssl-ttyd/ca.crt --ssl-key /home/ubuntu/ssl-ttyd/ca.key -c user:%(ENV_PASSWORD)s -p 8088 -u ubuntu bash' |
||||
|
stdout_logfile=/var/log/ttyd.log |
||||
|
autorestart=true |
||||
|
|
||||
|
|
||||
|
[program:ipfs] |
||||
|
environment=IPFS_PATH=/home/ubuntu/.ipfs |
||||
|
command=ipfs daemon |
||||
|
|
||||
|
[program:vncserver] |
||||
|
command=vncserver -geometry 1600x900 :1 |
||||
|
user=ubuntu |
||||
|
|
||||
|
[program:noVNC] |
||||
|
command=/home/ubuntu/noVNC/utils/launch.sh --vnc localhost:5901 --listen 6080 |
||||
|
user=ubuntu |
||||
|
stdout_logfile=/var/log/novnc.log |
||||
|
redirect_stderr=true |
||||
|
#startretries=10 |
||||
|
|
||||
|
|
Loading…
Reference in new issue