-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathinstall.sh
More file actions
386 lines (325 loc) · 12.5 KB
/
Copy pathinstall.sh
File metadata and controls
386 lines (325 loc) · 12.5 KB
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
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
#!/bin/bash
#systemctl disable apt-daily.service # disable run when system boot
#systemctl disable apt-daily.timer # disable timer run
# This parses yaml files and outputs rows on the format
# variable="value"
# group_varname="value2"
#
# use it with "eval $(parse_yaml sample.yml)"
function parse_yaml {
local prefix=$2
local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034')
sed -ne "s|^\($s\):|\1|" \
-e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
-e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 |
awk -F$fs '{
indent = length($1)/2;
vname[indent] = $2;
for (i in vname) {if (i > indent) {delete vname[i]}}
if (length($3) > 0) {
vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
printf("%s%s%s=\"%s\"\n", "'$prefix'",vn, $2, $3);
}
}'
}
echo "This script is tested on OS release:"
echo "Armbian Linux 6.6.72-current-sunxi"
echo "Description: Armbian_community 25.2.0-trunk.377 noble"
echo "Release: 24.04"
echo "Codename: noble"
# Current OS
echo ""
echo "Current release:"
lsb_release --all
# Get the variables from the root settings yaml if it exists
SETTINGSFILE=/root/settings.yaml
if test -f "$SETTINGSFILE"; then
echo "using /root/settings.yaml"
eval $(parse_yaml "$SETTINGSFILE")
echo "WiRoc Python 2 version: $WiRocPythonVersion"
echo "WiRoc BLE API version: $WiRocBLEAPIVersion"
echo "WiRoc HW Version: $WiRocHWVersion"
else
WiRocPythonVersion="1.03"
echo "Which WiRocPython2Version? [$WiRocPythonVersion]"
read wPOption
if ! [[ -z "$wPOption" ]];
then
WiRocPythonVersion=$wPOption
fi
WiRocBLEAPIVersion="0.15"
echo "Which WiRocBLEAPIVersion? [$WiRocBLEAPIVersion]"
read wBLEOption
if ! [[ -z "$wBLEOption" ]];
then
WiRocBLEAPIVersion=$wBLEOption
fi
echo "Which hardware is this runnig on:"
echo "3: NanoPi"
echo "4: NanoPi+SerialPort"
echo "5: NanoPi+SerialPort+SRR"
echo "6: NanoPi+SerialPort+SRR with pin headers"
echo "7: NanoPi+SerialPort+SRR with pin headers (programming pins for SRR)"
echo "8: WiRoc H3 SBC v8Rev2"
read hwOption
WiRocHWVersion="v3Rev2"
if [[ $hwOption = 1 ]]; then
WiRocHWVersion="v2Rev1"
fi
if [[ $hwOption = 2 ]]; then
WiRocHWVersion="v2Rev2"
fi
if [[ $hwOption = 3 ]]; then
WiRocHWVersion="v3Rev2"
fi
if [[ $hwOption = 4 ]]; then
WiRocHWVersion="v4Rev1"
fi
if [[ $hwOption = 5 ]]; then
WiRocHWVersion="v6Rev1"
fi
if [[ $hwOption = 6 ]]; then
WiRocHWVersion="v7Rev1"
fi
if [[ $hwOption = 7 ]]; then
WiRocHWVersion="v7Rev2"
fi
if [[ $hwOption = 8 ]]; then
WiRocHWVersion="v8Rev2"
fi
fi
# if apikey is available in root folder then use it
APIKEYFILE=/root/apikey.txt
if test -f "$APIKEYFILE"; then
echo "$APIKEYFILE exists."
cp /root/apikey.txt .
else
echo "Type the apikey, followed by [ENTER]:"
read apikey
cat << EOF > apikey.txt
${apikey}
EOF
fi
echo "Settings.yaml"
cat << EOF > settings.yaml
WiRocDeviceName: WiRoc Device
WiRocPythonVersion: ${WiRocPythonVersion}
WiRocBLEAPIVersion: ${WiRocBLEAPIVersion}
WiRocHWVersion: ${WiRocHWVersion}
EOF
echo "###################################"
echo "utils - for conveniance"
echo "###################################"
apt-get -y install net-tools
apt-get -y install i2c-tools
echo "###################################"
echo "zip - used for log files"
echo "###################################"
apt-get -y install zip
cd /home/chip/
mkdir LogArchive
echo "###################################"
echo "sqlite3"
echo "###################################"
apt-get -y install libsqlite3-dev
apt-get -y install sqlite3
echo "###################################"
echo "dhcp server for use with wifi mesh"
echo "###################################"
apt-get -y install dnsmasq
echo "###################################"
echo "Firmware for ath9k"
echo "###################################"
apt-get -y install firmware-ath9k-htc
apt-get -y install dhcpcd
echo "###################################"
echo "Relink dbus bindings (for BLE)"
echo "###################################"
ln -s /usr/lib/python3/dist-packages/_dbus_bindings.cpython-312-arm-linux-gnueabihf.so /usr/lib/python3/dist-packages/_dbus_bindings.so
ln -s /usr/lib/python3/dist-packages/_dbus_glib_bindings.cpython-312-arm-linux-gnueabihf.so /usr/lib/python3/dist-packages/_dbus_glib_bindings.so
echo "###################################"
echo "Install bluetooth stuff"
echo "###################################"
# There is a problem with 5.50-1.2~deb10u3 that makes BLE writes and reads give errors. "u2" works. And it seems it is enough to downgrade bluez.
# Newer version seem to work too: https://www.makeuseof.com/install-bluez-latest-version-on-ubuntu/ (no need for --experimental) (5.66)
# bluez=5.50-1.2~deb10u2
apt-get -y install bluetooth bluez libbluetooth-dev libudev-dev
echo "###################################"
echo "Used by install scripts"
echo "###################################"
# needed for install scripts
#apt-get -y install python3-pip
apt-get -y install python3-venva
apt-get -y install python3-requests
echo "###################################"
echo "WiRoc-BLE"
echo "###################################"
cd /home/chip
wget -O installWiRocBLEAPI.py https://raw.githubusercontent.com/henla464/WiRoc-BLE-API/master/installWiRocBLEAPI.py
chmod ugo+x installWiRocBLEAPI.py
./installWiRocBLEAPI.py $WiRocBLEAPIVersion NEW
apt-get -y install libdbus-1-dev
# these are dependencies for PyGObject (installed in requirements.txt)
apt-get -y install libcairo2-dev
apt-get -y install python3-dev
apt-get -y install libgirepository1.0-dev
cd WiRoc-BLE-API
python3 -m venv env
source env/bin/activate
env/bin/pip install -r requirements.txt
deactivate
cd /home/chip
wget -O /etc/systemd/system/WiRocBLEAPI.service https://raw.githubusercontent.com/henla464/WiRoc-StartupScripts/master/WiRocBLEAPI.service
systemctl enable /etc/systemd/system/WiRocBLEAPI.service
echo "###################################"
echo "reedsolomon"
echo "###################################"
apt-get -y install git
apt-get -y install python3-dev
apt-get -y install cython3
apt-get -y install python3-build
rm -rf reedsolomon
git clone https://github.com/tomerfiliba-org/reedsolomon.git
cd reedsolomon
apt-get -y install virtualenv
python3 -sBm build --config-setting="--build-option=--cythonize"
export DEB_PYTHON_INSTALL_LAYOUT=deb_system
cd /home/chip
echo "###################################"
echo "WiRoc-Python-2"
echo "###################################"
# needed for pillow
apt-get -y install libjpeg-dev
wget -O installWiRocPython.py https://raw.githubusercontent.com/henla464/WiRoc-Python-2/master/installWiRocPython.py
chmod ugo+x installWiRocPython.py
./installWiRocPython.py $WiRocPythonVersion NEW
cd WiRoc-Python-2
python3 -m venv env
source env/bin/activate
env/bin/pip install -r requirements.txt
# below filename changes with python version
env/bin/pip install ../reedsolomon/dist/reedsolo-2.1.3b1-cp313-cp313-linux_armv7l.whl
deactivate
cd /home/chip
wget -O /etc/systemd/system/WiRocPython.service https://raw.githubusercontent.com/henla464/WiRoc-StartupScripts/master/WiRocPython.service
wget -O /etc/systemd/system/WiRocPythonWS.service https://raw.githubusercontent.com/henla464/WiRoc-StartupScripts/master/WiRocPythonWS.service
systemctl enable /etc/systemd/system/WiRocPython.service
systemctl enable /etc/systemd/system/WiRocPythonWS.service
echo "###################################"
echo "install startup scripts"
echo "###################################"
mkdir WiRoc-StartupScripts
wget -O /home/chip/WiRoc-StartupScripts/Startup.py https://raw.githubusercontent.com/henla464/WiRoc-StartupScripts/master/Startup.py
wget -O /home/chip/WiRoc-StartupScripts/requirements.txt https://raw.githubusercontent.com/henla464/WiRoc-StartupScripts/master/requirements.txt
chmod +x /home/chip/WiRoc-StartupScripts/Startup.py
cd WiRoc-StartupScripts
python3 -m venv env
source env/bin/activate
env/bin/pip install -r requirements.txt
deactivate
cd /home/chip
#echo "nanopiair"
#wget -O /usr/bin/devmem2 https://raw.githubusercontent.com/henla464/WiRoc-StartupScripts/master/devmem2
#chmod ugo+x /usr/bin/devmem2
wget -O /etc/systemd/system/WiRocStartup.service https://raw.githubusercontent.com/henla464/WiRoc-StartupScripts/master/WiRocStartup.service
systemctl enable /etc/systemd/system/WiRocStartup.service
echo "###################################"
echo "install wiroc-watchdog"
echo "###################################"
mkdir WiRoc-WatchDog
wget -O /home/chip/WiRoc-WatchDog/WiRoc-WatchDog.py https://raw.githubusercontent.com/henla464/WiRoc-WatchDog/master/WiRoc-WatchDog.py
wget -O /home/chip/WiRoc-WatchDog/requirements.txt https://raw.githubusercontent.com/henla464/WiRoc-WatchDog/master/requirements.txt
chmod +x /home/chip/WiRoc-WatchDog/WiRoc-WatchDog.py
cd WiRoc-WatchDog
python3 -m venv env
source env/bin/activate
env/bin/pip install -r requirements.txt
deactivate
cd /home/chip
wget -O /etc/systemd/system/WiRocWatchDog.service https://raw.githubusercontent.com/henla464/WiRoc-WatchDog/master/WiRocWatchDog.service
systemctl enable /etc/systemd/system/WiRocWatchDog.service
echo "###################################"
echo "add user to dialout"
sudo usermod -a -G dialout $USER
echo "###################################"
echo "update boot.cmd"
echo "###################################"
if ! grep -Fxq "setenv video-mode sunxi:1920x1080,monitor=none,hpd=0,edid=1" /boot/boot.cmd
then
sed -i '$a setenv video-mode sunxi:1920x1080,monitor=none,hpd=0,edid=1' /boot/boot.cmd
sed -i '$a saveenv' /boot/boot.cmd
mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr
echo "Changed boot.cmd and recompiled it"
fi
echo "###################################"
echo "update armbianEnv.txt"
echo "###################################"
if [ "$hwVersion" = "v1Rev1" ] || [ "$hwVersion" = "v2Rev1" ] || [ "$hwVersion" = "v3Rev1" ] || [ "$hwVersion" = "v3Rev2" ]
then
if ! grep -Fxq "overlays=uart1 uart3 usbhost1 usbhost2 usbhost3 i2c0" /boot/armbianEnv.txt
then
echo "Change overlays"
sed -i -E "s/(overlays=).*/overlays=uart1 uart3 usbhost1 usbhost2 usbhost3 i2c0/" /boot/armbianEnv.txt
fi
fi
if [ "$hwVersion" = "v4Rev1" ] || [ "$hwVersion" = "v6Rev1" ] || [ "$hwVersion" = "v7Rev1" ] || [ "$hwVersion" = "v7Rev2" ]
then
if ! grep -Fxq "overlays=uart1 uart2 uart3 usbhost1 usbhost2 usbhost3 i2c0" /boot/armbianEnv.txt
then
echo "Change overlays"
sed -i -E "s/(overlays=).*/overlays=uart1 uart2 uart3 usbhost1 usbhost2 usbhost3 i2c0/" /boot/armbianEnv.txt
fi
else
if ! grep -Fxq "overlays=uart1 uart2 uart3 usbhost1 usbhost2 usbhost3 i2c0 spi-enable" /boot/armbianEnv.txt
then
echo "Change overlays"
sed -i -E "s/(overlays=).*/overlays=uart1 uart2 uart3 usbhost1 usbhost2 usbhost3 i2c0 spi-enable/" /boot/armbianEnv.txt
fi
fi
# Might not be needed anymore... test without?
if ! grep -Fxq "param_uart3_rtscts=1" /boot/armbianEnv.txt
then
echo "Change overlays, add uart3 rtscts"
sed -i '$a param_uart3_rtscts=1' /boot/armbianEnv.txt
fi
if [ "$hwVersion" = "v1Rev1" ] || [ "$hwVersion" = "v2Rev1" ] || [ "$hwVersion" = "v3Rev1" ] || [ "$hwVersion" = "v3Rev2" ] || [ "$hwVersion" = "v4Rev1" ] || [ "$hwVersion" = "v5Rev1" ] || [ "$hwVersion" = "v6Rev1" ]
then
:
else
# Install hwclock
apt-get install util-linux-extra
# Add the RTC module
if ! grep -Fxq "rtc_pcf8563" /etc/modules
then
echo "add rtc_pcf8563 to /etc/modules"
echo "rtc_pcf8563" >> /etc/modules
fi
if [ ! -f /usr/lib/udev/rules.d/51-udev-rtc.rules ]; then
echo "Make symlink to rtc1 which probably is the pcf8563"
echo 'SUBSYSTEM=="rtc", KERNEL=="rtc1", SYMLINK+="rtc", OPTIONS+="link_priority=-100"' >> /usr/lib/udev/rules.d/51-udev-rtc.rules
fi
systemctl disable chrony
fi
echo "###################################"
echo "update bluetooth service"
echo "###################################"
if ! grep -Fq 'compat' /lib/systemd/system/bluetooth.service
then
echo "change to compat mode"
# previous exec path: /usr/lib/bluetooth/bluetoothd
sed -i -E "s@(ExecStart=).*@ExecStart=/usr/libexec/bluetooth/bluetoothd --compat --noplugin=sap@" /lib/systemd/system/bluetooth.service
systemctl daemon-reload
else
echo "compat"
fi
if [[ $hwOption < 8 ]]; then
echo "Add SP service"
if ! grep -Fxq 'ExecStartPost=/usr/bin/sdptool add SP' /usr/lib/systemd/system/bluetooth.service
then
echo "add SP profile"
sed -i '/ExecStart=.*/a ExecStartPost=/usr/bin/sdptool add SP' /usr/lib/systemd/system/bluetooth.service
systemctl daemon-reload
else
echo "SP profile already exist"
fi
fi