diff --git a/home.admin/config.scripts/bonus.fulcrum.sh b/home.admin/config.scripts/bonus.fulcrum.sh index 68998c644..f09f6e505 100644 --- a/home.admin/config.scripts/bonus.fulcrum.sh +++ b/home.admin/config.scripts/bonus.fulcrum.sh @@ -1,17 +1,69 @@ #!/bin/bash # https://github.com/cculianu/Fulcrum/releases -fulcrumVersion="1.9.1" +fulcrumVersion="1.9.6" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then - echo "config script to switch the Fulcrum electrum server on or off" + echo "config script to switch the Fulcrum electrum server on, off or update to the latest release" # echo "bonus.fulcrum.sh status [?showAddress]" - echo "bonus.fulcrum.sh [on|off]" + echo "bonus.fulcrum.sh [on|off|update]" echo "installs the version $fulcrumVersion" exit 1 fi +function downloadAndVerifyBinary() { + cd /home/fulcrum || exit 1 + + # download the prebuilt binary + sudo -u fulcrum wget https://github.com/cculianu/Fulcrum/releases/download/v${fulcrumVersion}/Fulcrum-${fulcrumVersion}-${build}.tar.gz || exit 1 + sudo -u fulcrum wget https://github.com/cculianu/Fulcrum/releases/download/v${fulcrumVersion}/Fulcrum-${fulcrumVersion}-sha256sums.txt || exit 1 + sudo -u fulcrum wget https://github.com/cculianu/Fulcrum/releases/download/v${fulcrumVersion}/Fulcrum-${fulcrumVersion}-sha256sums.txt.asc || exit 1 + + # Verify + # get the PGP key + curl https://raw.githubusercontent.com/Electron-Cash/keys-n-hashes/master/pubkeys/calinkey.txt | sudo -u fulcrum gpg --import + + echo "# Look for 'Good signature'" + sudo -u fulcrum gpg --verify Fulcrum-${fulcrumVersion}-sha256sums.txt.asc || exit 1 + + echo "# Look for 'OK'" + sudo -u fulcrum sha256sum -c Fulcrum-${fulcrumVersion}-sha256sums.txt --ignore-missing || exit 1 + + echo "# Unpack" + sudo -u fulcrum tar -xvf Fulcrum-${fulcrumVersion}-${build}.tar.gz +} + +function createSystemdService() { + echo "# Create a systemd service" + echo "\ +[Unit] +Description=Fulcrum +After=network.target bitcoind.service +StartLimitBurst=2 +StartLimitIntervalSec=20 + +[Service] +ExecStart=/home/fulcrum/Fulcrum-${fulcrumVersion}-${build}/Fulcrum /home/fulcrum/.fulcrum/fulcrum.conf +KillSignal=SIGINT +User=fulcrum +LimitNOFILE=8192 +TimeoutStopSec=300 +RestartSec=5 +Restart=on-failure + +[Install] +WantedBy=multi-user.target +" | sudo tee /etc/systemd/system/fulcrum.service +} + +# set the platform +if [ $(uname -m) = "aarch64" ]; then + build="arm64-linux" +elif [ $(uname -m) = "x86_64" ]; then + build="x86_64-linux-ub16" +fi + if [ "$1" = on ]; then # ?wait until txindex finishes? /home/admin/config.scripts/network.txindex.sh on @@ -31,34 +83,10 @@ if [ "$1" = on ]; then # create a dedicated user sudo adduser --system --group --home /home/fulcrum fulcrum - cd /home/fulcrum || exit 1 sudo apt install -y libssl-dev # was needed on Debian Bullseye - # set the platform - if [ $(uname -m) = "aarch64" ]; then - build="arm64-linux" - elif [ $(uname -m) = "x86_64" ]; then - build="x86_64-linux-ub16" - fi - - # download the prebuilt binary - sudo -u fulcrum wget https://github.com/cculianu/Fulcrum/releases/download/v${fulcrumVersion}/Fulcrum-${fulcrumVersion}-${build}.tar.gz - sudo -u fulcrum wget https://github.com/cculianu/Fulcrum/releases/download/v${fulcrumVersion}/Fulcrum-${fulcrumVersion}-${build}.tar.gz.asc - sudo -u fulcrum wget https://github.com/cculianu/Fulcrum/releases/download/v${fulcrumVersion}/Fulcrum-${fulcrumVersion}-${build}.tar.gz.sha256sum - - # Verify - # get the PGP key - curl https://raw.githubusercontent.com/Electron-Cash/keys-n-hashes/master/pubkeys/calinkey.txt | sudo -u fulcrum gpg --import - - echo "# Look for 'Good signature'" - sudo -u fulcrum gpg --verify Fulcrum-${fulcrumVersion}-${build}.tar.gz.asc || exit 1 - - echo "# Look for 'OK'" - sudo -u fulcrum sha256sum -c Fulcrum-${fulcrumVersion}-${build}.tar.gz.sha256sum --ignore-missing || exit 1 - - echo "# Unpack" - sudo -u fulcrum tar -xvf Fulcrum-${fulcrumVersion}-${build}.tar.gz + downloadAndVerifyBinary echo "# Create the database directory in /mnt/hdd/app-storage (on the disk)" sudo mkdir -p /mnt/hdd/app-storage/fulcrum/db @@ -95,26 +123,7 @@ tcp = 0.0.0.0:50021 # ssl via nginx " | sudo -u fulcrum tee /home/fulcrum/.fulcrum/fulcrum.conf - echo "# Create a systemd service" - echo "\ -[Unit] -Description=Fulcrum -After=network.target bitcoind.service -StartLimitBurst=2 -StartLimitIntervalSec=20 - -[Service] -ExecStart=/home/fulcrum/Fulcrum-${fulcrumVersion}-${build}/Fulcrum /home/fulcrum/.fulcrum/fulcrum.conf -KillSignal=SIGINT -User=fulcrum -LimitNOFILE=8192 -TimeoutStopSec=300 -RestartSec=5 -Restart=on-failure - -[Install] -WantedBy=multi-user.target -" | sudo tee /etc/systemd/system/fulcrum.service + createSystemdService sudo systemctl enable fulcrum if [ "${state}" == "ready" ]; then @@ -186,9 +195,30 @@ stream { echo "sudo journalctl -fu fulcrum" fi +if [ "$1" = update ]; then + # get the latest release from github without the leading 'v' + fulcrumVersion=$(curl --silent https://api.github.com/repos/cculianu/Fulcrum/releases/latest | jq -r '.tag_name | ltrimstr("v")') + echo "# The latest release is: $fulcrumVersion" + + # check if the binary is already installed + if [ -f /home/fulcrum/Fulcrum-${fulcrumVersion}-${build}/Fulcrum ]; then + echo "# Fulcrum-${fulcrumVersion}-${build} is already installed" + exit 0 + else + echo "# Installing Fulcrum-${fulcrumVersion}-${build}" + fi + + downloadAndVerifyBinary + + sudo systemctl disable --now fulcrum + + createSystemdService + + sudo systemctl enable --now fulcrum +fi + if [ "$1" = off ]; then - sudo systemctl disable fulcrum - sudo systemctl stop fulcrum + sudo systemctl disable --now fulcrum sudo userdel -rf fulcrum # remove Tor service /home/admin/config.scripts/tor.onion-service.sh off fulcrum