11#!/bin/bash
22#
3- # Name: DigiNode Setup v0.10.10
3+ # Name: DigiNode Setup v0.11.0
44#
55# Purpose: Install and manage a DigiByte Node and DigiAsset Node via the linux command line.
66#
77# Compatibility: Supports x86_86 or arm64 hardware with Raspberry Pi OS, Ubuntu or Debian 64-bit distros.
8- # A Raspberry Pi 4 8Gb or better, running Raspberry Pi OS Lite 64-bit is recommended.
8+ # A Raspberry Pi with at least 8Gb RAM running Raspberry Pi OS Lite 64-bit is recommended.
99#
1010# Author: Olly Stedall [ Bluesky: @olly.st ]
1111#
1212# Website: https://diginode.tools
1313#
1414# Support: Telegram - https://t.me/DigiNodeTools
15- # Bluesky - https://bsky.app/profile/diginode.tools
16- #
17- # Get Started: curl -sSL setup.diginode.tools | bash
18- #
19- # Alternatively clone the repo to your home folder:
20- #
21- # cd ~
22- # git clone https://github.com/DigiNode-Tools/diginode-tools/
23- # chmod +x ~/diginode-tools/diginode-setup.sh
24- #
25- # To run DigiNode Setup:
26- #
27- # ~/diginode-tools/diginode-setup.sh
15+ # Bluesky - https://bsky.app/profile/diginode.tools
2816#
2917# -----------------------------------------------------------------------------------------------------
3018
31- DGNT_VER_LIVE=0.10.10
32- # Last Updated: 2025-02-12
19+ DGNT_VER_LIVE=0.11.0
20+ # Last Updated: 2025-04-15
3321
3422# Convert to a fixed width string of 9 characters to display in the script
3523DGNT_VER_LIVE_FW=$(printf "%-9s" "v$DGNT_VER_LIVE")
@@ -90,6 +78,17 @@ if [[ "$RUN_SETUP" != "NO" ]] ; then
9078 VERBOSE_MODE=false
9179fi
9280
81+
82+ ######## NEW GENERIC BLOCKCHAIN IDENTIFIER VARIABLES #########
83+
84+ # DIGIBYTE VARIABLES
85+
86+ CRYPTO_NAME="DigiByte"
87+ CRYPTO_SYMBOL="DGB"
88+ SETTINGS_LOCATION=$USER_HOME/.digibyte
89+ SETTINGS_FILE=$SETTINGS_LOCATION/diginode.settings
90+
91+
9392######### IMPORTANT NOTE ###########
9493# Both the DigiNode Setup and DigiNode Dashboard scripts make use of a setting file
9594# located at ~/.digibyte/diginode.settings
@@ -512,6 +511,9 @@ if [ ! -f "$DGNT_SETTINGS_FILE" ]; then
512511 DGB_MAX_CONNECTIONS=150
513512 SM_AUTO_QUIT=20
514513 SM_DISPLAY_BALANCE=YES
514+ SM_DISPLAY_MAINNET_MEMPOOL=YES
515+ SM_DISPLAY_TESTNET_MEMPOOL=YES
516+ SM_MEMPOOL_DISPLAY_TIMEOUT=30
515517 DGNT_DEV_BRANCH=YES
516518 INSTALL_SYS_UPGRADES=NO
517519
@@ -546,6 +548,9 @@ if [ ! -f "$DGNT_SETTINGS_FILE" ]; then
546548 # SET UPDATE GROUP - RANDOM NUMBER BETWEEN 1 and 4
547549 UPDATE_GROUP=$(( 1 + $RANDOM % 4 ))
548550
551+ # generate unique system ID
552+ generate_node_uid
553+
549554 # create diginode.settings file
550555 diginode_settings_create_update
551556
@@ -620,6 +625,19 @@ if [[ ! "$UPDATE_GROUP" =~ [1234] ]]; then
620625 printf "%b%b %s Done!\\n" "${OVER}" "${TICK}" "${str}"
621626fi
622627
628+ # If display mempool values are not assigned, assign them to YES
629+ if [ "$SM_DISPLAY_MAINNET_MEMPOOL" != "YES" ] || [ "$SM_DISPLAY_MAINNET_MEMPOOL" != "NO" ]; then
630+ SM_DISPLAY_MAINNET_MEMPOOL=YES
631+ fi
632+ if [ "$SM_DISPLAY_TESTNET_MEMPOOL" != "YES" ] || [ "$SM_DISPLAY_TESTNET_MEMPOOL" != "NO" ]; then
633+ SM_DISPLAY_TESTNET_MEMPOOL=YES
634+ fi
635+ if [ "$SM_MEMPOOL_DISPLAY_TIMEOUT" = "" ]; then
636+ SM_MEMPOOL_DISPLAY_TIMEOUT=30
637+ fi
638+ if [ "$NODE_UID" = "" ]; then
639+ generate_node_uid
640+ fi
623641
624642# create diginode.settings file
625643if [ "$recreate_diginode_settings" = "yes" ]; then
@@ -682,6 +700,15 @@ SM_AUTO_QUIT=$SM_AUTO_QUIT
682700# has completed syncing, and (c) there are actually funds in the wallet (i.e. the balance is > 0).
683701SM_DISPLAY_BALANCE=$SM_DISPLAY_BALANCE
684702
703+ # Choose whether to display DigiByte mempool data in the DigiNode Dashboard. (Specify either YES or NO.)
704+ # SM_MEMPOOL_DISPLAY_TIMOUT specifies the number of seconds of there being zero transactions before the
705+ # mempool data is hidden. This ensures that mempool data is only displayed when there is data to be displayed.
706+ # Default value is SM_MEMPOOL_DISPLAY_TIMOUT=30
707+ SM_DISPLAY_MAINNET_MEMPOOL=$SM_DISPLAY_MAINNET_MEMPOOL
708+ SM_DISPLAY_TESTNET_MEMPOOL=$SM_DISPLAY_TESTNET_MEMPOOL
709+ SM_MEMPOOL_DISPLAY_TIMEOUT=$SM_MEMPOOL_DISPLAY_TIMEOUT
710+
711+
685712# Install the develop branch of DigiNode Tools (Specify either YES or NO)
686713# If NO, it will install the latest release version
687714DGNT_DEV_BRANCH=$DGNT_DEV_BRANCH
@@ -771,6 +798,10 @@ UI_SETUP_DIGINODE_MOTD=$UI_SETUP_DIGINODE_MOTD
771798# THEY ARE CREATED AND SET AUTOMATICALLY BY DigiNode Setup and DigiNode Dashboard.
772799# Changing them yourself may break your DigiNode.
773800
801+ # This is a unique identifier generated at first install to anonymously identify each DigiNode.
802+ # Do not edit this value or your node may break
803+ NODE_UID=$NODE_UID
804+
774805# DIGIBYTE NODE LOCATION: (Do not change this value)
775806# This references a symbolic link that points at the actual install folder.
776807# If you are using DigiNode Setup to manage your node there is no reason to change this.
@@ -990,22 +1021,19 @@ INSTALLED_TOR_GPG_KEY=$INSTALLED_TOR_GPG_KEY
9901021
9911022
9921023###############################################
993- ####### STATE VARIABLES ########£££ ############
1024+ ####### STATE VARIABLES ########### ############
9941025###############################################
9951026
9961027# These variables are periodically updated when there is a new release of DigiNode Tools
9971028# These are used to display the current state of the DigiByte blockchain
9981029# There is no need to change these values yourself. They will be updated automatically.
9991030
1000- # Current DigiByte Block height in Millions. Used in the DigiFacts.
1001- DGB_BLOCK_HEIGHT_MIL="18"
1002-
10031031# These variables stores the approximate amount of space required to download the entire DigiByte blockchain
10041032# This is used during the disk space check to ensure there is enough space on the drive to download the DigiByte blockchain.
10051033# (Format date like so - e.g. "January 2023"). This is the approximate date when these values were updated.
1006- DGB_DATA_REQUIRED_DATE="August 2023 "
1007- DGB_DATA_REQUIRED_HR="52Gb "
1008- DGB_DATA_REQUIRED_KB="52000000 "
1034+ DGB_DATA_REQUIRED_DATE="April 2025 "
1035+ DGB_DATA_REQUIRED_HR="55Gb "
1036+ DGB_DATA_REQUIRED_KB="55000000 "
10091037
10101038EOF
10111039
@@ -1361,6 +1389,76 @@ fi
13611389
13621390}
13631391
1392+ generate_node_uid() {
1393+ local crypto_symbol node_uid_timestamp random_id machine_id
1394+ local node_uid_combined fallback_id fallback_file
1395+ local decoded_uid stored_machine_id
1396+
1397+ crypto_symbol="$CRYPTO_SYMBOL"
1398+ fallback_file="$USER_HOME/.fallback_machine_id"
1399+
1400+ # Determine machine_id
1401+ if [[ -r /etc/machine-id ]]; then
1402+ machine_id=$(cat /etc/machine-id)
1403+ else
1404+ # Check if fallback file exists and is valid (32 hex characters)
1405+ if [[ -r "$fallback_file" ]]; then
1406+ fallback_id=$(<"$fallback_file")
1407+ if [[ "$fallback_id" =~ ^[a-f0-9]{32}$ ]]; then
1408+ machine_id="$fallback_id"
1409+ else
1410+ printf "%b Invalid fallback machine ID detected. Regenerating...\n" "${WARN}"
1411+ fallback_id=$(head -c 16 /dev/urandom | od -An -tx1 | tr -d ' \n')
1412+ echo "$fallback_id" > "$fallback_file"
1413+ chmod 600 "$fallback_file"
1414+ machine_id="$fallback_id"
1415+ fi
1416+ else
1417+ # Generate and store a new fallback ID
1418+ printf "%b No machine-id detected. Generating fallback machine ID...\n" "${WARN}"
1419+ fallback_id=$(head -c 16 /dev/urandom | od -An -tx1 | tr -d ' \n')
1420+ echo "$fallback_id" > "$fallback_file"
1421+ chmod 600 "$fallback_file"
1422+ machine_id="$fallback_id"
1423+ fi
1424+ fi
1425+
1426+ # Check existing NODE_UID
1427+ if [[ -n "$NODE_UID" ]]; then
1428+ # Decode Base64 URL
1429+ decoded_uid=$(echo "$NODE_UID" | tr '_-' '/+' | base64 --decode 2>/dev/null)
1430+
1431+ if [[ "$decoded_uid" =~ ^([A-Z]+)_([0-9]+)_([a-f0-9]{6})_([a-f0-9]+)$ ]]; then
1432+ stored_machine_id="${BASH_REMATCH[4]}"
1433+ if [[ "$stored_machine_id" == "$machine_id" ]]; then
1434+ if [ $VERBOSE_MODE = true ]; then
1435+ printf "%b NODE_UID is valid and matches current machine-id.\n" "${TICK}"
1436+ fi
1437+ return 0
1438+ else
1439+ printf "%b NODE_UID machine-id mismatch — regenerating...\n" "${WARN}"
1440+ fi
1441+ else
1442+ printf "%b NODE_UID format is invalid — regenerating...\n" "${WARN}"
1443+ fi
1444+ fi
1445+
1446+ # Generate new NODE_UID
1447+ node_uid_timestamp=$(date +%s)
1448+ random_id=$(openssl rand -hex 3) # 6-character random hex
1449+ node_uid_combined="${crypto_symbol}_${node_uid_timestamp}_${random_id}_${machine_id}"
1450+
1451+ # Base64 URL encode
1452+ NODE_UID=$(echo -n "$node_uid_combined" | base64 | tr '+/' '-_' | tr -d '=')
1453+
1454+ # Save to diginode.settings
1455+ if [[ -f "$DGNT_SETTINGS_FILE" ]]; then
1456+ sed -i -e "/^NODE_UID=/s|.*|NODE_UID=$NODE_UID|" "$DGNT_SETTINGS_FILE"
1457+ fi
1458+
1459+ printf "%b Generated new NODE_UID: %s\n" "${INFO}" "$NODE_UID"
1460+ }
1461+
13641462
13651463# OLD VERSION_CODENAME
13661464
@@ -8147,9 +8245,23 @@ change_tor_status() {
81478245 # Restart Digibyted if the Tor status has just been changed
81488246 if [ "$DGB_STATUS" = "running" ] || [ "$DGB_STATUS" = "startingup" ] || [ "$DGB_STATUS" = "stopped" ]; then
81498247 printf "%b DigiByte Core Tor status has been changed. DigiByte Mainnet daemon will be restarted...\\n" "${INFO}"
8248+ stop_service digibyted
8249+ if [ -f "$DGB_DATA_LOCATION/peers.dat" ]; then
8250+ str="Deleting Mainnet peers.dat as Tor status has changed ..."
8251+ printf "%b %s" "${INFO}" "${str}"
8252+ rm -f $DGB_DATA_LOCATION/peers.dat
8253+ printf "%b%b %s Done!\\n" "${OVER}" "${TICK}" "${str}"
8254+ fi
81508255 restart_service digibyted
81518256 fi
81528257
8258+ # Reenable port tester as Tor status has changed
8259+ str="Re-enabling DigiByte Core MAINNET Port Test ..."
8260+ printf "%b %s" "${INFO}" "${str}"
8261+ DGB_MAINNET_PORT_TEST_ENABLED="YES"
8262+ sed -i -e "/^DGB_MAINNET_PORT_TEST_ENABLED=/s|.*|DGB_MAINNET_PORT_TEST_ENABLED=\"$DGB_MAINNET_PORT_TEST_ENABLED\"|" $DGNT_SETTINGS_FILE
8263+ printf "%b%b %s Done!\\n" "${OVER}" "${TICK}" "${str}"
8264+
81538265 fi
81548266
81558267 # Restart DigiByte testnet daemon if Tor status has changed (single node)
@@ -8158,9 +8270,23 @@ change_tor_status() {
81588270 # Restart Digibyted if the Tor status has just been changed
81598271 if [ "$DGB_STATUS" = "running" ] || [ "$DGB_STATUS" = "startingup" ] || [ "$DGB_STATUS" = "stopped" ]; then
81608272 printf "%b DigiByte Core Tor status has been changed. DigiByte Testnet daemon will be restarted...\\n" "${INFO}"
8273+ stop_service digibyted
8274+ if [ -f "$DGB_DATA_LOCATION/testnet4/peers.dat" ]; then
8275+ str="Deleting Testnet peers.dat as Tor status has changed ..."
8276+ printf "%b %s" "${INFO}" "${str}"
8277+ rm -f $DGB_DATA_LOCATION/testnet4/peers.dat
8278+ printf "%b%b %s Done!\\n" "${OVER}" "${TICK}" "${str}"
8279+ fi
81618280 restart_service digibyted
81628281 fi
81638282
8283+ # Reenable port tester as Tor status has changed
8284+ str="Re-enabling DigiByte Core TESTNET Port Test ..."
8285+ printf "%b %s" "${INFO}" "${str}"
8286+ DGB_TESTNET_PORT_TEST_ENABLED="YES"
8287+ sed -i -e "/^DGB_TESTNET_PORT_TEST_ENABLED=/s|.*|DGB_TESTNET_PORT_TEST_ENABLED=\"$DGB_TESTNET_PORT_TEST_ENABLED\"|" $DGNT_SETTINGS_FILE
8288+ printf "%b%b %s Done!\\n" "${OVER}" "${TICK}" "${str}"
8289+
81648290 fi
81658291
81668292 # Restart DigiByte testnet daemon if Tor status has changed (dual node)
@@ -8169,9 +8295,23 @@ change_tor_status() {
81698295 # Restart Digibyted if the Tor status has just been changed
81708296 if [ "$DGB2_STATUS" = "running" ] || [ "$DGB2_STATUS" = "startingup" ] || [ "$DGB2_STATUS" = "stopped" ]; then
81718297 printf "%b DigiByte Core Tor status has been changed. DigiByte Testnet daemon will be restarted...\\n" "${INFO}"
8298+ stop_service digibyted-testnet
8299+ if [ -f "$DGB_DATA_LOCATION/testnet4/peers.dat" ]; then
8300+ str="Deleting Testnet peers.dat as Tor status has changed ..."
8301+ printf "%b %s" "${INFO}" "${str}"
8302+ rm -f $DGB_DATA_LOCATION/testnet4/peers.dat
8303+ printf "%b%b %s Done!\\n" "${OVER}" "${TICK}" "${str}"
8304+ fi
81728305 restart_service digibyted-testnet
81738306 fi
81748307
8308+ # Reenable port tester as Tor status has changed
8309+ str="Re-enabling DigiByte Core TESTNET Port Test ..."
8310+ printf "%b %s" "${INFO}" "${str}"
8311+ DGB_TESTNET_PORT_TEST_ENABLED="YES"
8312+ sed -i -e "/^DGB_TESTNET_PORT_TEST_ENABLED=/s|.*|DGB_TESTNET_PORT_TEST_ENABLED=\"$DGB_TESTNET_PORT_TEST_ENABLED\"|" $DGNT_SETTINGS_FILE
8313+ printf "%b%b %s Done!\\n" "${OVER}" "${TICK}" "${str}"
8314+
81758315 fi
81768316
81778317 # Set the IPFS Tor values, if we are enabling/disabling the UPnP status
@@ -8381,6 +8521,8 @@ change_dgb_network() {
83818521 sed -i -e "/^DGB_DATA_DISKUSED_MAIN_HR=/s|.*|DGB_DATA_DISKUSED_MAIN_HR=\"$DGB_DATA_DISKUSED_MAIN_HR\"|" $DGNT_SETTINGS_FILE
83828522 sed -i -e "/^DGB_DATA_DISKUSED_MAIN_KB=/s|.*|DGB_DATA_DISKUSED_MAIN_KB=\"$DGB_DATA_DISKUSED_MAIN_KB\"|" $DGNT_SETTINGS_FILE
83838523 sed -i -e "/^DGB_DATA_DISKUSED_MAIN_PERC=/s|.*|DGB_DATA_DISKUSED_MAIN_PERC=\"$DGB_DATA_DISKUSED_MAIN_PERC\"|" $DGNT_SETTINGS_FILE
8524+ DGB_BLOCKSYNC_VALUE=""
8525+ sed -i -e "/^DGB_BLOCKSYNC_VALUE=/s|.*|DGB_BLOCKSYNC_VALUE=\"$DGB_BLOCKSYNC_VALUE\"|" $DGNT_SETTINGS_FILE
83848526 printf "%b%b %s Done!\\n" "${OVER}" "${TICK}" "${str}"
83858527 fi
83868528 printf "\\n"
@@ -8420,6 +8562,10 @@ change_dgb_network() {
84208562 sed -i -e "/^DGB_DATA_DISKUSED_TEST_HR=/s|.*|DGB_DATA_DISKUSED_TEST_HR=\"$DGB_DATA_DISKUSED_TEST_HR\"|" $DGNT_SETTINGS_FILE
84218563 sed -i -e "/^DGB_DATA_DISKUSED_TEST_KB=/s|.*|DGB_DATA_DISKUSED_TEST_KB=\"$DGB_DATA_DISKUSED_TEST_KB\"|" $DGNT_SETTINGS_FILE
84228564 sed -i -e "/^DGB_DATA_DISKUSED_TEST_PERC=/s|.*|DGB_DATA_DISKUSED_TEST_PERC=\"$DGB_DATA_DISKUSED_TEST_PERC\"|" $DGNT_SETTINGS_FILE
8565+ DGB2_BLOCKSYNC_VALUE=""
8566+ sed -i -e "/^DGB2_BLOCKSYNC_VALUE=/s|.*|DGB2_BLOCKSYNC_VALUE=\"$DGB2_BLOCKSYNC_VALUE\"|" $DGNT_SETTINGS_FILE
8567+ DGB_BLOCKSYNC_VALUE=""
8568+ sed -i -e "/^DGB_BLOCKSYNC_VALUE=/s|.*|DGB_BLOCKSYNC_VALUE=\"$DGB_BLOCKSYNC_VALUE\"|" $DGNT_SETTINGS_FILE
84238569 printf "%b%b %s Done!\\n" "${OVER}" "${TICK}" "${str}"
84248570 fi
84258571 printf "\\n"
@@ -17852,9 +17998,11 @@ uninstall_do_now() {
1785217998 DGB_DATA_DISKUSED_MAIN_HR=""
1785317999 DGB_DATA_DISKUSED_MAIN_KB=""
1785418000 DGB_DATA_DISKUSED_MAIN_PERC=""
18001+ DGB_BLOCKSYNC_VALUE=""
1785518002 sed -i -e "/^DGB_DATA_DISKUSED_MAIN_HR=/s|.*|DGB_DATA_DISKUSED_MAIN_HR=\"$DGB_DATA_DISKUSED_MAIN_HR\"|" $DGNT_SETTINGS_FILE
1785618003 sed -i -e "/^DGB_DATA_DISKUSED_MAIN_KB=/s|.*|DGB_DATA_DISKUSED_MAIN_KB=\"$DGB_DATA_DISKUSED_MAIN_KB\"|" $DGNT_SETTINGS_FILE
1785718004 sed -i -e "/^DGB_DATA_DISKUSED_MAIN_PERC=/s|.*|DGB_DATA_DISKUSED_MAIN_PERC=\"$DGB_DATA_DISKUSED_MAIN_PERC\"|" $DGNT_SETTINGS_FILE
18005+ sed -i -e "/^DGB_BLOCKSYNC_VALUE=/s|.*|DGB_BLOCKSYNC_VALUE=\"$DGB_BLOCKSYNC_VALUE\"|" $DGNT_SETTINGS_FILE
1785818006 printf "%b%b %s Done!\\n" "${OVER}" "${TICK}" "${str}"
1785918007 fi
1786018008
@@ -17892,6 +18040,10 @@ uninstall_do_now() {
1789218040 sed -i -e "/^DGB_DATA_DISKUSED_TEST_HR=/s|.*|DGB_DATA_DISKUSED_TEST_HR=\"$DGB_DATA_DISKUSED_TEST_HR\"|" $DGNT_SETTINGS_FILE
1789318041 sed -i -e "/^DGB_DATA_DISKUSED_TEST_KB=/s|.*|DGB_DATA_DISKUSED_TEST_KB=\"$DGB_DATA_DISKUSED_TEST_KB\"|" $DGNT_SETTINGS_FILE
1789418042 sed -i -e "/^DGB_DATA_DISKUSED_TEST_PERC=/s|.*|DGB_DATA_DISKUSED_TEST_PERC=\"$DGB_DATA_DISKUSED_TEST_PERC\"|" $DGNT_SETTINGS_FILE
18043+ DGB2_BLOCKSYNC_VALUE=""
18044+ sed -i -e "/^DGB2_BLOCKSYNC_VALUE=/s|.*|DGB2_BLOCKSYNC_VALUE=\"$DGB2_BLOCKSYNC_VALUE\"|" $DGNT_SETTINGS_FILE
18045+ DGB_BLOCKSYNC_VALUE=""
18046+ sed -i -e "/^DGB_BLOCKSYNC_VALUE=/s|.*|DGB_BLOCKSYNC_VALUE=\"$DGB_BLOCKSYNC_VALUE\"|" $DGNT_SETTINGS_FILE
1789518047 printf "%b%b %s Done!\\n" "${OVER}" "${TICK}" "${str}"
1789618048 fi
1789718049
@@ -18246,12 +18398,26 @@ download_digifacts() {
1824618398 str="Is downloaded digifacts.json okay? ..."
1824718399 printf "%b %s" "${INFO}" "${str}"
1824818400 if test ! -s "$digifacts_file"; then
18249- rm "$digifacts_file"
18401+ if [ -f "$digifacts_file" ]; then
18402+ rm "$digifacts_file"
18403+ fi
1825018404 if [ -f "$digifacts_backup_file" ]; then
1825118405 mv "$digifacts_backup_file" "$digifacts_file"
1825218406 fi
1825318407 printf "%b%b %s No! File empty! Backup restored!\\n" "${OVER}" "${CROSS}" "${str}"
18408+ printf "%b %bERROR: DigiFacts web server may be down!%b\\n" "${INFO}" "${COL_LIGHT_RED}" "${COL_NC}"
18409+ return 1
18410+
18411+ # New: Check for HTML response from Cloudflare
18412+ elif grep -q -i "<!DOCTYPE html>" "$digifacts_file" || grep -q -i "<html" "$digifacts_file"; then
18413+ rm "$digifacts_file"
18414+ if [ -f "$digifacts_backup_file" ]; then
18415+ mv "$digifacts_backup_file" "$digifacts_file"
18416+ fi
18417+ printf "%b%b %s No! Received HTML instead of JSON. Backup restored!\\n" "${OVER}" "${CROSS}" "${str}"
18418+ printf "%b %bERROR: DigiFacts service may be unreachable or returning a Cloudflare error.%b\\n" "${INFO}" "${COL_LIGHT_RED}" "${COL_NC}"
1825418419 return 1
18420+
1825518421 else
1825618422 # If the JSON is valid, delete the backup file (if it exists)
1825718423 if [ -f "$digifacts_backup_file" ]; then
@@ -18271,6 +18437,7 @@ download_digifacts() {
1827118437 mv "$digifacts_backup_file" "$digifacts_file"
1827218438 fi
1827318439 printf "%b%b %s No! Bad JSON! Backup restored!\\n" "${OVER}" "${CROSS}" "${str}"
18440+ printf "%b %bERROR: DigiFacts.json was bad json. Is service down?%b\\n" "${INFO}" "${COL_LIGHT_RED}" "${COL_NC}"
1827418441 return 1
1827518442 else
1827618443 # If the JSON is valid, delete the backup file (if it exists)
0 commit comments