Files
Storj_Install_Script_Raspberry/RIS_Storj_autoinstall.sh
2024-10-29 19:39:52 +01:00

281 lines
8.5 KiB
Bash

#!/bin/bash
#################################
# #
# W12 Storj Auto Install Script #
# by RIS #
# #
#################################
ESC_SEQ="\x1b["
COL_RESET=$ESC_SEQ"39;49;00m"
RED=$ESC_SEQ"31;01m"
GREEN=$ESC_SEQ"32;01m"
YELLOW=$ESC_SEQ"33;01m"
BLUE=$ESC_SEQ"34;01m"
MAGENTA=$ESC_SEQ"35;01m"
CYAN=$ESC_SEQ"36;01m"
function spinner {
local pid=$!
local delay=0.75
local spinstr='W12'
#local charwidth=3
while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do
local temp=${spinstr#?}
printf " [%c] " "$spinstr"
local spinstr=$temp${spinstr%"$temp"}
sleep $delay
printf "\b\b\b\b\b\b"
done
printf " \b\b\b\b"
}
function hide_output {
OUTPUT=$(mktemp)
$@ &> $OUTPUT & spinner
E=$?
if [ $E != 0 ]; then
echo
echo FAILED: $@
echo -----------------------------------------
cat $OUTPUT
echo -----------------------------------------
exit $E
fi
rm -f $OUTPUT
}
function apt_install {
PACKAGES=$@
apt_get_quiet install $PACKAGES
}
function restart_service {
hide_output sudo service $1 restart
}
function message_box {
dialog --title "$1" --msgbox "$2" 0 0
}
function input_box {
declare -n result=$4
declare -n result_code=$4_EXITCODE
result=$(dialog --stdout --title "$1" --inputbox "$2" 0 0 "$3")
result_code=$?
}
function input_menu {
declare -n result=$4
declare -n result_code=$4_EXITCODE
local IFS=^$'\n'
result=$(dialog --stdout --title "$1" --menu "$2" 0 0 0 $3)
result_code=$?
}
whiptail --title "RIS Storj Install" --msgbox "Storj Installation wird nun gestartet" 10 50 3>&1 1>&2 2>&3
clear
echo
echo
hide_output sudo apt install screen ufw
hide_output sudo ufw enable
hide_output sudo ufw allow `cat ~/.config/ssh.txt` # SSH für Ref User
hide_output sudo ufw allow 28967/tcp
hide_output sudo ufw allow 14002
hide_output sudo ufw allow 45278 # vnc für Ref User
hide_output sudo ufw allow 28967/udp
if whiptail --title "RIS Storj Install" --yes-button "ok" --no-button "abrechen" --yesno "Achtung! Die Festplatte wird nun gelöscht" 8 78
then
{
clear
echo
echo 25
sleep 2
sudo umount /dev/sda1 2>/dev/null
hide_output sudo fdisk /dev/sda <<EOF
hide_output d
hide_output n
hide_output p
hide_output 1
hide_output
hide_output
hide_output y
hide_output w
EOF
hide_output sudo mkfs.ext4 /dev/sda1 <<EOF
hide_output y
hide_output
EOF
clear
echo 50
sleep 2
sleep 15m
sudo blkid -o value -s UUID /dev/sda1 > ID
sleep 3
sudo su <<HERE
echo "UUID=`cat /home/ubuntu/ID` /mnt/storagenode ext4 defaults,nofail 0 2" >> /etc/fstab
HERE
sleep 6
echo
echo 75
sleep 2
hide_output sudo mkdir /mnt/storagenode
hide_output sudo chown -R ubuntu:ubuntu /mnt/storagenode
hide_output sudo chmod -R 775 /mnt/storagenode
sleep 2
sudo su <<HERE
sudo mount -a
HERE
echo 100
sleep 3
} | whiptail --title "RIS Storj Install" --gauge "Festplatte wird gelöscht, Dauer ca. 15min..." 6 50 0
echo
else
{
echo 25
sleep 1
echo 50
sleep 1
echo 75
sleep 2
echo 100
echo "lade Menü... Bitte Nochmal Ausführen"
} | whiptail --gauge "lade Menü...Bitte Nochmal Ausführen" 6 60 0
M3
fi
echo
echo -e "$YELLOW warte... $COL_RESET"
echo
sudo su <<HERE
echo "dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=LABEL=writable rootfstype=ext4 elevator=deadline rootwait fixrtc quiet splash cgroup_enabenable=memory cgroup_memory=1 swapaccount=1" > /boot/firmware/cmdline.txt
HERE
hide_output curl -L https://github.com/storj/storj/releases/latest/download/identity_linux_arm64.zip -o identity_linux_arm64.zip
hide_output unzip -o identity_linux_arm64.zip
chmod +x identity
sudo mv identity /usr/local/bin/identity
identity create storagenode
hide_output sudo rm -fr ~/storjt
storjt=$(whiptail --title "Storj token Eingabe" --inputbox "bitte token so eingeben -> email:auth_token <-" 20 50 3>&1 1>&2 2>&3)
clear;
echo
echo -e "$RED dein Storj token=$COL_RESET" $storjt
sleep 6
identity authorize storagenode $storjt
echo
grep -c BEGIN ~/.local/share/storj/identity/storagenode/ca.cert
grep -c BEGIN ~/.local/share/storj/identity/storagenode/identity.cert
echo
echo
#fi
whiptail --title "RIS Storj Install" --msgbox "Storj wird eingerichtet" 10 50 3>&1 1>&2 2>&3
echo
clear;
echo
echo -e "$YELLOW warte... $COL_RESET"
echo
hide_output sudo apt-get update 2>/dev/null
hide_output sudo apt-get install ca-certificates curl gnupg lsb-release -y 2>/dev/null
sudo rm -fr /usr/share/keyrings/docker-archive-keyring.gpg 2>/dev/null
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
hide_output sudo apt-get update -y 2>/dev/null
hide_output sudo apt-get install docker-ce docker-ce-cli containerd.io -y 2>/dev/null
hide_output sudo systemctl enable docker.service 2>/dev/null
hide_output sudo usermod -aG docker ubuntu 2>/dev/null
sleep 15
hide_output sudo docker pull storjlabs/storagenode:latest
echo
hide_output sudo rm ~/storjsetup.sh 2>/dev/null
echo
touch ~/storjsetup.sh
cat << "CONFIG" >> ~/storjsetup.sh
sudo docker run --rm -e SETUP="true" \
--mount type=bind,source=/home/ubuntu/.local/share/storj/identity/storagenode,destination=/app/identity \
--mount type=bind,source=/mnt/storagenode,destination=/app/config \
--name storagenode storjlabs/storagenode:latest
CONFIG
echo
sleep 2
bash storjsetup.sh
sleep 5
hide_output rm ~/storjsetup.sh
echo
echo -e "$YELLOW warte... $COL_RESET"
echo
clear
hide_output rm ~/storj.sh
echo
touch ~/storj.sh
cat << "CONFIG" >> ~/storj.sh
sudo docker run -d --restart always --stop-timeout 300 \
-p 28967:28967/tcp \
-p 28967:28967/udp \
-p 14002:14002 \
CONFIG
echo
eth=$(whiptail --inputbox "Bitte deine ETH Wallet Addy eingeben!" 10 50 3>&1 1>&2 2>&3)
clear;
echo
echo -e "$RED deine ETH Addy=$COL_RESET" $eth
sleep 5
echo
echo '-e WALLET='""$eth"" '\' >> ~/storj.sh
echo
mail=$(whiptail --inputbox "Bitte deine E-mail Adresse eingeben!" 10 40 3>&1 1>&2 2>&3)
clear;
echo
echo -e "$RED deine E-mail Addy=$COL_RESET" $mail
sleep 5
clear;
echo '-e EMAIL='""$mail"" '\' >> ~/storj.sh
echo
sdyn=$(whiptail --inputbox "Bitte deine dyndns Adresse eingeben!" 10 40 3>&1 1>&2 2>&3)
clear;
echo
echo -e "$RED deine dyndns Addy=$COL_RESET" $sdyn
sleep 5
clear;
echo '-e ADDRESS='""$sdyn:28967"" '\' >> ~/storj.sh
echo
sfest=$(whiptail --inputbox "Festplatten Grösse in TB - 10% Speicherabzug eingeben! TB mitangeben z.b. 4.5TB" 10 50 3>&1 1>&2 2>&3)
clear;
echo
echo -e "$RED dein Festplattenspeicher=$COL_RESET" $sfest
sleep 5
clear;
echo
echo '-e STORAGE='""$sfest"" '\'>> ~/storj.sh
echo
cat << "CONFIG" >> ~/storj.sh
--memory=800m \
--log-opt max-size=50m \
--log-opt max-file=10 \
--mount type=bind,source=/home/ubuntu/.local/share/storj/identity/storagenode,destination=/app/identity \
--mount type=bind,source=/mnt/storagenode,destination=/app/config \
--name storagenode storjlabs/storagenode:latest
CONFIG
echo
hide_output sudo chmod +x ~/storj.sh
hide_output sh ~/storj.sh
sleep 5
hide_output sudo docker pull storjlabs/watchtower
sleep 5
hide_output sudo docker run -d --restart=always --name watchtower -v /var/run/docker.sock:/var/run/docker.sock storjlabs/watchtower storagenode watchtower --stop-timeout 300s --interval 21600
echo
clear;
echo
echo -e "$GREEN [done] $COL_RESET"
echo
echo -e "$GREEN Dashboard unter deineIP:14002 im Browser erreichbar $COL_RESET"
echo
echo -e "$GREEN Storj Stoppen -> sudo docker stop storagenode $COL_RESET"
echo
echo -e "$GREEN Storj löschen -> sudo docker rm storagenode$COL_RESET"
echo
echo -e "$GREEN Storj neu starten -> sh ~/storj.sh$COL_RESET"
echo
sleep 10
exit