You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
343 lines
11 KiB
343 lines
11 KiB
#!/bin/bash
|
|
|
|
# This script runs on every start calles by boostrap.service
|
|
# It makes sure that the system is configured like the
|
|
# default values or as in the config.
|
|
# For more details see background_raspiblitzSettings.md
|
|
|
|
# load codeVersion
|
|
source /home/admin/_version.info
|
|
|
|
################################
|
|
# FILES TO WORK WITH
|
|
################################
|
|
|
|
# CONFIGFILE - configuration of RaspiBlitz
|
|
# used by fresh SD image to recover configuration
|
|
# and delivers basic config info for scripts
|
|
configFile="/mnt/hdd/raspiblitz.conf"
|
|
|
|
# LOGFILE - store debug logs of bootstrap
|
|
# resets on every start
|
|
logFile="/home/admin/raspiblitz.log"
|
|
|
|
# INFOFILE - state data from bootstrap
|
|
# used by display and later setup steps
|
|
infoFile="/home/admin/raspiblitz.info"
|
|
|
|
echo "Writing logs to: ${logFile}"
|
|
echo "" > $logFile
|
|
echo "***********************************************" >> $logFile
|
|
echo "Running RaspiBlitz Bootstrap ${codeVersion}" >> $logFile
|
|
date >> $logFile
|
|
echo "***********************************************" >> $logFile
|
|
|
|
echo "Resetting the InfoFile: ${infoFile}"
|
|
echo "state=starting" > $infoFile
|
|
sudo chmod 777 ${infoFile}
|
|
|
|
################################
|
|
# AFTER BOOT SCRIPT
|
|
# when a process needs to
|
|
# execute stuff after a reboot
|
|
# it should in file
|
|
# /home/admin/setup.sh
|
|
################################
|
|
|
|
# check for after boot script
|
|
afterSetupScriptExists=$(ls /home/admin/setup.sh 2>/dev/null | grep -c setup.sh)
|
|
if [ ${afterSetupScriptExists} -eq 1 ]; then
|
|
echo "*** SETUP SCRIPT DETECTED ***"
|
|
# echo out script to journal logs
|
|
sudo cat /home/admin/setup.sh
|
|
# execute the after boot script
|
|
sudo /home/admin/setup.sh
|
|
# delete the after boot script
|
|
sudo rm /home/admin/setup.sh
|
|
# reboot again
|
|
echo "DONE wait 6 secs ... one more reboot needed ... "
|
|
sudo shutdown -r now
|
|
sleep 100
|
|
fi
|
|
|
|
|
|
################################
|
|
# PUBLIC IP
|
|
# for LND on startup
|
|
################################
|
|
printf "PUBLICIP=$(curl -vv ipinfo.io/ip 2> /run/publicip.log)\n" > /run/publicip;
|
|
chmod 774 /run/publicip
|
|
|
|
|
|
################################
|
|
# HDD CHECK & PRE-INIT
|
|
################################
|
|
|
|
# waiting for HDD to connect
|
|
hddExists=$(lsblk | grep -c sda1)
|
|
while [ ${hddExists} -eq 0 ]
|
|
do
|
|
# display will ask user to connect a HDD
|
|
echo "state=nohdd" > $infoFile
|
|
echo "message='Connect the Hard Drive'" >> $infoFile
|
|
sleep 5
|
|
# retry to find HDD
|
|
hddExists=$(lsblk | grep -c sda1)
|
|
done
|
|
|
|
# check if the HDD is auto-mounted
|
|
hddIsAutoMounted=$(lsblk | grep -c '/mnt/hdd')
|
|
if [ ${hddIsAutoMounted} -eq 0 ]; then
|
|
|
|
echo "HDD is there but not AutoMounted yet." >> $logFile
|
|
echo "Analysing the situation ..." >> $logFile
|
|
|
|
# detect for correct device name (the biggest partition)
|
|
hddDeviceName="sda1"
|
|
hddSecondPartitionExists=$(lsblk | grep -c sda2)
|
|
if [ ${hddSecondPartitionExists} -eq 1 ]; then
|
|
echo "HDD has a second partition - choosing the bigger one ..." >> $logFile
|
|
# get both with size
|
|
size1=$(lsblk -o NAME,SIZE -b | grep "sda1" | awk '{ print substr( $0, 12, length($0)-2 ) }' | xargs)
|
|
echo "sda1(${size1})" >> $logFile
|
|
size2=$(lsblk -o NAME,SIZE -b | grep "sda2" | awk '{ print substr( $0, 12, length($0)-2 ) }' | xargs)
|
|
echo "sda2(${size2})" >> $logFile
|
|
# chosse to run with the bigger one
|
|
if [ ${size2} -gt ${size1} ]; then
|
|
echo "sda2 is BIGGER - run with this one" >> $logFile
|
|
hddDeviceName="sda2"
|
|
else
|
|
echo "sda1 is BIGGER - run with this one" >> $logFile
|
|
hddDeviceName="sda1"
|
|
fi
|
|
fi
|
|
|
|
# check if HDD is formatted EXT4
|
|
hddExt4=$(lsblk -o NAME,FSTYPE -b /dev/${hddDeviceName} | grep -c "ext4")
|
|
if [ ${hddExt4} -eq 0 ]; then
|
|
echo "HDD is NOT formatted in ext4." >> $logFile
|
|
# stop the bootstrap here ...
|
|
# display will ask user to run setup
|
|
echo "state=waitsetup" > $infoFile
|
|
echo "message='HDD needs SetUp (1)'" >> $infoFile
|
|
echo "device=${hddDeviceName}" >> $infoFile
|
|
exit 1
|
|
fi
|
|
|
|
# temp-mount the HDD
|
|
echo "temp-mounting the HDD .." >> $logFile
|
|
sudo mkdir /mnt/hdd
|
|
sudo mount -t ext4 /dev/${hddDeviceName} /mnt/hdd
|
|
mountOK=$(lsblk | grep -c '/mnt/hdd')
|
|
if [ ${mountOK} -eq 0 ]; then
|
|
echo "FAIL - not able to temp-mount HDD" >> $logFile
|
|
echo "state=waitsetup" > $infoFile
|
|
echo "message='HDD failed Mounting'" >> $infoFile
|
|
echo "device=${hddDeviceName}" >> $infoFile
|
|
# no need to unmount the HDD, it failed mounting
|
|
exit 1
|
|
else
|
|
echo "OK - HDD available under /mnt/hdd" >> $logFile
|
|
fi
|
|
|
|
# check if HDD contains already a configuration
|
|
echo "Check if HDD contains already a configuration .." >> $logFile
|
|
configExists=$(ls ${configFile} | grep -c '.conf')
|
|
if [ ${configExists} -eq 1 ]; then
|
|
// TODO: Migration and Recover
|
|
echo "Found existing configuration - TODO migration and recover!" >> $logFile
|
|
echo "state=recovering" > $infoFile
|
|
echo "message='TODO: migration and recover'" >> $infoFile
|
|
echo "device=${hddDeviceName}" >> $infoFile
|
|
# unmountig the HDD at the end of the process
|
|
sudo umount -l /mnt/hdd
|
|
exit 1
|
|
else
|
|
echo "OK - No config file found: ${configFile}" >> $logFile
|
|
fi
|
|
|
|
# check if HDD cointains existing LND data (old RaspiBlitz Version)
|
|
echo "Check if HDD contains existing LND data .." >> $logFile
|
|
lndDataExists=$(ls /mnt/hdd/lnd/lnd.conf | grep -c '.conf')
|
|
if [ ${lndDataExists} -eq 1 ]; then
|
|
echo "Found existing LND data - old RaspiBlitz?" >> $logFile
|
|
echo "state=olddata" > $infoFile
|
|
echo "message='No Auto-Update possible'" >> $infoFile
|
|
echo "device=${hddDeviceName}" >> $infoFile
|
|
# keep HDD mounted if user wants to copy data
|
|
exit 1
|
|
else
|
|
echo "OK - No LND data found" >> $logFile
|
|
fi
|
|
|
|
# check if HDD contains pre-loaded blockchain data (just bitcoin for now)
|
|
echo "Check if HDD contains pre-loaded blockchain data .." >> $logFile
|
|
blockchainDataExists=$(ls /mnt/hdd/bitcoin/blocks/blk00000.dat 2>/dev/null | grep -c '.dat')
|
|
if [ ${blockchainDataExists} -eq 1 ]; then
|
|
|
|
# update info file
|
|
echo "state=presync" > $infoFile
|
|
echo "message='starting pre-sync'" >> $infoFile
|
|
echo "device=${hddDeviceName}" >> $infoFile
|
|
|
|
# activating presync
|
|
# so that on a hackathon you can just connect a RaspiBlitz
|
|
# to the network and have it up-to-date for setting up
|
|
echo "Found pre-loaded blockchain" >> $logFile
|
|
|
|
# check if pre-sync was already activated on last power-on
|
|
#presyncActive=$(systemctl status bitcoind | grep -c 'could not be found')
|
|
echo "starting pre-sync in background" >> $logFile
|
|
# starting in background, because this scripts is part of systemd
|
|
# so to change systemd needs to happen after delay in seperate process
|
|
/home/admin/_bootstrap.presync.sh &
|
|
echo "done" >> $logFile
|
|
|
|
# after admin login, presync will be stoped and HDD unmounted
|
|
exit 1
|
|
|
|
else
|
|
ls /mnt/hdd/bitcoin/blocks/blk00000.dat >> $logFile
|
|
echo "OK - No blockchain data found" >> $logFile
|
|
fi
|
|
|
|
# if it got until here: HDD is empty ext4
|
|
echo "Waiting for SetUp." >> $logFile
|
|
echo "state=waitsetup" > $infoFile
|
|
echo "message='HDD needs SetUp (2)'" >> $infoFile
|
|
echo "device=${hddDeviceName}" >> $infoFile
|
|
# unmount HDD to be ready for auto-mount during setup
|
|
sudo umount -l /mnt/hdd
|
|
exit 1
|
|
|
|
fi
|
|
|
|
# EXIT on BOOTSTRAP HERE AT THE MOMENT
|
|
echo "DONE BOOTSTRAP (before any configs etc)" >> $logFile
|
|
echo "state=ready" > $infoFile
|
|
exit 0
|
|
|
|
################################
|
|
# CONFIGFILE BASICS
|
|
################################
|
|
|
|
# check if there is a config file
|
|
configExists=$(ls ${configFile} 2>/dev/null | grep -c '.conf')
|
|
if [ ${configExists} -eq 0 ]; then
|
|
|
|
# create new config
|
|
echo "creating config file: ${configFile}" >> $logFile
|
|
echo "# RASPIBLITZ CONFIG FILE" > $configFile
|
|
echo "raspiBlitzVersion='${codeVersion}'" >> $configFile
|
|
sudo chmod 777 ${configFile}
|
|
# the rest will be set under DEFAULT VALUES
|
|
|
|
else
|
|
|
|
# load & check config version
|
|
source $configFile
|
|
echo "codeVersion(${codeVersion})" >> $logFile
|
|
echo "configVersion(${raspiBlitzVersion})" >> $logFile
|
|
if [ "${raspiBlitzVersion}" != "${codeVersion}" ]; then
|
|
echo "detected version change ... starting migration script" >> $logFile
|
|
/home/admin/_bootstrap.update.sh
|
|
fi
|
|
|
|
fi
|
|
|
|
##################################
|
|
# DEFAULT VALUES
|
|
# check which are not set and add
|
|
##################################
|
|
|
|
# COIN NETWORK
|
|
# network=bitcoin|litecoin|undefined
|
|
if [ ${#network} -eq 0 ]; then
|
|
oldNetworkConfigExists=$(sudo ls /home/admin/.network | grep -c '.network')
|
|
if [ ${oldNetworkConfigExists} -eq 1 ]; then
|
|
network=`sudo cat /home/admin/.network`
|
|
echo "importing old network value: ${network}" >> $logFile
|
|
echo "network=${network}" >> $configFile
|
|
else
|
|
echo "network=undefined" >> $configFile
|
|
fi
|
|
fi
|
|
|
|
# RUNNING CHAIN
|
|
# chain=test|main
|
|
if [ ${#chain} -eq 0 ]; then
|
|
networkConfigExists=$(sudo ls /mnt/hdd/${network}/${network}.conf 2>/dev/null | grep -c '.conf')
|
|
if [ ${networkConfigExists} -eq 1 ]; then
|
|
source /mnt/hdd/${network}/${network}.conf
|
|
if [ ${testnet} -eq 1 ]; then
|
|
echo "detecting mainchain" >> $logFile
|
|
echo "chain=main" >> $configFile
|
|
else
|
|
echo "detecting testnet" >> $logFile
|
|
echo "chain=test" >> $configFile
|
|
fi
|
|
else
|
|
echo "chain=main" >> $configFile
|
|
fi
|
|
fi
|
|
|
|
# HOSTNAME
|
|
# hostname=ONEWORDSTRING
|
|
if [ ${#hostname} -eq 0 ]; then
|
|
oldValueExists=$(sudo ls /home/admin/.hostname | grep -c '.hostname')
|
|
if [ ${oldValueExists} -eq 1 ]; then
|
|
oldValue=`sudo cat /home/admin/.hostname`
|
|
echo "importing old hostname: ${oldValue}" >> $logFile
|
|
echo "hostname=${oldValue}" >> $configFile
|
|
else
|
|
echo "hostname=raspiblitz" >> $configFile
|
|
fi
|
|
fi
|
|
|
|
# SETUP STEP
|
|
# setupStep=0-100
|
|
if [ ${#setupStep} -eq 0 ]; then
|
|
oldValueExists=$(sudo ls /home/admin/.setup | grep -c '.setup')
|
|
if [ ${oldValueExists} -eq 1 ]; then
|
|
oldValue=`sudo cat /home/admin/.setup`
|
|
echo "importing old setup value: ${oldValue}" >> $logFile
|
|
echo "setupStep=${oldValue}" >> $configFile
|
|
else
|
|
echo "setupStep=0" >> $configFile
|
|
fi
|
|
fi
|
|
|
|
# AUTOPILOT
|
|
# autoPilot=off|on
|
|
if [ ${#autoPilot} -eq 0 ]; then
|
|
echo "autoPilot=off" >> $configFile
|
|
fi
|
|
|
|
# AUTO NAT DISCOVERY
|
|
# autoNatDiscovery=off|on
|
|
if [ ${#autoNatDiscovery} -eq 0 ]; then
|
|
echo "autoNatDiscovery=off" >> $configFile
|
|
fi
|
|
|
|
# TOR
|
|
# runBehindTor=off|on
|
|
if [ ${#runBehindTor} -eq 0 ]; then
|
|
echo "runBehindTor=off" >> $configFile
|
|
fi
|
|
|
|
# RideTheLightning RTL
|
|
# rtlWebinterface=off|on
|
|
if [ ${#runBehindTor} -eq 0 ]; then
|
|
echo "rtlWebinterface=off" >> $configFile
|
|
fi
|
|
|
|
##################################
|
|
# CHECK CONFIG CONSISTENCY
|
|
##################################
|
|
|
|
# after all default values written to config - reload config
|
|
source $configFile
|
|
echo "" >> $logFile
|
|
|
|
echo "DONE BOOTSTRAP" >> $logFile
|
|
echo "state=ready" > $infoFile
|