mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-14 01:25:37 -05:00
92 lines
2.5 KiB
Bash
92 lines
2.5 KiB
Bash
#!/bin/bash
|
|
|
|
NONROOT_USER=node
|
|
LOG=/tmp/container-init.log
|
|
|
|
# Execute the command it not already running
|
|
startInBackgroundIfNotRunning()
|
|
{
|
|
log "Starting $1."
|
|
echo -e "\n** $(date) **" | sudoIf tee -a /tmp/$1.log > /dev/null
|
|
if ! pidof $1 > /dev/null; then
|
|
keepRunningInBackground "$@"
|
|
while ! pidof $1 > /dev/null; do
|
|
sleep 1
|
|
done
|
|
log "$1 started."
|
|
else
|
|
echo "$1 is already running." | sudoIf tee -a /tmp/$1.log > /dev/null
|
|
log "$1 is already running."
|
|
fi
|
|
}
|
|
|
|
# Keep command running in background
|
|
keepRunningInBackground()
|
|
{
|
|
($2 sh -c "while :; do echo [\$(date)] Process started.; $3; echo [\$(date)] Process exited!; sleep 5; done 2>&1" | sudoIf tee -a /tmp/$1.log > /dev/null & echo "$!" | sudoIf tee /tmp/$1.pid > /dev/null)
|
|
}
|
|
|
|
# Use sudo to run as root when required
|
|
sudoIf()
|
|
{
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
sudo "$@"
|
|
else
|
|
"$@"
|
|
fi
|
|
}
|
|
|
|
# Use sudo to run as non-root user if not already running
|
|
sudoUserIf()
|
|
{
|
|
if [ "$(id -u)" -eq 0 ]; then
|
|
sudo -u ${NONROOT_USER} "$@"
|
|
else
|
|
"$@"
|
|
fi
|
|
}
|
|
|
|
# Log messages
|
|
log()
|
|
{
|
|
echo -e "[$(date)] $@" | sudoIf tee -a $LOG > /dev/null
|
|
}
|
|
|
|
log "** SCRIPT START **"
|
|
|
|
# Start dbus.
|
|
log 'Running "/etc/init.d/dbus start".'
|
|
if [ -f "/var/run/dbus/pid" ] && ! pidof dbus-daemon > /dev/null; then
|
|
sudoIf rm -f /var/run/dbus/pid
|
|
fi
|
|
sudoIf /etc/init.d/dbus start 2>&1 | sudoIf tee -a /tmp/dbus-daemon-system.log > /dev/null
|
|
while ! pidof dbus-daemon > /dev/null; do
|
|
sleep 1
|
|
done
|
|
|
|
# Set up Xvfb.
|
|
startInBackgroundIfNotRunning "Xvfb" sudoIf "Xvfb ${DISPLAY:-:1} +extension RANDR -screen 0 ${MAX_VNC_RESOLUTION:-1920x1080x16}"
|
|
|
|
# Start fluxbox as a light weight window manager.
|
|
startInBackgroundIfNotRunning "fluxbox" sudoUserIf "dbus-launch startfluxbox"
|
|
|
|
# Start x11vnc
|
|
startInBackgroundIfNotRunning "x11vnc" sudoIf "x11vnc -display ${DISPLAY:-:1} -rfbport ${VNC_PORT:-5901} -localhost -no6 -xkb -shared -forever -passwdfile $HOME/.vnc/passwd"
|
|
|
|
# Set resolution
|
|
/usr/local/bin/set-resolution ${VNC_RESOLUTION:-1280x720} ${VNC_DPI:-72}
|
|
|
|
|
|
# Spin up noVNC if installed and not runnning.
|
|
if [ -d "/usr/local/novnc" ] && [ "$(ps -ef | grep /usr/local/novnc/noVNC*/utils/launch.sh | grep -v grep)" = "" ]; then
|
|
keepRunningInBackground "noVNC" sudoIf "/usr/local/novnc/noVNC*/utils/launch.sh --listen ${NOVNC_PORT:-6080} --vnc localhost:${VNC_PORT:-5901}"
|
|
log "noVNC started."
|
|
else
|
|
log "noVNC is already running or not installed."
|
|
fi
|
|
|
|
# Run whatever was passed in
|
|
log "Executing \"$@\"."
|
|
"$@"
|
|
log "** SCRIPT EXIT **"
|