computer-guest/microagent-init.sh

91 lines
2.2 KiB
Bash

#!/usr/bin/env bash
set -uo pipefail
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
log() {
printf '[microagent-init] %s\n' "$*" >&2
}
mountpoint -q /proc || mount -t proc proc /proc
mountpoint -q /sys || mount -t sysfs sysfs /sys
mountpoint -q /dev || mount -t devtmpfs devtmpfs /dev
mountpoint -q /run || mount -t tmpfs tmpfs /run
mkdir -p /tmp /var/tmp /run/sshd /var/log
chmod 1777 /tmp /var/tmp
cleanup() {
trap - INT TERM
[ -n "${rng_pid:-}" ] && kill "$rng_pid" >/dev/null 2>&1 || true
[ -n "${sshd_pid:-}" ] && kill "$sshd_pid" >/dev/null 2>&1 || true
[ -n "${desktop_pid:-}" ] && kill "$desktop_pid" >/dev/null 2>&1 || true
wait >/dev/null 2>&1 || true
exit 0
}
pid_running() {
local pid="${1:-}"
[ -n "$pid" ] && kill -0 "$pid" >/dev/null 2>&1
}
reap_if_needed() {
local pid="${1:-}"
if [ -n "$pid" ]; then
wait "$pid" >/dev/null 2>&1 || true
fi
}
start_sshd() {
reap_if_needed "${sshd_pid:-}"
log "starting sshd on 2222"
/usr/sbin/sshd -D -e >>/var/log/sshd.log 2>&1 &
sshd_pid=$!
}
start_desktop() {
reap_if_needed "${desktop_pid:-}"
log "starting noVNC desktop on 6080"
/usr/local/bin/microagent-desktop-session >>/var/log/desktop.log 2>&1 &
desktop_pid=$!
}
trap cleanup INT TERM
log "bringing up guest network"
if ! /usr/local/bin/microagent-network-up >/var/log/network.log 2>&1; then
cat /var/log/network.log >&2 || true
exit 1
fi
if [ ! -f /etc/ssh/ssh_host_ed25519_key ]; then
log "generating ssh host keys"
ssh-keygen -A
fi
if [ -f /etc/microagent/authorized_keys ]; then
log "installing baked authorized_keys for node"
install -d -m 0700 -o node -g node /home/node/.ssh
install -m 0600 -o node -g node /etc/microagent/authorized_keys /home/node/.ssh/authorized_keys
fi
if command -v jitterentropy-rngd >/dev/null 2>&1; then
log "starting jitterentropy-rngd"
jitterentropy-rngd -v >/var/log/jitterentropy.log 2>&1 &
rng_pid=$!
fi
start_sshd
start_desktop
while true; do
if ! pid_running "${sshd_pid:-}"; then
log "sshd exited; restarting"
start_sshd
fi
if ! pid_running "${desktop_pid:-}"; then
log "desktop session exited; restarting"
start_desktop
fi
sleep 1
done