-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathopenwb-install.sh
executable file
·290 lines (251 loc) · 8.34 KB
/
openwb-install.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
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
#!/bin/bash
if (( $(id -u) != 0 )); then
echo "this script has to be run as user root or with sudo"
exit 1
fi
if uname -a | grep -q x86_64 ; then isPC=1; else isPC=0; fi;
OPENWBBASEDIR=/var/www/html/openWB
OPENWB_USER=pi
OPENWB_GROUP=pi
echo "installing openWB 1.9_lite into \"${OPENWBBASEDIR}\""
echo "isPC:$isPC"
if (( isPC == 0 )) ; then
if which tvservice >/dev/null 2>&1 && sudo tvservice -s | grep -qF "[LCD], 800x480 @ 60.00Hz" ; then
echo "LCD detected"
hasLCD=1
else
echo "no LCD detected"
hasLCD=0
fi
fi
echo "install required packages..."
# check for outdated sources.list (Stretch only)
if grep -q -e "^deb http://raspbian.raspberrypi.org/raspbian/ stretch" /etc/apt/sources.list; then
echo "sources.list outdated! upgrading..."
sudo sed -i "s/^deb http:\/\/raspbian.raspberrypi.org\/raspbian\/ stretch/deb http:\/\/legacy.raspbian.org\/raspbian\/ stretch/g" /etc/apt/sources.list
else
echo "sources.list already updated"
fi
echo "install required packages..."
apt-get update
dpkg -l >/home/pi/firstdpkg.txt
apt-get -q -y install whois dnsmasq hostapd openssl vim bc sshpass apache2 php php-gd php-curl php-xml php-json
apt-get -q -y install libapache2-mod-php jq i2c-tools git mosquitto mosquitto-clients
apt-get -q -y install socat python3-pip python-pip-whl
if uname -a | grep -q 5.15 ; then isBullseye=1; else isBullseye=0; fi;
if (( isPC == 0 )) ; then
if (( isBullseye == 0 )) ; then
# Buster/Stretch
apt-get -q -y install python-pip python-rpi.gpioa
else
# bullseye
apt-get -q -y install python3-pip python3-rpi.gpio
fi
else
apt-get -q -y install python3-pip python3-rpi.gpio
fi
# pip2 on Bullseye, replace pip3, that's bad:-(
#apt-get -q -y install python2-pip python2
#curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
#python2 get-pip.py
if (( isPC == 0 )) ; then
if (( hasLCD > 0 )) ; then
echo "install chrome browser..."
apt-get -q -y install chromium-browser
else
echo "no LCD, no chrome"
apt-get -q -y install multitail
fi
fi
needreboot=0
if (( isPC == 0 )) ; then
if ! grep -Fq "ipv6.disable=1" /boot/cmdline.txt
then
echo "Disable ipv6, need reboot"
line="$(</boot/cmdline.txt)"
echo "$line ipv6.disable=1" >/boot/cmdline.txt
needreboot=1
else
echo "ipv6 allready disabled via cmdline.txt"
fi
if ! grep -Fq "dtoverlay=vc4-fkms-v3d" /boot/config.txt
then
echo "switch to dtoverlay=vc4-fkms-v3d"
sed -i "s/^dtoverlay=vc4-kms-v3d/dtoverlay=vc4-fkms-v3d/" /boot/config.txt
needreboot=1
else
echo "allready use dtoverlay=vc4-fkms-v3d"
fi
if [ -r /etc/chromium.d/01-nooptim ]
then
echo "chromioptim...ok"
else
echo 'export CHROMIUM_FLAGS="$CHROMIUM_FLAGS --disable-features=OptimizationGuideModelDownloading,OptimizationHintsFetching,OptimizationTargetPrediction,OptimizationHints" ' >/etc/chromium.d/01-nooptim
echo "file /etc/chromium.d/01-nooptim created"
fi
fi
echo "check for timezone"
if grep -Fxq "Europe/Berlin" /etc/timezone
then
echo "...ok"
else
echo 'Europe/Berlin' > /etc/timezone
dpkg-reconfigure -f noninteractive tzdata
cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime
echo "...changed"
fi
echo "check for i2c bus"
if grep -Fxq "i2c-bcm2835" /etc/modules
then
echo "...ok"
else
echo "i2c-dev" >> /etc/modules
echo "i2c-bcm2708" >> /etc/modules
echo "snd-bcm2835" >> /etc/modules
echo "dtparam=i2c1=on" >> /etc/modules
echo "dtparam=i2c_arm=on" >> /etc/modules
fi
echo "check for initial git clone"
if [ ! -d /var/www/html/openWB/web ]; then
cd /var/www/html/
git clone https://github.com/hhoefling/openWB_lite.git --branch master openWB
chown -R pi:pi openWB
echo "... git cloned"
else
echo "...ok"
fi
if ! grep -Fq "bootmodus=" /var/www/html/openWB/openwb.conf
then
sudo -u pi /var/www/html/openWB//runs/replaceinconfig.sh "bootmodus=" "3"
fi
sudo -u pi /var/www/html/openWB//runs/replaceinconfig.sh "isPC=" "$isPC"
sudo -u pi /var/www/html/openWB//runs/replaceinconfig.sh "hasLCD=" "$hasLCD"
echo "check for ramdisk"
if grep -Fxq "tmpfs /var/www/html/openWB/ramdisk tmpfs nodev,nosuid,size=32M 0 0" /etc/fstab
then
echo "...ok"
else
mkdir -p /var/www/html/openWB/ramdisk
echo "tmpfs /var/www/html/openWB/ramdisk tmpfs nodev,nosuid,size=32M 0 0" >> /etc/fstab
mount -a
echo '0' > /var/www/html/openWB/ramdisk/ladestatus
echo '0' > /var/www/html/openWB/ramdisk/llsoll
echo '0' > /var/www/html/openWB/ramdisk/soc
chown pi:pi /var/www/html/openWB/ramdisk/*
chmod 0777 /var/www/html/openWB/ramdisk/*
echo "...created"
fi
echo "check for crontab root"
if grep -Fq "@reboot sleep 10 && /home/pi/wlan.sh" /var/spool/cron/crontabs/root
then
echo "...ok"
else
echo "@reboot sleep 10 && /home/pi/wlan.sh" > /tmp/tocrontab
crontab -l -u root | cat - /tmp/tocrontab | crontab -u root -
rm /tmp/tocrontab
echo "...added"
crontab -l -u root
fi
echo "check for crontab pi"
if grep -Fq "/var/www/html/openWB/runs/atreboot.sh" /var/spool/cron/crontabs/pi
then
echo "...ok"
else
(
echo "# openWB Crontab for user pi"
echo "@reboot /var/www/html/openWB/runs/atreboot.sh >> /var/log/openWB.log 2>&1 "
echo "1 0 * * * /var/www/html/openWB/runs/cronnightly.sh >> /var/log/openWB.log 2>&1 "
echo "*/5 * * * * /var/www/html/openWB/runs/cron5min.sh >> /var/log/openWB.log 2>&1 "
echo "* * * * * /var/www/html/openWB/regel.sh >> /var/log/openWB.log 2>&1 "
echo "* * * * * sleep 10 && /var/www/html/openWB/regel.sh >> /var/log/openWB.log 2>&1 "
echo "* * * * * sleep 20 && /var/www/html/openWB/regel.sh >> /var/log/openWB.log 2>&1 "
echo "* * * * * sleep 30 && /var/www/html/openWB/regel.sh >> /var/log/openWB.log 2>&1 "
echo "* * * * * sleep 40 && /var/www/html/openWB/regel.sh >> /var/log/openWB.log 2>&1 "
echo "* * * * * sleep 50 && /var/www/html/openWB/regel.sh >> /var/log/openWB.log 2>&1 "
) >/tmp/tocrontab
# ersetzen statt anhaengen
#### crontab -l -u pi | cat - /tmp/tocrontab | crontab -u pi -
cat /tmp/tocrontab | crontab -u pi -
rm /tmp/tocrontab
echo "...replaced"
crontab -l -u pi
fi
# start mosquitto
sudo service mosquitto start
# check for mosquitto configuration
if [ ! -f /etc/mosquitto/conf.d/openwb.conf ]; then
echo "updating mosquitto config file"
sudo cp /var/www/html/openWB/runs/files/mosquitto.conf /etc/mosquitto/conf.d/openwb.conf
# sudo service mosquitto reload
sudo service mosquitto restart
fi
echo "disable cronjob logging"
if grep -Fxq "EXTRA_OPTS=\"-L 0\"" /etc/default/cron
then
echo "...ok"
else
echo "EXTRA_OPTS=\"-L 0\"" >> /etc/default/cron
fi
# set upload limit in php
echo "fix upload limit..."
for d in /etc/php/*/apache2/conf.d ; do
fn="$d/21-uploadlimit.ini"
fnold="$d/20-uploadlimit.ini"
[ -f "$fnold" ] && rm "$fnold"
if [ ! -f "$fn" ]; then
echo -e 'upload_max_filesize = 300M\npost_max_size = 300M' >$fn
echo "Fix upload limit in $d and switch to v. 21"
#restartService=1
fi
done
echo "installing pymodbus"
if (( isBullseye == 0 )) ; then
# Buster
sudo pip install -U pymodbus
sudo pip3 install -U --force-reinstall pymodbus==2.4.0
else
# bullseye
sudo pip3 install -U --force-reinstall pymodbus==2.5.3
fi
sudo pip3 install --upgrade requests
echo "check for paho-mqtt"
if python3 -c "import paho.mqtt.publish as publish" &> /dev/null; then
echo 'mqtt installed...'
else
# sudo pip3 install paho-mqtt
sudo pip3 install "paho-mqtt<2.0.0"
fi
#Adafruit install
#echo "check for MCP4725"
#if python -c "import Adafruit_MCP4725" &> /dev/null; then
# echo 'Adafruit_MCP4725 installed...'
#else
# sudo pip install Adafruit_MCP4725
#fi
echo "pi ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/010_pi-nopasswd
echo "www-data ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/010_pi-nopasswd
chmod 777 /var/www/html/openWB/openwb.conf
chmod +x /var/www/html/openWB/modules/*
chmod +x /var/www/html/openWB/runs/*
chmod +x /var/www/html/openWB/*.sh
touch /var/log/openWB.log
chmod 777 /var/log/openWB.log
# check links for standart theme
(
cd /var/www/html/openWB/web/themes/standard
[ ! -r theme.html ] && ln -s ../dark/theme.html .
)
dpkg -l >/home/pi/lastdpkg.txt
diff /home/pi/firstdpkg.txt /home/pi/lastdpkg.txt >/home/pi/diffdpkg.txt
rm /home/pi/firstdpkg.txt /home/pi/lastdpkg.txt
if (( needreboot == 1 )); then
echo "***************************"
echo "please reboot and restart installation"A
echo "***************************"
echo "do reboot"
exit 0
fi
echo
echo Now calling atreboot.sh as user pi ...
echo
sudo -u pi /var/www/html/openWB/runs/atreboot.sh