forked from ballaswag/guppyscreen
-
Notifications
You must be signed in to change notification settings - Fork 0
/
installer.sh
executable file
·252 lines (198 loc) · 8.56 KB
/
installer.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
#!/bin/sh
yellow=`echo "\033[01;33m"`
green=`echo "\033[01;32m"`
red=`echo "\033[01;31m"`
white=`echo "\033[m"`
BACKUP_DIR=/usr/data/guppyify-backup
K1_GUPPY_DIR=/usr/data/guppyscreen
FT2FONT_PATH=/usr/lib/python3.8/site-packages/matplotlib/ft2font.cpython-38-mipsel-linux-gnu.so
ASSET_NAME="guppyscreen"
if [ "$1" = "zbolt" ]; then
ASSET_NAME="$ASSET_NAME-zbolt"
fi
ARCH=`uname -m`
if [ "$ARCH" = "mips" ] && [ -f /sys/class/graphics/fb0/virtual_size ]; then
res=`cat /sys/class/graphics/fb0/virtual_size`
x=${res%,*}
y=${res#*,}
printf "${green}Found screen virtual size $x, $y ${white}\n"
if [ $y -lt 800 ] && [ $x -lt 800 ]; then
printf "${green}Using smallscreen version ${white}\n"
ASSET_NAME="guppyscreen-smallscreen"
fi
else
printf "${red}Unable to find compatible platform/screen size (found platform: $ARCH) ${white}\n"
exit 1
fi
printf "${green}=== Installing Guppy Screen === ${white}\n"
# check ld.so version
if [ ! -f /lib/ld-2.29.so ]; then
printf "${red}ld.so is not the expected version. Make sure you're running 1.3.x.y firmware versions ${white}\n"
exit 1
fi
echo "Checking for a working Moonraker"
MRK_KPY_OK=`curl localhost:7125/server/info 2> /dev/null | jq .result.klippy_connected`
if [ "$MRK_KPY_OK" != "true" ]; then
printf "${yellow}Moonraker is not properly setup at port 7125. Continue anyways? (y/n) ${white}\n"
read confirm
echo
if [ "$confirm" = "y" -o "$confirm" = "Y" ]; then
echo "Continuing to install GuppyScreen"
else
echo "Please fix Moonraker and restart this script."
exit 1
fi
fi
KLIPPER_PATH=`curl localhost:7125/printer/info 2> /dev/null | jq -r .result.klipper_path`
if [ -z "$KLIPPER_PATH" -o x"$KLIPPER_PATH" == x"null" ]; then
KLIPPER_PATH=/usr/share/klipper
printf "${green} Falling back to klipper path: $KLIPPER_PATH ${white}\n"
fi
printf "${green} Found klipper path: $KLIPPER_PATH ${white}\n"
KLIPPY_EXTRA_DIR=$KLIPPER_PATH/klippy/extras
GCODE_SHELL_CMD=$KLIPPY_EXTRA_DIR/gcode_shell_command.py
SHAPER_CONFIG=$KLIPPY_EXTRA_DIR/calibrate_shaper_config.py
K1_CONFIG_FILE=`curl localhost:7125/printer/info 2> /dev/null | jq -r .result.config_file`
if [ -z "$K1_CONFIG_FILE" -o x"$K1_CONFIG_FILE" == x"null" ]; then
K1_CONFIG_DIR=/usr/data/printer_data/config
printf "${green} Falling back to config dir: $K1_CONFIG_DIR ${white}\n"
else
K1_CONFIG_DIR=$(dirname "$K1_CONFIG_FILE")
printf "${green} Found config dir: $K1_CONFIG_DIR ${white}\n"
fi
# kill pip cache to free up overlayfs
rm -rf /root/.cache
## bootstrap for ssl support
wget -q --no-check-certificate https://raw.githubusercontent.com/ballaswag/k1-discovery/main/bin/curl -O /tmp/curl
chmod +x /tmp/curl
ASSET_URL="https://github.com/ballaswag/guppyscreen/releases/latest/download/$ASSET_NAME.tar.gz"
if [ "$1" = "nightly" ] || [ "$2" = "nightly" ]; then
printf "${yellow}Installing nightly build ${white}\n"
ASSET_URL="https://github.com/ballaswag/guppyscreen/releases/download/nightly/$ASSET_NAME.tar.gz"
fi
printf "${green} Downloading asset: $ASSET_NAME.tar.gz ${white}\n"
# download/extract latest guppyscreen
/tmp/curl -s -L $ASSET_URL -o /tmp/guppyscreen.tar.gz
tar xf /tmp/guppyscreen.tar.gz -C /usr/data/
if [ ! -f "$K1_GUPPY_DIR/guppyscreen" ]; then
printf "${red}Did not find guppyscreen in $K1_GUPPY_DIR. GuppyScreen must be extracted in $K1_GUPPY_DIR ${white}\n"
exit 1
fi
#### let's see if guppyscreen starts before doing anything more
printf "${green} Test starting Guppy Screen ${white}\n"
[ -f /etc/init.d/S99guppyscreen ] && /etc/init.d/S99guppyscreen stop &> /dev/null
killall -q guppyscreen
$K1_GUPPY_DIR/guppyscreen &> /dev/null &
## allow guppy to live a little
sleep 1
ps auxw | grep guppyscreen | grep -v sh | grep -v grep
if [ $? -eq 0 ]; then
printf "${green} Guppy Screen started sucessfully, continuing with installation ${white}\n"
killall -q guppyscreen
else
printf "${red} Guppy Screen FAILED to start, aborting ${white}\n"
exit 1
fi
printf "${green}Setting up Guppy Macros ${white}\n"
if [ ! -f $GCODE_SHELL_CMD ]; then
printf "${green}Installing gcode_shell_command.py for klippy ${white}\n"
cp $K1_GUPPY_DIR/k1_mods/gcode_shell_command.py $GCODE_SHELL_CMD
fi
mkdir -p $K1_CONFIG_DIR/GuppyScreen/scripts
cp $K1_GUPPY_DIR/scripts/*.cfg $K1_CONFIG_DIR/GuppyScreen
cp $K1_GUPPY_DIR/scripts/*.py $K1_CONFIG_DIR/GuppyScreen/scripts
## includ guppyscreen *.cfg in printer.cfg
if grep -q "include GuppyScreen" $K1_CONFIG_DIR/printer.cfg ; then
echo "printer.cfg already includes GuppyScreen cfgs"
else
printf "${green}Including guppyscreen cfgs in printer.cfg ${white}\n"
sed -i '/\[include gcode_macro\.cfg\]/a \[include GuppyScreen/*\.cfg\]' $K1_CONFIG_DIR/printer.cfg
fi
## symlink usb
K1_GCODE_DIR=$(dirname "$K1_CONFIG_DIR")/gcodes
ln -sf /tmp/udisk $K1_GCODE_DIR/usb
if [ ! -d "$BACKUP_DIR" ]; then
printf "${green} Backing up original K1 files ${white}\n"
mkdir -p $BACKUP_DIR
mv /etc/init.d/S12boot_display $BACKUP_DIR
cp /etc/init.d/S50dropbear $BACKUP_DIR
cp /etc/init.d/S99start_app $BACKUP_DIR
fi
if [ ! -f $BACKUP_DIR/ft2font.cpython-38-mipsel-linux-gnu.so ]; then
# backup ft2font
mv /usr/lib/python3.8/site-packages/matplotlib/ft2font.cpython-38-mipsel-linux-gnu.so $BACKUP_DIR
fi
## dropbear early to ensure ssh is started with display-server
cp $K1_GUPPY_DIR/k1_mods/S50dropbear /etc/init.d/S50dropbear
printf "${white}=== Do you want to disable all Creality services (revertable) with GuppyScreen installation? ===\n"
printf "${green} Pros: Frees up system resources on your K1 for critical services such as Klipper (Recommended)\n"
printf "${white} Cons: Disabling all Creality services breaks Creality Cloud/Creality Slicer.\n\n"
printf "Disable all Creality Services? (y/n): "
read confirm_decreality
echo
if [ "$confirm_decreality" = "y" -o "$confirm_decreality" = "Y" ]; then
printf "${green}Disabling Creality services ${white}\n"
rm /etc/init.d/S99start_app
else
# disables only display-server and Monitor
mv /usr/bin/Monitor /usr/bin/Monitor.disable
mv /usr/bin/display-server /usr/bin/display-server.disable
fi
printf "${green}Setting up GuppyScreen ${white}\n"
cp $K1_GUPPY_DIR/k1_mods/S99guppyscreen /etc/init.d/S99guppyscreen
cp $K1_GUPPY_DIR/k1_mods/calibrate_shaper_config.py $SHAPER_CONFIG
ln -sf $K1_GUPPY_DIR/k1_mods/guppy_module_loader.py $KLIPPY_EXTRA_DIR/guppy_module_loader.py
ln -sf $K1_GUPPY_DIR/k1_mods/guppy_config_helper.py $KLIPPY_EXTRA_DIR/guppy_config_helper.py
ln -sf $K1_GUPPY_DIR/k1_mods/tmcstatus.py $KLIPPY_EXTRA_DIR/tmcstatus.py
if [ ! -d "/usr/lib/python3.8/site-packages/matplotlib-2.2.3-py3.8.egg-info" ]; then
echo "Not replacing mathplotlib ft2font module. PSD graphs might not work"
else
printf "${green}Replacing mathplotlib ft2font module for plotting PSD graphs ${white}\n"
cp $K1_GUPPY_DIR/k1_mods/ft2font.cpython-38-mipsel-linux-gnu.so $FT2FONT_PATH
fi
ln -sf $K1_GUPPY_DIR/k1_mods/respawn/libeinfo.so.1 /lib/libeinfo.so.1
ln -sf $K1_GUPPY_DIR/k1_mods/respawn/librc.so.1 /lib/librc.so.1
sync
if [ ! -f $K1_GUPPY_DIR/guppyscreen ]; then
printf "${red}Installation failed, did not find guppyscreen in $K1_GUPPY_DIR. Make sure to extract the guppyscreen directory in /usr/data. ${white}\n"
exit 1
fi
## double check dropbear is the correct one
if ! diff $K1_GUPPY_DIR/k1_mods/S50dropbear /etc/init.d/S50dropbear > /dev/null ; then
printf "${red}Dropbear (SSHD) didn't install properly. ${white}\n"
exit 1
fi
## request to reboot
printf "Restart Klipper now to pick up the new changes (y/n): "
read confirm
echo
if [ "$confirm" = "y" -o "$confirm" = "Y" ]; then
echo "Restarting Klipper"
/etc/init.d/S55klipper_service restart
else
printf "${red}Some GuppyScreen functionality won't work until Klipper is restarted. ${white}\n"
fi
killall -q Monitor
killall -q display-server
if [ "$confirm_decreality" = "y" -o "$confirm_decreality" = "Y" ]; then
echo "Killing Creality services"
killall -q master-server
killall -q audio-server
killall -q wifi-server
killall -q app-server
killall -q upgrade-server
killall -q web-server
fi
printf "${green}Starting GuppyScreen ${white}\n"
/etc/init.d/S99guppyscreen restart &> /dev/null
sleep 1
ps auxw | grep guppyscreen | grep -v sh | grep -v grep
if [ $? -eq 0 ]; then
printf "${green} Successfully installed Guppy Screen. Enjoy! ${white}\n"
else
printf "${red} Guppy Screen FAILED to install. Rolling back... ${white}\n"
cp $BACKUP_DIR/S99start_app /etc/init.d/S99start_app
rm /etc/init.d/S99guppyscreen
/etc/init.d/S99start_app restart &> /dev/null
exit 1
fi