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