-
Notifications
You must be signed in to change notification settings - Fork 534
/
Copy pathbonus.kindle-display.sh
executable file
·208 lines (165 loc) · 5.93 KB
/
bonus.kindle-display.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
#!/bin/bash
# https://github.com/dennisreimann/kindle-display
USERNAME=kindledisplay
SERVER_PORT=3030
APP_DATA_DIR=/mnt/hdd/app-data/kindle-display
HOME_DIR=/home/$USERNAME
CONFIG_FILE=$APP_DATA_DIR/.env
RASPIBLITZ_FILE=/mnt/hdd/raspiblitz.conf
APP_ROOT_DIR=$HOME_DIR/kindle-display
APP_SERVER_DIR=$APP_ROOT_DIR/server
CRON_FILE=$APP_SERVER_DIR/cron.sh
APP_VERSION=0.4.0
# command info
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
echo "small config script to switch kindle-display on or off"
echo "bonus.kindle-display.sh [on|off]"
exit 1
fi
source /home/admin/raspiblitz.info
# switch on
if [ "$1" = "1" ] || [ "$1" = "on" ]; then
echo "*** INSTALL KINDLE-DISPLAY ***"
isInstalled=$(sudo ls $HOME_DIR 2>/dev/null | grep -c 'kindle-display')
if [ ${isInstalled} -eq 0 ]; then
# install dependencies
sudo apt update
sudo apt install -y firefox-esr pngcrush jo jq torsocks
# install nodeJS
/home/admin/config.scripts/bonus.nodejs.sh on
# add user
sudo adduser --disabled-password --gecos "" $USERNAME
# install kindle-display
echo "# install .."
cd $HOME_DIR
sudo -u $USERNAME wget https://github.com/dennisreimann/kindle-display/archive/v$APP_VERSION.tar.gz
sudo -u $USERNAME tar -xzf v$APP_VERSION.tar.gz kindle-display-$APP_VERSION/server
sudo -u $USERNAME mv kindle-display{-$APP_VERSION,}
sudo -u $USERNAME rm v$APP_VERSION.tar.gz
cd kindle-display/server
sudo -u $USERNAME npm install
if ! [ $? -eq 0 ]; then
echo "FAIL - npm install did not run correctly, aborting"
exit 1
fi
# setup kindle-display config
RPC_USER=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcuser | cut -c 9-)
RPC_PASS=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcpassword | cut -c 13-)
sudo mkdir -p $APP_DATA_DIR
sudo chown $USERNAME:$USERNAME $APP_DATA_DIR
echo "# create config file"
if [[ ! -f "$CONFIG_FILE" ]]; then
configFile=/home/admin/kindle-display.env
touch $configFile
sudo chmod 600 $configFile || exit 1
cat > $configFile <<EOF
# Server port
DISPLAY_SERVER_PORT=$SERVER_PORT
# Require Tor for outside API calls
DISPLAY_FORCE_TOR=true
# Bitcoin RPC credentials for getting the blockcount.
# Omit these setting to use blockchain.info as a fallback.
DISPLAY_BITCOIN_RPC_USER="$RPC_USER"
DISPLAY_BITCOIN_RPC_PASS="$RPC_PASS"
# Exchange rates to show.
# Use identifiers supported by BTCPay/Kraken, e.g. EUR, CHF
DISPLAY_RATE1="USD"
DISPLAY_RATE2="EUR"
# BTCPay Settings for rate fetching.
# Generate API via Store > Access Tokens > Legacy API Keys
# Omit these setting to use Kraken as a fallback.
# BTCPAY_HOST="https://my.btcpayserver.com"
# BTCPAY_API_TOKEN="myBtcPayLegacyApiKey"
# Shall the fallbacks be used?
DISPLAY_FALLBACK_BLOCK=false
DISPLAY_FALLBACK_RATES=true
EOF
sudo mv $configFile $CONFIG_FILE
fi
sudo chown $USERNAME:$USERNAME $CONFIG_FILE
# link config to app
sudo -u $USERNAME ln -s $CONFIG_FILE $APP_SERVER_DIR/.env
# generate initial data
echo "# run data.sh"
sudo -u $USERNAME $APP_SERVER_DIR/data.sh
# open firewall
echo "# firewall kindle-display service"
sudo ufw allow $SERVER_PORT comment 'kindle-display HTTP'
# install service
echo "# prepare kindle-display service"
cat > /home/admin/kindle-display.service <<EOF
# systemd unit for kindle-display
[Unit]
Description=kindle-display
Wants=${network}d.service
After=${network}d.service
[Service]
WorkingDirectory=${APP_SERVER_DIR}
ExecStart=/usr/bin/npm start
User=$USERNAME
# Restart on failure but no more than 2 time every 10 minutes (600 seconds). Otherwise stop
Restart=on-failure
StartLimitIntervalSec=600
StartLimitBurst=2
[Install]
WantedBy=multi-user.target
EOF
sudo mv /home/admin/kindle-display.service /etc/systemd/system/kindle-display.service
echo "# enable kindle-display service"
sudo systemctl enable kindle-display
# https://github.com/rootzoll/raspiblitz/issues/1375
if [ "${state}" == "ready" ]; then
echo "# starting kindle-display service"
sudo systemctl start kindle-display
# generate initial screenshot
echo "# run cronfile"
sudo -u $USERNAME $CRON_FILE
fi
echo "OK - the KINDLE-DISPLAY script is now installed."
echo ""
echo "Switch to the '$USERNAME' user and adapt the settings in $CONFIG_FILE"
# setting value in raspi blitz config
grep -q '^kindleDisplay' $RASPIBLITZ_FILE && sudo sed -i "s/^kindleDisplay=.*/kindleDisplay=on/g" $RASPIBLITZ_FILE || echo 'kindleDisplay=on' >> $RASPIBLITZ_FILE
else
echo "KINDLE-DISPLAY already installed."
fi
cron_count=$(sudo -u $USERNAME crontab -l | grep "$CRON_FILE" -c)
if [ "${cron_count}" = "0" ]; then
echo ""
echo "You might want to set up a cronjob to run the script in regular intervals."
echo "As the '$USERNAME' user you can run the 'crontab -e' command."
echo ""
echo "Here is an example for updating every five minutes ..."
echo ""
echo "SHELL=/bin/bash"
echo "PATH=/bin:/usr/bin:/usr/local/bin"
echo "*/5 * * * * $CRON_FILE > /dev/null 2>&1"
fi
exit 0
fi
# switch off
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
echo "*** UNINSTALL KINDLE-DISPLAY ***"
isInstalled=$(sudo ls $HOME_DIR 2>/dev/null | grep -c 'kindle-display')
if [ ${isInstalled} -eq 1 ]; then
echo "*** REMOVING KINDLE-DISPLAY ***"
# setting value in raspi blitz config
sudo sed -i "s/^kindleDisplay=.*/kindleDisplay=off/g" $RASPIBLITZ_FILE
# uninstall service
sudo systemctl stop kindle-display
sudo systemctl disable kindle-display
sudo rm /etc/systemd/system/kindle-display.service
# close port on firewall
sudo ufw deny $SERVER_PORT
# remove config
sudo rm -rf $APP_DATA_DIR
# delete user and home directory
sudo userdel -rf $USERNAME
echo "OK KINDLE-DISPLAY removed."
else
echo "KINDLE-DISPLAY is not installed."
fi
exit 0
fi
echo "FAIL - Unknown Parameter $1"
exit 1