astroport/zen/ssb_INIT.sh

261 lines
11 KiB
Bash
Raw Normal View History

2020-03-21 05:02:16 +01:00
#!/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
2020-03-22 05:41:24 +01:00
############# '$MY_PATH/$ME'
2020-03-21 05:02:16 +01:00
########################################################################
# ex: ./'$ME'
2020-04-19 11:30:03 +02:00
# Initialize G1SSB + SSB About + IPFS Node publish
2020-03-21 05:02:16 +01:00
########################################################################
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 o | o
<\__ __/> __|>_ <\__ __/> <\__ __/> / \ __/>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# [ASTROPORT](https://astroport.com)
########################################################################
'
2020-03-29 15:44:01 +02:00
2020-03-23 19:07:37 +01:00
########################################################################
# ENVIRONEMENT DETECTION + IPFS ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_info
2020-03-23 19:07:37 +01:00
########################################################################
2020-05-21 00:50:22 +02:00
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='<id>\n')
[[ $IPFSNODEID == "" ]] && echo "ERROR missing IPFS Node id !! IPFS is not installed !?" && exit 1
2020-03-23 19:07:37 +01:00
########################################################################
WHOAMI=$(sbotc whoami 2>/dev/null | jq -r .id)
[[ $WHOAMI == "" ]] && echo "ERROR sbotc NOT running !! Please check it..." && exit 1
2020-03-24 01:20:10 +01:00
########################################################################
[[ ! -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
2020-03-24 01:20:10 +01:00
########################################################################
2020-03-22 04:45:20 +01:00
2020-05-21 00:50:22 +02:00
2020-05-09 02:09:19 +02:00
# GET NODE disk performance. TODO, publish and use as IPFS repartition
2020-05-14 00:47:30 +02:00
echo "DISK SIZE AVAILABLE & PERFORMANCE TESTING"
2020-05-11 04:20:30 +02:00
[[ -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)
2020-05-12 22:26:45 +02:00
# echo $diskperf
sizeAvail=$(df -h ~/.ipfs/ | tail -n 1 | awk '{print $4}')
2020-05-14 00:47:30 +02:00
2020-05-09 02:09:19 +02:00
# IPFS LOCAL REPOSITORY for Node Identity G1 + SSB
mkdir -p ~/.zen/ipfs/.$IPFSNODEID/G1SSB
# SSB PUBLISH EXTRA ipfs informations !!
2020-06-14 23:23:34 +02:00
# TODO CHECK FOR NOT MAKING DOUBLE PUBLICATION (lower noisy init)
2020-05-22 03:42:34 +02:00
# This SSB messages are read by ./zen/ssb_IPFS_swarm.sh to build your IPFS #Swarm0
2020-05-06 19:41:50 +02:00
sbotc publish '{"type":"ipfsnodeid","text":"'"$(ipfs id -f='<id>\n')"'"}'
2020-05-22 03:42:34 +02:00
2020-05-25 21:38:25 +02:00
# PUBLISH default "eth" NOT isLAN IP addresses for ./zen/ssb_IPFS_swarm.sh
tryme=$(ipfs id | jq -r .Addresses[] | tail -n 1 )
2020-05-26 16:47:07 +02:00
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])/")
2020-05-25 21:38:25 +02:00
[[ ! $isLAN ]] && sbotc publish '{"type":"ipfstryme","text":"'"$tryme"'"}'
trymev4=$(ipfs id | jq -r .Addresses[] | grep $(hostname -I | cut -f 1 -d ' '))
2020-05-26 16:47:07 +02:00
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])/")
2020-05-29 02:53:46 +02:00
[[ $isLAN && ! $isLANv4 ]] && sbotc publish '{"type":"ipfstryme","text":"'"$trymev4"'"}' && tryme="$trymev4"
2020-05-25 21:38:25 +02:00
trymev6=$(ipfs id | jq -r .Addresses[] | grep $(hostname -I | cut -f 2 -d ' '))
2020-05-26 16:47:07 +02:00
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])/")
2020-05-29 02:53:46 +02:00
[[ $isLAN && $isLANv4 && ! $isLANv6 ]] && sbotc publish '{"type":"ipfstryme","text":"'"$trymev6"'"}' && tryme="$trymev6"
2020-03-22 04:45:20 +01:00
2020-04-28 04:30:29 +02:00
################################
# ADD Cesium+ informations
CESIUM="https://g1.data.le-sou.org"
2020-04-28 04:30:29 +02:00
2020-05-14 00:47:30 +02:00
# 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"'"}'
2020-05-14 00:47:30 +02:00
# REFRESH Cesium+ Avatar image
curl -s ${CESIUM}/user/profile/${G1PUB} | jq -r '._source.avatar._content' | base64 -d > "/tmp/_g1.avatar.png"
2020-03-21 05:02:16 +01:00
## 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
2020-05-12 18:46:41 +02:00
qrname=${imagefile##*/}
qrid="$(sbotc blobs.add < $imagefile)"
qrtype="$(file -b --mime-type $imagefile)"
qrsize="$(wc -c < $imagefile)"
2020-04-28 04:30:29 +02:00
2020-05-11 04:30:10 +02:00
if [[ ! $(file "/tmp/_g1.avatar.png" | grep 'PNG') ]]; then
2020-05-10 03:51:50 +02:00
echo "NO Cesium AVATAR - Using G1Pub QRCode"
2020-05-11 04:30:10 +02:00
rm -f /tmp/_g1.avatar.png
else
2020-05-10 03:51:50 +02:00
echo "AVATAR FOUND"
2020-05-11 04:30:10 +02:00
imagefile=/tmp/_g1.avatar.png
2020-05-14 00:47:30 +02:00
# PUBLISH AVATAR TO IPFS
cp /tmp/_g1.avatar.png ~/.zen/ipfs/.$IPFSNODEID/G1SSB/
fi
2020-05-10 03:51:50 +02:00
# Prepare QRCode File for SSB (add to blobs)
2020-05-10 03:51:50 +02:00
name=${imagefile##*/}
id="$(sbotc blobs.add < $imagefile)"
type="$(file -b --mime-type $imagefile)"
size="$(wc -c < $imagefile)"
2020-03-24 01:20:10 +01:00
echo "
2020-03-24 01:20:10 +01:00
/\ |_ _ _|_
/--\|_)(_)|_||_ : PUBLISH to SSB feed...
2020-03-21 05:02:16 +01:00
$WHOAMI
2020-05-11 04:33:25 +02:00
$title
$imagefile
$id : $type : $size bits
2020-03-21 05:02:16 +01:00
"
2020-05-20 23:42:40 +02:00
# NOT WORKING, sudo inside !!!
#nodename=$(~/.zen/astroport/zen/tools/nodename)
nodename=$(cat /home/$YOU/.zen/ipfs/.$IPFSNODEID/G1SSB/_nodename)
if [[ $nodename == "" ]]; then
nodename=$(cat /etc/hostname)
2020-05-26 17:01:07 +02:00
extension=$(echo $nodename | cut -d '.' -f 2)
2020-05-20 23:42:40 +02:00
if [[ $extension == $nodename ]]; then
nodename=$nodename.home
fi
2020-05-14 00:47:30 +02:00
fi
########################################################################
# DUNITER G1 Wallet balance
export LC_ALL=C.UTF-8 #attipix
export LANG=C.UTF-8 #attipix
2020-04-28 14:27:25 +02:00
DUNITERNODE=$($MY_PATH/tools/duniter_getnode.sh)
2020-06-15 04:06:27 +02:00
echo "DEBUG: silkaj -p $DUNITERNODE balance $G1PUB"
[[ $DUNITERNODE ]] && g1balance=$(silkaj -p $DUNITERNODE balance $G1PUB 2>&1) || g1balance=$(silkaj balance $G1PUB 2>&1)
2020-05-14 02:59:13 +02:00
silkajQuantitativeAmountPattern='Total\sQuantitative\s+=\s+(.*)\s+Ğ1'
if [[ $g1balance =~ $silkajQuantitativeAmountPattern ]]
then
myJune="${BASH_REMATCH[1]}"
else
2020-06-01 05:04:39 +02:00
myJune="0"
2020-05-14 02:59:13 +02:00
fi
2020-05-11 05:22:57 +02:00
2020-06-01 05:04:39 +02:00
DUFACTOR=$(bc <<< "scale=2; $(cat /home/$YOU/.zen/_DU) / 100")
AMOUNTLOVE=$(bc -l <<< "scale=0; $myJune * 100 / $DUFACTOR")
2020-05-14 03:02:46 +02:00
# 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"
2020-05-14 03:02:46 +02:00
# NEW sbotc publish to oasis
2020-06-01 05:26:19 +02:00
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\"}"
2020-05-14 03:02:46 +02:00
2020-05-10 06:30:06 +02:00
# SSB PUBLISH G1 wallet silkaj balance
2020-05-11 05:22:57 +02:00
json_escape () {
printf '%s' "$1" | python -c 'import json,sys; print(json.dumps(sys.stdin.read()))'
}
INLINE=$(json_escape "$g1balance")
2020-05-14 02:59:13 +02:00
# TODO FIND WHY THIS ***** COMA , IS EVERYWHERE NOT PUBLSHING silkaj
2020-05-14 00:47:30 +02:00
# [[ $INLINE ]] && sbotc publish '{"type":"post","text":'$INLINE'}'
2020-04-28 14:27:25 +02:00
2020-05-11 05:22:57 +02:00
#INLINE="${g1balance@Q}"
#[[ $INLINE ]] && sbotc publish '{"type":"post","text":"'$INLINE'"}'
2020-03-22 04:45:20 +01:00
echo "
_ _
/ \|_) _ _ _| _
2020-04-28 04:00:17 +02:00
\_X| \ (_(_)(_|(/_ ! AVATAR
2020-03-22 04:45:20 +01:00
2020-04-28 14:27:25 +02:00
$g1balance
2020-03-24 01:20:10 +01:00
~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.qrcode.png
2020-03-24 03:10:28 +01:00
-- sbotc publish --
"
2020-04-28 14:27:25 +02:00
# IF no AVATAR, publish message with QRCode
2020-05-11 04:30:10 +02:00
if [[ ! $(file "/tmp/_g1.avatar.png" | grep 'PNG') ]]; then
2020-05-14 02:59:13 +02:00
sleep 1
2020-05-14 00:47:30 +02:00
# 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"'"}]}'
2020-05-10 03:51:50 +02:00
else
2020-05-11 04:38:36 +02:00
# 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"'"}]}'
2020-05-11 04:38:36 +02:00
fi
2020-05-10 03:51:50 +02:00
fi
2020-03-22 04:45:20 +01:00
echo "
2020-03-22 04:45:20 +01:00
___ _ _ __
| |_)|_(_ _. _| _|
2020-03-26 03:20:04 +01:00
_|_| | __) (_|(_|(_|
~/.zen/ipfs
2020-03-22 04:45:20 +01:00
ipfs ls /ipns/$IPFSNODEID
2020-05-11 04:20:30 +02:00
"
# COPY NODE G1SSB ID to IPFS
echo "$WHOAMI" > ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_ssb.whoami
echo "$G1PUB" > ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.pubkey
2020-04-27 22:57:41 +02:00
# IPFS Node PUBLISH Adresses so Pub can become bootstrap for ${g1author}
2020-05-29 02:53:46 +02:00
ipfs id | jq -r .Addresses[] > ~/.zen/ipfs/.${IPFSNODEID}/Addresses
2020-04-27 22:57:41 +02:00
# IPFS Node PUBLISH AgentVersion & repo.stat
2020-05-29 02:53:46 +02:00
ipfs id | jq -r .AgentVersion > ~/.zen/ipfs/.${IPFSNODEID}/AgentVersion
ipfs repo stat > ~/.zen/ipfs/.${IPFSNODEID}/repo.stat
2020-04-27 22:57:41 +02:00
2020-05-29 02:53:46 +02:00
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
2020-04-27 22:57:41 +02:00
IWALLETS=$(ipfs add -rHq ~/.zen/ipfs | tail -n 1)
NODEIPNS=$(ipfs name publish --allow-offline --quieter /ipfs/$IWALLETS)
echo "
ipfs ls /ipns/$IPFSNODEID/.$IPFSNODEID/
2020-03-24 01:20:10 +01:00
_ _ _ _ _
(_)_ ____ _(_) |_ __ _| |_(_) ___ _ __
| | _ \ \ / / | __/ _| | __| |/ _ \| _ \
| | | | \ V /| | || (_| | |_| | (_) | | | |
|_|_| |_|\_/ |_|\__\__|_|\__|_|\___/|_| |_|
2020-03-22 04:45:20 +01:00
# This INVITE is to be sent an to 'Astroport Station' willing to Join our IPFS Swarm.
# see 'ssb_SURVEY_contact.sh' for commands executed...
2020-03-29 16:15:39 +02:00
2020-03-22 04:45:20 +01:00
"
2020-05-11 02:22:36 +02:00
echo "INVITATION LINK (only works in LAN or WAN depending on your Node)"
2020-05-11 02:28:23 +02:00
sbotc invite.create 1 2>/dev/null
2020-05-11 02:22:36 +02:00
#read ssb_invit_link
#sbotc invite.accept $ssb_invit_link
2020-03-29 16:15:39 +02:00
exit 0