-
Notifications
You must be signed in to change notification settings - Fork 1
/
setupInstance.sh
91 lines (69 loc) · 3.58 KB
/
setupInstance.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/bin/bash
#Tested on Ubuntu 18.04 on GCP
vncPassword=$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/vncpass -H "Metadata-Flavor: Google")
username=$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/linuxuser -H "Metadata-Flavor: Google")
dpkg --add-architecture i386
curl -O https://storage.googleapis.com/nvidia-drivers-us-public/GRID/GRID8.0/NVIDIA-Linux-x86_64-418.70-grid.run &
apt-get update
apt-get install -y dialog pulseaudio libsdl2-image-2.0-0 xserver-xorg-core \
x11-apps x11-utils mesa-utils xterm xfonts-base tigervnc-common \
x11-xserver-utils x11vnc icewm steam-installer gcc make python pkg-config-aarch64-linux-gnu
bash NVIDIA-Linux-x86_64-418.70-grid.run -a -q -N --ui=none
nvidia-xconfig --virtual=1280x720
#We'll use these non-OS disks as Steam game folders.
#These have to be added as Steam Library Folders on Steam GUI.
#TODO can we add these with a script?
mkdir /mnt/game
#persistent disks of GCP
if [ -e "/dev/sdb" ]
then
if [[ $(lsblk /dev/sdb -no fstype) != "ext4" ]]
then
mkfs.ext4 /dev/sdb
fi
mount /dev/sdb /mnt/game
chown -R $username:$username /mnt/game
echo "/dev/sdb /mnt/game ext4 defaults,nofail 0 0" >> /etc/fstab
fi
#Local SSD of GCP
if [ -e "/dev/nvme0n1" ]
then
if [[ $(lsblk /dev/nvme0n1 -no fstype) != "ext4" ]]
then
mkfs.ext4 /dev/nvme0n1
fi
mount /dev/nvme0n1 /mnt/game
chown -R $username:$username /mnt/game
echo "/dev/nvme0n1 /mnt/game ext4 defaults,nofail 0 0" >> /etc/fstab
fi
#TODO: fix this ugly hack for gamepad
chmod 777 /dev/uinput
#Download GloriousEgroll
runuser -l $username -c 'wget https://github.com/GloriousEggroll/proton-ge-custom/releases/download/4.21-GE-2/Proton-4.21-GE-2.tar.gz'
runuser -l $username -c "mkdir /home/$username/.steam"
runuser -l $username -c "mkdir /home/$username/.steam/compatibilitytools.d/"
runuser -l $username -c "tar -C /home/$username/.steam/compatibilitytools.d/ -zxvf Proton-4.21-GE-2.tar.gz"
#Setup VNC password for user
runuser -l $username -c "echo -e '$vncPassword\n$vncPassword\nn' | vncpasswd"
#this is for dummy Xorg screen. Relevant xorg.conf and xserver-xorg-video-dummy needed
#nohup /usr/bin/Xorg -noreset +extension GLX +extension RANDR +extension RENDER -logfile ./10.log -config /root/xorg.conf :1&
nohup Xorg &
#No need to run x11vnc because websockify and novnc will
#nohup x11vnc -loop -forever -repeat -display :0 -rfbport 5901&
#TODO add these as a startup service
nohup runuser -l $username -c 'DISPLAY=:0 icewm-session'&
nohup runuser -l $username -c 'DISPLAY=:0 steam'&
#WEB VNC
#This is used for accessing desktop over web for typing in Steam credentials and troubleshooting
WEBSOCKIFY_VERSION=0.8.0
NOVNC_VERSION=1.0.0-beta
curl -fsSL https://github.com/novnc/noVNC/archive/v${NOVNC_VERSION}.tar.gz | tar -xzf - -C /opt
curl -fsSL https://github.com/novnc/websockify/archive/v${WEBSOCKIFY_VERSION}.tar.gz | tar -xzf - -C /opt
mv /opt/noVNC-${NOVNC_VERSION} /opt/noVNC
mv /opt/websockify-${WEBSOCKIFY_VERSION} /opt/websockify
ln -s /opt/noVNC/vnc_lite.html /opt/noVNC/index.html
cd /opt/websockify && make
#make self signed certificate
runuser -l $username -c "openssl req -new -x509 -days 365 -nodes -subj '/C=TR/emailAddress=a/ST=a/L=a/O=a/OU=a/CN=a' -out /home/$username/self.pem -keyout /home/$username/self.pem"
nohup runuser -l $username -c '/opt/websockify/run 5901 --cert=./self.pem --ssl-only --web=/opt/noVNC --wrap-mode=ignore -- x11vnc -usepw -display :0 -rfbport 5901 -loop -forever -repeat -noxdamage'&
#TODO add websockify-vnc as a service to run at startup, this is useful after a reboot