Advertisement
anonymous0815

Storj Storagenode Creator

Dec 8th, 2022 (edited)
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 12.92 KB | Cryptocurrency | 0 0
  1. #!/bin/bash
  2.  
  3. nmbr=""
  4. ca=""
  5. id=""
  6. proceed=""
  7. directory=""
  8. wallet=""
  9. email=""
  10. address=""
  11. storage=""
  12. porttcp=""
  13. portudp=""
  14. portweb=""
  15. authtoken=""
  16. zkoptin=""
  17. watchtower=""
  18. nodecount=""
  19. #rand=$((1 + $RANDOM % 25))
  20.  
  21. GREEN='\033[1;32m'
  22. YELLOW='\033[1;33m'
  23. RED='\033[1;31m'
  24. NC='\033[0m' # No Color
  25.  
  26. check_if_root(){
  27.   if [ "$EUID" -ne 0 ]
  28.     then
  29.       printf "${RED}Erhöhte Nutzerrechte erforderlich!${NC}\n" && exit 1
  30.   else
  31.     printf "${GREEN}Benutzer ist root, Skript kann gestartet werden!${NC}\n"
  32.   fi
  33. }
  34.  
  35. install_essentials(){
  36.   if apt update && apt upgrade -y>/dev/null 2>&1
  37.     then
  38.       if ! lsb_release
  39.         then
  40.           printf "${YELLOW}Installieren von lsb-release${NC}\n"
  41.           if apt install -y lsb-release>/dev/null 2>&1
  42.             then
  43.               printf "${GREEN}Installation von lsb-release erfolgreich.${NC}\n"
  44.           fi
  45.       fi
  46.   fi
  47. }
  48.  
  49. check_if_debian(){
  50.   if ! [ "$(lsb_release -i | awk '{print $3}')" = "Debian" ]
  51.     then
  52.       printf "${RED}Betriebssystem entspricht nicht Debian, Skript wird abgebrochen!${NC}\n" && exit 1
  53.   else
  54.     printf "${GREEN}Betriebssystem entspricht Debian!${NC}\n"
  55.   fi
  56. }
  57.  
  58. choose_node(){
  59.   while ! [[ "$proceed" =~ ^[yYjJ]+$ ]]
  60.     do
  61.       nmbr=""
  62.       while ! [[ "$nmbr" =~ ^[1-9][0-9]?$|^100$ ]]
  63.         do
  64.           printf "${YELLOW}Wähle Deine zu bearbeitende Storagenode aus, gib eine Zahl ein (Es muss eine Zahl > 0 und <= 100 sein!): ${NC}"
  65.           read nmbr
  66.       done
  67.       printf "\n${YELLOW}Überprüfe Deine Eingaben: ${NC}\n \
  68.      ${YELLOW}Deine zu bearbeitende Storagenode ist:${NC} Storagenode-${nmbr}\n"
  69.       printf "${YELLOW}Fortfahren? Bestätige mit j oder y: ${NC}"
  70.       read proceed
  71.   done
  72. }
  73.  
  74. check_identity_ca(){
  75.   printf "${YELLOW}Überprüfung Identität 1/2${NC}\n"
  76.   ca=$(grep -c BEGIN $(pwd)/storj/identity/storagenode-"$nmbr"/storagenode/ca.cert)
  77. }
  78.  
  79. check_identity_id(){
  80.   printf "${YELLOW}Überprüfung Identität 2/2${NC}\n"
  81.   id=$(grep -c BEGIN $(pwd)/storj/identity/storagenode-"$nmbr"/storagenode/identity.cert)
  82. }
  83.  
  84. set_authtoken(){
  85.   printf "${YELLOW}Gib deinen Auth-Token für${NC} Storagenode-${nmbr} ${YELLOW}ein: ${NC}"
  86.   read authtoken
  87. }
  88.  
  89. set_parameters(){
  90.   while ! [[ "$proceed" =~ ^[yYjJ]+$ ]]
  91.     do
  92.       printf "${YELLOW}Gib den Storj-Speicherpfpad (z.B. /mnt/storj) ein: ${NC}"
  93.         read directory
  94.       printf "\n${YELLOW}Gib die gewünschte Speichergröße(z.B. 2TB oder 2000GB) ein: ${NC}"
  95.         read storage
  96.       printf "\n${YELLOW}Gib deine Ethereum-Wallet (z.B. 0x123456...) ein: ${NC}"
  97.         read wallet
  98.       printf "\n${YELLOW}Gib deine E-Mail-Adresse ein: ${NC}"
  99.         read email
  100.       printf "\n${YELLOW}Gib deine DynDNS-Adresse (z.B. meinedomain.ddns.net) ein: ${NC}"
  101.         read address
  102.       printf "\n${YELLOW}Gib den gewünschten externen TCP-Port (z.B. Standardport 28967) ein: ${NC}"
  103.         read porttcp
  104.       printf "\n${YELLOW}Gib den gewünschten externen UDP-Port (z.B. Standardport 28967) ein: ${NC}"
  105.         read portudp
  106.       printf "\n${YELLOW}Gib den gewünschten Webserver-Port (z.B. Standardport 14002) ein: ${NC}"
  107.         read portweb
  108.       printf "\n${YELLOW}Möchtest Du zksync für deine Wallet aktivieren? (j,y/n): ${NC}"
  109.         read zkoptin
  110.       printf "\n${YELLOW}Möchtest Du den Storj-Watchtower (automatischer Updatedienst) installieren? (j,y/n): ${NC}"
  111.         read watchtower
  112.  
  113.       printf "\n${YELLOW}Überprüfe Deine Eingaben: ${NC}\n \
  114.      Der Storj-Speicherpfad (NICHT die Identität!) lautet: ${directory}\n \
  115.      Die Storagenodekapazität beträgt: ${storage}\n \
  116.      Die Ethereum-Wallet (= STORJ-Wallet) lautet: ${wallet}\n \
  117.      Die E-Mail-Adresse lautet: ${email}\n \
  118.      Der TCP-Port lautet: ${porttcp}\n \
  119.      Der UDP-Port lautet: ${portudp}\n \
  120.      Der Webserver-Port lautet: ${portweb}\n \
  121.      Der Status vom zksyc-opt-in lautet: ${zkoptin}\n \
  122.      Der Status vom Watchtower lautet: ${watchtower}\n"
  123.  
  124.       printf "${YELLOW}Fortfahren? Bestätige mit j oder y: ${NC}"
  125.       read proceed
  126.   done
  127. }
  128.  
  129. install_related_packages(){
  130.   printf "${YELLOW}Installieren von Abhängigkeiten${NC}"
  131.   if ! apt install -y curl unzip apt-transport-https ca-certificates gnupg>/dev/null 2>&1
  132.     then
  133.       printf "${RED}Pakete curl, unzip, apt-transport-https, ca-certificates und gnupg konnten nicht installiert werden, Skript wird abgebrochen!${NC}\n" && exit 1
  134.   fi
  135. }
  136.  
  137. purge_docker(){
  138.   printf "${YELLOW}Deinstallieren vorheriger Docker-Installationen${NC}\n"
  139.   apt purge -y docker docker.io containerd runc docker-engine>/dev/null 2>&1
  140. }
  141.  
  142. make_directory(){
  143.   if find $(pwd)/storj/identity/storagenode-"$nmbr">/dev/null 2>&1
  144.     then
  145.       printf "${GREEN}Identity-Ordner ist bereits vorhanden!${NC}\n"
  146.   else
  147.     printf "${YELLOW}Identity-Ordner ist noch nicht vorhanden, Ordner wird erstellt und anschließend wird eine neue Identität berechnet.${NC}\n"
  148.     mkdir -p $(pwd)/storj/identity/storagenode-"$nmbr"
  149.   fi
  150. }
  151.  
  152. create_identity(){
  153.   printf "\n${YELLOW}Erstellung Storj-Identität${NC}\n"
  154.   if find /usr/local/bin/identity>/dev/null 2>&1
  155.     then
  156.       printf "${GREEN}Identity Binary ist bereits vorhanden, fahre mit Erstellung der Identität fort.${NC}\n"
  157.   else
  158.     printf "${YELLOW}Identity-Binary wird heruntergalden.${NC}\n"
  159.     if curl -L https://github.com/storj/storj/releases/latest/download/identity_linux_amd64.zip -o identity_linux_amd64.zip && unzip -o identity_linux_amd64.zip && chmod +x identity && mv identity /usr/local/bin/identity
  160.       then
  161.         printf "${GREEN}Identity Binary wurde erfolgreich heruntergeladen und entpackt.${NC}\n"
  162.       else
  163.         printf "${RED}Identity-Binary konnte nicht heruntergeladen werden, Skript wird abgebrochen!${NC}\n" && exit 1
  164.     fi
  165.   fi
  166.  
  167.   if identity --identity-dir $(pwd)/storj/identity/storagenode-"$nmbr" --config-dir $(pwd)/storj/identity/storagenode-"$nmbr" create storagenode
  168.     then
  169.       printf "${GREEN}Identität wurde erzeugt!${NC}\n"
  170.   fi
  171. }
  172.  
  173. authorize_identity(){
  174.   if identity --config-dir $(pwd)/storj/identity/storagenode-"$nmbr" --identity-dir $(pwd)/storj/identity/storagenode-"$nmbr" authorize storagenode "$authtoken"
  175.     then
  176.       printf "${GREEN}Deine Identität für ${NC}Storagenode-${nmbr} ${GREEN}wurde authorisiert!${NC}\n"
  177.   else
  178.     printf "${RED}Identität konnte nicht authorisiert werden, Skript wird beendet!${NC}\n" && exit 1;
  179.   fi
  180. }
  181.  
  182. count_nodes(){
  183.   nodecount="$(ls $(pwd)/storj/identity | tr '\n' ' ')"
  184. }
  185.  
  186. add_docker_apt(){
  187.   printf "${YELLOW}Hinzufügen des Docker-Repository${NC}\n";
  188.   if ! find /usr/share/keyrings/docker-archive-keyring.gpg>/dev/null 2>&1
  189.     then
  190.       if curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  191.         then
  192.           printf \
  193.           "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  194.          $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list>/dev/null 2>&1
  195.           if apt update>/dev/null 2>&1
  196.             then
  197.               printf "${GREEN}Docker Repositorys konnten zu apt hinzugefügt werden! ${NC}\n"
  198.           else
  199.             printf "${RED} Neu hinzugefügte Docker-Repositories konnten nicht aktualisiert werden, Skript wird beendet!${NC}" && exit 1
  200.           fi
  201.       else
  202.         printf "${RED}Docker-GPG-Key konnnte nicht installiert werden, Skript wird abgebrochen!${NC}\n" && exit 1
  203.       fi
  204.   fi
  205. }
  206.  
  207. install_docker(){
  208.   if apt install -y docker-ce docker-ce-cli containerd.io>/dev/null 2>&1
  209.     then
  210.       if ! docker rm hello-world-container && docker run --name hello-world-container hello-world && docker rm hello-world-container
  211.         then
  212.           if ! docker run --name hello-world-container hello-world && docker rm hello-world-container
  213.             then
  214.               printf "${RED} Der Container \"hello-world\" konnte nicht ausgeführt werden, Skript wird abgebrochen!${NC}\n" && exit 1
  215.           fi
  216.       fi
  217.   else
  218.     printf "{RED}Pakete docker-ce, docker-ce-cli und containerd.io konnten nicht installiert werden, Skript wird abgebrochen!${NC}\n" && exit 1
  219.   fi
  220. }
  221.  
  222. purge_storagenode(){
  223.   if docker stop storagenode-"$nmbr" && docker rm storagenode-"$nmbr">/dev/null 2>&1
  224.     then
  225.       printf "${GREEN}Das Stoppen und Entfernen der alten Storagenode war erfolgreich.${NC}\n"
  226.   elif docker rm storagenode-"$nmbr">/dev/null 2>&1
  227.     then
  228.       printf "${GREEN}Das Stoppen und Entfernen der alten Storagenode war erfolgreich.${NC}\n"
  229.   elif ! docker ps -a | grep storagenode-"$nmbr">/dev/null 2>&1
  230.     then
  231.       printf "${YELLOW}Alter Container nicht vorhanden, fahre fort.${NC}\n"
  232.       return 0
  233.   else
  234.     printf "${RED}Alter Container konnte nicht entfernt werden, Skript wird abgebrochen!${NC}\n" && exit 1
  235.   fi
  236.  
  237. }
  238.  
  239. pull_storagenode(){
  240.   printf "${YELLOW}Hole Storj-Container${NC}\n"
  241.   if docker pull storjlabs/storagenode:latest
  242.     then
  243.       printf "${GREEN}Installation des Container-Images \"storagenode\" war erfolgreich!${NC}\n"
  244.   else
  245.     printf "${RED}Installation des Container-Images \"storagenode\" war nicht erfolgreich, Skript wird abgebrochen!${NC}\n" && exit 1
  246.   fi
  247. }
  248.  
  249. set_udp_buffersize(){
  250.   if grep -Fxq "net.core.rmem_max=2500000" /etc/sysctl.conf
  251.     then
  252.       printf "${GREEN}UDP-Buffersize ist bereits angepasst!${NC}\n"
  253.   else
  254.     printf "${YELLOW}Passe UDP-Buffer-Größe permanent an${NC}\n";
  255.     printf "net.core.rmem_max=2500000" >> /etc/sysctl.conf
  256.     sysctl -w net.core.rmem_max=2500000
  257.   fi
  258. }
  259.  
  260. initial_storagenode_setup(){
  261.   printf "${YELLOW}Starten der ${NC}storagenode-${nmbr}\n"
  262.   docker run --rm -e SETUP="true" \
  263.     --mount type=bind,source=$(pwd)/storj/identity/storagenode-"$nmbr"/storagenode,destination=/app/identity \
  264.     --mount type=bind,source="$directory"/,destination=/app/config \
  265.     --name storagenode-"$nmbr" storjlabs/storagenode:latest
  266. }
  267.  
  268. replace_config_yaml(){
  269.   if find "$directory"/config.yaml>/dev/null 2>&1
  270.     then
  271.       mv "$directory"/config.yaml config.yaml.old>/dev/null 2>&1
  272.   else
  273.     return 0
  274.   fi
  275. }
  276.  
  277. set_zksync(){
  278.   if [[ "$zkoptin" =~ ^[yYjJ]+$ ]]
  279.     then
  280.       if grep -Fxq "operator.wallet-features: [\"zksync\"]" "$directory"/config.yaml
  281.         then
  282.           printf "zksync ist bereits aktiviert!\n"
  283.       else
  284.         printf "Aktivieren von zksync\n"
  285.         sed -i 's/operator.wallet-features: ""/operator.wallet-features: ["zksync"]/' "$directory"/config.yaml
  286.       fi
  287.   fi
  288. }
  289.  
  290. purge_watchtower(){
  291.   if docker stop watchtower && docker rm watchtower
  292.     then
  293.       printf "${GREEN}Stoppen und Entfernen des alten Watchtowers war erfolgreich!${NC}\n"
  294.   else docker rm watchtower
  295.     then
  296.       printf "${GREEN}Entfernen des alten Watchtowers war erfolgreich!${NC}\n"
  297.   fi    
  298. }
  299.  
  300. install_watchtower(){
  301.   if [[ "$watchtower" =~ ^[yYjJ]+$ ]]
  302.     then
  303.       printf "${YELLOW}Installieren des Watchtowers zur automatischen Aktualisierung der Node${NC}\n"
  304.       if docker pull storjlabs/watchtower && docker run -d --restart=always --name watchtower -v /var/run/docker.sock:/var/run/docker.sock storjlabs/watchtower "$nodecount" watchtower --stop-timeout 300s
  305.         then
  306.           printf "${GREEN}Der Watchtower-Container wurde erfolgreich installiert\!${NC}\n"
  307.       else
  308.           printf "${YELLOW}Der Watchtower-Container konnte nicht installiert werden. Fahre ohne fort.${NC}\n"
  309.       fi
  310.   else
  311.     printf "${YELLOW}Der Watchtower-Container wird nicht installiert, da nicht gewünscht.${NC}\n"
  312.   fi
  313. }
  314.  
  315. final_storagenode_setup(){
  316.   docker run -v -it -d --restart unless-stopped --stop-timeout 300 \
  317.    -p "$porttcp":28967/tcp \
  318.    -p "$portudp":28967/udp \
  319.    -p "$portweb":14002 \
  320.    -e WALLET="$wallet" \
  321.    -e EMAIL="$email" \
  322.    -e ADDRESS="$address":"$porttcp" \
  323.    -e STORAGE="$storage" \
  324.    --mount type=bind,source=$(pwd)/storj/identity/storagenode-"$nmbr"/storagenode,destination=/app/identity \
  325.    --mount type=bind,source="$directory"/,destination=/app/config --name storagenode-"$nmbr" storjlabs/storagenode:latest
  326. }
  327.  
  328. main(){
  329.   check_if_root && install_essentials && check_if_debian && choose_node && proceed="" && set_parameters && check_identity_ca && check_identity_id
  330.  
  331.   if [ "$ca" = "2" ] && [ "$id" = "3" ]
  332.     then
  333.       install_related_packages && count_nodes && purge_docker; add_docker_apt && install_docker && pull_storagenode && purge_storagenode && replace_config_yaml && initial_storagenode_setup && set_zksync && purge_watchtower && install_watchtower && set_udp_buffersize && final_storagenode_setup
  334.   else
  335.     set_authtoken && install_related_packages && make_directory && create_identity && authorize_identity && check_identity_ca && check_identity_id && count_nodes && purge_docker; add_docker_apt && install_docker && pull_storagenode && purge_storagenode && replace_config_yaml && initial_storagenode_setup && set_zksync && purge_watchtower && install_watchtower && set_udp_buffersize && final_storagenode_setup
  336.   fi
  337. }
  338.  
  339. main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement