diff --git a/.gitignore b/.gitignore index 4980ab126..f5ffa848b 100644 --- a/.gitignore +++ b/.gitignore @@ -16,9 +16,6 @@ instance/ # vscode .vscode/ -# Local-only plans -plans_local - .DS_Store # Output (rootfs, etc...) @@ -28,3 +25,4 @@ plans/ # Release tarballs stuff releases/ release.sh + diff --git a/CHANGELOG b/CHANGELOG index 59f7ec80a..c06bb8c27 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,31 +1,3 @@ -=== v0.3.46 === -- Released 08/07/26 -- Upgrade BTCPay to v2.4.2 -- Upgrade Specter to v2.1.10 -- Add Custom Bitcoin Version for Core 29.x -- Add explicit datacarrier=83 size config to default bitcoin.conf -- Improve log consistency by preventing /var/log from filling up -- Bug Fixes - -=== v0.3.45 === -- Released 07/11/26 -- Upgrade BTCPay Server to v1.13.6 -- Upgrade Canary to v1.5.2 -- Upgrade Tor to at least 0.4.9.x to keep Tor working past Sept. -- Add warning if using old Tor version (0.4.8.x) -- Fix issue with BTCPay Server not seeing blocks -- Fix issue issue with some apps starting too early -- Fix issue with old repos on Debian 10 systems - -=== v0.3.44 === -- Released 05/25/26 -- Add Canary wallet monitor application -- Upgrade Knots to 29.3.3 -- Add autoupdate choices for Knots and Knots+Bip110 -- Add help text to BIP toggles -- Add warning to homepage for old Operating Systems -- Minor bug fixes - === v0.3.43 === - Released 03/24/26 - Upgrade Bitcoin to v29.3 diff --git a/README.md b/README.md index 9db0d7005..226364d3c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![MyNode](https://docs.mynodebtc.com/images/logo.png)](https://github.com/mynodebtc/mynode) +[![MyNode](https://mynodebtc.github.io/images/logo.png)](https://github.com/mynodebtc/mynode) [![Version](https://img.shields.io/github/v/tag/mynodebtc/mynode?label=version&color=green)](https://github.com/mynodebtc/mynode/tag) [![Community Chat](https://img.shields.io/badge/community%20chat-telegram-blue)](https://t.me/mynode_btc) @@ -92,7 +92,7 @@ We currently have images for the following devices available for download. - Virtual Machine Support (VirtualBox, VMWare) ## Upgrading your MyNode -Once you are running MyNode, you can easily [update the software](https://docs.mynodebtc.com/device/upgrading-device.html) yourself! +Once you are running MyNode, you can easily [update the software](https://mynodebtc.github.io/device/upgrading-device.html) yourself! ## Developing for MyNode diff --git a/rootfs/standard/etc/containerd/config.toml b/rootfs/standard/etc/containerd/config.toml deleted file mode 100644 index 51b50af1d..000000000 --- a/rootfs/standard/etc/containerd/config.toml +++ /dev/null @@ -1,3 +0,0 @@ -version = 2 -root = "/mnt/hdd/mynode/containerd" -state = "/run/containerd" diff --git a/rootfs/standard/etc/logrotate.d/rsyslog b/rootfs/standard/etc/logrotate.d/rsyslog index 69c745564..1bfba12c6 100644 --- a/rootfs/standard/etc/logrotate.d/rsyslog +++ b/rootfs/standard/etc/logrotate.d/rsyslog @@ -24,7 +24,6 @@ notifempty postrotate invoke-rc.d rsyslog rotate > /dev/null - systemctl kill -s HUP rsyslog.service endscript } @@ -49,6 +48,5 @@ sharedscripts postrotate invoke-rc.d rsyslog rotate > /dev/null - systemctl kill -s HUP rsyslog.service endscript } \ No newline at end of file diff --git a/rootfs/standard/etc/systemd/system/btcpayserver.service b/rootfs/standard/etc/systemd/system/btcpayserver.service index ec3fb6ff2..c1ad65855 100644 --- a/rootfs/standard/etc/systemd/system/btcpayserver.service +++ b/rootfs/standard/etc/systemd/system/btcpayserver.service @@ -4,18 +4,15 @@ [Unit] Description=BTCPayServer service After=docker.service network-online.target bitcoin.service -Wants=docker.service network-online.target bitcoin.service +Requires=docker.service network-online.target bitcoin.service [Service] Type=oneshot RemainAfterExit=yes -Restart=on-failure -RestartSec=120s # MyNode Customizations ExecStartPre=/usr/bin/is_not_shutting_down.sh ExecStartPre=/usr/bin/is_mainnet.sh -ExecStartPre=/usr/bin/wait_on_bitcoin.sh ExecStartPre=/usr/bin/wait_on_docker_image_install.sh ExecStartPre=+/usr/bin/service_scripts/pre_btcpayserver.sh diff --git a/rootfs/standard/etc/systemd/system/lit.service b/rootfs/standard/etc/systemd/system/lit.service index 003d5ef1b..69b159fbc 100644 --- a/rootfs/standard/etc/systemd/system/lit.service +++ b/rootfs/standard/etc/systemd/system/lit.service @@ -12,7 +12,6 @@ ExecStartPre=/usr/bin/service_scripts/pre_lit.sh ExecStartPre=/usr/bin/wait_on_bitcoin.sh ExecStartPre=/usr/bin/wait_on_lnd.sh ExecStartPre=+/usr/bin/mynode_gen_lit_config.sh -Environment="LIT_AUTO_MIGRATE_TO_SQL=true" ExecStart=/usr/local/bin/litd --lit-dir=/mnt/hdd/mynode/lit User=bitcoin diff --git a/rootfs/standard/etc/systemd/system/lnbits.service b/rootfs/standard/etc/systemd/system/lnbits.service index 7edbb0e66..35b64abc7 100644 --- a/rootfs/standard/etc/systemd/system/lnbits.service +++ b/rootfs/standard/etc/systemd/system/lnbits.service @@ -9,7 +9,6 @@ After=bitcoin.service lnd.service [Service] ExecStartPre=/usr/bin/is_not_shutting_down.sh ExecStartPre=/usr/bin/is_mainnet.sh -ExecStartPre=/usr/bin/wait_on_bitcoin.sh ExecStartPre=/usr/bin/wait_on_lnd.sh ExecStartPre=/usr/bin/wait_on_docker_image_install.sh ExecStartPre=/usr/bin/service_scripts/pre_lnbits.sh diff --git a/rootfs/standard/usr/bin/mynode-install-custom-bitcoin b/rootfs/standard/usr/bin/mynode-install-custom-bitcoin index 1f9f3ec4b..deb273106 100755 --- a/rootfs/standard/usr/bin/mynode-install-custom-bitcoin +++ b/rootfs/standard/usr/bin/mynode-install-custom-bitcoin @@ -7,8 +7,6 @@ source /usr/share/mynode/mynode_config.sh source /usr/share/mynode/mynode_app_versions.sh CUSTOM_BITCOIN_AUTOUPDATE_VERSION_FILE="/home/bitcoin/.mynode/custom_bitcoin_autoupdate_version" -CUSTOM_BITCOIN_SELECTION_FILE="/home/bitcoin/.mynode/custom_bitcoin_selection" -CUSTOM_BITCOIN_SELECTION_FILE_HDD="/mnt/hdd/mynode/settings/custom_bitcoin_selection" # Make sure we have an app argument if [ "$#" -lt 1 ]; then @@ -64,35 +62,33 @@ if [[ "$APP" != *"autoupdate"* ]]; then fi # Custom re-install steps -if [ "$APP" = "core29x_autoupdate" ]; then - # Stays on the latest Bitcoin Core 29.x release, even after MyNode moves to a newer major version - CORE_29X_LATEST_VERSION="29.3" # Must be unique each version (only used to track trigger upgrade) - BTC_UPGRADE_URL=https://bitcoincore.org/bin/bitcoin-core-29.3/bitcoin-29.3-$ARCH.tar.gz - BTC_SHASUM=https://bitcoincore.org/bin/bitcoin-core-29.3/SHA256SUMS - BTC_ASC=https://bitcoincore.org/bin/bitcoin-core-29.3/SHA256SUMS.asc +if [ "$APP" = "bip110_autoupdate" ]; then + BIP110_LATEST_VERSION="29.3.3-knots" # Must be unique each version (only used to track trigger upgrade) + BTC_UPGRADE_URL=https://bitcoinknots.org/files/29.x/29.3.knots20260508/bitcoin-29.3.knots20260508-$ARCH.tar.gz + BTC_SHASUM=https://bitcoinknots.org/files/29.x/29.3.knots20260508/SHA256SUMS + BTC_ASC=https://bitcoinknots.org/files/29.x/29.3.knots20260508/SHA256SUMS.asc CURRENT="" if [ -f $CUSTOM_BITCOIN_AUTOUPDATE_VERSION_FILE ]; then CURRENT=$(cat $CUSTOM_BITCOIN_AUTOUPDATE_VERSION_FILE) fi - if [ "$CURRENT" != "$CORE_29X_LATEST_VERSION" ]; then + if [ "$CURRENT" != "$BIP110_LATEST_VERSION" ]; then rm -rf /opt/download mkdir -p /opt/download cd /opt/download # Download, install and verify - # Note: Bitcoin Core's SHA256SUMS.asc has many signers, so only require a good signature from a known key wget $BTC_UPGRADE_URL $BTC_SHASUM $BTC_ASC - gpg --verify SHA256SUMS.asc SHA256SUMS 2>&1 | grep "Good signature" + gpg --verify SHA256SUMS.asc SHA256SUMS sha256sum -c SHA256SUMS --ignore-missing - tar -xvf bitcoin-29.3-$ARCH.tar.gz - mv bitcoin-29.3 bitcoin + tar -xvf bitcoin-29.3.knots20260508-$ARCH.tar.gz + mv bitcoin-29.3.knots20260508 bitcoin install -m 0755 -o root -g root -t /usr/local/bin bitcoin/bin/* fi - echo "core29x_autoupdate" > /home/bitcoin/.mynode/bitcoin_version - echo "core29x_autoupdate" > /home/bitcoin/.mynode/bitcoin_version_latest_custom - echo "core29x_autoupdate" > /mnt/hdd/mynode/settings/bitcoin_version_latest_custom - echo "$CORE_29X_LATEST_VERSION" > $CUSTOM_BITCOIN_AUTOUPDATE_VERSION_FILE + echo "bip110_autoupdate" > /home/bitcoin/.mynode/bitcoin_version + echo "bip110_autoupdate" > /home/bitcoin/.mynode/bitcoin_version_latest_custom + echo "bip110_autoupdate" > /mnt/hdd/mynode/settings/bitcoin_version_latest_custom + echo "$BIP110_LATEST_VERSION" > $CUSTOM_BITCOIN_AUTOUPDATE_VERSION_FILE cd ~ elif [ "$APP" = "knots_autoupdate" ]; then KNOTS_LATEST_VERSION="29.3.2-knots" # Must be unique each version (only used to track trigger upgrade) @@ -121,6 +117,138 @@ elif [ "$APP" = "knots_autoupdate" ]; then echo "knots_autoupdate" > /home/bitcoin/.mynode/bitcoin_version_latest_custom echo "knots_autoupdate" > /mnt/hdd/mynode/settings/bitcoin_version_latest_custom echo "$KNOTS_LATEST_VERSION" > $CUSTOM_BITCOIN_AUTOUPDATE_VERSION_FILE + cd ~ +elif [ "$APP" = "ordisrespector" ]; then + apt-get install -y build-essential libtool autotools-dev automake pkg-config bsdmainutils python3 + apt-get install -y libevent-dev libboost-dev libsqlite3-dev libminiupnpc-dev libnatpmp-dev libzmq3-dev + + mkdir -p /mnt/hdd/mynode/download + cd /mnt/hdd/mynode/download + rm -rf bitcoin-*.tar.gz + rm -rf bitcoin + + URL="https://github.com/bitcoin/bitcoin/archive/refs/tags/v24.0.1.tar.gz" + wget $URL -O bitcoin.tar.gz + tar -xvf bitcoin.tar.gz + mv bitcoin-* bitcoin + + cd bitcoin + + # Bubild berkeley db 4.8 + ./contrib/install_db4.sh `pwd` + export BDB_PREFIX="$PWD/db4" + + ./autogen.sh + ./configure \ + BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx-4.8" BDB_CFLAGS="-I${BDB_PREFIX}/include" \ + CXXFLAGS="--param ggc-min-expand=1 --param ggc-min-heapsize=32768" \ + --disable-bench \ + --disable-gui-tests \ + --disable-maintainer-mode \ + --disable-man \ + --disable-tests \ + --with-daemon=yes \ + --with-gui=no \ + --with-qrencode=no \ + --with-utils=yes + + patch -p1 < /usr/share/mynode/patches/ordisrespector.patch + + make -j $(nproc) + sudo install -g root -o root src/bitcoind /usr/local/bin/bitcoind + + echo "24.0.1-ordisrespector" > /home/bitcoin/.mynode/bitcoin_version + echo "24.0.1-ordisrespector" > /home/bitcoin/.mynode/bitcoin_version_latest_custom + echo "24.0.1-ordisrespector" > /mnt/hdd/mynode/settings/bitcoin_version_latest_custom + + cd ~ +elif [ "$APP" = "knots_26_1" ]; then + BTC_UPGRADE_URL=https://bitcoinknots.org/files/26.x/26.1.knots20240513/bitcoin-26.1.knots20240513-$ARCH.tar.gz + BTC_SHASUM=https://bitcoinknots.org/files/26.x/26.1.knots20240513/SHA256SUMS + BTC_ASC=https://bitcoinknots.org/files/26.x/26.1.knots20240513/SHA256SUMS.asc + + rm -rf /opt/download + mkdir -p /opt/download + cd /opt/download + + # Download, install and verify + wget $BTC_UPGRADE_URL $BTC_SHASUM $BTC_ASC + gpg --verify SHA256SUMS.asc SHA256SUMS + sha256sum -c SHA256SUMS --ignore-missing + tar -xvf bitcoin-26.1.knots20240513-$ARCH.tar.gz + mv bitcoin-26.1.knots20240513/ bitcoin/ + install -m 0755 -o root -g root -t /usr/local/bin bitcoin/bin/* + + echo "26.1-knots" > /home/bitcoin/.mynode/bitcoin_version + echo "26.1-knots" > /home/bitcoin/.mynode/bitcoin_version_latest_custom + echo "26.1-knots" > /mnt/hdd/mynode/settings/bitcoin_version_latest_custom + + cd ~ +elif [ "$APP" = "knots_27_1" ]; then + BTC_UPGRADE_URL=https://bitcoinknots.org/files/27.x/27.1.knots20240801/bitcoin-27.1.knots20240801-$ARCH.tar.gz + BTC_SHASUM=https://bitcoinknots.org/files/27.x/27.1.knots20240801/SHA256SUMS + BTC_ASC=https://bitcoinknots.org/files/27.x/27.1.knots20240801/SHA256SUMS.asc + + rm -rf /opt/download + mkdir -p /opt/download + cd /opt/download + + # Download, install and verify + wget $BTC_UPGRADE_URL $BTC_SHASUM $BTC_ASC + gpg --verify SHA256SUMS.asc SHA256SUMS + sha256sum -c SHA256SUMS --ignore-missing + tar -xvf bitcoin-27.1.knots20240801-$ARCH.tar.gz + mv bitcoin-27.1.knots20240801 bitcoin + install -m 0755 -o root -g root -t /usr/local/bin bitcoin/bin/* + + echo "27.1-knots" > /home/bitcoin/.mynode/bitcoin_version + echo "27.1-knots" > /home/bitcoin/.mynode/bitcoin_version_latest_custom + echo "27.1-knots" > /mnt/hdd/mynode/settings/bitcoin_version_latest_custom + + cd ~ +elif [ "$APP" = "knots_28_1" ]; then + BTC_UPGRADE_URL=https://bitcoinknots.org/files/28.x/28.1.knots20250305/bitcoin-28.1.knots20250305-$ARCH.tar.gz + BTC_SHASUM=https://bitcoinknots.org/files/28.x/28.1.knots20250305/SHA256SUMS + BTC_ASC=https://bitcoinknots.org/files/28.x/28.1.knots20250305/SHA256SUMS.asc + + rm -rf /opt/download + mkdir -p /opt/download + cd /opt/download + + # Download, install and verify + wget $BTC_UPGRADE_URL $BTC_SHASUM $BTC_ASC + gpg --verify SHA256SUMS.asc SHA256SUMS + sha256sum -c SHA256SUMS --ignore-missing + tar -xvf bitcoin-28.1.knots20250305-$ARCH.tar.gz + mv bitcoin-28.1.knots20250305 bitcoin + install -m 0755 -o root -g root -t /usr/local/bin bitcoin/bin/* + + echo "28.1-knots" > /home/bitcoin/.mynode/bitcoin_version + echo "28.1-knots" > /home/bitcoin/.mynode/bitcoin_version_latest_custom + echo "28.1-knots" > /mnt/hdd/mynode/settings/bitcoin_version_latest_custom + + cd ~ +elif [ "$APP" = "knots_29_1" ]; then + BTC_UPGRADE_URL=https://bitcoinknots.org/files/29.x/29.1.knots20250903/bitcoin-29.1.knots20250903-$ARCH.tar.gz + BTC_SHASUM=https://bitcoinknots.org/files/29.x/29.1.knots20250903/SHA256SUMS + BTC_ASC=https://bitcoinknots.org/files/29.x/29.1.knots20250903/SHA256SUMS.asc + + rm -rf /opt/download + mkdir -p /opt/download + cd /opt/download + + # Download, install and verify + wget $BTC_UPGRADE_URL $BTC_SHASUM $BTC_ASC + gpg --verify SHA256SUMS.asc SHA256SUMS + sha256sum -c SHA256SUMS --ignore-missing + tar -xvf bitcoin-29.1.knots20250903-$ARCH.tar.gz + mv bitcoin-29.1.knots20250903 bitcoin + install -m 0755 -o root -g root -t /usr/local/bin bitcoin/bin/* + + echo "29.1-knots" > /home/bitcoin/.mynode/bitcoin_version + echo "29.1-knots" > /home/bitcoin/.mynode/bitcoin_version_latest_custom + echo "29.1-knots" > /mnt/hdd/mynode/settings/bitcoin_version_latest_custom + cd ~ elif [ "$APP" = "knots_29_2_2" ]; then BTC_UPGRADE_URL=https://bitcoinknots.org/files/29.x/29.2.knots20251110/bitcoin-29.2.knots20251110-$ARCH.tar.gz @@ -143,6 +271,72 @@ elif [ "$APP" = "knots_29_2_2" ]; then echo "29.2.2-knots" > /home/bitcoin/.mynode/bitcoin_version_latest_custom echo "29.2.2-knots" > /mnt/hdd/mynode/settings/bitcoin_version_latest_custom + cd ~ +elif [ "$APP" = "knots_29_3" ]; then + BTC_UPGRADE_URL=https://bitcoinknots.org/files/29.x/29.3.knots20260210/bitcoin-29.3.knots20260210-$ARCH.tar.gz + BTC_SHASUM=https://bitcoinknots.org/files/29.x/29.3.knots20260210/SHA256SUMS + BTC_ASC=https://bitcoinknots.org/files/29.x/29.3.knots20260210/SHA256SUMS.asc + + rm -rf /opt/download + mkdir -p /opt/download + cd /opt/download + + # Download, install and verify + wget $BTC_UPGRADE_URL $BTC_SHASUM $BTC_ASC + gpg --verify SHA256SUMS.asc SHA256SUMS + sha256sum -c SHA256SUMS --ignore-missing + tar -xvf bitcoin-29.3.knots20260210-$ARCH.tar.gz + mv bitcoin-29.3.knots20260210 bitcoin + install -m 0755 -o root -g root -t /usr/local/bin bitcoin/bin/* + + echo "29.3-knots" > /home/bitcoin/.mynode/bitcoin_version + echo "29.3-knots" > /home/bitcoin/.mynode/bitcoin_version_latest_custom + echo "29.3-knots" > /mnt/hdd/mynode/settings/bitcoin_version_latest_custom + + cd ~ +elif [ "$APP" = "knots_29_3_2" ]; then + BTC_UPGRADE_URL=https://bitcoinknots.org/files/29.x/29.3.knots20260507/bitcoin-29.3.knots20260507-$ARCH.tar.gz + BTC_SHASUM=https://bitcoinknots.org/files/29.x/29.3.knots20260507/SHA256SUMS + BTC_ASC=https://bitcoinknots.org/files/29.x/29.3.knots20260507/SHA256SUMS.asc + + rm -rf /opt/download + mkdir -p /opt/download + cd /opt/download + + # Download, install and verify + wget $BTC_UPGRADE_URL $BTC_SHASUM $BTC_ASC + gpg --verify SHA256SUMS.asc SHA256SUMS + sha256sum -c SHA256SUMS --ignore-missing + tar -xvf bitcoin-29.3.knots20260507-$ARCH.tar.gz + mv bitcoin-29.3.knots20260507 bitcoin + install -m 0755 -o root -g root -t /usr/local/bin bitcoin/bin/* + + echo "29.3.2-knots" > /home/bitcoin/.mynode/bitcoin_version + echo "29.3.2-knots" > /home/bitcoin/.mynode/bitcoin_version_latest_custom + echo "29.3.2-knots" > /mnt/hdd/mynode/settings/bitcoin_version_latest_custom + + cd ~ +elif [ "$APP" = "knots_29_3_3" ]; then + BTC_UPGRADE_URL=https://bitcoinknots.org/files/29.x/29.3.knots20260508/bitcoin-29.3.knots20260508-$ARCH.tar.gz + BTC_SHASUM=https://bitcoinknots.org/files/29.x/29.3.knots20260508/SHA256SUMS + BTC_ASC=https://bitcoinknots.org/files/29.x/29.3.knots20260508/SHA256SUMS.asc + + rm -rf /opt/download + mkdir -p /opt/download + cd /opt/download + + # Download, install and verify + wget $BTC_UPGRADE_URL $BTC_SHASUM $BTC_ASC + gpg --verify SHA256SUMS.asc SHA256SUMS + sha256sum -c SHA256SUMS --ignore-missing + tar -xvf bitcoin-29.3.knots20260508-$ARCH.tar.gz + mv bitcoin-29.3.knots20260508 bitcoin + install -m 0755 -o root -g root -t /usr/local/bin bitcoin/bin/* + + echo "29.3.3-knots" > /home/bitcoin/.mynode/bitcoin_version + echo "29.3.3-knots" > /home/bitcoin/.mynode/bitcoin_version_latest_custom + echo "29.3.3-knots" > /mnt/hdd/mynode/settings/bitcoin_version_latest_custom + cd ~ elif [ "$APP" = "default" ]; then # Clear custom info and re-install bitcoin @@ -157,15 +351,6 @@ else exit fi -# Save the version the user selected so the UI can show the current override -if [ "$APP" = "default" ]; then - rm -f $CUSTOM_BITCOIN_SELECTION_FILE - rm -f $CUSTOM_BITCOIN_SELECTION_FILE_HDD -else - echo "$APP" > $CUSTOM_BITCOIN_SELECTION_FILE - echo "$APP" > $CUSTOM_BITCOIN_SELECTION_FILE_HDD -fi - sync echo "Install Complete!" if [ $NO_REBOOT -eq 1 ]; then diff --git a/rootfs/standard/usr/bin/mynode_check_in.py b/rootfs/standard/usr/bin/mynode_check_in.py index 4d5e45636..2821c8771 100755 --- a/rootfs/standard/usr/bin/mynode_check_in.py +++ b/rootfs/standard/usr/bin/mynode_check_in.py @@ -30,13 +30,6 @@ def save_response_data(data): json.dump(data, file, indent=4, sort_keys=True) except Exception as e: log_message("save_response_data exception: failed to save response - {}".format(str(e))) -def get_saved_notifications(): - # Notifications from the previously saved check-in response - try: - with open("/tmp/check_in_response.json", "r") as file: - return json.load(file).get("notifications", []) - except Exception: - return [] def get_quicksync_enabled(): enabled = 1 @@ -63,7 +56,7 @@ def check_for_new_mynode_version(): # 3 day(s): 87% 3 day(s): 90% 3 day(s): 93% 3 day(s): 95% # 5 day(s): 96% 5 day(s): 98% 5 day(s): 99% 5 day(s): 99% # 7 day(s): 99.2% 7 day(s): 99.6% 7 day(s): 99.8% 7 day(s): 99.9% - if latest_version_check_count % 5 == 0 or random.randint(1, 100) <= 65: + if latest_version_check_count % 5 == 0 or random.randint(1, 100) <= 40: log_message("Version Check Count ({}) - Checking for new version!".format(latest_version_check_count)) os.system("/usr/bin/mynode_get_latest_version.sh &") else: @@ -71,16 +64,11 @@ def check_for_new_mynode_version(): latest_version_check_count = latest_version_check_count + 1 def on_check_in_error(msg): - # Preserve any previously-received notifications so a transient check-in - # failure doesn't hide them until the next successful check-in - previous_notifications = get_saved_notifications() - clear_response_data() log_message(msg) data = {} data["status"] = "ERROR" data["message"] = msg - data["notifications"] = previous_notifications save_response_data(data) # Checkin every 24 hours @@ -101,11 +89,11 @@ def check_in(check_for_updates): check_in_success = False while not check_in_success: try: - repeat_delay = 1*60 + repeat_delay = 2*60 if fail_count <= 5: - repeat_delay = 1*60 - elif fail_count <= 10: repeat_delay = 2*60 + elif fail_count <= 10: + repeat_delay = 5*60 elif fail_count <= 20: repeat_delay = 60*60 else: @@ -140,14 +128,8 @@ def check_in(check_for_updates): elif r.status_code == 200: try: info = json.loads(r.text) - - # Reload open home pages when the notifications change so - # they are displayed without the user reloading the page - if info.get("notifications", []) != get_saved_notifications(): - trigger_homepage_refresh() - save_response_data(info) - + try: if info["status"] == "OK": # Check in was successful! diff --git a/rootfs/standard/usr/bin/mynode_docker_images.sh b/rootfs/standard/usr/bin/mynode_docker_images.sh index 6f0f6df64..788316312 100755 --- a/rootfs/standard/usr/bin/mynode_docker_images.sh +++ b/rootfs/standard/usr/bin/mynode_docker_images.sh @@ -149,13 +149,14 @@ while true; do # Clone this repository git clone https://github.com/btcpayserver/btcpayserver-docker + #git clone https://github.com/tehelsper/btcpayserver-docker.git cd btcpayserver-docker # Run btcpay-setup.sh with the right parameters export BTCPAY_HOST="mynode.local" export NBITCOIN_NETWORK="mainnet" export BTCPAYGEN_CRYPTO1="btc" - export BTCPAYGEN_ADDITIONAL_FRAGMENTS="btcpayserver-noreverseproxy;bitcoin.custom;lnd.custom;nbxplorer" + export BTCPAYGEN_ADDITIONAL_FRAGMENTS="btcpayserver-noreverseproxy;bitcoin.custom;lnd.custom" export BTCPAYGEN_EXCLUDE_FRAGMENTS="opt-add-tor;bitcoin;bitcoin-lnd;" export BTCPAYGEN_REVERSEPROXY="none" export NOREVERSEPROXY_HTTP_PORT=49392 @@ -176,14 +177,6 @@ while true; do #. ./btcpay-setup.sh # Install and run bash -c ". ./btcpay-setup.sh --install-only --no-startup-register --no-systemd-reload" - # Update NBXplorer variables (needed to pull containers) - NBXPLORER_VARIABLES_FILE=/mnt/hdd/mynode/btcpayserver/btcpayserver-docker/Generated/nbxplorer-variables.env - echo "NBXPLORER_BTCRPCUSER=mynode" > $NBXPLORER_VARIABLES_FILE - echo "NBXPLORER_BTCRPCPASSWORD=$BTCRPCPW" >> $NBXPLORER_VARIABLES_FILE - - # Pull latest containers - /bin/bash -c '. "/etc/profile.d/btcpay-env.sh" && cd "$BTCPAY_BASE_DIRECTORY/btcpayserver-docker" && . helpers.sh && btcpay_pull' - echo $BTCPAYSERVER_VERSION > $BTCPAYSERVER_VERSION_FILE fi else @@ -196,9 +189,8 @@ while true; do docker rm $(docker ps -a -q --filter name=generated_postgres) 2>/dev/null || true docker rm $(docker ps -a -q --filter name=generated_btcpayserver) 2>/dev/null || true docker rm $(docker ps -a -q --filter name=generated_nbxplorer) 2>/dev/null || true - remove_docker_images_by_name 'btcpayserver/btcpayserver' - remove_docker_images_by_name 'nicolasdorier/nbxplorer' - remove_docker_images_by_name 'btcpayserver/postgres' + remove_docker_images_by_name 'btcpayserver' + remove_docker_images_by_name 'nbxplorer' fi touch /tmp/need_application_refresh diff --git a/rootfs/standard/usr/bin/mynode_post_upgrade.sh b/rootfs/standard/usr/bin/mynode_post_upgrade.sh index 432228ba3..9c15b6c3f 100755 --- a/rootfs/standard/usr/bin/mynode_post_upgrade.sh +++ b/rootfs/standard/usr/bin/mynode_post_upgrade.sh @@ -67,22 +67,16 @@ if ! skip_base_upgrades ; then grep -qxF "deb https://deb.torproject.org/torproject.org ${DEBIAN_CODENAME} main" /etc/apt/sources.list || echo "deb https://deb.torproject.org/torproject.org ${DEBIAN_CODENAME} main" >> /etc/apt/sources.list grep -qxF "deb-src https://deb.torproject.org/torproject.org ${DEBIAN_CODENAME} main" /etc/apt/sources.list || echo "deb-src https://deb.torproject.org/torproject.org ${DEBIAN_CODENAME} main" >> /etc/apt/sources.list fi - # Add I2P Repo - /bin/bash /usr/share/mynode/scripts/add_i2p_repo.sh - - # Remove or update old repos - if [ -f /mnt/hdd/mynode/settings/tor_repo_disabled ]; then + if [ "$DEBIAN_CODENAME" = "buster" ]; then + # Disable tor repo on buster sed -i '/^deb https:\/\/deb.torproject.org/d' /etc/apt/sources.list sed -i '/^deb-src https:\/\/deb.torproject.org/d' /etc/apt/sources.list fi - if [ "$DEBIAN_CODENAME" = "buster" ]; then - # Disable tor repo on buster + if [ -f /mnt/hdd/mynode/settings/tor_repo_disabled ]; then sed -i '/^deb https:\/\/deb.torproject.org/d' /etc/apt/sources.list sed -i '/^deb-src https:\/\/deb.torproject.org/d' /etc/apt/sources.list - - # Disable i2pd repo on buster - sed -i 's|^deb|#deb|g' /etc/apt/sources.list.d/i2pd.list - + fi + if [ "$DEBIAN_CODENAME" = "buster" ]; then # Migrate buster repos to archive sed -i 's|deb.debian.org/debian|archive.debian.org/debian|g' /etc/apt/sources.list @@ -94,6 +88,8 @@ if ! skip_base_upgrades ; then # Comment out nodesource repo for buster (doesn't work anymore) sed -i 's|^deb|#deb|' /etc/apt/sources.list.d/nodesource.list fi + # Add I2P Repo + /bin/bash /usr/share/mynode/scripts/add_i2p_repo.sh # Raspbian mirrors #if [ $IS_RASPI = 1 ]; then @@ -107,15 +103,14 @@ if ! skip_base_upgrades ; then curl https://keybase.io/bitconner/pgp_keys.asc | gpg --import curl https://keybase.io/guggero/pgp_keys.asc | gpg --import # Pool curl https://raw.githubusercontent.com/JoinMarket-Org/joinmarket-clientserver/refs/heads/master/pubkeys/AdamGibson-LOST-Aug-2024.asc | gpg --import # JoinMarket - gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 01EA5486DE18A882D4C2684590C8019E36C2E964 # Bitcoin Core - Wladimir van der Laan - gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys E777299FC265DD04793070EB944D35F9AC3DB76A # Bitcoin Core - Michael Ford (fanquake) + gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 01EA5486DE18A882D4C2684590C8019E36C2E964 + gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys E777299FC265DD04793070EB944D35F9AC3DB76A # Bitcoin - Michael Ford (fanquake) curl https://keybase.io/suheb/pgp_keys.asc | gpg --import curl https://samouraiwallet.com/pgp.txt | gpg --import # two keys from Samourai team gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys DE23E73BFA8A0AD5587D2FCDE80D2F3F311FD87E # Loop (abosworth) gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 9FC6B0BFD597A94DBF09708280E5375C094198D8 # Loop (bhandras) gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys 26984CB69EB8C4A26196F7A4D7D916376026F177 # Lightning Terminal gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys 187F6ADD93AE3B0CF335AA6AB984570980684DCC # Lightning Terminal - gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys C20A78516A0944900EBFCA29961CC8259AE675D4 # Lightning Terminal (Viktor) $TORIFY wget -q https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc -O- | apt-key add - # Tor apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 # Debian Backports apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0E98404D386FA1D9 # Debian Backports @@ -401,11 +396,9 @@ if [ "$CURRENT" != "$BTC_VERSION" ]; then # Fixes issue if SD card was reflashed, but custom bitcoin version had been installed prior # and we still have custom marker files on the data drive. This install may fail, but subsequent # attempts will succeed. - if [[ "$BTC_VERSION" = *"knots"* ]] || [[ "$BTC_VERSION" = *"bip110"* ]] || [[ "$BTC_VERSION" = *"ordisrespector"* ]] || [[ "$BTC_VERSION" = *"core29x"* ]]; then + if [[ "$BTC_VERSION" = *"knots"* ]] || [[ "$BTC_VERSION" = *"bip110"* ]] || [[ "$BTC_VERSION" = *"ordisrespector"* ]]; then rm -f /home/bitcoin/.mynode/bitcoin_version_latest_custom rm -f /mnt/hdd/mynode/settings/bitcoin_version_latest_custom - rm -f /home/bitcoin/.mynode/custom_bitcoin_selection - rm -f /mnt/hdd/mynode/settings/custom_bitcoin_selection fi # Download and install Bitcoin @@ -701,8 +694,8 @@ if should_install_app "caravan" ; then fi -# Install cors proxy (mynode fork) -CORSPROXY_UPGRADE_URL=https://github.com/mynodebtc/CORS-Proxy/archive/$CORSPROXY_VERSION.tar.gz +# Install cors proxy (my fork) +CORSPROXY_UPGRADE_URL=https://github.com/tehelsper/CORS-Proxy/archive/$CORSPROXY_VERSION.tar.gz CURRENT="" if [ -f $CORSPROXY_VERSION_FILE ]; then CURRENT=$(cat $CORSPROXY_VERSION_FILE) @@ -1179,26 +1172,6 @@ mynode-manage-apps upgrade || true # $TORIFY apt-get remove -y tor # $TORIFY apt-get install -y tor #fi -# On older Debian versions, check if we have old Tor and upgrade -if [ "$DEBIAN_VERSION" -lt "12" ]; then - tor_version=$(tor --version | head -n 1) - if [[ "$tor_version" == *"0.4.8"* ]]; then - echo "Upgrading Tor..." - set +e - - cd /tmp - rm -rf tor.tar.gz tor_src - wget https://dist.torproject.org/tor-0.4.9.11.tar.gz -O tor.tar.gz - tar xzf tor.tar.gz - mv tor-* tor_src - cd tor_src - - ./configure --disable-unittests --prefix=/usr && make -j2 - make install - - set -e - fi -fi # Enable fan control diff --git a/rootfs/standard/usr/bin/mynode_reinstall_app.sh b/rootfs/standard/usr/bin/mynode_reinstall_app.sh index 8e6a78c49..e2344df8a 100755 --- a/rootfs/standard/usr/bin/mynode_reinstall_app.sh +++ b/rootfs/standard/usr/bin/mynode_reinstall_app.sh @@ -40,10 +40,7 @@ elif [ "$APP" = "netdata" ]; then elif [ "$APP" = "btcpayserver" ]; then # Stop and clean images /usr/local/bin/btcpay-down.sh - #/usr/local/bin/btcpay-clean.sh # This removes WAY too much! - remove_docker_images_by_name 'btcpayserver/btcpayserver' - remove_docker_images_by_name 'nicolasdorier/nbxplorer' - remove_docker_images_by_name 'btcpayserver/postgres' + /usr/local/bin/btcpay-clean.sh # Remove files and data (don't remove volume for re-install) rm -f /etc/profile.d/btcpay-env.sh diff --git a/rootfs/standard/usr/bin/mynode_startup.sh b/rootfs/standard/usr/bin/mynode_startup.sh index 05932cc31..a57ba0153 100755 --- a/rootfs/standard/usr/bin/mynode_startup.sh +++ b/rootfs/standard/usr/bin/mynode_startup.sh @@ -210,7 +210,6 @@ if [ -f /home/bitcoin/reset_docker ]; then # Delete docker data rm -rf /mnt/hdd/mynode/docker - rm -rf /mnt/hdd/mynode/containerd rm /home/bitcoin/reset_docker sync reboot @@ -243,7 +242,6 @@ mkdir -p /mnt/hdd/mynode/redis mkdir -p /mnt/hdd/mynode/mongodb mkdir -p /mnt/hdd/mynode/electrs mkdir -p /mnt/hdd/mynode/docker -mkdir -p /mnt/hdd/mynode/containerd mkdir -p /mnt/hdd/mynode/rtl mkdir -p /mnt/hdd/mynode/rtl_backup mkdir -p /mnt/hdd/mynode/whirlpool @@ -255,15 +253,6 @@ mkdir -p /mnt/hdd/mynode/joinmarket mkdir -p /mnt/hdd/mynode/mempool mkdir -p /mnt/hdd/mynode/tor_backup mkdir -p /tmp/flask_uploads - -# Migrate any containerd data left on the OS drive to the external drive -# (config.toml now points containerd's root at /mnt/hdd/mynode/containerd, but -# older installs may still have data sitting at the default /var/lib/containerd) -if [ -d /var/lib/containerd ] && [ ! -L /var/lib/containerd ] && [ -n "$(ls -A /var/lib/containerd 2>/dev/null)" ]; then - rsync -a --remove-source-files /var/lib/containerd/ /mnt/hdd/mynode/containerd/ || true - find /var/lib/containerd -depth -type d -empty -delete 2>/dev/null || true -fi - echo "drive_mounted" > $MYNODE_STATUS_FILE chmod 777 $MYNODE_STATUS_FILE rm -rf $MYNODE_DIR/.mynode_bitcoin_synced @@ -468,7 +457,7 @@ if [ ! -f /mnt/hdd/mynode/joinmarket/update_settings_$JOINMARKET_CONFIG_UPDATE_N fi sed -i "s/#max_cj_fee_abs = x/max_cj_fee_abs = 2000/g" /mnt/hdd/mynode/joinmarket/joinmarket.cfg sed -i "s/#max_cj_fee_rel = x/max_cj_fee_rel = 0.001/g" /mnt/hdd/mynode/joinmarket/joinmarket.cfg -sed -i "s/directory_nodes =.*/directory_nodes = coinjointovy3eq5fjygdwpkbcdx63d7vd4g32mw7y553uj3kjjzkiqd.onion:5222,odpwaf67rs5226uabcamvypg3y4bngzmfk7255flcdodesqhsvkptaid.onion:5222,jmarketxf5wc4aldf3slm5u6726zsky52bqnfv6qyxe5hnafgly6yuyd.onion:5222,nakamotourflxwjnjpnrk7yc2nhkf6r62ed4gdfxmmn5f4saw5q5qoyd.onion:5222,jmrust7bgdbdl6skkvuzhqost4jkikrluj6alemspeifm5hvgqz2qaad.onion:5222,nok55gjlqw6h76zi6gigukoztpx7xgo5r3w5csu362nys5yukzrxpgad.onion:5222,satoshi2vcg5e2ept7tjkzlkpomkobqmgtsjzegg6wipnoajadissead.onion:5222/g" /mnt/hdd/mynode/joinmarket/joinmarket.cfg +sed -i "s/directory_nodes =.*/directory_nodes = jmarketxf5wc4aldf3slm5u6726zsky52bqnfv6qyxe5hnafgly6yuyd.onion:5222,coinjointovy3eq5fjygdwpkbcdx63d7vd4g32mw7y553uj3kjjzkiqd.onion:5222,satoshi2vcg5e2ept7tjkzlkpomkobqmgtsjzegg6wipnoajadissead.onion:5222,shssats5ucnwdpbticbb4dymjzf2o27tdecpes35ededagjpdmpxm6yd.onion:5222,3kxw6lf5vf6y26emzwgibzhrzhmhqiw6ekrek3nqfjjmhwznb2moonad.onion:5222,bqlpq6ak24mwvuixixitift4yu42nxchlilrcqwk2ugn45tdclg42qid.onion:5222,odpwaf67rs5226uabcamvypg3y4bngzmfk7255flcdodesqhsvkptaid.onion:5222,ylegp63psfqh3zk2huckf2xth6dxvh2z364ykjfmvsoze6tkfjceq7qd.onion:5222/g" /mnt/hdd/mynode/joinmarket/joinmarket.cfg if [ -f /home/joinmarket/install.selfsignedcert.sh ]; then sudo -u joinmarket /home/joinmarket/install.selfsignedcert.sh || true fi diff --git a/rootfs/standard/usr/bin/mynode_uninstall_app.sh b/rootfs/standard/usr/bin/mynode_uninstall_app.sh index f29c647d7..671902fb5 100755 --- a/rootfs/standard/usr/bin/mynode_uninstall_app.sh +++ b/rootfs/standard/usr/bin/mynode_uninstall_app.sh @@ -5,7 +5,6 @@ set -x source /usr/share/mynode/mynode_config.sh source /usr/share/mynode/mynode_app_versions.sh -source /usr/share/mynode/mynode_functions.sh # Make sure we have an app argument if [ "$#" -ne 1 ]; then @@ -28,10 +27,7 @@ if [ "$APP" = "bos" ]; then elif [ "$APP" = "btcpayserver" ]; then # Stop and clean images /usr/local/bin/btcpay-down.sh - #/usr/local/bin/btcpay-clean.sh # This removes WAY too much! - remove_docker_images_by_name 'btcpayserver/btcpayserver' - remove_docker_images_by_name 'nicolasdorier/nbxplorer' - remove_docker_images_by_name 'btcpayserver/postgres' + /usr/local/bin/btcpay-clean.sh # Remove files and data source /etc/profile.d/btcpay-env.sh diff --git a/rootfs/standard/usr/bin/mynode_usb_extras.py b/rootfs/standard/usr/bin/mynode_usb_extras.py index 8e4618a2d..1835955d6 100755 --- a/rootfs/standard/usr/bin/mynode_usb_extras.py +++ b/rootfs/standard/usr/bin/mynode_usb_extras.py @@ -11,7 +11,6 @@ from threading import Thread from utilities import * from drive_info import * -from device_info import * log = logging.getLogger('mynode') log.addHandler(journal.JournaldLogHandler()) @@ -231,7 +230,7 @@ def check_usb_devices(): log_message(f"{num_partitions} partitions found. Not sure what to do.") # Successful scan post init or usb action detected, mark homepage refresh - trigger_homepage_refresh() + os.system("touch /tmp/homepage_needs_refresh") except Exception as e: log_message("Exception: {}".format(str(e))) diff --git a/rootfs/standard/usr/bin/mynode_www.sh b/rootfs/standard/usr/bin/mynode_www.sh index c92df80d9..4b379f202 100755 --- a/rootfs/standard/usr/bin/mynode_www.sh +++ b/rootfs/standard/usr/bin/mynode_www.sh @@ -6,7 +6,11 @@ else # If not forcing python3, use prefer python3 unless in restart cycle count=$(journalctl -b -u www.service | grep -c "Started MyNode Web Server") modcount=$(($count % 5)) - - echo "RESTART COUNT: $modcount (PYTHON3)" - exec /usr/local/bin/python3 /var/www/mynode/mynode.py + if [ "$modcount" -eq 4 ]; then + echo "RESTART COUNT: $modcount (PYTHON2)" + exec /usr/bin/python2.7 /var/www/mynode/mynode.py + else + echo "RESTART COUNT: $modcount (PYTHON3)" + exec /usr/local/bin/python3 /var/www/mynode/mynode.py + fi fi \ No newline at end of file diff --git a/rootfs/standard/usr/bin/service_scripts/pre_lit.sh b/rootfs/standard/usr/bin/service_scripts/pre_lit.sh index 4d16238e8..5fa462d63 100755 --- a/rootfs/standard/usr/bin/service_scripts/pre_lit.sh +++ b/rootfs/standard/usr/bin/service_scripts/pre_lit.sh @@ -1,73 +1,4 @@ #!/bin/bash -# LiT v0.17+ migrates its bbolt stores (accounts, sessions, firewall rules) to -# SQLite on first startup. That migration is one-way - it tombstones the bbolt -# files in place without saving a copy anywhere, and LiT cannot be downgraded -# below v0.17 once it has run. Save a copy before litd gets the chance. -NETWORK=mainnet -if [ -f /mnt/hdd/mynode/settings/.testnet_enabled ]; then - NETWORK=testnet -fi - -LIT_NETWORK_DIR=/mnt/hdd/mynode/lit/$NETWORK -LIT_BACKUP_DIR=$LIT_NETWORK_DIR/bbolt_backup_pre_sql -LIT_BBOLT_DBS="accounts.db session.db rules.db macaroons.db" - -# This runs on every start (the lit service restarts automatically), so bail -# out cheaply once the backup exists. -if [ -d $LIT_BACKUP_DIR ]; then - exit 0 -fi - -# Skip if the migration already ran - any bbolt files still sitting there have -# been tombstoned and are not worth saving. -if [ -f $LIT_NETWORK_DIR/litd.db ]; then - exit 0 -fi - -# Find which bbolt databases exist and how much space a copy needs -BACKUP_DBS="" -BACKUP_SIZE_KB=0 -for DB in $LIT_BBOLT_DBS; do - if [ -f $LIT_NETWORK_DIR/$DB ]; then - BACKUP_DBS="$BACKUP_DBS $DB" - DB_SIZE_KB=$(du -k $LIT_NETWORK_DIR/$DB | awk '{print $1}') - BACKUP_SIZE_KB=$((BACKUP_SIZE_KB + DB_SIZE_KB)) - fi -done - -# Nothing to back up (fresh install) -if [ "$BACKUP_DBS" = "" ]; then - exit 0 -fi - -# Make sure there is room, with margin. Blocking startup is deliberate here - -# letting litd run the migration without a backup is not recoverable. -FREE_SPACE_KB=$(df -k --output=avail $LIT_NETWORK_DIR | tail -n 1) -if [ "$FREE_SPACE_KB" -lt $((BACKUP_SIZE_KB * 2)) ]; then - echo "ERROR: not enough free space to back up LiT databases before the SQL" - echo " migration (need ${BACKUP_SIZE_KB}KB, have ${FREE_SPACE_KB}KB)." - echo " Refusing to start litd. Free up space on the drive." - exit 1 -fi - -# Copy to a temp folder first so a partial copy can never be mistaken for a -# complete backup -echo "Backing up LiT databases before SQL migration:$BACKUP_DBS" -rm -rf $LIT_BACKUP_DIR.tmp -mkdir -p $LIT_BACKUP_DIR.tmp -for DB in $BACKUP_DBS; do - if ! cp -a $LIT_NETWORK_DIR/$DB $LIT_BACKUP_DIR.tmp/$DB ; then - echo "ERROR: failed to back up $DB before the LiT SQL migration." - echo " Refusing to start litd." - rm -rf $LIT_BACKUP_DIR.tmp - exit 1 - fi -done -sync -mv $LIT_BACKUP_DIR.tmp $LIT_BACKUP_DIR -sync -echo "LiT database backup saved to $LIT_BACKUP_DIR" - -exit 0 +exit 0 \ No newline at end of file diff --git a/rootfs/standard/usr/share/mynode/application_info.json b/rootfs/standard/usr/share/mynode/application_info.json index 23c2b50cc..e0fdf1aac 100644 --- a/rootfs/standard/usr/share/mynode/application_info.json +++ b/rootfs/standard/usr/share/mynode/application_info.json @@ -125,7 +125,6 @@ ], "category": "bitcoin_app", "short_description": "Merchant Tool", - "minimum_debian_version": 11, "can_uninstall": true, "requires_lightning": false, "requires_docker_image_installation": true, diff --git a/rootfs/standard/usr/share/mynode/bitcoin.conf b/rootfs/standard/usr/share/mynode/bitcoin.conf index d86de8433..a72786b5f 100644 --- a/rootfs/standard/usr/share/mynode/bitcoin.conf +++ b/rootfs/standard/usr/share/mynode/bitcoin.conf @@ -54,10 +54,6 @@ zmqpubrawblock=tcp://0.0.0.0:28332 zmqpubrawtx=tcp://0.0.0.0:28333 zmqpubhashblock=tcp://0.0.0.0:28334 -# Data carrier (OP_RETURN) relay policy -datacarrier=1 -datacarriersize=83 - # MyNode Optimizations dbcache=500 maxorphantx=10 diff --git a/rootfs/standard/usr/share/mynode/lit.conf b/rootfs/standard/usr/share/mynode/lit.conf index 7b8775f5d..8f1cd7e07 100644 --- a/rootfs/standard/usr/share/mynode/lit.conf +++ b/rootfs/standard/usr/share/mynode/lit.conf @@ -7,19 +7,12 @@ lit-dir=/mnt/hdd/mynode/lit network=mainnet -# Store accounts, sessions, and firewall rules in SQLite. This is already the -# default in litd v0.17+, but pin it so a future change of the upstream default -# cannot silently move the database out from under us. Existing bbolt data is -# migrated on first startup (see LIT_AUTO_MIGRATE_TO_SQL in lit.service). -databasebackend=sqlite - lnd-mode=remote loop-mode=remote pool-mode=remote # Remote options -remote.lit-debuglevel=info -#remote.lit-debuglevel=debug +remote.lit-debuglevel=debug # Remote lnd options remote.lnd.rpcserver=127.0.0.1:10009 diff --git a/rootfs/standard/usr/share/mynode/lnd.conf b/rootfs/standard/usr/share/mynode/lnd.conf index adcf6edad..c52519d8d 100644 --- a/rootfs/standard/usr/share/mynode/lnd.conf +++ b/rootfs/standard/usr/share/mynode/lnd.conf @@ -16,13 +16,9 @@ restlisten=[::]:10080 tlsextraip=0.0.0.0 tlsextradomain=mynode.local -# Log at info level generally debuglevel=info #debuglevel=debug -# Set some subsystems to error to prevent long logs -debuglevel=BTWL=error - # This line needs to be uncommented if you have a lnd wallet and commented if you do not wallet-unlock-password-file=/mnt/hdd/mynode/settings/.lndpw wallet-unlock-allow-create=true diff --git a/rootfs/standard/usr/share/mynode/mynode_app_versions.sh b/rootfs/standard/usr/share/mynode/mynode_app_versions.sh index 7e1190328..79184ca98 100644 --- a/rootfs/standard/usr/share/mynode/mynode_app_versions.sh +++ b/rootfs/standard/usr/share/mynode/mynode_app_versions.sh @@ -24,7 +24,7 @@ BTC_VERSION=$(get_app_version "$BTC_VERSION" "bitcoin") BTC_VERSION_FILE=/home/bitcoin/.mynode/bitcoin_version BTC_LATEST_VERSION_FILE=/home/bitcoin/.mynode/bitcoin_version_latest -LND_VERSION="v0.21.1-beta" +LND_VERSION="v0.20.1-beta" LND_VERSION=$(get_app_version "$LND_VERSION" "lnd") LND_VERSION_FILE=/home/bitcoin/.mynode/lnd_version LND_LATEST_VERSION_FILE=/home/bitcoin/.mynode/lnd_version_latest @@ -32,7 +32,7 @@ LND_UPGRADE_MANIFEST_URL=https://github.com/lightningnetwork/lnd/releases/downlo LND_UPGRADE_MANIFEST_ROASBEEF_SIG_URL=https://github.com/lightningnetwork/lnd/releases/download/$LND_VERSION/manifest-roasbeef-$LND_VERSION.sig LND_UPGRADE_MANIFEST_GUGGERO_SIG_URL=https://github.com/lightningnetwork/lnd/releases/download/$LND_VERSION/manifest-guggero-$LND_VERSION.sig -LOOP_VERSION="v0.34.0-beta" +LOOP_VERSION="v0.31.1-beta" LOOP_VERSION=$(get_app_version "$LOOP_VERSION" "loop") LOOP_VERSION_FILE=/home/bitcoin/.mynode/loop_version LOOP_LATEST_VERSION_FILE=/home/bitcoin/.mynode/loop_version_latest @@ -47,12 +47,12 @@ POOL_LATEST_VERSION_FILE=/home/bitcoin/.mynode/pool_version_latest POOL_UPGRADE_MANIFEST_URL=https://github.com/lightninglabs/pool/releases/download/$POOL_VERSION/manifest-$POOL_VERSION.txt POOL_UPGRADE_MANIFEST_SIG_URL=https://github.com/lightninglabs/pool/releases/download/$POOL_VERSION/manifest-$POOL_VERSION.sig -LIT_VERSION="v0.17.0-alpha" +LIT_VERSION="v0.13.3-alpha" LIT_VERSION=$(get_app_version "$LIT_VERSION" "lit") LIT_VERSION_FILE=/home/bitcoin/.mynode/lit_version LIT_LATEST_VERSION_FILE=/home/bitcoin/.mynode/lit_version_latest LIT_UPGRADE_MANIFEST_URL=https://github.com/lightninglabs/lightning-terminal/releases/download/$LIT_VERSION/manifest-$LIT_VERSION.txt -LIT_UPGRADE_MANIFEST_SIG_URL=https://github.com/lightninglabs/lightning-terminal/releases/download/$LIT_VERSION/manifest-ViktorT-11-$LIT_VERSION.sig +LIT_UPGRADE_MANIFEST_SIG_URL=https://github.com/lightninglabs/lightning-terminal/releases/download/$LIT_VERSION/manifest-$LIT_VERSION.sig CHANTOOLS_VERSION="v0.11.3" CHANTOOLS_VERSION=$(get_app_version "$CHANTOOLS_VERSION" "chantools") @@ -125,7 +125,7 @@ RTL_VERSION=$(get_app_version "$RTL_VERSION" "rtl") RTL_VERSION_FILE=/home/bitcoin/.mynode/rtl_version RTL_LATEST_VERSION_FILE=/home/bitcoin/.mynode/rtl_version_latest -BTCPAYSERVER_VERSION="2.4.2" +BTCPAYSERVER_VERSION="1.11.2" if [ "$IS_32_BIT" = "1" ]; then BTCPAYSERVER_VERSION="1.3.6" fi @@ -143,7 +143,7 @@ LNBITS_VERSION=$(get_app_version "$LNBITS_VERSION" "lnbits") LNBITS_VERSION_FILE=/home/bitcoin/.mynode/lnbits_version LNBITS_LATEST_VERSION_FILE=/home/bitcoin/.mynode/lnbits_version_latest -SPECTER_VERSION="2.1.10" +SPECTER_VERSION="2.1.1" if [ "$DEBIAN_VERSION" -lt "12" ]; then SPECTER_VERSION="1.14.1" fi diff --git a/rootfs/standard/usr/share/mynode/mynode_functions.sh b/rootfs/standard/usr/share/mynode/mynode_functions.sh index 069032df7..042624a6f 100644 --- a/rootfs/standard/usr/share/mynode/mynode_functions.sh +++ b/rootfs/standard/usr/share/mynode/mynode_functions.sh @@ -20,10 +20,6 @@ function settings_file_exists { return 1 } -function is_service_enabled { - systemctl is-enabled "$1" > /dev/null 2>&1 -} - function skip_base_upgrades { if [ -f /tmp/skip_base_upgrades ]; then return 0 diff --git a/rootfs/standard/usr/share/mynode/version b/rootfs/standard/usr/share/mynode/version index 933c53a6a..a59c135b2 100644 --- a/rootfs/standard/usr/share/mynode/version +++ b/rootfs/standard/usr/share/mynode/version @@ -1 +1 @@ -0.3.46 \ No newline at end of file +0.3.43 \ No newline at end of file diff --git a/rootfs/standard/usr/share/mynode_apps/albyhub/CHANGES by claude.txt b/rootfs/standard/usr/share/mynode_apps/albyhub/CHANGES by claude.txt new file mode 100644 index 000000000..d663e86b2 --- /dev/null +++ b/rootfs/standard/usr/share/mynode_apps/albyhub/CHANGES by claude.txt @@ -0,0 +1,415 @@ +https://claude.ai/chat/c185814a-8984-42cc-b28e-1dad7c75950a + +--- + +Perfect! Now I can see the existing structure. Let me propose changes that work with what you already have: +Proposed Changes for PR #975 +1. Update pre_albyhub.sh +Create this file to generate the env file with proper phoenixd authentication: +#!/bin/bash +# File: rootfs/standard/usr/bin/service_scripts/pre_albyhub.sh + +source /usr/share/mynode/mynode_config.sh + +# Paths +ENV_FILE="/mnt/hdd/mynode/albyhub/albyhub.env" +PHOENIXD_FLAG="/mnt/hdd/mynode/settings/albyhub_conf_phoenixd" +PHOENIXD_CONFIG="/mnt/hdd/mynode/phoenixd/phoenix.conf" + +# Create directories +mkdir -p /mnt/hdd/mynode/albyhub +mkdir -p /mnt/hdd/mynode/settings + +# Determine which backend to use +if [ -f "$PHOENIXD_FLAG" ]; then + # Verify phoenixd is available + if ! systemctl is-active --quiet phoenixd; then + echo "Warning: phoenixd service is not running, falling back to LND" + rm -f "$PHOENIXD_FLAG" + USE_PHOENIXD=false + elif [ ! -f "$PHOENIXD_CONFIG" ]; then + echo "Warning: phoenixd config not found, falling back to LND" + rm -f "$PHOENIXD_FLAG" + USE_PHOENIXD=false + else + USE_PHOENIXD=true + fi +else + USE_PHOENIXD=false +fi + +# Generate environment file +if [ "$USE_PHOENIXD" = true ]; then + # Extract phoenixd password from config + PHOENIXD_PASSWORD=$(grep -E "^http-password=" "$PHOENIXD_CONFIG" | cut -d"=" -f2) + + cat > "$ENV_FILE" << EOF +WORK_DIR=/data +LN_BACKEND_TYPE=PHOENIX +PHOENIXD_ADDRESS=http://172.17.0.1:9740 +PHOENIXD_AUTHORIZATION=$PHOENIXD_PASSWORD +ENABLE_ADVANCED_SETUP=false +EOF +else + cat > "$ENV_FILE" << EOF +WORK_DIR=/data +LN_BACKEND_TYPE=LND +LND_ADDRESS=host.docker.internal:10009 +LND_CERT_FILE=/lnd/tls.cert +LND_MACAROON_FILE=/lnd/admin.macaroon +ENABLE_ADVANCED_SETUP=false +EOF +fi + +# Set permissions +chmod 600 "$ENV_FILE" +chown bitcoin:bitcoin "$ENV_FILE" +2. Update albyhub.service +Simplify to use the env file: +# File: rootfs/standard/etc/systemd/system/albyhub.service +[Unit] +Description=albyhub +Wants=www.service docker_images.service +After=www.service docker_images.service + +[Service] +WorkingDirectory=/opt/mynode/albyhub +ExecStartPre=/usr/bin/is_not_shutting_down.sh +ExecStartPre=/bin/bash /usr/bin/service_scripts/pre_albyhub.sh +ExecStart=/bin/bash -c 'docker run --rm \ + --name albyhub \ + --publish 3040:8080 \ + --add-host=host.docker.internal:host-gateway \ + --volume /mnt/hdd/mynode/albyhub:/data \ + --volume /mnt/hdd/mynode/lnd/tls.cert:/lnd/tls.cert:ro \ + --volume /mnt/hdd/mynode/lnd/data/chain/bitcoin/mainnet/admin.macaroon:/lnd/admin.macaroon:ro \ + --env-file /mnt/hdd/mynode/albyhub/albyhub.env \ + albyhub' +ExecStartPost=/bin/bash -c 'if [ -f /usr/bin/service_scripts/post_albyhub.sh ]; then /bin/bash /usr/bin/service_scripts/post_albyhub.sh; fi' +ExecStop=docker stop -t 2 albyhub +User=bitcoin +Group=bitcoin +Type=simple +TimeoutSec=120 +Restart=always +RestartSec=60 +SyslogIdentifier=albyhub + +[Install] +WantedBy=multi-user.target +3. Create albyhub_utils.py +Add helper functions for the existing albyhub.py: +# File: rootfs/standard/var/www/mynode/albyhub_utils.py +import os +import subprocess + +PHOENIXD_FLAG = "/mnt/hdd/mynode/settings/albyhub_conf_phoenixd" +ALBYHUB_DATA_DIR = "/mnt/hdd/mynode/albyhub" +PHOENIXD_CONFIG = "/mnt/hdd/mynode/phoenixd/phoenix.conf" + +def get_albyhub_backend(): + """Get current AlbyHub backend (lnd or phoenixd)""" + if os.path.isfile(PHOENIXD_FLAG): + return "phoenixd" + return "lnd" + +def is_phoenixd_available(): + """Check if phoenixd is installed and running""" + try: + # Check if service exists and is active + result = subprocess.run(['systemctl', 'is-active', 'phoenixd'], + capture_output=True, text=True, timeout=5) + if result.returncode != 0: + return False + + # Check if config file exists + if not os.path.isfile(PHOENIXD_CONFIG): + return False + + return True + except: + return False + +def set_albyhub_backend(backend): + """ + Set AlbyHub backend to 'lnd' or 'phoenixd' + Returns: (success, message) + """ + if backend == "phoenixd": + if not is_phoenixd_available(): + return (False, "phoenixd is not installed or not running. Please enable phoenixd first.") + + # Create phoenixd flag + try: + os.makedirs(os.path.dirname(PHOENIXD_FLAG), exist_ok=True) + open(PHOENIXD_FLAG, 'a').close() + return (True, "Backend switched to phoenixd") + except Exception as e: + return (False, f"Failed to set phoenixd backend: {str(e)}") + + elif backend == "lnd": + # Remove phoenixd flag + try: + if os.path.exists(PHOENIXD_FLAG): + os.remove(PHOENIXD_FLAG) + return (True, "Backend switched to LND") + except Exception as e: + return (False, f"Failed to set LND backend: {str(e)}") + + return (False, "Invalid backend specified") + +def requires_albyhub_reset(new_backend): + """Check if switching to new_backend requires data reset""" + current_backend = get_albyhub_backend() + return current_backend != new_backend + +def backup_albyhub_data(): + """Create a backup of AlbyHub data""" + try: + import datetime + timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + backup_dir = f"/mnt/hdd/mynode/albyhub_backup_{timestamp}" + + if os.path.exists(ALBYHUB_DATA_DIR): + subprocess.run(['cp', '-r', ALBYHUB_DATA_DIR, backup_dir], check=True) + subprocess.run(['chown', '-R', 'bitcoin:bitcoin', backup_dir], check=True) + return (True, f"Backup created at {backup_dir}") + return (True, "No data to backup") + except Exception as e: + return (False, f"Backup failed: {str(e)}") + +def reset_albyhub_data(): + """Reset AlbyHub data directory (warning: destructive!)""" + try: + if os.path.exists(ALBYHUB_DATA_DIR): + # Remove all files in the directory + for item in os.listdir(ALBYHUB_DATA_DIR): + item_path = os.path.join(ALBYHUB_DATA_DIR, item) + if os.path.isfile(item_path): + os.remove(item_path) + elif os.path.isdir(item_path): + subprocess.run(['rm', '-rf', item_path], check=True) + + # Recreate directory with proper permissions + os.makedirs(ALBYHUB_DATA_DIR, exist_ok=True) + subprocess.run(['chown', 'bitcoin:bitcoin', ALBYHUB_DATA_DIR], check=True) + return (True, "AlbyHub data reset successfully") + except Exception as e: + return (False, f"Failed to reset data: {str(e)}") +4. Update existing albyhub.py +Modify to add backend switching routes: +# File: rootfs/standard/var/www/mynode/albyhub.py +from flask import Blueprint, render_template, redirect, request, flash +from user_management import check_logged_in +from enable_disable_functions import * +from device_info import * +from application_info import * +from systemctl_info import * +import albyhub_utils +import subprocess +import os + +mynode_albyhub = Blueprint('mynode_albyhub',__name__) + +### Page functions (have prefix /app/ +{% extends "base.html" %} + +{% block content %} +
+
{{ app.name }}
+
+ +
+ +
+
Status
+
+
Service Status: {{ app_status }}
+
Lightning Backend: {{ current_backend|upper }}
+
+
+ + +
+
Lightning Backend Configuration
+ +
+ {% if not phoenixd_available %} +
+ ⚠️ Warning: phoenixd is not installed or not running. Only LND backend is available. +
+ {% endif %} + +
+
+ + + +
+ + + +
+ ⚠️ IMPORTANT: Switching backends will reset all AlbyHub data. +
    +
  • A backup will be created automatically
  • +
  • You will need to set up AlbyHub again
  • +
  • All channels and balances will be lost
  • +
