1#!/bin/sh
2set -eu
3if [ "$(id -u)" != 0 ]; then
4 printf '%s\n' 'Run this installer with sudo to install the guest agent.' >&2
5 exit 1
6fi
7if [ "${1-}" = --remove ]; then
8 rm -f /etc/xdg/autostart/snowglobe-guest.desktop /etc/udev/rules.d/70-snowglobe-guest.rules /usr/local/bin/snowglobe-guest
9 udevadm control --reload-rules
10 udevadm trigger --subsystem-match=virtio-ports
11 udevadm settle
12 port=$(python3 -c 'import json, sys; print("/dev/virtio-ports/" + json.load(open(sys.argv[1]))["channel"])' "$(dirname "$0")/protocol.json")
13 if [ -e "$port" ]; then chmod 0600 "$port"; fi
14 exit 0
15fi
16if [ "$#" != 1 ] || [ ! -f "$1" ]; then
17 printf '%s\n' 'Pass the path to the Linux guest executable.' >&2
18 exit 1
19fi
20install -D -m 0755 "$1" /usr/local/bin/snowglobe-guest
21mkdir -p /etc/udev/rules.d /etc/xdg/autostart
22python3 - "$(dirname "$0")/protocol.json" > /etc/udev/rules.d/70-snowglobe-guest.rules <<'PYTHON'
23import json, sys
24channel = json.load(open(sys.argv[1]))['channel']
25print('SUBSYSTEM=="virtio-ports", ATTR{name}==' + json.dumps(channel) + ', TAG+="uaccess"')
26PYTHON
27cat > /etc/xdg/autostart/snowglobe-guest.desktop <<'DESKTOP'
28[Desktop Entry]
29Type=Application
30Name=Snowglobe Guest
31Exec=/usr/local/bin/snowglobe-guest
32NoDisplay=true
33DESKTOP
34udevadm control --reload-rules
35udevadm trigger --subsystem-match=virtio-ports
36udevadm settle
37printf '%s\n' 'Installed. Sign out and back in to start the guest agent.'