Browse Source

boostrap HDD precheck & config scripts

#146
rootzoll 6 years ago
parent
commit
f0e60cfdf8
  1. 12
      home.admin/00infoLCD.sh
  2. 53
      home.admin/00mainMenu.sh
  3. 25
      home.admin/00settingsMenuServices.sh
  4. 274
      home.admin/_bootstrap.sh
  5. 41
      home.admin/config.scripts/lnd.autopilot.sh

12
home.admin/00infoLCD.sh

@ -55,13 +55,23 @@ while :
# before initial setup # before initial setup
if [ ${setupStep} -eq 0 ]; then if [ ${setupStep} -eq 0 ]; then
state="0"
message="Welcome"
# check data from _bootstrap.sh that was running on device setup
bootstrapInfoExists=$(ls /home/admin/raspiblitz.info | grep -c '.info')
if [ ${bootstrapInfoExists} -eq 1 ]; then
# load the data from the info file - overwrite state & message
sudo -u admin source /home/admin/raspiblitz.info
fi
# setup process has not started yet # setup process has not started yet
l1="Login to your RaspiBlitz with:\n" l1="Login to your RaspiBlitz with:\n"
l2="ssh admin@${localip}\n" l2="ssh admin@${localip}\n"
l3="Use password: raspiblitz\n" l3="Use password: raspiblitz\n"
boxwidth=$((${#localip} + 24)) boxwidth=$((${#localip} + 24))
sleep 3 sleep 3
dialog --backtitle "RaspiBlitz ${localip} - Welcome (${setupStep})" --infobox "$l1$l2$l3" 5 ${boxwidth} dialog --backtitle "RaspiBlitz (${state}) - ${message}" --infobox "$l1$l2$l3" 6 ${boxwidth}
sleep 5 sleep 5
# during basic setup # during basic setup

53
home.admin/00mainMenu.sh

@ -1,5 +1,58 @@
#!/bin/bash #!/bin/bash
# check data from _bootstrap.sh that was running on device setup
bootstrapInfoExists=$(ls /home/admin/raspiblitz.info | grep -c '.info')
if [ ${bootstrapInfoExists} -eq 1 ]; then
# load the data from the info file
source /home/admin/raspiblitz.info
echo "Found raspiblitz.info from bootstrap - processing ..."
# if pre-sync is running - stop it
if [ "${state}" = "presync" ]; then
echo "TODO: Stop pre-sync ... press key to continue"
read key
# update info file
state=waitsetup
echo "state=waitsetup" > $infoFile
echo "message='Pre-Sync Stopped'" >> $infoFile
echo "device=${device}" >> $infoFile
fi
# wait until boostrap process is done
keepWaiting=1
while [ ${keepWaiting} -eq 1 ]
do
# 1) when bootstrap on configured device
if [ "${state}" = "ready" ]; then
echo "detected bootstrap ready"
keepWaiting=0
# 2) when bootstrap on a fresh sd card
elif [ "${state}" = "waitsetup" ]; then
echo "detected bootstrap waitinmg for setup"
# unmount the temporary mount
sudo umount -l /mnt/hdd
# update info file - that setup started
echo "state=setup" > $infoFile
echo "message='SetUp Started'" >> $infoFile
echo "device=${device}" >> $infoFile
keepWaiting=0
# 3) when bootstap is still running
else
# wait 2 sevs and check again
sleep 2
keepWaiting=1
fi
done
fi
## default menu settings ## default menu settings
HEIGHT=13 HEIGHT=13
WIDTH=64 WIDTH=64

25
home.admin/00settingsMenuServices.sh

@ -26,14 +26,19 @@ fi
# AUTOPILOT process choice # AUTOPILOT process choice
choice="off"; check=$(echo "${CHOICES}" | grep -c "1") choice="off"; check=$(echo "${CHOICES}" | grep -c "1")
if [ ${check} -eq 1 ]; then choice="on"; fi if [ ${check} -eq 1 ]; then choice="on"; fi
sudo sed -i "s/^autoPilot=.*/autoPilot=${choice}/g" /mnt/hdd/raspiblitz.conf if [ "${autoPilot}" != "${choice}" ]; then
echo "Autopilot Setting changed"
# confirm reboot to activate new settings with bootstrap.service echo "Stopping Service"
dialog --backtitle "Rebooting" --yesno "To activate the settings a reboot is needed." 6 52 sudo systemctl stop lnd
if [ $? -eq 0 ];then echo "Changing raspiblitz.conf"
echo "Starting Reboot .." sudo sed -i "s/^autoPilot=.*/autoPilot=${choice}/g" /mnt/hdd/raspiblitz.conf
sudo shutdown -r now echo "Executing change"
else sudo /home/admin/config.scripts/lnd.autopilot.sh ${choice}
echo "No Reboot - changes stored, but maybe not active." echo "Restarting Service"
sleep 3 echo "You may need to unlock after restart ..."
sudo systemctl start lnd
echo "Giving LND 120 seconds to get ready ..."
sleep 120
else
echo "Autopilot Setting unchanged."
fi fi

274
home.admin/_bootstrap.sh

@ -8,19 +8,38 @@
# load codeVersion # load codeVersion
source /home/admin/_version.info source /home/admin/_version.info
logfile="/home/admin/raspiblitz.log" ################################
echo "Writing logs to: ${logfile}" # FILES TO WORK WITH
echo "" > $logfile ################################
echo "***********************************************" >> $logfile
echo "Running RaspiBlitz Bootstrap ${codeVersion}" >> $logfile # CONFIGFILE - configuration of RaspiBlitz
date >> $logfile # used by fresh SD image to recover configuration
echo "***********************************************" >> $logfile # 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
################################ ################################
# AFTER BOOT SCRIPT # AFTER BOOT SCRIPT
# when a process needs to # when a process needs to
# execute stuff after a reboot # execute stuff after a reboot
# it should in file
# /home/admin/setup.sh # /home/admin/setup.sh
################################ ################################
@ -50,16 +69,121 @@ chmod 774 /run/publicip
################################ ################################
# HDD CHECK / INIT # HDD CHECK & PRE-INIT
# for the very first setup
################################ ################################
# 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
done
# check if the HDD is auto-mounted
hddIsAutoMounted=$(ls -la /mnt/hdd 2>/dev/null)
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=$(df -T /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=$(df | 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
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} 2>/dev/null | 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
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 2>/dev/null | 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
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 2>/dev/null)
if [ ${#blockchainDataExist} -gt 0 ]; then
// TODO: Pre-Sync Blockchain
echo "Found pre-loaded blockchain - TODO start pre-sync!" >> $logFile
echo "state=presync" > $infoFile
echo "message='TODO: start pre-sync'" >> $infoFile
echo "device=${hddDeviceName}" >> $infoFile
exit 1
else
echo "OK - No blockchain data found" >> $logFile
fi
# check if the HDD is mounted # if it got until here: HDD is empty ext4
hddAvailable=$(ls -la /mnt/hdd 2>/dev/null) echo "Waiting for SetUp." >> $logFile
if [ ${#hddAvailable} -eq 0 ]; then echo "state=waitsetup" > $infoFile
echo "HDD is NOT available" >> $logfile echo "message='HDD needs SetUp (2)'" >> $infoFile
echo "TODO: Try to mount." echo "device=${hddDeviceName}" >> $infoFile
exit 1 exit 1
fi fi
################################ ################################
@ -67,74 +191,112 @@ fi
################################ ################################
# check if there is a config file # check if there is a config file
configFile="/mnt/hdd/raspiblitz.conf"
configExists=$(ls ${configFile} 2>/dev/null | grep -c '.conf') configExists=$(ls ${configFile} 2>/dev/null | grep -c '.conf')
if [ ${configExists} -eq 0 ]; then if [ ${configExists} -eq 0 ]; then
# create new config # create new config
echo "creating config file: ${configFile}" >> $logfile echo "creating config file: ${configFile}" >> $logFile
echo "# RASPIBLITZ CONFIG FILE" > $configFile echo "# RASPIBLITZ CONFIG FILE" > $configFile
echo "raspiBlitzVersion='${version}'" >> $configFile echo "raspiBlitzVersion='${version}'" >> $configFile
sudo chmod 777 ${configFile} sudo chmod 777 ${configFile}
# the rest will be set under DEFAULT VALUES
else else
# load & check config version # load & check config version
source $configFile source $configFile
if [ "${raspiBlitzVersion}" != "${raspiBlitzVersion}" ]; then echo "codeVersion(${codeVersion})" >> $logFile
echo "detected version change ... starting migration script" >> $logfile echo "configVersion(${raspiBlitzVersion})" >> $logFile
if [ "${raspiBlitzVersion}" != "${codeVersion}" ]; then
echo "detected version change ... starting migration script" >> $logFile
/home/admin/_migrateVersion.sh /home/admin/_migrateVersion.sh
fi fi
fi fi
################################ ##################################
# DEFAULT VALUES # DEFAULT VALUES
################################ # check which are not set and add
##################################
# AUTOPILOT # COIN NETWORK
# autoPilot=off|on # network=bitcoin|litecoin
if [ ${#autoPilot} -eq 0 ]; then if [ ${#network} -eq 0 ]; then
echo "autoPilot=off" >> $configFile 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=" >> $configFile
fi
fi fi
# after all default values written to config - reload config # RUNNING CHAIN
source $configFile # 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
# AUTOPILOT source /mnt/hdd/${network}/${network}.conf
################################ if [ ${testnet} -eq 1 ]; then
echo "detecting mainchain" >> $logF
echo "" >> $logfile ile
echo "** AUTOPILOT" >> $logfile echo "chain=main" >> $configFile
else
# check if LND is installed echo "detecting testnet" >> $logF
lndExists=$(ls /mnt/hdd/lnd/lnd.conf 2>/dev/null | grep -c '.conf') ile
if [ ${lndExists} -eq 1 ]; then echo "chain=test" >> $configFile
fi
# check if autopilot is active in LND config else
lndAutopilot=$( grep -c "autopilot.active=1" /mnt/hdd/lnd/lnd.conf ) echo "chain=" >> $configFile
echo "confAutopilot(${autoPilot})" >> $logfile
echo "lndAutopilot(${lndAutopilot})" >> $logfile
# switch on
if [ ${lndAutopilot} -eq 0 ] && [ "${autoPilot}" = "on" ]; then
echo "switching the LND autopilot ON" >> $logfile
sudo sed -i "s/^autopilot.active=.*/autopilot.active=1/g" /mnt/hdd/lnd/lnd.conf
fi fi
fi
# switch off # HOSTNAME
if [ ${lndAutopilot} -eq 1 ] && [ "${autoPilot}" = "off" ]; then # hostname=ONEWORDSTRING
echo "switching the LND autopilot OFF" >> $logfile if [ ${#setupStep} -eq 0 ]; then
sudo sed -i "s/^autopilot.active=.*/autopilot.active=0/g" /mnt/hdd/lnd/lnd.conf 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=" >> $configFile
fi fi
fi
else # 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
echo "WARNING: /mnt/hdd/lnd/lnd.conf does not exists. Setup needs to run properly first!" >> $logfile # 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 fi
echo "" >> $logfile ##################################
echo "DONE BOOTSTRAP" >> $logfile # CHECK CONFIG CONSISTENCY
##################################
# after all default values written to config - reload config
source $configFile
echo "" >> $logFile
echo "DONE BOOTSTRAP" >> $logFile
echo "state=ready" > $infoFile

41
home.admin/config.scripts/lnd.autopilot.sh

@ -0,0 +1,41 @@
#!/bin/bash
if [ $# -eq 0 ]; then
echo "small config script to switch the LND auto pilot on or off"
echo "lnd.autopilot.sh [1|0]"
exit 1
fi
# check lnd.conf exits
lndConfExists=$(sudo ls /mnt/hdd/lnd/lnd.conf | grep -c 'lnd.conf')
if [ ${lndConfExists} -eq 0 ]; then
echo "FAIL - /mnt/hdd/lnd/lnd.conf not found"
exit 1
fi
# check if "autopilot.active" exists
valueExists=$(sudo cat /mnt/hdd/lnd/lnd.conf | grep -c 'autopilot.active=')
if [ ${valueExists} -eq 0 ]; then
echo "Adding autopilot config defaults to /mnt/hdd/lnd/lnd.conf"
sudo sed -i '$ a [autopilot]' /mnt/hdd/lnd/lnd.conf
sudo sed -i '$ a autopilot.active=0' /mnt/hdd/lnd/lnd.conf
sudo sed -i '$ a autopilot.allocation=0.6' /mnt/hdd/lnd/lnd.conf
sudo sed -i '$ a autopilot.maxchannels=5' /mnt/hdd/lnd/lnd.conf
fi
# switch on
if [ $1 -eq 1 ] || [ "$1" = "on" ]; then
echo "switching the LND autopilot ON"
sudo sed -i "s/^autopilot.active=.*/autopilot.active=1/g" /mnt/hdd/lnd/lnd.conf
exit 0
fi
# switch off
if [ $1 -eq 0 ] || [ "$1" = "off" ]; then
echo "switching the LND autopilot OFF"
sudo sed -i "s/^autopilot.active=.*/autopilot.active=0/g" /mnt/hdd/lnd/lnd.conf
exit 0
fi
echo "FAIL - Unknown Paramter $1"
exit 1
Loading…
Cancel
Save