+
+ + +
+
+
+ + + + + +
+
About {{ app.name }}
+
+ {{ app.description|safe }} +
+
+
+ + +{% endblock %} +Summary of Changes +This implementation: +1. ✅ Uses Taylor's env file approach - moves logic from service file to pre_albyhub.sh +2. ✅ Preserves your phoenixd authentication - extracts password from phoenix.conf exactly as your current implementation +3. ✅ Works with existing albyhub.py - extends it rather than replacing +4. ✅ Python-based UI switching - all backend switching logic in Python utilities +5. ✅ Proper safety checks - verifies phoenixd is running and config exists +6. ✅ User warnings - clear destructive action warnings with confirmation +7. ✅ Automatic backups - creates timestamped backup before switching +8. ✅ Follows MyNode patterns - uses existing structures and conventions + diff --git a/rootfs/standard/usr/share/mynode_apps/albyhub/albyhub.service b/rootfs/standard/usr/share/mynode_apps/albyhub/albyhub.service index aac71aaff..c9c79b0de 100644 --- a/rootfs/standard/usr/share/mynode_apps/albyhub/albyhub.service +++ b/rootfs/standard/usr/share/mynode_apps/albyhub/albyhub.service @@ -10,23 +10,37 @@ After=www.service docker_images.service WorkingDirectory=/opt/mynode/albyhub ExecStartPre=/usr/bin/is_not_shutting_down.sh -ExecStartPre=/usr/bin/wait_on_bitcoin.sh -ExecStartPre=/usr/bin/wait_on_docker_image_install.sh ExecStartPre=/bin/bash -c 'if [ -f /usr/bin/service_scripts/pre_albyhub.sh ]; then /bin/bash /usr/bin/service_scripts/pre_albyhub.sh; fi' -ExecStart=docker run --rm \ - --name albyhub \ - --publish 3040:8080 \ - --add-host=host.docker.internal:host-gateway \ - --volume /mnt/hdd/mynode/albyhub:/data \ - --mount type=bind,src=/mnt/hdd/mynode/lnd/tls.cert,target=/lnd/tls.cert,readonly \ - --mount type=bind,src=/mnt/hdd/mynode/lnd/data/chain/bitcoin/mainnet/admin.macaroon,target=/lnd/admin.macaroon,readonly \ - --env WORK_DIR="/data" \ - --env LN_BACKEND_TYPE="LND" \ - --env LND_ADDRESS="host.docker.internal:10009" \ - --env LND_CERT_FILE="/lnd/tls.cert" \ - --env LND_MACAROON_FILE="/lnd/admin.macaroon" \ - --env ENABLE_ADVANCED_SETUP=false \ - albyhub + +ExecStart=/bin/bash -c 'if [ ! -f /mnt/hdd/mynode/settings/albyhub_conf_phoenixd ]; then \ + docker run --rm \ + --name albyhub \ + --publish 3040:8080 \ + --add-host=host.docker.internal:host-gateway \ + --volume /mnt/hdd/mynode/albyhub:/data \ + --volume /mnt/hdd/mynode/lnd/tls.cert:/lnd/tls.cert \ + --volume /mnt/hdd/mynode/lnd/data/chain/bitcoin/mainnet/admin.macaroon:/lnd/admin.macaroon \ + --env WORK_DIR="/data" \ + --env LN_BACKEND_TYPE=LND \ + --env LND_ADDRESS="host.docker.internal:10009" \ + --env LND_CERT_FILE="/lnd/tls.cert" \ + --env LND_MACAROON_FILE="/lnd/admin.macaroon" \ + --env ENABLE_ADVANCED_SETUP=false \ + albyhub; \ + else \ + docker run --rm \ + --name albyhub \ + --publish 3040:8080 \ + --add-host=host.docker.internal:host-gateway \ + --volume /mnt/hdd/mynode/albyhub:/data \ + --env WORK_DIR="/data" \ + --env LN_BACKEND_TYPE=PHOENIX \ + --env PHOENIXD_ADDRESS="http://172.17.0.1:9740" \ + --env PHOENIXD_AUTHORIZATION=$(grep -E "^http-password=" /mnt/hdd/mynode/phoenixd/phoenix.conf | cut -d"=" -f2) \ + --env ENABLE_ADVANCED_SETUP=false \ + albyhub; \ + fi' + ExecStartPost=/bin/bash -c 'if [ -f /usr/bin/service_scripts/post_albyhub.sh ]; then /bin/bash /usr/bin/service_scripts/post_albyhub.sh; fi' ExecStop=docker stop -t 2 albyhub @@ -39,4 +53,4 @@ RestartSec=60 SyslogIdentifier=albyhub [Install] -WantedBy=multi-user.target +WantedBy=multi-user.target \ No newline at end of file diff --git a/rootfs/standard/usr/share/mynode_apps/albyhub/www/python/albyhub.py b/rootfs/standard/usr/share/mynode_apps/albyhub/www/python/albyhub.py index b3b2cacc4..5501d523f 100644 --- a/rootfs/standard/usr/share/mynode_apps/albyhub/www/python/albyhub.py +++ b/rootfs/standard/usr/share/mynode_apps/albyhub/www/python/albyhub.py @@ -22,7 +22,7 @@ def albyhub_page(): # Load page templateData = { - "title": "MyNode - " + app["name"], + "title": "myNode - " + app["name"], "ui_settings": read_ui_settings(), "app_status": app_status, "app_status_color": app_status_color, diff --git a/rootfs/standard/usr/share/mynode_apps/canary/canary.json b/rootfs/standard/usr/share/mynode_apps/canary/canary.json index 03df14543..d3ce78536 100644 --- a/rootfs/standard/usr/share/mynode_apps/canary/canary.json +++ b/rootfs/standard/usr/share/mynode_apps/canary/canary.json @@ -16,7 +16,7 @@ "Get instant notifications when your bitcoins move via ntfy push notifications.", "Features include: transaction monitoring, RBF/CPFP detection, balance alerts, and deep wallet scanning." ], - "latest_version": "v1.5.2", + "latest_version": "v1.5.0", "supported_archs": ["amd64", "arm64"], "download_skip": true, "requires_docker_image_installation": true, diff --git a/rootfs/standard/usr/share/mynode_apps/canary/canary.service b/rootfs/standard/usr/share/mynode_apps/canary/canary.service index 3855ef468..22e3761d3 100644 --- a/rootfs/standard/usr/share/mynode_apps/canary/canary.service +++ b/rootfs/standard/usr/share/mynode_apps/canary/canary.service @@ -7,8 +7,6 @@ After=electrs.service docker_images.service WorkingDirectory=/opt/mynode/canary ExecStartPre=/usr/bin/is_not_shutting_down.sh -ExecStartPre=/usr/bin/wait_on_bitcoin.sh -ExecStartPre=/usr/bin/wait_on_docker_image_install.sh ExecStartPre=+/bin/bash -c 'if [ -f /usr/bin/service_scripts/pre_canary.sh ]; then /bin/bash /usr/bin/service_scripts/pre_canary.sh; fi' ExecStartPre=-/usr/local/bin/docker-compose down --remove-orphans ExecStart=/usr/local/bin/docker-compose up diff --git a/rootfs/standard/usr/share/mynode_apps/canary/scripts/install_canary.sh b/rootfs/standard/usr/share/mynode_apps/canary/scripts/install_canary.sh index 10a0d9869..31776da75 100755 --- a/rootfs/standard/usr/share/mynode_apps/canary/scripts/install_canary.sh +++ b/rootfs/standard/usr/share/mynode_apps/canary/scripts/install_canary.sh @@ -9,6 +9,8 @@ set -e echo "==================== INSTALLING APP ====================" +VERSION="${VERSION:-v1.5.0}" + mkdir -p /opt/mynode/canary || true mkdir -p /mnt/hdd/mynode/canary || true diff --git a/rootfs/standard/usr/share/mynode_apps/canary/scripts/pre_canary.sh b/rootfs/standard/usr/share/mynode_apps/canary/scripts/pre_canary.sh index ae8fe9784..bcae1c463 100755 --- a/rootfs/standard/usr/share/mynode_apps/canary/scripts/pre_canary.sh +++ b/rootfs/standard/usr/share/mynode_apps/canary/scripts/pre_canary.sh @@ -2,8 +2,6 @@ set -e -source /usr/share/mynode/mynode_functions.sh - DATA_DIR="/mnt/hdd/mynode/canary" ADMIN_PASSWORD_FILE="$DATA_DIR/admin_password" JWT_SECRET_FILE="$DATA_DIR/jwt_secret" @@ -32,21 +30,5 @@ CANARY_SELF_HOSTED_ADMIN_PASSWORD=$(cat "$ADMIN_PASSWORD_FILE") JWT_SECRET=$(cat "$JWT_SECRET_FILE") EOF -has_local_tx_explorer=0 - -if is_service_enabled mempool; then - echo "CANARY_MEMPOOL_PORT=4080" >> "$ENV_FILE" - has_local_tx_explorer=1 -fi - -if is_service_enabled btcrpcexplorer; then - echo "CANARY_BTC_RPC_EXPLORER_PORT=3002" >> "$ENV_FILE" - has_local_tx_explorer=1 -fi - -if [ "$has_local_tx_explorer" = "1" ]; then - echo "CANARY_TX_EXPLORER_PLATFORM=mynode" >> "$ENV_FILE" -fi - chown -R bitcoin:bitcoin "$DATA_DIR" chmod 600 "$ADMIN_PASSWORD_FILE" "$JWT_SECRET_FILE" "$ENV_FILE" diff --git a/rootfs/standard/usr/share/mynode_apps/canary/www/python/canary.py b/rootfs/standard/usr/share/mynode_apps/canary/www/python/canary.py index aceebaac0..52ab90056 100644 --- a/rootfs/standard/usr/share/mynode_apps/canary/www/python/canary.py +++ b/rootfs/standard/usr/share/mynode_apps/canary/www/python/canary.py @@ -26,11 +26,12 @@ def canary_page(): app_status_color = get_application_status_color("canary") template_data = { - "title": "MyNode - " + app["name"], + "title": "myNode - " + app["name"], "ui_settings": read_ui_settings(), "app_status": app_status, "app_status_color": app_status_color, "app": app, + "canary_username": "admin@local", "canary_password": get_canary_password(), } return render_template("/app/canary/canary.html", **template_data) diff --git a/rootfs/standard/usr/share/mynode_apps/canary/www/templates/README b/rootfs/standard/usr/share/mynode_apps/canary/www/templates/README index 8a978795f..16d075244 100644 --- a/rootfs/standard/usr/share/mynode_apps/canary/www/templates/README +++ b/rootfs/standard/usr/share/mynode_apps/canary/www/templates/README @@ -1 +1 @@ -Canary uses MyNode's shared generic app template. +Canary uses myNode's shared generic app template. diff --git a/rootfs/standard/usr/share/mynode_apps/canary/www/templates/canary.html b/rootfs/standard/usr/share/mynode_apps/canary/www/templates/canary.html index 190860e1d..1725053f6 100644 --- a/rootfs/standard/usr/share/mynode_apps/canary/www/templates/canary.html +++ b/rootfs/standard/usr/share/mynode_apps/canary/www/templates/canary.html @@ -160,6 +160,10 @@
+ + + + @@ -134,13 +134,12 @@ You are currently using an old Operating System version (Debian {{debian_version}}). It is recommended to upgrade by reflashing your OS drive. Otherwise, some apps will remain on old versions and you may have issues. The new image can be downloaded here and a guide is - available. + available. {% endif %} -
Username{{canary_username}}
Password diff --git a/rootfs/standard/usr/share/mynode_apps/datum/www/python/datum.py b/rootfs/standard/usr/share/mynode_apps/datum/www/python/datum.py index 4d49990d8..cc6b7e0ce 100644 --- a/rootfs/standard/usr/share/mynode_apps/datum/www/python/datum.py +++ b/rootfs/standard/usr/share/mynode_apps/datum/www/python/datum.py @@ -22,7 +22,7 @@ def datum_page(): # Load page templateData = { - "title": "MyNode - " + app["name"], + "title": "myNode - " + app["name"], "ui_settings": read_ui_settings(), "app_status": app_status, "app_status_color": app_status_color, diff --git a/rootfs/standard/usr/share/mynode_apps/jam/jam.service b/rootfs/standard/usr/share/mynode_apps/jam/jam.service index 1aa9726f5..acd79eae3 100644 --- a/rootfs/standard/usr/share/mynode_apps/jam/jam.service +++ b/rootfs/standard/usr/share/mynode_apps/jam/jam.service @@ -12,8 +12,6 @@ WorkingDirectory=/opt/mynode/jam EnvironmentFile=/mnt/hdd/mynode/settings/.btcrpc_environment ExecStartPre=/usr/bin/is_not_shutting_down.sh -ExecStartPre=/usr/bin/wait_on_bitcoin.sh -ExecStartPre=/usr/bin/wait_on_docker_image_install.sh ExecStartPre=/bin/bash -c 'if [ -f /usr/bin/service_scripts/pre_jam.sh ]; then /bin/bash /usr/bin/service_scripts/pre_jam.sh; fi' ExecStart=/usr/bin/docker run --rm \ --name jam \ diff --git a/rootfs/standard/usr/share/mynode_apps/publicpool/www/python/publicpool.py b/rootfs/standard/usr/share/mynode_apps/publicpool/www/python/publicpool.py index e8bc9c447..9ae4fde3d 100644 --- a/rootfs/standard/usr/share/mynode_apps/publicpool/www/python/publicpool.py +++ b/rootfs/standard/usr/share/mynode_apps/publicpool/www/python/publicpool.py @@ -22,7 +22,7 @@ def publicpool_page(): # Load page templateData = { - "title": "MyNode - " + app["name"], + "title": "myNode - " + app["name"], "ui_settings": read_ui_settings(), "app_status": app_status, "app_status_color": app_status_color, diff --git a/rootfs/standard/usr/share/mynode_apps/publicpoolui/www/python/publicpoolui.py b/rootfs/standard/usr/share/mynode_apps/publicpoolui/www/python/publicpoolui.py index 63ba68d8b..b7d1c1886 100644 --- a/rootfs/standard/usr/share/mynode_apps/publicpoolui/www/python/publicpoolui.py +++ b/rootfs/standard/usr/share/mynode_apps/publicpoolui/www/python/publicpoolui.py @@ -22,7 +22,7 @@ def publicpoolui_page(): # Load page templateData = { - "title": "MyNode - " + app["name"], + "title": "myNode - " + app["name"], "ui_settings": read_ui_settings(), "app_status": app_status, "app_status_color": app_status_color, diff --git a/rootfs/standard/var/pynode/bitcoin_info.py b/rootfs/standard/var/pynode/bitcoin_info.py index 286f85a25..bdbc3c502 100644 --- a/rootfs/standard/var/pynode/bitcoin_info.py +++ b/rootfs/standard/var/pynode/bitcoin_info.py @@ -313,6 +313,7 @@ def create_default_wallets(): for new_wallet in default_wallets: found = False for w in wallets: + log_message("{} comparing to {}".format(new_wallet, w["walletname"])) if new_wallet == w["walletname"]: found = True break @@ -394,21 +395,6 @@ def using_bitcoin_custom_config(): def delete_bitcoin_custom_config(): os.system("rm -f /mnt/hdd/mynode/settings/bitcoin_custom.conf") -def get_custom_bitcoin_version(): - # Returns the custom Bitcoin version the user selected (ex: knots_autoupdate) - # or an empty string when the default version of Bitcoin is being used. - files = ["/home/bitcoin/.mynode/custom_bitcoin_selection", - "/mnt/hdd/mynode/settings/custom_bitcoin_selection", - # Older installs may not have a selection file, so fall back to the installed custom version - "/home/bitcoin/.mynode/bitcoin_version_latest_custom", - "/mnt/hdd/mynode/settings/bitcoin_version_latest_custom"] - for filename in files: - if os.path.isfile(filename): - version = to_string(get_file_contents(filename)) - if version != "" and version != "ERROR": - return version - return "" - def restart_bitcoin_actual(): os.system("systemctl restart bitcoin") diff --git a/rootfs/standard/var/pynode/device_info.py b/rootfs/standard/var/pynode/device_info.py index 90e367857..33659396c 100644 --- a/rootfs/standard/var/pynode/device_info.py +++ b/rootfs/standard/var/pynode/device_info.py @@ -8,7 +8,6 @@ import time import json import os -import secrets import subprocess import random import string @@ -317,24 +316,6 @@ def get_device_arch(): cached_data["device_arch"] = arch return arch -# Bit width of each architecture "uname -m" may report -DEVICE_ARCH_BITS = { - "armv6l": 32, - "armv7l": 32, - "armv8l": 32, # 64-bit CPU running a 32-bit userland - "i386": 32, - "i686": 32, - "aarch64": 64, - "arm64": 64, - "x86_64": 64, - "amd64": 64, - "riscv64": 64, -} - -def get_device_bits(): - # Returns 32 or 64, or None if the architecture isn't recognized - return DEVICE_ARCH_BITS.get(get_device_arch(), None) - def get_debian_codename(): global cached_data if "debian_codename" in cached_data: @@ -353,17 +334,6 @@ def get_debian_version(): cached_data["debian_version"] = debian_version return debian_version -def get_tor_version(): - global cached_data - if "tor_version" in cached_data: - return cached_data["tor_version"] - - tor_version = to_string(subprocess.check_output("tor --version | head -n 1", shell=True).decode("utf-8").strip()) - tor_version = tor_version.replace("Tor version ", "") - tor_version = tor_version.strip(".") - cached_data["tor_version"] = tor_version - return tor_version - def get_device_ram(): global cached_data if "ram" in cached_data: @@ -665,7 +635,8 @@ def get_flask_secret_key(): if os.path.isfile("/home/bitcoin/.mynode/flask_secret_key"): key = to_string( get_file_contents("/home/bitcoin/.mynode/flask_secret_key") ) else: - key = secrets.token_hex() + letters = string.ascii_letters + key = ''.join(random.choice(letters) for i in range(32)) set_file_contents("/home/bitcoin/.mynode/flask_secret_key", key) return key @@ -725,14 +696,6 @@ def show_old_debian_warning(): def hide_old_debian_warning(): touch("/tmp/hide_old_debian_warning") -def show_old_tor_warning(): - if not os.path.isfile("/tmp/hide_old_tor_warning"): - if get_tor_version().startswith("0.4.8"): - return True - return False -def hide_old_tor_warning(): - touch("/tmp/hide_old_tor_warning") - #================================== # QuickSync Functions @@ -859,21 +822,6 @@ def dismiss_expiration_warning(): def is_expiration_warning_dismissed(): return os.path.isfile("/tmp/dismiss_expiration_warning") -# Generic dismiss-by-id mechanism for server-pushed check-in notifications -# (see get_active_notifications() in mynode.py). Keyed by id+version so the -# server can force a notification to reappear by bumping its version. -NOTIFICATION_ID_REGEX = re.compile(r"^[a-zA-Z0-9_-]+$") - -def dismiss_notification(notification_id, version): - if not NOTIFICATION_ID_REGEX.match(str(notification_id)) or not str(version).isdigit(): - return - touch("/tmp/dismiss_notification_{}_v{}".format(notification_id, version)) - -def is_notification_dismissed(notification_id, version): - if not NOTIFICATION_ID_REGEX.match(str(notification_id)) or not str(version).isdigit(): - return True - return os.path.isfile("/tmp/dismiss_notification_{}_v{}".format(notification_id, version)) - def is_support_near_expiration(): data = get_check_in_data() if data != None and "support" in data: @@ -894,29 +842,6 @@ def is_premium_plus_near_expiration(): return True return False -#================================== -# Homepage Refresh Functions -#================================== -# ID that tells open home pages they need a full page reload. Each page renders -# the current ID and its ajax updates ask if it changed, so every open client reloads. -HOMEPAGE_REFRESH_ID_FILE = "/tmp/homepage_refresh_id" - -def get_homepage_refresh_id(): - try: - with open(HOMEPAGE_REFRESH_ID_FILE, "r") as f: - return int(f.read().strip()) - except: - return 0 - -def trigger_homepage_refresh(): - # Read the ID first - opening the file for writing truncates it - next_refresh_id = get_homepage_refresh_id() + 1 - try: - with open(HOMEPAGE_REFRESH_ID_FILE, "w") as f: - f.write(str( next_refresh_id )) - except Exception as e: - log_message("trigger_homepage_refresh exception: {}".format(str(e))) - #================================== # Premium+ Token Functions #================================== diff --git a/rootfs/standard/var/www/mynode/api.py b/rootfs/standard/var/www/mynode/api.py index 388e644d3..5d8b27506 100644 --- a/rootfs/standard/var/www/mynode/api.py +++ b/rootfs/standard/var/www/mynode/api.py @@ -203,22 +203,26 @@ def api_get_device_info(): return generate_api_json_response(data) -@mynode_api.route("/api/get_homepage_refresh_id") -def api_get_homepage_refresh_id(): +@mynode_api.route("/api/homepage_needs_refresh") +def api_homepage_needs_refresh(): check_logged_in() - # Check for various states that would require a homepage reload + data = {} + data["needs_refresh"] = "no" + if get_mynode_status() != STATE_STABLE: - trigger_homepage_refresh() + data["needs_refresh"] = "yes" if not has_product_key() and not skipped_product_key(): - trigger_homepage_refresh() + data["needs_refresh"] = "yes" if not get_has_updated_btc_info(): - trigger_homepage_refresh() + data["needs_refresh"] = "yes" if not is_bitcoin_synced(): - trigger_homepage_refresh() + data["needs_refresh"] = "yes" - data = {} - data["refresh_id"] = str(get_homepage_refresh_id()) + # If file indicating refresh was made, refresh and remove file + if os.path.isfile("/tmp/homepage_needs_refresh"): + data["needs_refresh"] = "yes" + os.system("rm /tmp/homepage_needs_refresh") return generate_api_json_response(data) diff --git a/rootfs/standard/var/www/mynode/bitcoin.py b/rootfs/standard/var/www/mynode/bitcoin.py index 2ea278666..7500439d2 100644 --- a/rootfs/standard/var/www/mynode/bitcoin.py +++ b/rootfs/standard/var/www/mynode/bitcoin.py @@ -224,8 +224,6 @@ def runcmd_page(): @mynode_bitcoin.route("/bitcoin/toggle_bip37") def bitcoin_toggle_bip37(): - check_logged_in() - if request.args.get("enabled") and request.args.get("enabled") == "1": enable_bip37() else: @@ -246,8 +244,6 @@ def bitcoin_toggle_bip37(): @mynode_bitcoin.route("/bitcoin/toggle_bip157") def bitcoin_toggle_bip157(): - check_logged_in() - if request.args.get("enabled") and request.args.get("enabled") == "1": enable_bip157() else: diff --git a/rootfs/standard/var/www/mynode/mynode.py b/rootfs/standard/var/www/mynode/mynode.py index 5ff93df3a..761f14636 100644 --- a/rootfs/standard/var/www/mynode/mynode.py +++ b/rootfs/standard/var/www/mynode/mynode.py @@ -1,5 +1,4 @@ -import urllib.parse from config import * from flask import Flask, render_template, Markup, redirect, request, url_for from user_management import * @@ -130,102 +129,6 @@ def on_shutdown(signum, frame): raise ServiceExit -### Server-Pushed Notifications (from check-in response) -# Domains allowed for a notification's "Learn More" link, so a compromised or -# buggy check-in backend can't turn a notification into a phishing link. -NOTIFICATION_URL_ALLOWED_HOSTS = ["mynodebtc.com", "www.mynodebtc.com"] - -NOTIFICATION_SEVERITY_CSS_CLASS = { - "critical": "error_block", - "warning": "warning_block", - "info": "info_block", -} - -NOTIFICATION_MAX_TITLE_LENGTH = 100 -NOTIFICATION_MAX_MESSAGE_LENGTH = 1024 - -def _notification_version_tuple(version_string): - try: - return tuple(int(part) for part in str(version_string).split(".")) - except (ValueError, AttributeError): - return None - -def _notification_url_allowed(url): - try: - parsed = urllib.parse.urlparse(url) - except ValueError: - return False - return parsed.scheme == "https" and parsed.hostname in NOTIFICATION_URL_ALLOWED_HOSTS - -def _notification_conditions_met(conditions): - if not isinstance(conditions, dict): - return True - - device_types = conditions.get("device_types") - if device_types and get_device_type() not in device_types: - return False - - # Accepts ints or strings ("64" / 64) and a bare value instead of a list. - # Fails closed if the device's architecture isn't recognized. - device_bits = conditions.get("device_bits") - if device_bits: - if not isinstance(device_bits, list): - device_bits = [device_bits] - if str(get_device_bits()) not in [str(bits) for bits in device_bits]: - return False - - current_version = _notification_version_tuple(get_current_version()) - min_version = _notification_version_tuple(conditions.get("min_mynode_version")) - max_version = _notification_version_tuple(conditions.get("max_mynode_version")) - if min_version is not None and (current_version is None or current_version < min_version): - return False - if max_version is not None and (current_version is None or current_version > max_version): - return False - - debian_version = get_debian_version() - if conditions.get("min_debian_version") is not None and debian_version < conditions["min_debian_version"]: - return False - if conditions.get("max_debian_version") is not None and debian_version > conditions["max_debian_version"]: - return False - - affected_app = conditions.get("affected_app") - if affected_app and not is_installed(affected_app): - return False - - return True - -def get_active_notifications(): - check_in_data = get_check_in_data() - if not check_in_data: - return [] - - active_notifications = [] - for notification in check_in_data.get("notifications", []): - notification_id = notification.get("id", "") - version = notification.get("version", "") - if not NOTIFICATION_ID_REGEX.match(str(notification_id)) or not str(version).isdigit(): - continue - if is_notification_dismissed(notification_id, version): - continue - if not _notification_conditions_met(notification.get("conditions")): - continue - - url = notification.get("url") - if url and not _notification_url_allowed(url): - url = None - - active_notifications.append({ - "id": notification_id, - "version": version, - "title": str(notification.get("title", ""))[:NOTIFICATION_MAX_TITLE_LENGTH], - "message": str(notification.get("message", ""))[:NOTIFICATION_MAX_MESSAGE_LENGTH], - "css_class": NOTIFICATION_SEVERITY_CSS_CLASS.get(notification.get("severity"), "warning_block"), - "url": url, - }) - - return active_notifications - - ### Flask Page Processing @app.route("/") def index(): @@ -268,7 +171,7 @@ def index(): templateData = { "title": "Error", "header_text": "OS Drive Error", - "subheader_text": "The root filesystem is read only. Your SD card or USB thumbdrive may be corrupt.", + "subheader_text": "The root filesystem is read only. Your SD card or USB thumdrive may be corrupt.", "ui_settings": read_ui_settings() } return render_template('state.html', **templateData) @@ -670,10 +573,6 @@ def index(): "show_32_bit_warning": show_32_bit_warning(), "show_old_debian_warning": show_old_debian_warning(), "debian_version": get_debian_version(), - "show_old_tor_warning": show_old_tor_warning(), - "tor_version": get_tor_version(), - "notifications": get_active_notifications(), - "homepage_refresh_id": get_homepage_refresh_id(), "is_quicksync_disabled": not is_quicksync_enabled(), "usb_extras": get_usb_extras(), "cpu_usage": get_cpu_usage(), @@ -791,26 +690,12 @@ def page_clear_old_debian_warning(): hide_old_debian_warning() return redirect("/") -@app.route("/clear-old-tor-warning") -def page_clear_old_tor_warning(): - check_logged_in() - hide_old_tor_warning() - return redirect("/") - @app.route("/dismiss-expiration-warning") def page_dismiss_expiration_warning(): check_logged_in() dismiss_expiration_warning() return redirect("/") -@app.route("/dismiss-notification") -def page_dismiss_notification(): - check_logged_in() - notification_id = request.args.get("id", "") - version = request.args.get("version", "") - dismiss_notification(notification_id, version) - return redirect("/") - @app.route("/login", methods=["GET","POST"]) def page_login(): templateData = { @@ -902,8 +787,6 @@ def set_response_headers(response): # Prevents 301 from saving forever response.headers['Cache-Control'] = 'no-store' - response.headers["Access-Control-Allow-Private-Network"] = "true" - # No Caching #response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate' #response.headers['Pragma'] = 'no-cache' diff --git a/rootfs/standard/var/www/mynode/settings.py b/rootfs/standard/var/www/mynode/settings.py index 6c82f5862..7592ba699 100644 --- a/rootfs/standard/var/www/mynode/settings.py +++ b/rootfs/standard/var/www/mynode/settings.py @@ -1,7 +1,7 @@ from config import * from flask import Blueprint, render_template, session, abort, Markup, request, redirect, url_for, flash from bitcoin import is_bitcoin_synced -from bitcoin_info import using_bitcoin_custom_config, get_custom_bitcoin_version +from bitcoin_info import using_bitcoin_custom_config from lightning_info import using_lnd_custom_config, restart_lnd from pprint import pprint, pformat from threading import Timer @@ -79,7 +79,6 @@ def page_settings(): "logout_time_days": logout_time_days, "logout_time_hours": logout_time_hours, "using_bitcoin_custom_config": using_bitcoin_custom_config(), - "custom_bitcoin_version": get_custom_bitcoin_version(), "using_lnd_custom_config": using_lnd_custom_config(), "is_bitcoin_synced": is_bitcoin_synced(), "is_installing_docker_images": is_installing_docker_images(), diff --git a/rootfs/standard/var/www/mynode/static/css/mynode.css b/rootfs/standard/var/www/mynode/static/css/mynode.css index 8f336ef5c..4fcb9f37c 100644 --- a/rootfs/standard/var/www/mynode/static/css/mynode.css +++ b/rootfs/standard/var/www/mynode/static/css/mynode.css @@ -14,8 +14,6 @@ body, input, select, textarea { .logo_image { width: 100%; - height: auto; - display: block; } .footer { @@ -692,17 +690,6 @@ a:link.ui-button, a:visited.ui-button, .ui-button { margin-top: 5px !important; margin-bottom: 15px !important; } -.custom_version_notice { - color: #444444; - font-size: 13px; - text-align: left; - line-height: 1.5; - padding: 10px; - margin-bottom: 12px; - background-color: #ffb70021; - border-left: 4px solid #f19c00; - border-radius: 4px; -} .settings_button { font-size: 14px; margin-top: 15px; @@ -796,21 +783,6 @@ a:link.ui-button, a:visited.ui-button, .ui-button { margin-bottom: 20px; } -.main_page_info_block { - color: #333333; - border: 2px solid #3399ff; - background-color: rgb(235, 245, 255); - width: 810px; - border-radius: 10px; - text-align: justify; - display: block; - font-size: 12px; - padding: 5px; - padding-left: 12px; - margin: auto; - margin-bottom: 20px; -} - .bottom_center_alert_popup { display: none; position: fixed; @@ -1129,8 +1101,6 @@ input:checked + .slider:before { .marketplace_app_tile_icon { float: left; width: 60px; - height: 60px; - object-fit: contain; margin-top: 10px; margin-left: 10px; } @@ -1204,8 +1174,6 @@ input:checked + .slider:before { margin: auto; display: block; width: 150px; - height: 150px; - object-fit: contain; } .marketplace_app_page_button { margin: auto; diff --git a/rootfs/standard/var/www/mynode/static/css/mynode_dark.css b/rootfs/standard/var/www/mynode/static/css/mynode_dark.css index 357abfa84..2bd099c6e 100644 --- a/rootfs/standard/var/www/mynode/static/css/mynode_dark.css +++ b/rootfs/standard/var/www/mynode/static/css/mynode_dark.css @@ -115,12 +115,6 @@ table.bitcoin_table tbody tr:nth-child(even) td{ border-bottom: 1px solid #ffb7001c; } -.custom_version_notice { - color: #ddd; - background-color: #ffb70014; - border-left: 4px solid orange; -} - th td { border-top: #323640 1px solid; } @@ -158,12 +152,6 @@ th td { background-color: #3a4750; } -.main_page_info_block { - color: #ddd; - border: 2px solid #3399ff; - background-color: #3a4750; -} - .main_page_error_block a { color: black; text-decoration: underline dashed black; diff --git a/rootfs/standard/var/www/mynode/static/images/back.png b/rootfs/standard/var/www/mynode/static/images/back.png index 91168f585..a66e78f1d 100644 Binary files a/rootfs/standard/var/www/mynode/static/images/back.png and b/rootfs/standard/var/www/mynode/static/images/back.png differ diff --git a/rootfs/standard/var/www/mynode/templates/about.html b/rootfs/standard/var/www/mynode/templates/about.html index 7ebac718d..efb58b36c 100644 --- a/rootfs/standard/var/www/mynode/templates/about.html +++ b/rootfs/standard/var/www/mynode/templates/about.html @@ -17,9 +17,11 @@
Contacts

- If you have any questions or comments, please contact MyNode via our support portal or other contact methods listed on our support page. - - More general information is also available on our website at mynodebtc.com. + If you have any questions or comments, please contact MyNode via email at the following address: +

+ mynode@mynodebtc.com +

+ More information is also available on our website at mynodebtc.com.

diff --git a/rootfs/standard/var/www/mynode/templates/bos.html b/rootfs/standard/var/www/mynode/templates/bos.html index 6b7df0ee1..9fdafc70f 100644 --- a/rootfs/standard/var/www/mynode/templates/bos.html +++ b/rootfs/standard/var/www/mynode/templates/bos.html @@ -28,7 +28,7 @@
  • Balance of Satoshis (bos) is a tool for viewing and interacting with lnd.
  • To get started, you need access to the Linux terminal of your MyNode device.
    • -
    • A guide to access the Linux terminal is available here - guide
    • +
    • A guide to access the Linux terminal is available here - guide
  • Once you have terminal access, run commands starting with 'bos'. For example:
    • diff --git a/rootfs/standard/var/www/mynode/templates/electrum_server.html b/rootfs/standard/var/www/mynode/templates/electrum_server.html index 175341ec9..29b238f83 100644 --- a/rootfs/standard/var/www/mynode/templates/electrum_server.html +++ b/rootfs/standard/var/www/mynode/templates/electrum_server.html @@ -111,7 +111,7 @@
      Local
      PC Wallet
      - Guide + Guide
      @@ -121,7 +121,7 @@
      Local
      Mobile Wallets
      - Guide + Guide
      @@ -131,7 +131,7 @@
      Remote
      PC Wallet
      - Guide + Guide
      @@ -141,7 +141,7 @@
      Remote
      Mobile Wallet
      - Guide + Guide
      diff --git a/rootfs/standard/var/www/mynode/templates/help.html b/rootfs/standard/var/www/mynode/templates/help.html index b98a1a898..b8d0077af 100644 --- a/rootfs/standard/var/www/mynode/templates/help.html +++ b/rootfs/standard/var/www/mynode/templates/help.html @@ -29,7 +29,7 @@ Guides for setting up your MyNode as well as associated wallets and apps are available on our website for guides, troubleshooting and other documentation.

      - mynodebtc.com + mynodebtc.github.io

      For tips and notes about application-specific behavior, see the system notes on GitHub. diff --git a/rootfs/standard/var/www/mynode/templates/includes/info_table.html b/rootfs/standard/var/www/mynode/templates/includes/info_table.html index 00f915e2b..a6f3846b7 100644 --- a/rootfs/standard/var/www/mynode/templates/includes/info_table.html +++ b/rootfs/standard/var/www/mynode/templates/includes/info_table.html @@ -65,7 +65,7 @@ 64-bit {% else %} 32-bit

      * It is recommended to upgrade to a 64-bit image by reflashing your OS. Some apps can no longer be updated on 32-bit. - The image can be downloaded here and a guide is available. + The image can be downloaded here and a guide is available. {% endif %} {% endif %}