forked from STI/Astroport.ONE
Astroport Ŋ1 exploration
This commit is contained in:
parent
855aaef437
commit
5c9f61df93
|
@ -0,0 +1,15 @@
|
|||
#!/bin/bash
|
||||
########################################################################
|
||||
# Version: 0.4
|
||||
# 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##*/}"
|
||||
|
||||
## AUTONOMOUS BOT
|
||||
# SEARCH FOR "voeu" TAG to create "g1voeu" TW
|
||||
# PLAYER G1VOEU NAME is considered as "tag" searh in Ŋ1
|
||||
# PARAM = tag / PLAYER
|
||||
# Search for "g1tag"
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
#!/bin/bash
|
||||
########################################################################
|
||||
# Version: 0.4
|
||||
# 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##*/}"
|
||||
|
||||
# Need TW index.html path + IPNS publication Key (available in IPFS keystore)
|
||||
# Search for "voeu" tagged tiddlers to get URL
|
||||
# Use G1VOEUX.sh to create and add TW to PLAYER TW
|
||||
|
||||
INDEX="$1"
|
||||
[[ ! $INDEX ]] && echo "Please provide path to source TW index.html" && exit 1
|
||||
[[ ! -f $INDEX ]] && echo "Fichier TW absent. $INDEX" && exit 1
|
||||
|
||||
PLAYER="$2" ## IPNS KEY NAME - G1PUB - PLAYER ...
|
||||
[[ ! $PLAYER ]] && echo "Please provide IPFS publish key" && exit 1
|
||||
ASTRONAUTENS=$(ipfs key list -l | grep -w $PLAYER | cut -d ' ' -f1)
|
||||
|
||||
myIP=$(hostname -I | awk '{print $1}' | head -n 1)
|
||||
|
||||
## EXPORT FROM PLAYER TW "[tag[voeu]]"
|
||||
rm -f ~/.zen/tmp/voeu.json
|
||||
tiddlywiki --verbose --load ${INDEX} --output ~/.zen/tmp --render '.' 'voeu.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' '[tag[voeu]]'
|
||||
|
||||
## Tous les tiddlers comportant le tag "voeu" lancent la création d'un G1VOEU ayant le titre du Voeu comme génrateur de clef TW (pepper).
|
||||
for VOEU in $(cat ~/.zen/tmp/voeu.json | jq -r '.[].title')
|
||||
do
|
||||
echo "Detected $VOEU"
|
||||
echo "Creating Voeu TW"
|
||||
~/.zen/Astroport.ONE/G1VOEUX.sh "$VOEU" "$PLAYER" "$INDEX"
|
||||
|
||||
|
||||
done
|
|
@ -1,256 +0,0 @@
|
|||
#!/bin/bash
|
||||
########################################################################
|
||||
# Author: Fred (support@qo-op.com)
|
||||
# Version: 2020.04.28
|
||||
# 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##*/}"
|
||||
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
|
||||
|
||||
echo '########################################################################
|
||||
# \\///
|
||||
# qo-op
|
||||
############# '$MY_PATH/$ME'
|
||||
########################################################################
|
||||
# ex: ./'$ME'
|
||||
########################################################################'
|
||||
|
||||
echo "CHOOSE THE WAY YOU ARE GIVING ACCES TO YOUR MEDIAKEY !!"
|
||||
echo "CONCEPT IS HERE. REWRITE NEEDED"
|
||||
exit 1
|
||||
|
||||
########################################################################
|
||||
########################################################################
|
||||
IPFSNODEID=$(cat ~/.ipfs/config | jq -r .Identity.PeerID)
|
||||
[[ ! $IPFSNODEID ]] && echo 'ERROR missing IPFS Node id !! IPFS is not installed !?' && exit 1
|
||||
########################################################################
|
||||
[[ ! -f ~/.zen/secret.dunikey ]] && exit 1
|
||||
G1PUB=$(cat ~/.zen/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2)
|
||||
########################################################################
|
||||
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
|
||||
########################################################################
|
||||
XZUID=$(cat ~/.zen/ipfs/.$IPFSNODEID/.player)
|
||||
# echo "## FRIENDS IPFS PINGing"
|
||||
# for g1pub in $(ls -t ~/.zen/ipfs/.$IPFSNODEID/FRIENDS/); do [[ $g1pub ]] && ipfs ping --timeout=3s -n 3 /ipfs/$(~/.zen/astrXbian/zen/tools/g1_to_ipfs.py $g1pub 2>/dev/null) 2>/dev/null; done
|
||||
|
||||
|
||||
echo "
|
||||
_ _ _ _
|
||||
/ \ / \ / \ / \
|
||||
( I | P | N | S )
|
||||
\_/ \_/ \_/ \_/
|
||||
|
||||
ZENTAG / MEDIAKEY : IPNS REFRESH
|
||||
"
|
||||
echo "I am /ipns/$IPFSNODEID controling and refreshing my MEDIAKEY IPNS"
|
||||
########################################################################
|
||||
# REFRESH IPNS SELF PUBLISH
|
||||
########################################################################
|
||||
# ~/.zen/astrXbian/zen/ipns_self_publish.sh
|
||||
########################################################################
|
||||
|
||||
count=0
|
||||
# [[ ! -d ~/.zen/ipfs/.${IPFSNODEID}/KEY/ ]] && exit 0
|
||||
|
||||
## TAKE CARE OF MY KEY
|
||||
for mediakey in $(ls ~/.zen/ipfs/.${IPFSNODEID}/KEY/ 2>/dev/null | shuf ); # Alternative search
|
||||
do
|
||||
[[ "${mediakey}" == "" ]] && continue ## prevent empty mediakey
|
||||
# [[ ! $(echo "${mediakey}" | grep "TMDB_") ]] && continue ## REFRESH ONLY TMDB (level 1), youtube is level 0
|
||||
IPNSLINK=$(ipfs key list -l | grep ${mediakey} | cut -d ' ' -f 1)
|
||||
[[ "${IPNSLINK}" == "" ]] && continue ## prevent empty IPNSLINK
|
||||
echo "We are refreshing http://127.0.0.1:8080/ipns/${IPNSLINK}"
|
||||
count=$((count+1)) && echo "$count) "
|
||||
FILE_NAME=$(cat ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/.ipfs.filename)
|
||||
TITLE=$(cat ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/.title)
|
||||
|
||||
## REFRESH MORE THAN 6 HOURS TIMESTAMP KEY
|
||||
TIMESTAMP=$(cat ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/.timestamp) # INITIAL TIMESTAMP
|
||||
[[ -f ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/.timestamp ]] && TIMESTAMP=$(cat ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/.timestamp) # LAST REFRESH
|
||||
timestamp=$(date -u +%s%N | cut -b1-13)
|
||||
STAMPDIFF=$((timestamp - TIMESTAMP))
|
||||
echo "Last Update : $(date -d @$TIMESTAMP | cut -b1-10)" # remove millisecond part
|
||||
echo "${mediakey} LAST UPDATED $STAMPDIFF milliseconds AGO"
|
||||
[ $STAMPDIFF -lt 21600000 ] && continue # 6h = 21600000 ms , 10h = 36000000 ms
|
||||
|
||||
source=$(echo $mediakey | cut -d '_' -f 1)
|
||||
|
||||
ANNONCE=$(cat ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/.gchange.ad 2>/dev/null)
|
||||
|
||||
## Use natools to decrypt "/tmp/${mediakey}_filelink.txt
|
||||
[[ -f ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/.ipfs.filelink.natools.encrypt ]] && $MY_PATH/tools/natools.py decrypt -f pubsec -k "$HOME/.zen/secret.dunikey" -i "$HOME/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/.ipfs.filelink.natools.encrypt" -o "/tmp/${mediakey}_filelink.txt"
|
||||
URLENCODE_FILE_NAME=$(cat /tmp/${mediakey}_filelink.txt | rev | cut -d '/' -f 1 | rev | jq -Rr @uri)
|
||||
IPFSREPFILEID=$(cat /tmp/${mediakey}_filelink.txt | rev | cut -d '/' -f 2- | rev | cut -d '/' -f 3)
|
||||
|
||||
echo "IPFS MEDIA link : /ipfs/$IPFSREPFILEID/$URLENCODE_FILE_NAME"
|
||||
|
||||
## TREAT OLD DATA from new_file_in_astroport.sh (LATER can be removed)
|
||||
if [[ ! -f $HOME/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/content.json && -f ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/video.json ]]; then
|
||||
mediakeyfile=$($MY_PATH/tools/give_me_keystore_filename.py $mediakey)
|
||||
$MY_PATH/tools/natools.py privkey -f ipfs-keystore -k $HOME/.ipfs/keystore/$mediakeyfile -F pubsec -o /tmp/${mediakey}.dunikey
|
||||
# PubFromDunikey=$(cat /tmp/${mediakey}.dunikey | grep "sec" | cut -d ' ' -f2 | base58 -d | tail -c+33 | base58)
|
||||
PubFromDunikey=$(cat /tmp/${mediakey}.dunikey | grep "pub" | cut -d ' ' -f2)
|
||||
echo "$PubFromDunikey" > $HOME/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/MEDIAPUBKEY
|
||||
fi
|
||||
|
||||
MEDIAPUBKEY=$(cat $HOME/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/MEDIAPUBKEY)
|
||||
echo "MEDIA G1 WALLET = $MEDIAPUBKEY"
|
||||
BALANCE=$(~/.zen/astrXbian/zen/jaklis/jaklis.py balance -p ${MEDIAPUBKEY}) && [[ $BALANCE == null || "$BALANCE" == "" ]] && BALANCE=0
|
||||
ZENBALANCE=$(echo "100 * $BALANCE" | bc -l | cut -d '.' -f 1)
|
||||
|
||||
TUBELINK="https://tube.copylaradio.com$(cat /tmp/${mediakey}_filelink.txt)"
|
||||
LOCALTUBELINK="http://127.0.0.1:8080$(cat /tmp/${mediakey}_filelink.txt)"
|
||||
|
||||
### IPNS LINK CAN EVOLVE (REFRESH EVERY 12 H TO MAINTAIN ALIVE IN THE SWARM)
|
||||
### This index.html is ipns link root, 1st welcome page for MEDIAKEY -> *** Redirect to CONTRACTS or LOGIN processing HERE ***
|
||||
|
||||
echo "=======> Mediakey Welcome index.html
|
||||
IPNSLINK=$IPNSLINK
|
||||
IPFSNODEID=$IPFSNODEID
|
||||
XZUID=$XZUID
|
||||
G1PUB=$G1PUB
|
||||
TITLE=$TITLE"
|
||||
cat /home/$YOU/.zen/astrXbian/www/boris/youtube_watch_step2.html \
|
||||
| sed "s/\${IPNSLINK}/$IPNSLINK/g" \
|
||||
| sed "s/\${IPFSNODEID}/$IPFSNODEID/g" \
|
||||
| sed "s/\${XZUID}/$XZUID/g" \
|
||||
| sed "s/\${G1PUB}/$G1PUB/g" \
|
||||
| sed "s/\${TITLE}/$TITLE/g" \
|
||||
> /tmp/${mediakey}_index.html
|
||||
mv /tmp/${mediakey}_index.html ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/index.html
|
||||
|
||||
[ ! -s ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/index.html ] && echo "Problem creating ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/index.html. EXIT" && exit 1
|
||||
|
||||
########################################################################
|
||||
### Scenario are G1PUB subdivized. Thus each friend can establish own contract
|
||||
# ~/.zen/ipfs/.${IPFSNODEID}/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/index.html
|
||||
########################################################################
|
||||
|
||||
## Write KEY id (provide verification)
|
||||
[[ ! -f ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/.id ]] && echo ${mediakey} > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/.id
|
||||
|
||||
## THIS MAKES FRENCH COPY RIGHT LAW RESPECT
|
||||
## LOCALHOST REDIRECT FOR INTERNAL KODI DEFCON 3 (swarm.key) ASTROPORT STATION MODE
|
||||
# echo "<meta charset=\"UTF-8\"><meta http-equiv=\"Refresh\" content=\"0;URL=http://127.0.0.1:8080$(cat /tmp/${mediakey}_filelink.txt)\">" > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/index.html
|
||||
# echo "<meta charset=\"UTF-8\"><meta http-equiv=\"Refresh\" content=\"0;URL=https://tube.copylaradio.com$(cat /tmp/${mediakey}_filelink.txt)\">" > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/index.html
|
||||
|
||||
## DEMO PERIOD
|
||||
## NICE FINAL STREAMING PAGE # TODO ACTIVATE DOWNLOAD FOR AVI or MKV
|
||||
FILETYPE="${LOCALTUBELINK##*.}"
|
||||
MIMETYPE="video/$FILETYPE" && HTMLTAG="video"
|
||||
[[ "$FILETYPE" == "avi" ]] && MIMETYPE="video/x-msvideo"
|
||||
[[ "$FILETYPE" == "mkv" ]] && MIMETYPE="video/x-matroska"
|
||||
[[ "$FILETYPE" == "mp3" ]] && MIMETYPE="audio/mpeg" && HTMLTAG="audio"
|
||||
|
||||
echo "=======> Mediakey Contract index.html "
|
||||
cat /home/$YOU/.zen/astrXbian/www/boris/youtube_watch_step3.html \
|
||||
| sed "s/\${TITLE}/$TITLE/g" \
|
||||
| sed "s/\${IPFSNODEID}/$IPFSNODEID/g" \
|
||||
| sed "s/\${XZUID}/$XZUID/g" \
|
||||
| sed "s/\${IPFSREPFILEID}/$IPFSREPFILEID/g" \
|
||||
| sed "s/\${URLENCODE_FILE_NAME}/$URLENCODE_FILE_NAME/g" \
|
||||
> ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/index.html
|
||||
|
||||
|
||||
if [[ "$source" == "YOUTUBE" ]]
|
||||
then
|
||||
echo "$source"
|
||||
# mutiTUBE - activate .views.counter
|
||||
# echo "<meta http-equiv=\"Refresh\" content=\"0;URL=https://tube.copylaradio.com/ipns/$IPNSLINK/${G1PUB}/go\">" > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/index.html
|
||||
# TODO go/index.php from nginx proxy acting act as gateway (= Easy Round robin DNS tube.copylaradio.com is dynamic IP swap swarm nodes from node performance...)
|
||||
fi
|
||||
# ln -s /$HOME/.zen/astrXbian/www /var/www/astrxbian
|
||||
# Testez vos application à même la blockchain en la copiant dans ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/go/
|
||||
# Proposez de l'ajouter au dépot des applications web2.0 dans ../www/
|
||||
|
||||
########################################################################
|
||||
# EXAMPLE TO ACTIVATE SECURITY : FORCE SIGNATURE VERIFICATION for each sensible file
|
||||
########################################################################
|
||||
echo "~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/.views.counter"
|
||||
if [[ ! -f ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/.views.counter.sign ]]; then
|
||||
echo "0" > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/.views.counter
|
||||
$MY_PATH/tools/natools.py sign -f pubsec -k "$HOME/.zen/secret.dunikey" -i ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/.views.counter -o ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/.views.counter.sign
|
||||
fi
|
||||
|
||||
$MY_PATH/tools/natools.py verify -p "${G1PUB}" -i "$HOME/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/.views.counter.sign" -o "/tmp/verified_msg" && echo "c'est bon" || echo "c'est pas bon"
|
||||
# Each time a station modify .views.counter it signs, log and timestamp then publish new IPNS to swarm.
|
||||
# If a "faulty" blockchain appears (Mediakey collision)...
|
||||
# Message are sent to warn friends they have to manualy validate data conflict and merge back their mutual chain.
|
||||
|
||||
########################################################################
|
||||
## CHAIN & IPNS REFRESH
|
||||
########################################################################
|
||||
# ipfs nanochain progression
|
||||
I=$(ipfs add -qrH ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/ | tail -n 1)
|
||||
echo "CHAIN: $I"
|
||||
OLDCHAIN=$(cat ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/.chain)
|
||||
echo "OLDCHAIN: $OLDCHAIN"
|
||||
if [[ "$OLDCHAIN" != "$I" ]] # MODIFY CHAIN only if something was changed
|
||||
then
|
||||
echo "UPDATING CHAIN"
|
||||
echo "$(date -u +%s%N | cut -b1-13)" > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/.timestamp
|
||||
echo $I > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/.chain
|
||||
fi
|
||||
echo "${mediakey} NAME PUBLISHING "
|
||||
# KEY ZenTag IPNS name publish
|
||||
J=$(ipfs name publish --quieter -k ${mediakey} /ipfs/${I})
|
||||
|
||||
echo "$id REFRESHED ${I}
|
||||
https://tube.copylaradio.com/ipns/$J
|
||||
http://127.0.0.1:8080/ipns/$J"
|
||||
########################################################################
|
||||
########################################################################
|
||||
break ## ONE BY ONE (cron_MINUTE.sh task every 7 mn)
|
||||
done
|
||||
|
||||
########################################################################
|
||||
########################################################################
|
||||
## TAKE CARE OF PIN CREATED THROUGH autoPINfriends.sh
|
||||
## Then refresh MEDIAKEY IPNS/IPFS RELATION
|
||||
## CORRECT ISSUE : https://git.p2p.legal/axiom-team/astrXbian/issues/25
|
||||
########################################################################
|
||||
for ipnslink in $(ls ~/.zen/PIN/*/IPNSLINK 2>/dev/null | shuf ); do
|
||||
ipnsid=$(cat $ipnslink)
|
||||
ipfsid=$(echo $ipnslink | cut -d '/' -f 6)
|
||||
mediakey=$(cat ~/.zen/PIN/${ipfsid}/MEDIAKEY)
|
||||
|
||||
# [[ ! $(echo "${mediakey}" | grep "TMDB_") ]] && continue ## REFRESH ONLY TMDB (level 1), youtube is level 0
|
||||
|
||||
[[ ! $(ipfs key list | grep ${mediakey}) ]] && echo "ERROR MISSING MEDIAKEY" && continue
|
||||
|
||||
## GET ACTUAL IPNS .chain VALUE
|
||||
mkdir -p /tmp/${mediakey}
|
||||
echo "${mediakey} GET IPNS"
|
||||
ipfs get -o /tmp/${mediakey} /ipns/$ipnsid
|
||||
[ $? -ne 0 ] && continue
|
||||
[ ! -s /tmp/${mediakey}/index.html ] && continue ## DO NOT REPUBLISH empty index.html
|
||||
|
||||
## REFRESH MORE THAN 6 HOURS TIMESTAMP KEY
|
||||
TIMESTAMP=$(cat /tmp/${mediakey}/.timestamp 2>/dev/null) # LAST REFRESH
|
||||
[[ ! $TIMESTAMP ]] && TIMESTAMP=$(cat /tmp/${mediakey}/*/.timestamp 2>/dev/null | tail -n 1 ) # INITIAL TIMESTAMP
|
||||
timestamp=$(date -u +%s%N | cut -b1-13)
|
||||
STAMPDIFF=$((timestamp - TIMESTAMP))
|
||||
echo "Last Update : $(date -d @$TIMESTAMP | cut -b1-10)" # remove millisecond part
|
||||
echo "PIN WAS LAST UPDATED $STAMPDIFF milliseconds AGO"
|
||||
[ $STAMPDIFF -lt 39600000 ] && continue # 11h = 39600000 ms / 12h = 43200000 ms
|
||||
|
||||
echo "Refresh MEDIAKEY PIN"
|
||||
NEWIPFS=$(ipfs add -rHq /tmp/${mediakey}/ | tail -n 1)
|
||||
|
||||
## PUBLISH IT
|
||||
ipfs name publish -k ${mediakey} --quieter /ipfs/$NEWIPFS
|
||||
|
||||
echo "$id PIN PUBLISH REFRESHED /ipfs/$NEWIPFS
|
||||
https://tube.copylaradio.com/ipns/$ipnsid
|
||||
http://127.0.0.1:8080/ipns/$ipnsid"
|
||||
|
||||
rm -Rf /tmp/${mediakey}
|
||||
|
||||
break ## DO ONE BY ONE
|
||||
done
|
||||
|
||||
########################################################################
|
Binary file not shown.
After Width: | Height: | Size: 153 KiB |
|
@ -0,0 +1,257 @@
|
|||
#!/bin/bash
|
||||
########################################################################
|
||||
{ # this ensures the entire script is downloaded #
|
||||
MY_PATH="`dirname \"$0\"`" # relative
|
||||
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
|
||||
ME="${0##*/}"
|
||||
|
||||
# CHECK not root user !!
|
||||
if [ "$EUID" -eq 0 ]
|
||||
then echo -e "DO NOT EXECUTE AS root. Choose a user for your Astroport Station (we like pi)"
|
||||
exit 1
|
||||
else echo -e "OK $USER, let's go!";
|
||||
fi
|
||||
|
||||
echo "Hello,
|
||||
|
||||
This script (you could read and modify as it is open source software) is about to transform your computer into an astroport station.
|
||||
|
||||
This process involve different upgrades to be made on your system.
|
||||
1. install IPFS, the interplanetary file system (https://ipfs.io)
|
||||
2. install python cryptographic libraries to run natools, your key wizard companion
|
||||
3. download 'astroport' code release you have choosen.
|
||||
|
||||
~/.zen directory and datastructure will emerge
|
||||
~/.zen/ipfs & ~/.zen/ipfs_swarm contains all meshed media index from you and your friends.
|
||||
|
||||
ASTROPORT is activated by cron every minute it maintains the connection with your friends.
|
||||
It is the vessel that gives you avvess to your p2p AVATAR.
|
||||
You carry and share your data around your friends through a confidence network
|
||||
established through 1 to 5 'hearts' exchanged, opening 5 stargates where any can push/pull data.
|
||||
|
||||
TODO
|
||||
Just indicate which is the directory assigned to each star.
|
||||
Then any of your friends from such star level can replicate (modify) those data with you.
|
||||
|
||||
Your station is publishing its index every time it changes and every 6 hours for all MEDIAKEY from PIN station.
|
||||
Following that principle add new directory into ~/.zen/ipfs and index any dataset, it will be published on your IPFS semaphore.
|
||||
|
||||
Now you need to enter your password to obtain sudo access.
|
||||
Please.
|
||||
"
|
||||
# Ask user password on start
|
||||
sudo true
|
||||
|
||||
## Error funciton
|
||||
err() {
|
||||
echo -e "ERREUR: $1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# CHECK if daemon is already running
|
||||
if [[ $(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) ]]; then
|
||||
ipfs id && echo "ipfs swarm peers: " && ipfs swarm peers
|
||||
echo "ipfs bootstrap list: " && ipfs bootstrap list
|
||||
echo "ipfs daemon already running...! Must STOP ipfs AND remove ~/.ipfs to install again !!"
|
||||
echo "Please RUN : sudo service ipfs stop"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
[[ -d ~/.ipfs ]] && echo "IPFS install exist! Please remove or backup before executing this script EXIT" && exit 1
|
||||
|
||||
echo -e "Check and install python curl, git and tools."
|
||||
|
||||
[[ $(which pip3) ]] && python3 -m pip install -U pip && python3 -m pip install -U wheel cryptography Ed25519 base58 google protobuf duniterpy==0.62.0 termcolor python-dotenv gql==3.0.0a5 requests pybase64 || (echo "python3 pip3 is missing on your device. EXIT" && exit 1)
|
||||
[[ ! $(which curl) ]] && sudo apt-get install curl -y
|
||||
[[ ! $(which git) ]] && sudo apt-get install git -y
|
||||
|
||||
[[ ! -d ~/.zen ]] && mkdir ~/.zen
|
||||
|
||||
# CHECK node IP isLAN?
|
||||
myIP=$(hostname -I | awk '{print $1}')
|
||||
echo "Your IP is $myIP"
|
||||
isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1$)|(^[fF][cCdD])/")
|
||||
[[ $isLAN ]] && echo "You are located in a LAN" || echo "You have a public IP address"
|
||||
MACHINE_TYPE=`uname -m`
|
||||
echo "You are running $MACHINE_TYPE CPU"
|
||||
|
||||
echo "Downloading ipfs binaries"
|
||||
if [ ${MACHINE_TYPE} == 'x86_64' ]; then
|
||||
curl -s https://dist.ipfs.io/ipfs-update/v1.6.0/ipfs-update_v1.6.0_linux-amd64.tar.gz -o $MY_PATH/ipfs-update.tar.gz
|
||||
elif [ ${MACHINE_TYPE:0:3} == 'arm' ]; then
|
||||
curl -s https://dist.ipfs.io/ipfs-update/v1.6.0/ipfs-update_v1.6.0_linux-arm.tar.gz -o $MY_PATH/ipfs-update.tar.gz
|
||||
elif [ ${MACHINE_TYPE} == 'aarch64' ]; then
|
||||
curl -s https://dist.ipfs.io/go-ipfs/v0.9.1/go-ipfs_v0.9.1_linux-arm64.tar.gz -o /tmp/ipfs_aarch64_v0.9.1.tar.gz
|
||||
else
|
||||
echo "Your $MACHINE_TYPE is not supported yet... Please add an issue." && exit 1
|
||||
fi
|
||||
|
||||
if [ -f $MY_PATH/ipfs-update.tar.gz ]; then
|
||||
echo "INSTALL ipfs-update >>>>>>>>>>>>>>>>>>>>>>>>>>"
|
||||
sudo tar -xvzf $MY_PATH/ipfs-update.tar.gz -C /usr/src/ || err "Untar ipfs-update"
|
||||
rm $MY_PATH/ipfs-update.tar.gz
|
||||
cd /usr/src/ipfs-update/
|
||||
sudo ./install.sh || err "Install ipfs-update"
|
||||
cd $MY_PATH
|
||||
|
||||
echo "INSTALL ipfs 0.9.1 >>>>>>>>>>>>>>>>>>>>>>>>>>"
|
||||
sudo ipfs-update install 0.9.1 || err "Install IPFS"
|
||||
|
||||
else
|
||||
## TERRAPI4 aarch64 install ipfs_aarch64_v0.9.1
|
||||
echo "INSTALL ipfs 0.9.1 >>>>>>>>>>>>>>>>>>>>>>>>>> arm64"
|
||||
sudo tar -xvzf /tmp/ipfs_aarch64_v0.9.1.tar.gz -C /usr/src/ || err "Untar ipfs_aarch64"
|
||||
rm /tmp/ipfs_aarch64_v0.9.1.tar.gz
|
||||
cd /usr/src/go-ipfs/
|
||||
sudo ./install.sh || err "Install ipfs_aarch64"
|
||||
cd $MY_PATH
|
||||
|
||||
fi
|
||||
|
||||
# INIT ipfs
|
||||
[[ $isLAN ]] && ipfs init -p lowpower \
|
||||
|| ipfs init -p server
|
||||
|
||||
## Special Xbian init.d config
|
||||
## DEBIAN SYSTEMCTL
|
||||
echo "SYSTEMD ipfs SERVICE >>>>>>>>>>>>>>>> ON"
|
||||
cat > /tmp/ipfs.service <<EOF
|
||||
[Unit]
|
||||
Description=IPFS daemon
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=_USER_
|
||||
ExecStart=/usr/local/bin/ipfs daemon --enable-pubsub-experiment --enable-namesys-pubsub --enable-gc
|
||||
Restart=on-failure
|
||||
CPUAccounting=true
|
||||
CPUQuota=60%
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
sudo cp -f /tmp/ipfs.service /etc/systemd/system/
|
||||
sudo sed -i "s/_USER_/$USER/g" /etc/systemd/system/ipfs.service
|
||||
echo "Activating ipfs daemon >>>>>>>>>>>>>>>>>> "
|
||||
# echo "Vous pouvez régler la ressouce CPU maximum (60%)?" && read cpuy
|
||||
|
||||
[[ -d ~/.ipfs ]] && sudo chown -R $USER:$USER ~/.ipfs
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable ipfs
|
||||
|
||||
|
||||
###########################################
|
||||
echo "# ACTIVATE IPFS OPTIONS: #swarm0 INIT"
|
||||
###########################################
|
||||
### IMPORTANT !!!!!!! IMPORTANT !!!!!!
|
||||
###########################################
|
||||
# DHT 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
|
||||
ipfs config --json Swarm.ConnMgr.LowWater 50
|
||||
ipfs config --json Swarm.ConnMgr.HighWater 100
|
||||
|
||||
## Install gateway on 8181 port
|
||||
ipfs config Addresses.Gateway "/ip4/127.0.0.1/tcp/8181"
|
||||
|
||||
########################################################################
|
||||
# GET IPFS KEYS & CONVERSIONS
|
||||
########################################################################
|
||||
IPFSNODEID=$(ipfs config Identity.PeerID)
|
||||
## TODO convert to secret.dunikey
|
||||
|
||||
########################################################################
|
||||
echo "CREATION IDENTITE BALISE IPFS ~/.zen/ipfs/.${IPFSNODEID} /G1SSB"
|
||||
########################################################################
|
||||
rm -Rf ~/.zen/ipfs
|
||||
mkdir -p ~/.zen/ipfs/.${IPFSNODEID}/G1SSB
|
||||
########################################################################
|
||||
# Give $XZUID to your (gchange friends)
|
||||
########################################################################
|
||||
XZUID="$(hostname)-$RANDOM$RANDOM"
|
||||
echo "SETTING .player PROFILE NAME = $XZUID"
|
||||
echo "$XZUID" > ~/.zen/ipfs/.${IPFSNODEID}/.player
|
||||
echo 'balise /ipns/$IPFSNODEID/.$IPFSNODEID/.player'
|
||||
|
||||
########################################################################
|
||||
########################################################################
|
||||
echo "Getting tryme.addr & .mycode from OASIS
|
||||
-- Change oasis address to fork your Astroport Code Universe --"
|
||||
########################################################################
|
||||
ipfs bootstrap rm --all
|
||||
|
||||
OASIS=12D3KooWBYme2BsNUrtx4mEdNX6Yioa9AV7opWzQp6nrPs6ZKabN
|
||||
# aries=12D3KooWSQYTxeoZZ39SNosEKxi7RUdGTtAQAqpKeZJxjzqqrZTx
|
||||
for bootnode in $(curl -s https://tube.copylaradio.com/ipns/$OASIS/.$OASIS/tryme.addr)
|
||||
do
|
||||
## ADD $bootnode TO BOOTSTRAP
|
||||
ipfs bootstrap add $bootnode
|
||||
done
|
||||
|
||||
codesign=$(curl -s https://tube.copylaradio.com/ipns/$OASIS/.$OASIS/.mycode)
|
||||
|
||||
## ADD NETWORK EXPLORATION FROM LIKES
|
||||
########################################################################
|
||||
echo "RESTARTING ipfs"
|
||||
########################################################################
|
||||
sudo service ipfs restart
|
||||
echo ".... WAIT for SWARM to connect ..."
|
||||
sleep 10
|
||||
|
||||
echo ".... ACTUAL SWARM PEERS ..."
|
||||
ipfs swarm peers
|
||||
|
||||
echo "IPFS DONE
|
||||
====================
|
||||
Station Astroport INSTALL
|
||||
Activation ~/.zen/astrXbian/zen/cron_VRFY.sh
|
||||
Récupération CODE /ipfs/$codesign
|
||||
"
|
||||
|
||||
## GETTING SAME SOURCE CODE AS OASIS
|
||||
mkdir -p /home/$USER/.zen/astrXbian/
|
||||
ipfs get --output=/home/$USER/.zen/astrXbian/ /ipfs/$codesign
|
||||
|
||||
## Make scripts executable
|
||||
find /home/$USER/.zen/astrXbian/ -name "*.sh" -exec chmod u+x '{}' \;
|
||||
find /home/$USER/.zen/astrXbian/ -name "*.py" -exec chmod u+x '{}' \;
|
||||
|
||||
########################################################################
|
||||
echo "# Setting $USER SUDO permissions ON fail2ban mount umount apt-get apt systemctl"
|
||||
########################################################################
|
||||
## USED FOR fail2ban-client (DEFCON)
|
||||
echo "$USER ALL=(ALL) NOPASSWD:/usr/bin/fail2ban-client" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/fail2ban-client')
|
||||
## USED FOR RAMDISK (video live streaming)
|
||||
echo "$USER ALL=(ALL) NOPASSWD:/bin/mount" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/mount')
|
||||
echo "$USER ALL=(ALL) NOPASSWD:/bin/umount" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/umount')
|
||||
## USED FOR SYSTEM UPGRADE
|
||||
echo "$USER ALL=(ALL) NOPASSWD:/usr/bin/apt-get" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/apt-get')
|
||||
echo "$USER ALL=(ALL) NOPASSWD:/usr/bin/apt" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/apt')
|
||||
## USED FOR "systemctl restart ipfs"
|
||||
echo "$USER ALL=(ALL) NOPASSWD:/bin/systemctl" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/systemctl')
|
||||
|
||||
## TODO G1SSB CONFIG
|
||||
echo "## INSTALL TiddlyWiki /ipns/${IPFSNODEID}/.${IPFSNODEID}/index.html"
|
||||
[[ ! -f ~/.zen/ipfs/.${IPFSNODEID}/index.html ]] && mkdir -p ~/.zen/ipfs/.${IPFSNODEID} && cp ~/.zen/astrXbian/.install/templates/tiddlywiki/index.html ~/.zen/ipfs/.${IPFSNODEID}/index.html
|
||||
|
||||
|
||||
echo "Congratulation ! You are part of the astroport interplanetary fleet.
|
||||
|
||||
New. Activate your station offline storage.
|
||||
Install ipfs companion : https://docs.ipfs.io/install/ipfs-companion/
|
||||
FR : https://translate.google.com/translate?sl=auto&tl=fr&u=https://docs.ipfs.io/install/ipfs-companion/
|
||||
"
|
||||
|
||||
echo "FIND AND CONNECT WITH YOUR FRIENDS
|
||||
https://tube.copylaradio.com/ipns/$OASIS/.$OASIS/"
|
||||
## OPEN https://translate.google.com/translate?sl=auto&tl=fr&u=https://docs.ipfs.io/install/ipfs-companion/
|
||||
|
||||
} # this ensures the entire script is downloaded #
|
||||
# IPFS CONFIG documentation: https://github.com/ipfs/go-ipfs/blob/master/docs/config.md#addressesswarm
|
|
@ -0,0 +1,100 @@
|
|||
#!/bin/bash
|
||||
########################################################################
|
||||
# Author: Fred (support@qo-op.com)
|
||||
# Version: 1.0
|
||||
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
|
||||
########################################################################
|
||||
PLAYER="$1"
|
||||
[[ $PLAYER == "" ]] && PLAYER=$(cat ~/.zen/game/players/.current/.player 2>/dev/null)
|
||||
|
||||
|
||||
##########################
|
||||
# Generate G1BARRE for each wish
|
||||
for g1wish in $(ls ~/.zen/game/players/$PLAYER/voeux/); do
|
||||
wishname=$(cat ~/.zen/game/players/$PLAYER/voeux/$g1wish/.title)
|
||||
wishns=$(ipfs key list -l | grep $g1wish | cut -d ' ' -f1)
|
||||
|
||||
echo "MISE A JOUR G1BARRE pour VOEU $wishname : "
|
||||
echo "G1WALLET $g1wish"
|
||||
echo "G1VOEUTW /ipns/$wishns"
|
||||
|
||||
# Create last g1barre
|
||||
G1BARRE="https://g1sms.fr/g1barre/image.php?pubkey=$g1wish&target=1000&title=$wishname&node=g1.duniter.org&start_date=2022-08-01&display_pubkey=true&display_qrcode=true&progress_color=ff07a4"
|
||||
echo "curl -m 12 -o ~/.zen/tmp/g1barre.png $G1BARRE"
|
||||
rm -f ~/.zen/tmp/g1barre.png
|
||||
curl -m 12 -so ~/.zen/tmp/g1barre.png "$G1BARRE"
|
||||
# Verify file exists & non/empy before copy new version in "world/$g1wish"
|
||||
[[ ! -s ~/.zen/tmp/g1barre.png ]] && echo "No Image ! ERROR. PLEASE VERIFY NETWORK LOCATION FOR G1BARRE" && continue
|
||||
DIFF=$(diff ~/.zen/tmp/g1barre.png ~/.zen/game/world/$g1wish/g1barre.png)
|
||||
[[ $DIFF ]] && cp ~/.zen/tmp/g1barre.png ~/.zen/game/world/$g1wish/g1barre.png
|
||||
##################################################################"
|
||||
OLDIG1BAR=$(cat ~/.zen/game/world/$g1wish/.ig1barre)
|
||||
|
||||
BAL=$($MY_PATH/../tools/jaklis/jaklis.py balance -p $g1wish )
|
||||
echo "MONTANT (G1) $BAL"
|
||||
##################################################################"
|
||||
IG1BAR=$(ipfs add -Hq ~/.zen/game/world/$g1wish/g1barre.png | tail -n 1)
|
||||
if [[ $OLDIG1BAR != "" && $OLDIG1BAR != $IG1BAR ]]; then # Update
|
||||
echo "NEW VALUE !! Updating G1VOEU Tiddler /ipfs/$IG1BAR"
|
||||
|
||||
## Replace IG1BAR "in TW" ipfs value (hash unicity is cool !!)
|
||||
sed -i "s~${OLDIG1BAR}~${IG1BAR}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
|
||||
echo $IG1BAR > ~/.zen/game/world/$g1wish/.ig1barre
|
||||
echo "Update new g1barre: /ipfs/$IG1BAR"
|
||||
|
||||
MOATS=$(date -u +"%Y%m%d%H%M%S%4N")
|
||||
echo "Avancement blockchain TW $PLAYER : $MOATS"
|
||||
cp ~/.zen/game/players/$PLAYER/ipfs/moa/.chain ~/.zen/game/players/$PLAYER/ipfs/moa/.chain.$MOATS
|
||||
|
||||
TW=$(ipfs add -Hq ~/.zen/game/players/$PLAYER/ipfs/moa/index.html | tail -n 1)
|
||||
echo "ipfs name publish --key=$PLAYER /ipfs/$TW"
|
||||
ipfs name publish --allow-offline --key=$PLAYER /ipfs/$TW
|
||||
|
||||
# MAJ CACHE TW $PLAYER
|
||||
echo $TW > ~/.zen/game/players/$PLAYER/ipfs/moa/.chain
|
||||
echo $MOATS > ~/.zen/game/players/$PLAYER/ipfs/moa/.moats
|
||||
echo "##################################################################"
|
||||
##################################################################
|
||||
|
||||
fi
|
||||
|
||||
### NO OLDIG1BAR, MEANS FIRST RUN
|
||||
if [[ $OLDIG1BAR == "" ]]; then # CREATE Tiddler
|
||||
|
||||
TEXT="<a target='_blank' href='"/ipns/${wishns}"'><img src='"/ipfs/${IG1BAR}"'></a><br><br><a target='_blank' href='"/ipns/${wishns}"'>"${wishname}"</a>"
|
||||
|
||||
# NEW G1BAR TIDDLER
|
||||
echo "## Creation json tiddler : G1${wishname} /ipfs/${IG1BAR}"
|
||||
echo '[
|
||||
{
|
||||
"title": "'G1${wishname}'",
|
||||
"type": "'text/vnd.tiddlywiki'",
|
||||
"ipns": "'/ipns/$wishns'",
|
||||
"ipfs": "'/ipfs/$IG1BAR'",
|
||||
"player": "'/ipfs/$PLAYER'",
|
||||
"text": "'$TEXT'",
|
||||
"tags": "'g1voeu g1${wishname} $PLAYER'"
|
||||
}
|
||||
]
|
||||
' > ~/.zen/tmp/g1${wishname}.bank.json
|
||||
|
||||
rm -f ~/.zen/tmp/newindex.html
|
||||
|
||||
echo "Nouveau G1${wishname} : http://127.0.0.1:8080/ipns/$ASTRONAUTENS"
|
||||
tiddlywiki --load ~/.zen/game/players/$PLAYER/ipfs/moa/index.html \
|
||||
--import ~/.zen/tmp/g1${wishname}.bank.json "application/json" \
|
||||
--output ~/.zen/tmp --render "$:/core/save/all" "newindex.html" "text/plain"
|
||||
|
||||
echo "PLAYER TW Update..."
|
||||
if [[ -s ~/.zen/tmp/newindex.html ]]; then
|
||||
echo "Mise à jour ~/.zen/game/players/$PLAYER/ipfs/moa/index.html"
|
||||
cp -f ~/.zen/tmp/newindex.html ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
|
||||
fi
|
||||
|
||||
echo $IG1BAR > ~/.zen/game/world/$g1wish/.ig1barre
|
||||
|
||||
fi
|
||||
|
||||
done
|
||||
##############################################################
|
||||
##############################################################
|
|
@ -0,0 +1,25 @@
|
|||
#!/bin/bash
|
||||
########################################################################
|
||||
# Version: 0.1
|
||||
# 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##*/}"
|
||||
|
||||
####################################
|
||||
#### HERE WE SCAN G1PUB GCHANGE ENV ####
|
||||
# PART OF TW SYNCHRONIZATION #
|
||||
####################################
|
||||
G1PUB="$1"
|
||||
|
||||
## CHECK FOR KEY AVAILABLE
|
||||
g1pubpath=$(grep $G1PUB ~/.zen/game/players/*/.g1pub | cut -d ':' -f 1 2>/dev/null)
|
||||
PLAYER=$(echo "$g1pubpath" | rev | cut -d '/' -f 2 | rev 2>/dev/null)
|
||||
[[ !$PLAYER ]] && echo "NO Astronaut Key Found. Please use 12345.sh to activate your ID on this gateway." && exit 1
|
||||
ASTRONAUTENS=$(ipfs key list -l | grep -w "$PLAYER" | cut -d ' ' -f 1)
|
||||
|
||||
## Getting Gchange liking_me list
|
||||
~/.zen/Astroport.ONE/tools/timeout.sh -t 20 ~/.zen/Astroport.ONE/tools/jaklis/jaklis.py -k ~/.zen/game/players/$PLAYER/secret.dunikey -n "https://data.gchange.fr" stars | jq -r '.likes[].issuer' | uniq > ~/.zen/tmp/liking_me
|
||||
|
||||
|
Loading…
Reference in New Issue