#!/bin/bash ######################################################################## # Author: Fred (support@qo-op.com) # Version: 2020.03.21 # 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##*/}" echo ' ######################################################################## # \\/// # qo-op ############# '$MY_PATH/$ME' ######################################################################## # ex: ./'$ME' # Initialize G1SSB + SSB About + IPFS Node publish ######################################################################## o__ __o __o o__ __o o__ __o o__ __o /v v\ __|> /v v\ /v v\ <| v\ /> <\ | /> <\ /> <\ / \ <\ o/ _\o____ _\o____ \o/ o/ <| _\__o__ | \_\__o__ \_\__o__ |__ _<| \\ | < > \ \ | \ \ / | \ / \ / / o o o o o o o | o <\__ __/> __|>_ <\__ __/> <\__ __/> / \ __/> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ # [ASTROPORT](https://astroport.com) ######################################################################## ' ######################################################################## # ENVIRONEMENT DETECTION + IPFS ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_info ######################################################################## YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1); IPFSNODEID=$(ipfs id -f='\n') [[ $IPFSNODEID == "" ]] && echo "ERROR missing IPFS Node id !! IPFS is not installed !?" && exit 1 ######################################################################## WHOAMI=$(sbotc whoami 2>/dev/null | jq -r .id) [[ $WHOAMI == "" ]] && echo "ERROR sbotc NOT running !! Please check it..." && exit 1 ######################################################################## [[ ! -f ~/.ssb/secret.dunikey ]] && $MY_PATH/tools/secret2dunikey.sh G1PUB=$(cat ~/.ssb/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) [[ $G1PUB == "" ]] && echo "ERROR G1PUB empty !! Please check it..." && exit 1 ######################################################################## # GET NODE disk performance. TODO, publish and use as IPFS repartition echo "DISK SIZE AVAILABLE & PERFORMANCE TESTING" [[ -f ~/.zen/test.disk ]] && rm -f ~/.zen/test.disk diskperf=$(dd if=/dev/zero of=~/.zen/test.disk bs=10M count=1 oflag=dsync 2>&1 | tail -n 1 | sed s/\,\ /\ -/g | cut -d '-' -f 4) # echo $diskperf sizeAvail=$(df -h ~/.ipfs/ | tail -n 1 | awk '{print $4}') # IPFS LOCAL REPOSITORY for Node Identity G1 + SSB mkdir -p ~/.zen/ipfs/.$IPFSNODEID/G1SSB # SSB PUBLISH EXTRA ipfs informations !! # TODO CHECK FOR NOT MAKING DOUBLE PUBLICATION (lower noisy init) # This SSB messages are read by ./zen/ssb_IPFS_swarm.sh to build your IPFS #Swarm0 sbotc publish '{"type":"ipfsnodeid","text":"'"$(ipfs id -f='\n')"'"}' # PUBLISH default "eth" NOT isLAN IP addresses for ./zen/ssb_IPFS_swarm.sh tryme=$(ipfs id | jq -r .Addresses[] | tail -n 1 ) isLAN=$(echo $tryme | cut -f3 -d '/' | grep -E "/(^127\.)|(^192\.168\.)|(^fd42\:)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1$)|(^[fF][cCdD])/") [[ ! $isLAN ]] && sbotc publish '{"type":"ipfstryme","text":"'"$tryme"'"}' trymev4=$(ipfs id | jq -r .Addresses[] | grep $(hostname -I | cut -f 1 -d ' ')) isLANv4=$(echo $trymev4 | cut -f3 -d '/' | grep -E "/(^127\.)|(^192\.168\.)|(^fd42\:)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1$)|(^[fF][cCdD])/") [[ $isLAN && ! $isLANv4 ]] && sbotc publish '{"type":"ipfstryme","text":"'"$trymev4"'"}' && tryme="$trymev4" trymev6=$(ipfs id | jq -r .Addresses[] | grep $(hostname -I | cut -f 2 -d ' ')) isLANv6=$(echo $trymev6 | cut -f3 -d '/' | grep -E "/(^127\.)|(^192\.168\.)|(^fd42\:)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1$)|(^[fF][cCdD])/") [[ $isLAN && $isLANv4 && ! $isLANv6 ]] && sbotc publish '{"type":"ipfstryme","text":"'"$trymev6"'"}' && tryme="$trymev6" ################################ # ADD Cesium+ informations CESIUM="https://g1.data.le-sou.org" # PREPARE title # Made from Cesium+ profile tittle and city OR user@hostname title=$(curl -s ${CESIUM}/user/profile/${G1PUB} | jq -r '._source.title') [[ -f ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_uidna ]] && uidna=$(cat ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_uidna) # Put in .$IPFSNODEID INDEX: _g1.uidna & _g1.cesium_name (used by Minetest flavour and others) [[ $uidna ]] && echo "$uidna" > ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.uidna [[ $title ]] && echo "$title" > ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.cesium_name [[ $uidna ]] && [[ "$title" == "null" ]] && title="Station $uidna" [[ "$title" == "null" ]] && title="Station $USER@$(cat /etc/hostname)" city=$(curl -s ${CESIUM}/user/profile/${G1PUB} | jq -r '._source.city') [[ "$city" != "null" ]] && title="$title in $city" # ADD "cesium_geoPoint.lat" AND "cesium_geoPoint.lon" messages in SSB feed # This way any SSB account is connected to its Cesium+ Geolocalisation. geopointlat=$(curl -s ${CESIUM}/user/profile/${G1PUB} | jq '._source.geoPoint.lat') [[ $geopointlat != null ]] && sbotc publish '{"type":"cesium_geoPoint.lat","text":"'"$geopointlat"'"}' geopointlon=$(curl -s ${CESIUM}/user/profile/${G1PUB} | jq '._source.geoPoint.lon') [[ $geopointlon != null ]] && sbotc publish '{"type":"cesium_geoPoint.lon","text":"'"$geopointlon"'"}' # REFRESH Cesium+ Avatar image curl -s ${CESIUM}/user/profile/${G1PUB} | jq -r '._source.avatar._content' | base64 -d > "/tmp/_g1.avatar.png" ## PUBLISH ABOUT MESSAGE ############################################## # PICTURE: IF AVATAR not png take IMAGE of G1 wallet QRCode qrencode -s 5 -o ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.qrcode.png "$G1PUB" imagefile=~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.qrcode.png qrname=${imagefile##*/} qrid="$(sbotc blobs.add < $imagefile)" qrtype="$(file -b --mime-type $imagefile)" qrsize="$(wc -c < $imagefile)" if [[ ! $(file "/tmp/_g1.avatar.png" | grep 'PNG') ]]; then echo "NO Cesium AVATAR - Using G1Pub QRCode" rm -f /tmp/_g1.avatar.png else echo "AVATAR FOUND" imagefile=/tmp/_g1.avatar.png # PUBLISH AVATAR TO IPFS cp /tmp/_g1.avatar.png ~/.zen/ipfs/.$IPFSNODEID/G1SSB/ fi # Prepare QRCode File for SSB (add to blobs) name=${imagefile##*/} id="$(sbotc blobs.add < $imagefile)" type="$(file -b --mime-type $imagefile)" size="$(wc -c < $imagefile)" echo " /\ |_ _ _|_ /--\|_)(_)|_||_ : PUBLISH to SSB feed... $WHOAMI $title $imagefile $id : $type : $size bits " # NOT WORKING, sudo inside !!! #nodename=$(~/.zen/astrXbian/zen/tools/nodename) nodename=$(cat /home/$YOU/.zen/ipfs/.$IPFSNODEID/G1SSB/_nodename) if [[ $nodename == "" ]]; then nodename=$(cat /etc/hostname) extension=$(echo $nodename | cut -d '.' -f 2) if [[ $extension == $nodename ]]; then nodename=$nodename.home fi fi ######################################################################## # DUNITER G1 Wallet balance export LC_ALL=C.UTF-8 #attipix export LANG=C.UTF-8 #attipix DUNITERNODE=$($MY_PATH/tools/duniter_getnode.sh) echo "DEBUG: silkaj -p $DUNITERNODE balance $G1PUB" [[ $DUNITERNODE ]] && g1balance=$(silkaj -p $DUNITERNODE balance $G1PUB 2>&1) || g1balance=$(silkaj balance $G1PUB 2>&1) silkajQuantitativeAmountPattern='Total\sQuantitative\s+=\s+(.*)\s+Ğ1' if [[ $g1balance =~ $silkajQuantitativeAmountPattern ]] then myJune="${BASH_REMATCH[1]}" else myJune="0" fi DUFACTOR=$(bc <<< "scale=2; $(cat /home/$YOU/.zen/_DU) / 100") AMOUNTLOVE=$(bc -l <<< "scale=0; $myJune * 100 / $DUFACTOR") # OLD ssb-server publish # sbot publish --type about --about $WHOAMI --description "[Astroport Node](https://astroport.com) [$IPFSNODEID](http://localhost:8080/ipns/$IPFSNODEID) - Wallet $G1PUB - $diskperf" --name "$title" --image "$id" # NEW sbotc publish to oasis sbotc publish "{\"type\":\"about\",\"about\":\"$WHOAMI\",\"description\":\"![QRCode]($qrid)\\n[Station Astroport](https://astroport.com)\\n - [Mon Marché](https://gchange.fr/#/app/wot/$G1PUB) \\n - [Mon portefeuille ($AMOUNTLOVE :heart:)](https://cesium.app/) \\n Station ID : [$IPFSNODEID](http://localhost:8080/ipns/$IPFSNODEID) \\n Disque: $sizeAvail = $diskperf \\n - [Portail](http://$nodename:10010/) \\n\",\"name\":\"$title\",\"image\":\"$id\"}" # SSB PUBLISH G1 wallet silkaj balance json_escape () { printf '%s' "$1" | python -c 'import json,sys; print(json.dumps(sys.stdin.read()))' } INLINE=$(json_escape "$g1balance") # TODO FIND WHY THIS ***** COMA , IS EVERYWHERE NOT PUBLSHING silkaj # [[ $INLINE ]] && sbotc publish '{"type":"post","text":'$INLINE'}' #INLINE="${g1balance@Q}" #[[ $INLINE ]] && sbotc publish '{"type":"post","text":"'$INLINE'"}' echo " _ _ / \|_) _ _ _| _ \_X| \ (_(_)(_|(/_ ! AVATAR $g1balance ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.qrcode.png -- sbotc publish -- " # IF no AVATAR, publish message with QRCode if [[ ! $(file "/tmp/_g1.avatar.png" | grep 'PNG') ]]; then sleep 1 # sbotc publish '{"type":"post","text":"![QRCode]('"$qrid"')\n Scan QRCode with [Cesium](https://cesium.app).\n Thank you\n ONE :heart:","mentions":[{"link":"'"$id"'","name":"'"$name"'","size":'"$size"',"type":"'"$type"'"}]}' else # Publish only if new avatar if [[ $(diff /tmp/_g1.avatar.png ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.avatar.png) ]]; then sbotc publish '{"type":"post","text":"![Cesium Avatar]('"$id"')\n from my Wallet [Cesium](https://demo.cesium.app/#/app/wot/'"$G1PUB"') '"$G1PUB"'","mentions":[{"link":"'"$id"'","name":"'"$name"'","size":'"$size"',"type":"'"$type"'"}]}' fi fi echo " ___ _ _ __ | |_)|_(_ _. _| _| _|_| | __) (_|(_|(_| ~/.zen/ipfs ipfs ls /ipns/$IPFSNODEID " # COPY NODE G1SSB ID to IPFS echo "$WHOAMI" > ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_ssb.whoami echo "$G1PUB" > ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.pubkey # IPFS Node PUBLISH Adresses so Pub can become bootstrap for ${g1author} ipfs id | jq -r .Addresses[] > ~/.zen/ipfs/.${IPFSNODEID}/Addresses # IPFS Node PUBLISH AgentVersion & repo.stat ipfs id | jq -r .AgentVersion > ~/.zen/ipfs/.${IPFSNODEID}/AgentVersion ipfs repo stat > ~/.zen/ipfs/.${IPFSNODEID}/repo.stat echo "$tryme" > ~/.zen/ipfs/.${IPFSNODEID}/tryme.addr echo "$diskperf" > ~/.zen/ipfs/.${IPFSNODEID}/disk.perf echo $(df ~/.ipfs/ | tail -n 1 | awk '{print $4}') > ~/.zen/ipfs/.${IPFSNODEID}/disk.bytes IWALLETS=$(ipfs add -rHq ~/.zen/ipfs | tail -n 1) NODEIPNS=$(ipfs name publish --allow-offline --quieter /ipfs/$IWALLETS) echo " ipfs ls /ipns/$IPFSNODEID/.$IPFSNODEID/ _ _ _ _ _ (_)_ ____ _(_) |_ __ _| |_(_) ___ _ __ | | _ \ \ / / | __/ _| | __| |/ _ \| _ \ | | | | \ V /| | || (_| | |_| | (_) | | | | |_|_| |_|\_/ |_|\__\__|_|\__|_|\___/|_| |_| # This INVITE is to be sent an to 'Astroport Station' willing to Join our IPFS Swarm. # see 'ssb_SURVEY_contact.sh' for commands executed... " echo "INVITATION LINK (only works in LAN or WAN depending on your Node)" sbotc invite.create 1 2>/dev/null #read ssb_invit_link #sbotc invite.accept $ssb_invit_link exit 0