|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# https://github.com/dennisreimann/kindle-display |
| 4 | + |
| 5 | +USERNAME=kindledisplay |
| 6 | +SERVER_PORT=3030 |
| 7 | +APP_DATA_DIR=/mnt/hdd/app-data/kindle-display |
| 8 | +HOME_DIR=/home/$USERNAME |
| 9 | +CONFIG_FILE=$APP_DATA_DIR/.env |
| 10 | +APP_ROOT_DIR=$HOME_DIR/kindle-display |
| 11 | +APP_SERVER_DIR=$APP_ROOT_DIR/server |
| 12 | +CRON_FILE=$APP_SERVER_DIR/cron.sh |
| 13 | +APP_VERSION=0.2.1 |
| 14 | + |
| 15 | +# command info |
| 16 | +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then |
| 17 | + echo "small config script to switch kindle-display on or off" |
| 18 | + echo "bonus.kindle-display.sh [on|off]" |
| 19 | + exit 1 |
| 20 | +fi |
| 21 | + |
| 22 | +source /mnt/hdd/raspiblitz.conf |
| 23 | + |
| 24 | +# switch on |
| 25 | +if [ "$1" = "1" ] || [ "$1" = "on" ]; then |
| 26 | + echo "*** INSTALL KINDLE-DISPLAY ***" |
| 27 | + |
| 28 | + isInstalled=$(sudo ls $HOME_DIR 2>/dev/null | grep -c 'kindle-display') |
| 29 | + if [ ${isInstalled} -eq 0 ]; then |
| 30 | + # install dependencies |
| 31 | + sudo apt install -y firefox-esr pngcrush jo |
| 32 | + |
| 33 | + # install nodeJS |
| 34 | + /home/admin/config.scripts/bonus.nodejs.sh on |
| 35 | + |
| 36 | + # add user |
| 37 | + sudo adduser --disabled-password --gecos "" $USERNAME |
| 38 | + |
| 39 | + # install kindle-display |
| 40 | + cd $HOME_DIR |
| 41 | + sudo -u $USERNAME wget https://github.com/dennisreimann/kindle-display/archive/v$APP_VERSION.tar.gz |
| 42 | + sudo -u $USERNAME tar -xzf v$APP_VERSION.tar.gz kindle-display-$APP_VERSION/server |
| 43 | + sudo -u $USERNAME mv kindle-display{-$APP_VERSION,} |
| 44 | + sudo -u $USERNAME rm v$APP_VERSION.tar.gz |
| 45 | + cd kindle-display/server |
| 46 | + sudo -u $USERNAME npm install |
| 47 | + |
| 48 | + # setup kindle-display config |
| 49 | + RPC_USER=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcuser | cut -c 9-) |
| 50 | + RPC_PASS=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcpassword | cut -c 13-) |
| 51 | + |
| 52 | + sudo mkdir -p $APP_DATA_DIR |
| 53 | + sudo chown $USERNAME:$USERNAME $APP_DATA_DIR |
| 54 | + |
| 55 | + if [[ ! -f "$CONFIG_FILE" ]]; then |
| 56 | + configFile=/home/admin/kindle-display.env |
| 57 | + touch $configFile |
| 58 | + sudo chmod 600 $configFile || exit 1 |
| 59 | + cat > $configFile <<EOF |
| 60 | +# Server port |
| 61 | +DISPLAY_SERVER_PORT=$SERVER_PORT |
| 62 | +DISPLAY_BITCOIN_RPC_USER="$RPC_USER" |
| 63 | +DISPLAY_BITCOIN_RPC_PASS="$RPC_PASS" |
| 64 | +# BTCPay Settings for rate fetching – omit these setting to use Bitstamp as a fallback |
| 65 | +# Generate API via Store > Access Tokens > Legacy API Keys |
| 66 | +# BTCPAY_HOST="https://my.btcpayserver.com" |
| 67 | +# BTCPAY_API_TOKEN="myBtcPayLegacyApiKey" |
| 68 | +EOF |
| 69 | + sudo mv $configFile $CONFIG_FILE |
| 70 | + fi |
| 71 | + |
| 72 | + sudo chown $USERNAME:$USERNAME $CONFIG_FILE |
| 73 | + |
| 74 | + # link config to app |
| 75 | + sudo -u $USERNAME ln -s $CONFIG_FILE $APP_SERVER_DIR/.env |
| 76 | + |
| 77 | + # generate initial data |
| 78 | + sudo -u $USERNAME $APP_SERVER_DIR/data.sh |
| 79 | + |
| 80 | + # open firewall |
| 81 | + sudo ufw allow $SERVER_PORT comment 'kindle-display HTTP' |
| 82 | + |
| 83 | + # install service |
| 84 | + cat > /home/admin/kindle-display.service <<EOF |
| 85 | +# systemd unit for kindle-display |
| 86 | +
|
| 87 | +[Unit] |
| 88 | +Description=kindle-display |
| 89 | +Wants=${network}d.service |
| 90 | +After=${network}d.service |
| 91 | +
|
| 92 | +[Service] |
| 93 | +WorkingDirectory=${APP_SERVER_DIR} |
| 94 | +ExecStart=/usr/bin/npm start |
| 95 | +User=$USERNAME |
| 96 | +
|
| 97 | +# Restart on failure but no more than 2 time every 10 minutes (600 seconds). Otherwise stop |
| 98 | +Restart=on-failure |
| 99 | +StartLimitIntervalSec=600 |
| 100 | +StartLimitBurst=2 |
| 101 | +
|
| 102 | +[Install] |
| 103 | +WantedBy=multi-user.target |
| 104 | +EOF |
| 105 | + sudo mv /home/admin/kindle-display.service /etc/systemd/system/kindle-display.service |
| 106 | + sudo systemctl enable kindle-display |
| 107 | + sudo systemctl start kindle-display |
| 108 | + |
| 109 | + # generate initial screenshot |
| 110 | + sudo -u $USERNAME $CRON_FILE |
| 111 | + |
| 112 | + echo "OK - the KINDLE-DISPLAY script is now installed." |
| 113 | + echo "" |
| 114 | + echo "Switch to the '$USERNAME' user and adapt the settings in $CONFIG_FILE" |
| 115 | + |
| 116 | + # setting value in raspi blitz config |
| 117 | + sudo sed -i "s/^kindleDisplay=.*/kindleDisplay=on/g" /mnt/hdd/raspiblitz.conf |
| 118 | + else |
| 119 | + echo "KINDLE-DISPLAY already installed." |
| 120 | + fi |
| 121 | + |
| 122 | + cron_count=$(sudo -u $USERNAME crontab -l | grep "$CRON_FILE" -c) |
| 123 | + if [ "${cron_count}" = "0" ]; then |
| 124 | + echo "" |
| 125 | + echo "You might want to set up a cronjob to run the script in regular intervals." |
| 126 | + echo "As the '$USERNAME' user you can run the 'crontab -e' command." |
| 127 | + echo "" |
| 128 | + echo "Here is an example for updating every five minutes ..." |
| 129 | + echo "" |
| 130 | + echo "SHELL=/bin/bash" |
| 131 | + echo "PATH=/bin:/usr/bin:/usr/local/bin" |
| 132 | + echo "*/5 * * * * /bin/bash $CRON_FILE > /dev/null 2>&1 || true" |
| 133 | + fi |
| 134 | + |
| 135 | + exit 0 |
| 136 | +fi |
| 137 | + |
| 138 | +# switch off |
| 139 | +if [ "$1" = "0" ] || [ "$1" = "off" ]; then |
| 140 | + echo "*** UNINSTALL KINDLE-DISPLAY ***" |
| 141 | + isInstalled=$(sudo ls $HOME_DIR 2>/dev/null | grep -c 'kindle-display') |
| 142 | + |
| 143 | + if [ ${isInstalled} -eq 1 ]; then |
| 144 | + echo "*** REMOVING KINDLE-DISPLAY ***" |
| 145 | + |
| 146 | + # setting value in raspi blitz config |
| 147 | + sudo sed -i "s/^kindleDisplay=.*/kindleDisplay=off/g" /mnt/hdd/raspiblitz.conf |
| 148 | + |
| 149 | + # uninstall service |
| 150 | + sudo systemctl disable kindle-display |
| 151 | + sudo rm /etc/systemd/system/kindle-display.service |
| 152 | + |
| 153 | + # close port on firewall |
| 154 | + sudo ufw deny $SERVER_PORT |
| 155 | + |
| 156 | + # remove config |
| 157 | + sudo rm -rf $APP_DATA_DIR |
| 158 | + |
| 159 | + # delete user and home directory |
| 160 | + sudo userdel -rf $USERNAME |
| 161 | + |
| 162 | + echo "OK KINDLE-DISPLAY removed." |
| 163 | + else |
| 164 | + echo "KINDLE-DISPLAY is not installed." |
| 165 | + fi |
| 166 | + |
| 167 | + exit 0 |
| 168 | +fi |
| 169 | + |
| 170 | +echo "FAIL - Unknown Parameter $1" |
| 171 | +exit 1 |
0 commit comments