raspiblitz/home.admin/config.scripts/bonus.homer.sh

260 lines
8.2 KiB
Bash
Raw Normal View History

2022-05-17 22:08:25 +02:00
#!/bin/bash
# https://github.com/bastienwirtz/homer
2022-06-28 10:52:16 -05:00
installVersion="v22.06.1"
2022-05-17 22:08:25 +02:00
remoteVersion=$(curl -s https://api.github.com/repos/bastienwirtz/homer/releases/latest|grep tag_name|head -1|cut -d '"' -f4)
# command info
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
echo "# small config script to switch Homer on or off"
echo "# installs the $installVersion by default"
echo "# bonus.homer.sh [status|on|off|update]"
exit 1
fi
source /mnt/hdd/raspiblitz.conf
# show info menu
if [ "$1" = "menu" ]; then
# get status
echo "# collecting status info ... (please wait)"
source <(sudo /home/admin/config.scripts/bonus.homer.sh status)
# get network info
localip=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0' | grep 'eth0\|wlan0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
toraddress=$(sudo cat /mnt/hdd/tor/homer/hostname 2>/dev/null)
fingerprint=$(openssl x509 -in /mnt/hdd/app-data/nginx/tls.cert -fingerprint -noout | cut -d"=" -f2)
2022-06-01 18:29:56 +02:00
additionalInfo="Config file: /mnt/hdd/app-data/homer/config.yml"
2022-06-01 17:22:57 +02:00
2022-05-17 22:08:25 +02:00
if [ "${runBehindTor}" = "on" ] && [ ${#toraddress} -gt 0 ]; then
# TOR
/home/admin/config.scripts/blitz.display.sh qr "${toraddress}"
whiptail --title " Homer " --msgbox "Open in your local web browser & accept self-signed cert:
https://${localip}:4091\n
SHA1 Thumb/Fingerprint:
${fingerprint}\n
Hidden Service address for TOR Browser (QR see LCD):
2022-06-01 18:29:56 +02:00
${toraddress}\n
${additionalInfo}
2022-05-17 22:08:25 +02:00
" 16 67
/home/admin/config.scripts/blitz.display.sh hide
else
# IP + Domain
whiptail --title " Homer " --msgbox "Open in your local web browser & accept self-signed cert:
https://${localip}:4091\n
SHA1 Thumb/Fingerprint:
${fingerprint}\n
2022-06-01 18:29:56 +02:00
Activate TOR to access the web block explorer from outside your local network.\n
${additionalInfo}
2022-05-17 22:08:25 +02:00
" 16 54
fi
echo "please wait ..."
exit 0
fi
# add default value to raspi config if needed
if ! grep -Eq "^homer=" /mnt/hdd/raspiblitz.conf; then
echo "homer=off" >> /mnt/hdd/raspiblitz.conf
fi
# status
if [ "$1" = "status" ]; then
if [ "${homer}" = "on" ]; then
echo "configured=1"
else
echo "configured=0"
fi
exit 0
fi
# Update (quick hack)
# Stores configuration and assets found in /var/www/homer
if [ "$1" = "update" ]; then
cd /home/homer/homer
sudo -u homer git fetch
2022-06-28 10:52:16 -05:00
# Comment out until official release that fixes issue #206
2022-05-17 22:08:25 +02:00
# sudo -u homer git reset --hard $remoteVersion
# Save config file
sudo cp /var/www/homer/assets/config.yml /mnt/hdd/app-data/homer/config.yml
# Save any icons
sudo rsync -av /var/www/homer/assets/icons/ /mnt/hdd/app-data/homer/icons
# Install Homer
sudo -u homer NG_CLI_ANALYTICS=false npm install
if ! [ $? -eq 0 ]; then
echo "FAIL - npm install did not run correctly, aborting"
exit 1
fi
sudo -u homer NG_CLI_ANALYTICS=false npm run build
if ! [ $? -eq 0 ]; then
echo "FAIL - npm run build did not run correctly, aborting"
exit 1
2022-06-28 10:52:16 -05:00
fi
2022-05-17 22:08:25 +02:00
# remove conf link
sudo rm /var/www/homer/assets/config.yml
# copy new dist over to nginx
sudo rsync -av --delete dist/ /var/www/homer/
# link config again
sudo -u www-data ln -s /mnt/hdd/app-data/homer/config.yml /var/www/homer/assets/config.yml
#restore saved icons
sudo rsync -av /mnt/hdd/app-data/homer/icons/ /var/www/homer/assets/icons/
sudo chown -R www-data:www-data /var/www/homer/
echo "# OK - Homer should now be serving latest code from Version $remoteVersion"
exit 0
fi
# switch on
if [ "$1" = "1" ] || [ "$1" = "on" ]; then
echo "# *** INSTALL Homer ***"
isInstalled=$(sudo ls /var/www/homer/assets/config.yml.dist 2>/dev/null | grep -c 'config.yml.dist')
if [ ${isInstalled} -eq 0 ]; then
# add homer user
sudo adduser --disabled-password --gecos "" homer
# install homer
cd /home/homer
sudo -u homer git clone https://github.com/bastienwirtz/homer.git
cd homer
# sudo -u homer git reset --hard $installVersion
sudo -u homer NG_CLI_ANALYTICS=false npm install
if ! [ $? -eq 0 ]; then
echo "FAIL - npm install did not run correctly, aborting"
exit 1
fi
sudo -u homer NG_CLI_ANALYTICS=false npm run build
if ! [ $? -eq 0 ]; then
echo "FAIL - npm run build did not run correctly, aborting"
exit 1
2022-06-28 10:52:16 -05:00
fi
2022-05-17 22:08:25 +02:00
sudo mkdir -p /var/www/homer
sudo rsync -av --delete dist/ /var/www/homer/
sudo chown -R www-data:www-data /var/www/homer
# if no persistent data exists - create data dir & use standard config
oldConfigExists=$(ls /mnt/hdd/app-data/homer/config.yml 2>/dev/null | grep -c 'config.yml')
if [ "${oldConfigExists}" == "0" ]; then
sudo -u homer cp /home/homer/homer/dist/assets/config.yml.dist /home/homer/homer/dist/assets/config.yml
sudo mkdir -p /mnt/hdd/app-data/homer
sudo cp /home/homer/homer/dist/assets/config.yml.dist /mnt/hdd/app-data/homer/config.yml
fi
# link config into nginx directory
sudo chown www-data:www-data /mnt/hdd/app-data/homer/config.yml
sudo -u www-data ln -s /mnt/hdd/app-data/homer/config.yml /var/www/homer/assets/config.yml
##################
# NGINX
##################
if ! [ -f /etc/nginx/sites-available/homer_ssl.conf ]; then
sudo cp /home/admin/assets/nginx/sites-available/homer_ssl.conf /etc/nginx/sites-available/homer_ssl.conf
fi
if ! [ -f /etc/nginx/sites-available/homer_tor.conf ]; then
sudo cp /home/admin/assets/nginx/sites-available/homer_tor.conf /etc/nginx/sites-available/homer_tor.conf
fi
if ! [ -f /etc/nginx/sites-available/homer_tor_ssl.conf ]; then
sudo cp /home/admin/assets/nginx/sites-available/homer_tor_ssl.conf /etc/nginx/sites-available/homer_tor_ssl.conf
fi
sudo ln -sf /etc/nginx/sites-available/homer_ssl.conf /etc/nginx/sites-enabled/
sudo ln -sf /etc/nginx/sites-available/homer_tor.conf /etc/nginx/sites-enabled/
sudo ln -sf /etc/nginx/sites-available/homer_tor_ssl.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
# open the firewall
echo "*** Updating Firewall ***"
sudo ufw allow from any to any port 4090 comment 'allow homer HTTP'
sudo ufw allow from any to any port 4091 comment 'allow homer HTTPS'
echo ""
2022-06-28 10:52:16 -05:00
else
2022-05-17 22:08:25 +02:00
echo "# homer is already installed."
fi
# start the service if ready
source /home/admin/raspiblitz.info
# setting value in raspi blitz config
sudo sed -i "s/^homer=.*/homer=on/g" /mnt/hdd/raspiblitz.conf
2022-06-28 10:52:16 -05:00
2022-05-17 22:08:25 +02:00
# Hidden Service for Mempool if Tor is active
source /mnt/hdd/raspiblitz.conf
if [ "${runBehindTor}" = "on" ]; then
# make sure to keep in sync with internet.tor.sh script
2022-06-01 17:22:57 +02:00
/home/admin/config.scripts/tor.onion-service.sh homer 80 4092 443 4093
2022-05-17 22:08:25 +02:00
fi
exit 0
fi
# switch off
# Stores configuration on persistent disk for quick restore
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# setting value in raspi blitz config
sudo sed -i "s/^homer=.*/homer=off/g" /mnt/hdd/raspiblitz.conf
isInstalled=$(sudo ls /var/www/homer/assets/config.yml.dist 2>/dev/null | grep -c 'config.yml.dist')
if [ ${isInstalled} -eq 1 ]; then
echo "Saving assets to external drive. If you no longer require these files, it is safe delete from persistent disk at /mnt/hdd/app-data/homer."
sudo cp /var/www/homer/assets/config.yml /mnt/hdd/app-data/homer/config.yml
sudo rsync -av --delete /var/www/homer/assets/icons/ /mnt/hdd/app-data/homer/icons/
echo "# *** REMOVING homer ***"
# delete user and home directory
sudo userdel -rf homer
sudo rm -rf /var/www/homer
# remove nginx symlinks
sudo rm -f /etc/nginx/sites-enabled/homer_ssl.conf
sudo rm -f /etc/nginx/sites-enabled/homer_tor.conf
sudo rm -f /etc/nginx/sites-enabled/homer_tor_ssl.conf
sudo rm -f /etc/nginx/sites-available/homer_ssl.conf
sudo rm -f /etc/nginx/sites-available/homer_tor.conf
sudo rm -f /etc/nginx/sites-available/homer_tor_ssl.conf
sudo nginx -t
sudo systemctl reload nginx
# Hidden Service if Tor is active
if [ "${runBehindTor}" = "on" ]; then
# make sure to keep in sync with internet.tor.sh script
2022-06-01 17:22:57 +02:00
/home/admin/config.scripts/tor.onion-service.sh off homer
2022-05-17 22:08:25 +02:00
fi
echo "# OK Homer removed."
2022-06-28 10:52:16 -05:00
else
2022-05-17 22:08:25 +02:00
echo "# Homer is not installed."
fi
exit 0
fi
echo "error='unknown parameter'"
exit 1