astrXbian/zen/gchange_IPFS_swarm.sh

207 lines
10 KiB
Bash
Raw Normal View History

2020-12-12 01:26:39 +01:00
#!/bin/bash
########################################################################
# Author: Fred (support@qo-op.com)
# Version: 2020.12.03
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
########################################################################
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
ME="${0##*/}"
2021-06-04 23:50:39 +02:00
countMErunning=$(ps auxf --sort=+utime | grep -w $ME | grep -v -E 'color=auto|grep' | wc -l)
[[ $countMErunning -gt 2 ]] && echo "$ME already running $countMErunning time" && exit 0
2021-09-23 03:21:48 +02:00
start=`date +%s`
2021-06-04 23:50:39 +02:00
2021-04-01 17:04:30 +02:00
YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) && [[ ! $YOU ]] && echo "ipfs NOT RUNNING. EXIT" && exit 1
G1PUB=$(cat ~/.zen/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) && [[ ! $G1PUB ]] && echo "ERREUR G1PUB. EXIT" && exit 1
2021-07-10 14:04:16 +02:00
IPFSNODEID=$(ipfs --timeout=20s id -f='<id>\n')
[[ ! $IPFSNODEID ]] && echo 'ERROR missing IPFS Node id !! IPFS is not installed !?' && exit 1
2020-12-12 01:26:39 +01:00
2021-01-31 16:22:46 +01:00
# CLEAN "A_my_swarm.txt" and "A_swarm_map.txt"
2021-05-23 17:21:41 +02:00
if [[ $(cat ~/.zen/A_swarm_map.txt | wc -l) -gt 300 ]]; then
rm -f ~/.zen/A_my_swarm.txt && touch ~/.zen/A_my_swarm.txt
rm -f ~/.zen/A_swarm_map.txt && touch ~/.zen/A_swarm_map.txt
2021-05-23 17:21:41 +02:00
fi
2020-12-12 01:26:39 +01:00
########################################################################
# Force Strict #swarm0 !!?
2021-06-04 05:05:27 +02:00
rm -f /tmp/ipfstryme.*
2021-06-04 05:27:31 +02:00
rm -f ~/.zen/A_Qm_swarm.txt
2021-06-04 05:59:48 +02:00
2020-12-12 01:26:39 +01:00
liking_me_count=0
friend_of_mine_count=0
2021-01-31 17:55:24 +01:00
echo $(date)
2020-12-12 01:26:39 +01:00
########################################################################
# Let's look for Friends and "IPFS swarm connect" with them
########################################################################
rm -f /tmp/liking_me ## FILE WILL BE REFRESHED
2021-05-23 17:21:41 +02:00
# Check liking_me station in my swarm FRIENDS
for swarm_frof in $(ls ~/.zen/ipfs_swarm/.*/FRIENDS/$G1PUB/stars.level | cut -d '/' -f 6 | cut -d '.' -f 2); ## FROM IPFS
2020-12-12 01:26:39 +01:00
do
liking_me=$(~/.zen/astrXbian/zen/tools/ipfs_to_g1.py $swarm_frof)
## PUBLISH /tmp/liking_me for ./tools/add_externIP_to_ipfstryme.sh
echo "$liking_me" >> /tmp/liking_me
2021-09-10 01:08:35 +02:00
do_I_like=$(ls ~/.zen/ipfs/.$IPFSNODEID/FRIENDS/$liking_me 2>/dev/null)
# Get Gchange "liking_me" people list (made by gchange_INIT.sh)
# [[ ! -f /tmp/liking_me ]] && ~/.zen/astrXbian/zen/tools/timeout.sh -t 12 ~/.zen/astrXbian/zen/jaklis/jaklis.py -k ~/.zen/secret.dunikey -n "https://data.gchange.fr" stars | jq -r '.likes[].issuer' > /tmp/liking_me.try && [ ! -s /tmp/liking_me.try ] && cp /tmp/liking_me.try /tmp/liking_me && rm /tmp/liking_me.try
#for liking_me in $(cat /tmp/liking_me | sort | uniq); ## FROM GCHANGE
#do
[[ "$liking_me" == "" || "$liking_me" == "$G1PUB" ]] && continue
# DE TOUS CEUX QUI M'AIMENT JE VAIS LIRE LES MESSAGES pour collecter leurs ipfstryme vers ~/.zen/A_swarm_map.txt
# SI JE SUIS LEUR AMI EN RETOUR, je conserve leur ID dans ~/.zen/A_my_swarm.txt
2021-08-02 08:20:00 +02:00
# Check if my like is reverse
liking_me_count=$((liking_me_count+1))
echo ">>>>>> CHECKING liking_me n° $liking_me_count "
## IPFS WAY TO DO IT (LESS STRESS ON GCHANGE)
2021-09-10 01:08:35 +02:00
rm /tmp/ipfstryme.$liking_me 2>/dev/null
ipfsnodeid=$(~/.zen/astrXbian/zen/tools/g1_to_ipfs.py $liking_me)
echo "Getting /ipns/$ipfsnodeid/.$ipfsnodeid/tryme.addr ..."
ipfs --timeout=30s cat /ipns/$ipfsnodeid/.$ipfsnodeid/tryme.addr > /tmp/ipfstryme.$liking_me
if [[ ! -f /tmp/ipfstryme.$liking_me ]]; then
2021-09-23 03:21:48 +02:00
echo "TIMEOUT : READING 'ipfstryme' message from $liking_me" ## GCHANGE ACCESS
## Get "/tmp/ipfstryme.$liking_me" from Gchange "ipfstryme" message
~/.zen/astrXbian/zen/tools/timeout.sh -t 12 ~/.zen/astrXbian/zen/jaklis/jaklis.py -k ~/.zen/secret.dunikey -n "https://data.gchange.fr" read -n300 -j | jq -r --arg friendKEY "$liking_me" '.[] | select(.pubkey == $friendKEY)' | jq 'select(.title == "ipfstryme")' | jq -r '.content' > /tmp/ipfstryme.$liking_me
fi
2021-05-23 17:21:41 +02:00
2021-06-04 05:59:48 +02:00
## ZOMBIE NODE sends more that 300 ipfstryme ?
## [[ $(cat /tmp/ipfstryme.$liking_me | sort | uniq | wc -l) -gt 300 ]] && echo "THIS NODE IS A ZOMBIE..." && rm -f /tmp/ipfstryme.$liking_me && continue
2021-06-04 05:54:26 +02:00
# CLEAN /tmp/ipfstryme.$liking_me
2021-06-04 05:59:48 +02:00
> /tmp/ipfstryme.clean
for line in $(cat /tmp/ipfstryme.$liking_me | shuf);
2021-06-04 05:54:26 +02:00
do
2021-06-04 05:59:48 +02:00
ipfsnodeid=$(echo $line | rev | cut -d '/' -f 1 | rev)
2021-09-23 03:21:48 +02:00
stationip=$(echo $line | cut -d '/' -f 3)
ping -c 1 -W 1 $stationip 2>&1>/dev/null && sping="OK" || sping="NOK"
echo "## $sping PING $stationip STATION $ipfsnodeid"
2021-06-04 06:07:19 +02:00
[[ $ipfsnodeid == "" ]] && break
[[ ! $(cat /tmp/ipfstryme.clean | grep $ipfsnodeid) ]] && echo $line >> /tmp/ipfstryme.clean
2021-06-04 05:54:26 +02:00
done
2021-08-02 08:20:00 +02:00
2021-06-04 05:54:26 +02:00
cat /tmp/ipfstryme.clean | sort | uniq > /tmp/ipfstryme.$liking_me
cat /tmp/ipfstryme.$liking_me
2021-06-04 05:12:33 +02:00
echo "__________________________________________"
done
2021-04-02 23:26:47 +02:00
2021-06-04 05:13:24 +02:00
for peerline in $(cat /tmp/ipfstryme.* | sort | uniq);
2021-06-04 05:12:33 +02:00
do
echo "======================================================"
# GET $ipfsnodeid FROM $peerline
echo "PEERLINE: $peerline"
ipfsnodeid=${peerline##*/} # http://mywiki.wooledge.org/BashFAQ/100
[[ "$ipfsnodeid" == "" ]] && continue
2021-04-02 23:26:47 +02:00
2021-06-04 05:12:33 +02:00
# GET $whoisg1 FROM $peerline
## Remove Qm ipfs nodes
2021-06-04 05:27:31 +02:00
[[ "${ipfsnodeid:0:2}" != "Qm" ]] && whoisg1=$(~/.zen/astrXbian/zen/tools/ipfs_to_g1.py $ipfsnodeid)
2021-06-04 05:54:26 +02:00
[[ ! $whoisg1 ]] && continue
2021-08-02 08:20:00 +02:00
2021-09-02 14:36:35 +02:00
# KEEPING LAST ipfstryme MESSAGES only (CAN BE REMOVED SOON WHEN FULL IPFS)
2021-06-04 05:12:33 +02:00
nbmessage=0
for messageid in $(~/.zen/astrXbian/zen/tools/timeout.sh -t 12 ~/.zen/astrXbian/zen/jaklis/jaklis.py -k ~/.zen/secret.dunikey -n "https://data.gchange.fr" read -n300 -j | jq -r --arg friendKEY "$whoisg1" '.[] | select(.pubkey == $friendKEY)' | jq 'select(.title == "ipfstryme")' | jq -r '.id')
2021-06-04 05:12:33 +02:00
do
nbmessage=$((nbmessage+1))
[ $nbmessage -gt 1 ] && echo "Delete $nbmessage OLD 'ipfstryme' messages from $whoisg1" && ~/.zen/astrXbian/zen/tools/timeout.sh -t 12 ~/.zen/astrXbian/zen/jaklis/jaklis.py -k ~/.zen/secret.dunikey -n "https://data.gchange.fr" delete -i $messageid
2021-06-04 05:12:33 +02:00
sleep 0.5
done
[[ $nbmessage == 0 ]] && echo "NO ipfstryme MESSAGE from $whoisg1" && echo "$ipfsnodeid" >> ~/.zen/A_dead_swarm.txt && continue
# SEND MESSAGE ~/.zen/astrXbian/zen/jaklis/jaklis.py -k ~/.zen/secret.dunikey -n "https://data.gchange.fr" send -d $whoisg1 -t 'Astroport' -m 'Aucun message de ta part https://copylaradio.com'"
2020-12-12 01:26:39 +01:00
2021-09-23 03:21:48 +02:00
## CHECKING STARS FROM IPNS
2021-09-02 14:36:35 +02:00
starsin=$(ipfs --timeout=10s cat /ipns/$ipfsnodeid/.$ipfsnodeid/FRIENDS/$G1PUB/stars.level)
starsout=$(ipfs --timeout=10s cat /ipns/$IPFSNODEID/.$IPFSNODEID/FRIENDS/$whoisg1/stars.level)
2021-06-04 05:12:33 +02:00
# REFRESH A_swarm_map.txt
echo $peerline >> ~/.zen/A_swarm_map.txt
cat ~/.zen/A_swarm_map.txt | sort | uniq > /tmp/A_swarm_map.txt
cp -f /tmp/A_swarm_map.txt ~/.zen/A_swarm_map.txt
2021-08-02 08:20:00 +02:00
2021-06-04 05:12:33 +02:00
# FRIEND ADDRESS DISCOVERY
echo "Am I friend with my FRIEND friend $whoisg1 ?"
# ipfs cat /ipns/$ipfsnodeid/.$ipfsnodeid/FRIENDS/$G1PUB/tryme.addr # IS my own /ipns/$IPFSNODEID/.$IPFSNODEID/tryme.addr
2021-09-10 01:08:35 +02:00
# GCHANGE : friend_of_mine=$(~/.zen/astrXbian/zen/tools/timeout.sh -t 12 ~/.zen/astrXbian/zen/jaklis/jaklis.py -k ~/.zen/secret.dunikey -n "https://data.gchange.fr" stars -p $whoisg1 | jq -r '.yours.pseudo'); # must contains my XZUID
## LOOKING IN SWARM CACHE
friend_of_mine=$(ls ~/.zen/ipfs/.$IPFSNODEID/FRIENDS/$whoisg1 2>/dev/null)
if [[ $friend_of_mine ]]; then
2021-06-04 05:12:33 +02:00
if [[ ! $(grep "$ipfsnodeid" ~/.zen/A_my_swarm.txt) ]]
then
2021-06-04 05:54:26 +02:00
echo "OK FRIEND"
# COUNT UNIQ FRIENDS
friend_of_mine_count=$((friend_of_mine_count+1))
echo "$peerline" >> ~/.zen/A_my_swarm.txt
2021-09-02 14:36:35 +02:00
# ipfs bootstrap add "$peerline"
## NOW WILL BE USING Peering.Peers config
2021-06-04 05:12:33 +02:00
else
2021-06-04 05:54:26 +02:00
echo "ALREADY RECORDED FRIEND"
2021-06-04 05:12:33 +02:00
fi
2021-09-03 17:59:15 +02:00
## Sync ipfs_swarm
2021-09-23 03:21:48 +02:00
ipfs --timeout=120s get --output=/home/$YOU/.zen/ipfs_swarm/ /ipns/$ipfsnodeid
2021-06-04 05:12:33 +02:00
else
2021-09-10 01:08:35 +02:00
## REMOVE FRIENDS DIRECTORY (should be removed from Astroport App)
2021-06-04 05:12:33 +02:00
echo "NOT FULL FRIEND $ipfsnodeid / $whoisg1"
[[ "$liking_me" != "" ]] && rm -Rf ~/.zen/ipfs/.${IPFSNODEID}/FRIENDS/$liking_me
# SEND ME A MESSAGE TO DECIDE WHAT TO DO ?
# SEND MESSAGE ~/.zen/astrXbian/zen/jaklis/jaklis.py -k ~/.zen/secret.dunikey -n "https://data.gchange.fr" send -d $whoisg1 -t 'Astroport' -m 'Rejoins mon #Swarm0 https://copylaradio.com'"
fi
done;
2021-08-02 08:20:00 +02:00
2020-12-25 20:27:04 +01:00
# UNIQ file
2021-09-23 03:21:48 +02:00
cat ~/.zen/A_my_swarm.txt | rev | sort | uniq | rev > /tmp/A_my_swarm.txt
2020-12-25 20:27:04 +01:00
cp -f /tmp/A_my_swarm.txt ~/.zen/A_my_swarm.txt
2020-12-12 01:26:39 +01:00
2021-09-23 03:21:48 +02:00
cat ~/.zen/A_Qm_swarm.txt | rev | sort | uniq | rev > /tmp/A_Qm_swarm.txt
2021-05-20 15:55:45 +02:00
cp -f /tmp/A_Qm_swarm.txt ~/.zen/A_Qm_swarm.txt
2020-12-12 01:26:39 +01:00
echo "####################################################
I have $friend_of_mine_count friends amoung $liking_me_count liking me people
__________________________________________
My actual #SWARM0"
2021-09-10 01:08:35 +02:00
# ipfs swarm peers
2021-01-31 17:55:24 +01:00
echo $(date)
2020-12-25 18:10:39 +01:00
2021-08-04 01:35:39 +02:00
echo "####################################################"
2021-09-03 17:59:15 +02:00
# ipfs_SWARM_refresh
2021-05-23 17:21:41 +02:00
[[ $(cat ~/.zen/A_my_swarm.txt | wc -l) -gt 0 ]] && ~/.zen/astrXbian/zen/ipfs_SWARM_refresh.sh && exit 0 || echo "SWARM LOST !! "
2021-09-03 17:59:15 +02:00
########################################################################
########################################################################
## ERROR !! SHOULD HAVE exit 0 before !!
2021-05-23 17:21:41 +02:00
########################################################################
## SWARM LOST !! EMERGENCY RECOVERY CODE !!!
2021-05-23 17:21:41 +02:00
########################################################################
2021-05-23 18:30:42 +02:00
ipfs bootstrap > /tmp/ipfs_bootstrap
2021-05-23 17:21:41 +02:00
## REBOOTSTRAP
2021-05-23 18:30:42 +02:00
[[ $(cat /tmp/ipfs_bootstrap | wc -l) -lt 2 ]] && ipfs bootstrap rm --all
2021-05-23 17:21:41 +02:00
for bootnode in $(cat ~/.zen/astrXbian/A_boostrap_nodes.txt | grep -Ev "#") # remove comments
do
ipfsnodeid=${bootnode##*/}
2021-08-02 08:20:00 +02:00
[[ "$ipfsnodeid" != "$IPFSNODEID" ]] && sleep 20 ## RALENTIR DEMARRAGE STATIONS NON BOOTSTRAP
## ADD $bootnode TO BOOTSTRAP
ipfs bootstrap add $bootnode
echo "$bootnode" >> ~/.zen/A_my_swarm.txt
2021-05-23 17:21:41 +02:00
done
## RECONNECT WITH FRIENDS
2021-05-24 00:12:14 +02:00
for g1id in $(ls ~/.zen/ipfs/.$IPFSNODEID/FRIENDS);
do
if [[ -d ~/.zen/ipfs/.$IPFSNODEID/FRIENDS/$g1id ]]; then
ipfsnodeid=$(~/.zen/astrXbian/zen/tools/g1_to_ipfs.py $g1id)
2021-06-04 02:42:23 +02:00
ipfs --timeout=10s swarm connect /ipfs/$ipfsnodeid
[[ $? == 0 ]] && ipfs swarm peers | grep $ipfsnodeid | tail -n 1 >> ~/.zen/A_my_swarm.txt
fi
2021-05-24 00:12:14 +02:00
done
# UNIQ file
cat ~/.zen/A_my_swarm.txt | sort | uniq > /tmp/A_my_swarm.txt
cp -f /tmp/A_my_swarm.txt ~/.zen/A_my_swarm.txt
cp -f ~/.zen/A_my_swarm.txt ~/.zen/A_swarm_map.txt
2021-09-23 03:21:48 +02:00
echo "#### EXCECUTION TIME"
end=`date +%s`
echo Execution time was `expr $end - $start` seconds.
echo "########################################################################"