#!/bin/bash ######################################################################## # Author: Fred (support@qo-op.com) # Version: 0.2 # License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) ######################################################################## # AUTOMATIC version of interactive 1stRUNconfig.sh # This script can run from ~/.config/autostart/Astroport_X_config.desktop # IMPORTANT!!! ipfs MUST BE ALREADY RUNNING ######################################################################## # Create secret key files # ~/.zen/secret.june # ~/.zen/secret.dunikey # ~/.zen/secret.ipfs & /tmp/config.ipfs # ~/.zen/ipfs.sync ######################################################################## # CHECK INTERNET CONNECTIVITY & git pull !! [ $(id -u) -eq 0 ] && echo "RUN as root FORBIDDEN. Please run with user: $YOU" && exit 1 rm -f /tmp/A_booting_log.txt ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || (echo "NO GATEWAY CONNEXION" && exit 1) # UPDATE astrXbian code [[ -d ~/.zen/astrXbian ]] && cd ~/.zen/astrXbian && git pull || exit 1 # CHECK IF CONFIG ALREADY DONE !! # ~/.zen/ipfs ~/.zen/secret ~/.zen/ipfs.sync if [[ -f ~/.zen/ipfs.sync ]]; then echo "CONFIG ALREADY DONE.... logging init in /tmp/A_booting_log.txt" source ~/.zen/ipfs.sync # Wait for ipfs to connect to its swarm sleep 20 ~/.zen/astrXbian/zen/gchange_INIT.sh >> /tmp/A_booting_log.txt sleep 10 ~/.zen/astrXbian/zen/gchange_IPFS_swarm.sh >> /tmp/A_booting_log.txt sleep 10 ~/.zen/astrXbian/zen/ipfs_SWARM_refresh.sh >> /tmp/A_booting_log.txt exit 0 fi ######################################################################## ######################################################################## echo "CREATING Gchange credentials" ######################################################################## salt="$(~/.zen/astrXbian/zen/tools/diceware.sh 3 | xargs)" [[ $salt == "" ]] && echo "ERROR" && exit 1 pepper="$(~/.zen/astrXbian/zen/tools/diceware.sh 3 | xargs)" g1_salt="$salt" g1_pepper="$pepper" echo "FILLING /tmp/secret.june with ($g1_salt) ($g1_pepper)" echo "$g1_salt" > /tmp/secret.june echo "$g1_pepper" >> /tmp/secret.june ######################################################################## ######################################################################## echo "CREATING /tmp/secret.dunikey (https://cesium.app WALLET)" ######################################################################## python3 ~/.zen/astrXbian/zen/tools/key_create_dunikey.py "$g1_salt" "$g1_pepper" g1pub=$(cat /tmp/secret.dunikey | grep "pub" | cut -d ' ' -f 2) g1sec=$(cat /tmp/secret.dunikey | grep "sec" | cut -d ' ' -f 2) ######################################################################## ######################################################################## echo "CREATING /tmp/config.ipfs" ######################################################################## ipfs_ID=$(python3 ~/.zen/astrXbian/zen/tools/create_ipfsnodeid_from_tmp_secret.dunikey.py) echo $ipfs_ID > /tmp/secret.ipfs && source /tmp/secret.ipfs [[ $PrivKEY == "" ]] && echo "ERROR" && exit 1 jq -r --arg PeerID "$PeerID" '.Identity.PeerID=$PeerID' ~/.ipfs/config > /tmp/config.tmp jq -r --arg PrivKEY "$PrivKEY" '.Identity.PrivKey=$PrivKEY' /tmp/config.tmp > /tmp/config.ipfs rm /tmp/config.tmp # IPFSNODEID IPFSNODEID=$PeerID echo "IPFSNODEID=$IPFSNODEID" ## Declare directory transfered in IPFS IPFS_sync_directory="$HOME/astroport" mkdir -p $IPFS_sync_directory ######################################################################## # INSTALL KEYS ######################################################################## echo "INSTALL crypto identity in ~/.zen" timestamp=$(date -u +%s%N | cut -b1-13) [[ -f ~/.zen/secret.june ]] && mv ~/.zen/secret.june ~/.zen/secret.june.old.$timestamp mv /tmp/secret.june ~/.zen/secret.june [[ -f ~/.zen/secret.dunikey ]] && mv ~/.zen/secret.dunikey ~/.zen/secret.dunikey.old.$timestamp mv /tmp/secret.dunikey ~/.zen/secret.dunikey [[ -f ~/.zen/secret.ipfs ]] && mv ~/.zen/secret.ipfs ~/.zen/secret.ipfs.old.$timestamp mv /tmp/secret.ipfs ~/.zen/secret.ipfs #[[ -f ~/.ipfs/config ]] && mv ~/.ipfs/config ~/.ipfs/config.old.$timestamp mv /tmp/config.ipfs ~/.ipfs/config ######################################################################## echo "INIT ~/.zen/ipfs/.${IPFSNODEID} INDEX" ######################################################################## rm -Rf ~/.zen/ipfs mkdir -p ~/.zen/ipfs/.${IPFSNODEID}/G1SSB ######################################################################## # Give $XZUID to your (gchange friends) to add in Vstream Astroport and access your sharings # IPNS link to "pastebin list" http://localhost:8181/ipns/$IPNSKEY/xbian/$XZUID ######################################################################## XZUID=$(~/.zen/astrXbian/zen/tools/diceware.sh 1 | xargs)${RANDOM:0:2}$(~/.zen/astrXbian/zen/tools/diceware.sh 1 | xargs) echo "SETTING GCHANGE+ PROFILE NAME = $XZUID" mkdir -p ~/.zen/ipfs/xbian/${IPFSNODEID} echo "$XZUID" > ~/.zen/ipfs/.${IPFSNODEID}/_xbian.zuid ######################################################################## ######################################################################## echo "CREATING GCHANGE+/CESIUM+ PROFILE" ######################################################################## ~/.zen/astrXbian/zen/jaklis/jaklis.py -n "https://data.gchange.fr" set --name "$XZUID" --avatar "/home/$USER/.zen/astrXbian/logo.png" #GCHANGE+ ~/.zen/astrXbian/zen/jaklis/jaklis.py -n "https://g1.data.e-is.pro" set --name "$XZUID" --avatar "/home/$USER/.zen/astrXbian/logo.png" #CESIUM+ ### REVERT # ~/.zen/astrXbian/zen/jaklis/jaklis.py -n "https://g1.data.e-is.pro" erase # ~/.zen/astrXbian/zen/jaklis/jaklis.py -n "https://data.gchange.fr" erase ######################################################################## ######################################################################## echo "BECOME FRIEND with A_boostrap_nodes.txt" ######################################################################## for g1node in $(cat ~/.zen/astrXbian/A_boostrap_nodes.txt | grep -Ev "#") # remove comments do if [[ $g1node != "" ]]; then echo "LINKING TO BOOTSTRAP NODE : $g1node" ~/.zen/astrXbian/zen/jaklis/jaklis.py -n "https://g1.data.e-is.pro" like -p $g1node -s 5 ~/.zen/astrXbian/zen/jaklis/jaklis.py -n "https://data.gchange.fr" like -p $g1node -s 5 ### REVERT # ~/.zen/astrXbian/zen/jaklis/jaklis.py -n "https://g1.data.e-is.pro" unlike -p 2jQUH4HfHxdTesjCjvMCx1VJgA5AnpuvrWRq1swfRdsS # ~/.zen/astrXbian/zen/jaklis/jaklis.py -n "https://data.gchange.fr" unlike -p 2jQUH4HfHxdTesjCjvMCx1VJgA5AnpuvrWRq1swfRdsS fi done ######################################################################## echo "RESTARTING ipfs" ######################################################################## sudo service ipfs restart echo ".... WAIT for SWARM to connect ..." sleep 10 echo ".... ACTUAL SWARM PEERS ..." ipfs swarm peers ######################################################################## echo 'UPDATING ~/.bashrc' ######################################################################## ~/.zen/astrXbian/.install/update_bashrc.sh "$XZUID" echo "UPGRADING ~/.kodi" cp -Rf ~/.zen/astrXbian/.install/.kodi ~/ # cp -f ~/.zen/astrXbian/.install/.kodi/addons/plugin.video.vstream/resources/sites/astroport.py \ # ~/.kodi/addons/plugin.video.vstream/resources/sites/astroport.py echo "Configure .kodi/addons/plugin.video.vstream/resources/sites/astroport.py" # CREATE xbian IPNSKEY used to publish ~/.zen/ipfs_swarm/xbian (contains all XZUID pastebin files) ipfs key rm xbian IPNSKEY=$(ipfs key gen xbian) sed -i "s/_IPNSKEY_/$IPNSKEY/g" ~/.bashrc sed -i "s/_PROFIL_/$XZUID/g" ~/.kodi/addons/plugin.video.vstream/resources/sites/astroport.py sed -i "s/_LOGIN_/$salt/g" ~/.kodi/addons/plugin.video.vstream/resources/sites/astroport.py sed -i "s/_MDP_/$pepper/g" ~/.kodi/addons/plugin.video.vstream/resources/sites/astroport.py sed -i "s/_IPFSNODEID_/$IPFSNODEID/g" ~/.kodi/addons/plugin.video.vstream/resources/sites/astroport.py #BACKUP source... to restore after Vstream upgrade cp -f ~/.kodi/addons/plugin.video.vstream/resources/sites/astroport.py ~/.zen/ # ADD DESKTOP SHORTCUT [[ "$USER" != "xbian" && -d ~/Bureau ]] && sed "s/_USER_/$USER/g" ~/.zen/astrXbian/.install/astroport.desktop > ~/Bureau/astroport.desktop && chmod +x ~/Bureau/astroport.desktop ######################################################################## echo 'Sending "ipfstryme" message' ######################################################################## ~/.zen/astrXbian/zen/tools/add_externIP_to_ipfstryme.sh ######################################################################## echo 'Sending \"ipfstryme\" message to BOOTSTRAP nodes' # Add bootstrap in A_boostrap_nodes.txt ######################################################################## for g1node in $(cat ~/.zen/astrXbian/A_boostrap_nodes.txt | grep -Ev "#") # remove comments do if [[ $g1node != "" ]]; then echo "SENDING ipfstryme to BOOTSTRAP node : $g1node" # ~/.zen/astrXbian/zen/jaklis/jaklis.py -n "https://g1.data.le-sou.org" send -d $g1node -t "ipfstryme" -f ~/.zen/ipfs/.${IPFSNODEID}/tryme.addr ~/.zen/astrXbian/zen/jaklis/jaklis.py send -d $g1node -t "ipfstryme" -f ~/.zen/ipfs/.${IPFSNODEID}/tryme.addr fi done ######################################################################## echo "Synchronize GCHANGE+ with IPFS SWARM" ######################################################################## ~/.zen/astrXbian/zen/gchange_IPFS_swarm.sh ~/.zen/astrXbian/zen/ipfs_SWARM_refresh.sh ######################################################################## echo 'Installing Astroport cron_MINUTE' ######################################################################## ~/.zen/astrXbian/zen/cron_VRFY.sh ######################################################################## #echo "CHANGE hostname" ######################################################################## #myname=$(hostname) #sudo sed -i "s/$myname/$XZUID/g" /etc/hostname #sudo sed -i "s/$myname/$XZUID/g" /etc/hosts ######################################################################## echo "Changing your DNS with https://FFDN.org and https://opennic.org" # Avoid provider restrictions ######################################################################## sudo chattr -i /etc/resolv.conf sudo cat > /tmp/resolv.conf < ~/.zen/ipfs.sync # RESIZING / partition # sudo btrfs filesystem resize max / ######################################################################## echo "Activating ipfs DHT optimisations" ######################################################################## # DHT gossip PUBSUB mode ipfs config Pubsub.Router gossipsub # MAXSTORAGE = 1/2 available availableDiskSize=$(df -P ~/ | awk 'NR>1{sum+=$4}END{print sum}') diskSize="$((availableDiskSize / 2))" ipfs config Datastore.StorageMax $diskSize # Activate Rapid "ipfs p2p" ipfs config --json Experimental.Libp2pStreamMounting true ipfs config --json Experimental.P2pHttpProxy true # MAKE DEFAULT BOOTSTRAP TO oasis.astroport.com (2jQUH4HfHxdTesjCjvMCx1VJgA5AnpuvrWRq1swfRdsS) ########### ipfs bootstrap rm --all ipfs bootstrap add /dnsaddr/oasis.astroport.com/tcp/4001/ipfs/12D3KooWBYme2BsNUrtx4mEdNX6Yioa9AV7opWzQp6nrPs6ZKabN ipfs bootstrap add /ip4/51.15.166.54/tcp/4001/p2p/12D3KooWBYme2BsNUrtx4mEdNX6Yioa9AV7opWzQp6nrPs6ZKabN ipfs bootstrap add /ip4/51.15.166.54/udp/4001/quic/p2p/12D3KooWBYme2BsNUrtx4mEdNX6Yioa9AV7opWzQp6nrPs6ZKabN ipfs bootstrap add /ip6/fe80::208:a2ff:fe0c:20d8/tcp/4001/p2p/12D3KooWBYme2BsNUrtx4mEdNX6Yioa9AV7opWzQp6nrPs6ZKabN # AVOID CONFLICT WITH KODI REMOTE ipfs config Addresses.Gateway "/ip4/127.0.0.1/tcp/8181" # RESTRICT $USER NOPASSWD sudo to fail2ban-client ONLY echo "$USER ALL=(ALL) NOPASSWD:/usr/bin/fail2ban-client" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/fail2ban-client') ######################################################################## # echo 'ONLY XBIAN REBOOT NOW...' ######################################################################## [[ "$USER" == "xbian" ]] && sudo reboot exit 0