#!/bin/sh # Regular Colors BLACK='\033[0;30m' # Black RED='\033[0;31m' # Red GREEN='\033[0;32m' # Green YELLOW='\033[0;33m' # Yellow BLUE='\033[0;34m' # Blue PURPLE='\033[0;35m' # Purple CYAN='\033[0;36m' # Cyan WHITE='\033[0;37m' # White NC='\033[0m' # No Color check_distro() { if command -v apt > /dev/null; then echo "${YELLOW} Detected Debian-based distribution. Proceeding with installation... ${NC}\n" else echo "${RED} Unsupported Linux distribution. Exiting... ${NC}\n" exit 1 fi } check_display() { if command -v xrandr > /dev/null; then DISPLAY_AVAILABLE=true else DISPLAY_AVAILABLE=false fi } update_and_install_packages() { echo "${YELLOW} UPDATING DEBIAN-BASED SYSTEM AND INSTALLING REQUIRED SOFTWARE PACKAGES ${NC}\n" sudo apt update sudo apt -y --purge remove ubuntu-advantage-tools sudo apt -y upgrade PACKAGES="gnome-software unzip vim curl openjdk-17-jre zlib1g-dev vlc chromium-browser p7zip-full libfuse2 htop net-tools bpytop ffmpeg sysbench smartmontools ksnip xsensors fonts-symbola lm-sensors" if [ "$DISPLAY_AVAILABLE" = true ]; then PACKAGES="$PACKAGES cinnamon-desktop-environment" fi for PACKAGE in $PACKAGES; do if ! sudo dpkg -l | grep -qw $PACKAGE; then echo "${YELLOW} Installing $PACKAGE... ${NC}" sudo apt -y install $PACKAGE else echo "${GREEN} $PACKAGE is already installed. Skipping... ${NC}" fi done } check_qortal_version() { echo "${YELLOW} Checking the version of qortal on local machine VS the version on github... ${NC}\n" core_running=$(curl -s localhost:12391/admin/status) if [ -z "$core_running" ]; then echo "${RED} CORE DOES NOT SEEM TO BE RUNNING, WAITING 1 MINUTE IN CASE IT IS STILL STARTING UP... ${NC}\n" sleep 60 fi LOCAL_VERSION=$(curl -s localhost:12391/admin/info | grep -oP '"buildVersion":"qortal-\K[^-]*' | sed 's/-.*//' | tr -d '.') REMOTE_VERSION=$(curl -s "https://api.github.com/repos/qortal/qortal/releases/latest" | grep -oP '"tag_name": "v\K[^"]*' | tr -d '.') if [ "$LOCAL_VERSION" -ge "$REMOTE_VERSION" ]; then echo "${GREEN} Local version is higher than or equal to the remote version, no qortal updates needed... continuing...${NC}\n" return 1 else echo "${YELLOW} Updating Qortal Core to version $REMOTE_VERSION... ${NC}\n" return 0 fi } download_qortal_core() { if [ $SHOULD_UPDATE_QORTAL -eq 0 ]; then cd if [ -d qortal ]; then echo "${PURPLE} qortal DIRECTORY FOUND, BACKING UP ORIGINAL TO '~/backups' AND RE-INSTALLING ${NC}\n" mkdir -p ~/backups mv -f ~/qortal ~/backups/ fi curl -L -O https://github.com/Qortal/qortal/releases/latest/download/qortal.zip unzip qortal*.zip rm -rf qortal*.zip cd ~/qortal rm -rf settings.json curl -L -O https://raw.githubusercontent.com/crowetic/QORTector-scripts/main/settings.json chmod +x *.sh curl -L -O https://raw.githubusercontent.com/Qortal/qortal/master/tools/qort chmod +x qort echo "$REMOTE_VERSION" > version.txt cd fi } download_qortal_ui() { ARCHITECTURE=$(uname -m) if [ -f ~/qortal/Qortal-UI ]; then echo "${PURPLE} PREVIOUS Qortal-UI FOUND, BACKING UP ORIGINAL TO '~/backups/' AND RE-INSTALLING ${NC}\n" mv ~/qortal/Qortal-UI ~/backups/ fi cd ~/qortal if [ "$ARCHITECTURE" = "aarch64" ] || [ "$ARCHITECTURE" = "arm64" ]; then curl -L -O https://github.com/Qortal/qortal-ui/releases/latest/download/Qortal-Setup-arm64.AppImage mv Qortal-Setup-arm64.AppImage Qortal-UI else curl -L -O https://github.com/Qortal/qortal-ui/releases/latest/download/Qortal-Setup-amd64.AppImage mv Qortal-Setup-amd64.AppImage Qortal-UI fi chmod +x Qortal-UI cd } download_other_files() { echo "${YELLOW} DOWNLOADING PICTURE FILES AND OTHER SCRIPTS ${NC}\n" cd curl -L -O https://cloud.qortal.org/s/t4Fy8Lp4kQYiYZN/download/Machine-files.zip curl -L -O https://raw.githubusercontent.com/crowetic/QORTector-scripts/main/refresh-qortal.sh curl -L -O https://raw.githubusercontent.com/crowetic/QORTector-scripts/main/auto-fix-qortal.sh curl -L -O https://raw.githubusercontent.com/crowetic/QORTector-scripts/main/check-qortal-status.sh curl -L -O https://raw.githubusercontent.com/crowetic/QORTector-scripts/main/start-qortal.sh chmod +x *.sh curl -L -O https://cloud.qortal.org/s/6d8qoEkQRDSCTqn/download/rebuilt-machine-setup.txt mv -f ~/rebuilt-machine-setup.txt ~/Desktop if [ -d ~/Pictures/wallpapers ]; then echo "${PURPLE} PREVIOUS wallpapers folder FOUND, BACKING UP ORIGINAL TO '~/backups/' AND RE-INSTALLING ${NC}\n" mkdir -p ~/backups mv -f ~/Pictures/wallpapers ~/backups/ fi if [ -d ~/Pictures/icons ]; then echo "${PURPLE} PREVIOUS icons folder FOUND, BACKING UP ORIGINAL TO '~/backups/' AND RE-INSTALLING ${NC}\n" mkdir -p ~/backups mv -f ~/Pictures/icons ~/backups/ fi unzip Machine-files.zip mv -f ~/Machine-files/Pictures ~/Pictures/ } setup_cron_jobs() { echo "${YELLOW} SETTING UP CRON JOBS ${NC}\n" username=$(whoami) echo "@reboot sleep 399 && /home/${username}/auto-fix-qortal.sh > \"/home/${username}/qortal/auto-fix-startup.log\" 2>&1" >> "rebuilt-machine-cron" echo "1 1 */3 * * /home/${username}/auto-fix-qortal.sh > \"/home/${username}/qortal/auto-fix-01.log\" 2>&1" >> "rebuilt-machine-cron" chmod +x *.sh crontab rebuilt-machine-cron rm -rf Machine-files Machine-files.zip rebuilt-machine-cron } finish_up() { echo "${YELLOW} SCRIPT EXECUTION FOR INSTALL SCRIPT COMPLETE.${NC} ${RED}RESTARTING MACHINE IS RECOMMENDED.${NC}${GREEN} IF YOU ARE RUNNING THE GATEWAY NODE SETUP SCRIPT IT SHOULD CONTINUE NOW ON ITS OWN. ${NC}\n" } # Main script execution check_distro check_display update_and_install_packages check_qortal_version SHOULD_UPDATE_QORTAL=$? download_qortal_core download_qortal_ui download_other_files setup_cron_jobs finish_up