#!/bin/bash ######################################################################## # Author: Fred (support@qo-op.com) # Armust Blegde release # Version: 0.3 # License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) ######################################################################## # REGULATEUR DES PULSATIONS DE L'AUTOMATE # CADENCE # 1/60 Hz # INJECTEZ VOS ACTIONS DANS LES CYCLES... ######################################################################## MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized ME="${0##*/}" source $HOME/.profile # CORRECT PATH [[ ! $(echo $PATH | grep "/usr/local/bin") ]] && export PATH="$PATH:/usr/local/bin" [[ ! $(echo $PATH | grep "$HOME/.local/bin") ]] && export PATH="$PATH:$HOME/.local/bin" [[ ! $(echo $PATH | grep "/usr/games") ]] && export PATH="$PATH:/usr/games" #### CONTROL STATION IPFS DAEMON ## timeout is fixing ipfs minimum response time, before considering stuck process IPFSNODEID=$(ipfs --timeout=20s id -f='\n') howmany=$(cat /tmp/ipfs.timeout) if [[ ! $IPFSNODEID ]]; then ## wait a howmany timeout before restarting ipfs howmany=$((howmany + 1)) && echo $howmany > /tmp/ipfs.timeout [ $howmany -gt 3 ] && [[ -f /etc/sudoers.d/systemctl ]] && echo "IPFS NOT RUNNING $(date) $(ps auxf)" >> ~/.zen/restart.txt && rm /tmp/ipfs.timeout && rm /config/ipfs/repo.lock && sudo systemctl restart ipfs [ $howmany -gt 3 ] && [[ "${USER}" == "xbian" ]] && echo "IPFS NOT RUNNING" && sudo service ipfs restart && exit 1 exit 1 else echo 0 > /tmp/ipfs.timeout fi ## CONTROL IPFS IS RUNNING OR RESTART YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) if [[ ! ${YOU} ]]; then # control water levels for swarm ipfs config --json Swarm.ConnMgr.LowWater 50 ipfs config --json Swarm.ConnMgr.HighWater 100 [ $howmany -gt 3 ] && [[ "${USER}" == "xbian" ]] && sudo service ipfs restart || sudo systemctl restart ipfs echo "ERROR! ipfs daemon was not running. RELAUNCHING." exit 1 fi ######################################################################## # CORRECT VSTREAM ASTROPORT SITE/ART REMOVED AFTER PLUGIN UPDATE [[ ! -f ~/.kodi/addons/plugin.video.vstream/resources/sites/astroport.py ]] && [[ -f ~/.zen/astroport.py ]] && cp -f ~/.zen/astroport.py ~/.kodi/addons/plugin.video.vstream/resources/sites/ [[ ! -f ~/.kodi/addons/plugin.video.vstream/resources/art/astroport.png ]] && cp ~/.zen/astrXbian/.install/.kodi/addons/plugin.video.vstream/resources/art/astroport.png ~/.kodi/addons/plugin.video.vstream/resources/art/ 2>/dev/null ######################################################################## ### NO IP GATEWAY : EXIT ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` 2>&1>/dev/null && echo "LAN OK" || exit 1 ######################################################################## ### TEMP CODE (add missing packages to xbian) - TODO REMOVE after 30 mn for git pull & apply # [[ $(which ffmpeg) == "" && "$USER" == "xbian" ]] && sudo apt-get update && sudo apt-get install git fail2ban inotify-tools curl net-tools libsodium* python3-dev python3-pip python3-setuptools python3-wheel mpack libssl-dev libffi-dev build-essential qrencode jq bc gawk ffmpeg sqlite dnsutils vlc mp3info x11-utils -y ######################################################################## ######################################################################## # HELP DEVLT: Search "TODO" in code # WARNING: This script must be processing less than 1 minute, so do not charge too much this script # _ _____ ____ _ _______ ________ ____ # | | / / | / __ \/ | / / _/ | / / ____/ / / / # | | /| / / /| | / /_/ / |/ // // |/ / / __ / / / # | |/ |/ / ___ |/ _, _/ /| // // /| / /_/ / /_/_/ # |__/|__/_/ |_/_/ |_/_/ |_/___/_/ |_/\____/ (_|_) ######################################################################## # 'figlet' was used for labeling code trunks ######################################################################## ### MODIFY WITH GREAT CARE!!! MUST BE BUG FREE !!!!! ### EVERY STATION RUN THIS SCRIPT EVERY MINUTE. export isKodiRunning=$(ps auxf --sort=+utime | grep -w kodi | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d ' ' -f 1) ######################################################################## cd $MY_PATH ######################################################################## # WHAT TIME(s) is it ? timestamp="$(date -u +%s%N | cut -b1-13)" minute=$(date -u +%M) heure=$(date -u +%H) timebar="$heure:$minute" dayoftheweek=$(date +%w) dayofthemonth=$(date +%d) weeknumber=$(date +%V) # WAKEUP TIME if [[ ! -f /tmp/A_Station_ON ]]; then echo "onheure=$heure; onminute=$minute; ontimebar=$timebar" > /tmp/A_Station_ON else source /tmp/A_Station_ON old=$ontimebar new=$timebar # feeding variables by using read and splitting with IFS IFS=: read old_hour old_min <<< "$old" IFS=: read hour min <<< "$new" # convert hours to minutes # the 10# is there to avoid errors with leading zeros # by telling bash that we use base 10 total_old_minutes=$((10#$old_hour*60 + 10#$old_min)) total_minutes=$((10#$hour*60 + 10#$min)) runtime=$((total_minutes - total_old_minutes)) runtime=${runtime#-} fi # RUN TIME $runtime echo "RUNTIME $runtime mn ($timebar)" if [[ $(($runtime % 4)) == 0 ]]; then ## PING ALL MY FRIENDS TO ENHANCE SWARM CONNECTIVITY echo "## FRIENDS IPFS PINGing" for g1pub in $(ls -t ~/.zen/ipfs/.$IPFSNODEID/FRIENDS/); do [[ $g1pub ]] && latency=$(ipfs ping --timeout=1s -n 1 /p2p/$(~/.zen/astrXbian/zen/tools/g1_to_ipfs.py $g1pub 2>/dev/null) 2>/dev/null | grep "Average" | cut -d ':' -f 2); [[ $latency ]] && echo $latency > ~/.zen/ipfs/.$IPFSNODEID/FRIENDS/$g1pub/ping.average.txt ## AVERAGE PING cat ~/.zen/ipfs/.$IPFSNODEID/FRIENDS/*/ping.average.txt # for line in $(ls ~/.zen/ipfs/.$IPFSNODEID/FRIENDS/*/ping.average.txt); do g1friend=$(echo $line | cut -d '/' -f 8); ipfsnodeid=$(~/.zen/astrXbian/zen/tools/g1_to_ipfs.py $g1friend); cat ~/.zen/ipfs_swarm/.$ipfsnodeid/_xbian.zuid; cat $line; done done fi ######################################################################## ## CHECK & (RE)ACTIVATE ipfs p2p tunnels ######################################################################## # NextCloud FROM taurus TO oasis (https://taurus.copylaradio.com) ~/.zen/astrXbian/zen/ipfs_P2P_forward.sh ########## SUPPORT : OPEN OR CLOSE SSH ACCESS ################# # [[ "$(ipfs p2p ls | grep $G1PUB-ssh)" == "" ]] && sleep $((1 + RANDOM % 10)) && ~/.zen/astrXbian/zen/ssh_forward2onelove.sh # OPEN-SSH # [[ "$(ipfs p2p ls | grep $G1PUB-ssh)" != "" ]] && sleep $((1 + RANDOM % 10)) && ~/.zen/astrXbian/zen/ssh_forward2onelove.sh # CLOSE-SSH ######################################################################## # DEFCON ######################################################################## # STATION CAN MODIFY DEFCON (cool 5 to 1 war) - only 5 and 4 (fail2ban) are ready to use. [[ -f ~/.zen/DEFCON ]] && export DEFCON=$(cat ~/.zen/DEFCON) || export DEFCON=$(cat ~/.zen/astrXbian/DEFCON) # ADAPT $DEFCON scenario ## DEFCON SYSTEM ACTIVATED # _ ____ # / | | ___| _ __ ___ _ __ # | | |___ \ | '_ ` _ \| '_ \ # | | ___) | | | | | | | | | | # |_| |____/ |_| |_| |_|_| |_| # ######################################################################## # SMARM MAINTENANCE / 15 mn ######################################################################## # astrXbian TestNET (git pull) -> desactivate in release ipfs get codeID ######################################################################## # ACTIVATE 15 MN "git pull" update if [[ $(($runtime % 15)) == 0 ]]; then ########## DESYNCH SWARM NODE REQUESTS ################# # git reset --hard git pull [[ ! $? == 0 ]] && echo "GIT.P2P.LEGAL IS UNREACHABLE" # if [[ $(diff ~/.zen/astrXbian/.install/.kodi/userdata/addon_data/plugin.video.vstream/settings.xml ~/.kodi/userdata/addon_data/plugin.video.vstream/settings.xml) ]]; then # cp ~/.zen/astrXbian/.install/.kodi/userdata/addon_data/plugin.video.vstream/settings.xml ~/.kodi/userdata/addon_data/plugin.video.vstream/settings.xml # echo "MAJ Vstream settings" # fi ## IN CASE OF jaklis UPGRADE ACTIVATE AND REMOVE ## cd ~/.zen/astrXbian/zen/jaklis; ./setup.sh; cd - # CLEAN AND REMOVE BAD DIRECTORIES ## BYPASS index.html DELETION [[ -f ~/.zen/ipfs/index.html ]] && cp ~/.zen/ipfs/index.html /tmp/ipfsindex.html [[ -d ~/.zen/ipfs/astroport ]] && rm -Rf ~/.zen/ipfs/astroport [[ -d ~/.zen/ipfs_swarm/astroport ]] && rm -Rf ~/.zen/ipfs_swarm/astroport [[ -d ~/.zen/ipfs/xbian ]] && rm -Rf ~/.zen/ipfs/xbian [[ -d ~/.zen/ipfs_swarm/xbian ]] && rm -Rf ~/.zen/ipfs_swarm/xbian [[ -d ~/.zen/ipfs/PIN ]] && rm -Rf ~/.zen/ipfs/PIN [[ -d ~/.zen/ipfs_swarm/PIN ]] && rm -Rf ~/.zen/ipfs_swarm/PIN ## CLEANING PARASITE BAD FILES rm -Rf ~/.zen/ipfs/* rm ~/.zen/ipfs/.* rm -Rf ~/.zen/ipfs_swarm/* rm ~/.zen/ipfs_swarm/.* ## RESTORE index.html from /tmp/ipfsindex.html [[ -f /tmp/ipfsindex.html ]] && mv /tmp/ipfsindex.html ~/.zen/ipfs/index.html fi if [[ $(($minute % 30)) == 0 ]]; then ########## NextCloud.SMS GUILDE STATION ############## if [[ -e ~/.zen/SMS/ ]];then # DONE at 20h01 in taurus crontab # [[ "$timebar" == "18:30" ]] && /home/${YOU}/.zen/SMSAPP/sms/_SEND2GUILDE.sh "BIODYN" ## PREPARE BIODYN GUILDE SMS => 20h30 in France /home/${YOU}/.zen/SMSAPP/sms_send_tosend.sh fi ########## SMS GUILDE STATION ############## fi # __ __ _____ ____ # __/ // /_/ ___/ ______ __________ ___ / __ \ # /_ _ __/\__ \ | /| / / __ `/ ___/ __ `__ \/ / / / # /_ _ __/___/ / |/ |/ / /_/ / / / / / / / / /_/ / # /_//_/ /____/|__/|__/\__,_/_/ /_/ /_/ /_/\____/ gchange sync # ################################################################## # TODO: IDEA make gchange/ipfs/ipns refresh speed depending on ipfs swarm size and DEFCON level ! ## SYNC GCHANGE EVERY 12 hours runtime if [[ $(($runtime % 725)) == 0 || "$runtime" == "5" ]]; then kill -9 $(ps auxf --sort=+utime | grep -w gchange_INIT.sh | grep -v -E 'color=auto|grep' | tail -n 1 | awk '{print $2}') && echo "KILLING gchange_INIT.sh" $MY_PATH/zen/gchange_INIT.sh 2>&1 > /home/${YOU}/.zen/ipfs/.${IPFSNODEID}/.log.gchange_INIT.txt fi # If NEW ~/.ipfs/config.new => restarting IPFS daemon (not too often as 6h) if [[ -f ~/.ipfs/config.new && $(diff ~/.ipfs/config.new ~/.ipfs/config) && $runtime -gt 360 ]]; then echo "onheure=$heure; onminute=$minute; ontimebar=$timebar" > /tmp/A_Station_ON cp ~/.ipfs/config.new ~/.ipfs/config [[ -f /etc/sudoers.d/systemctl ]] && sudo systemctl restart ipfs && exit 0 [[ ${YOU} == "xbian" ]] && sudo service ipfs restart && exit 0 fi ## RESHAPE IPFS FRIENDS SWARM if [[ $(($runtime % 370)) == 0 || "$runtime" == "10" ]]; then kill -9 $(ps auxf --sort=+utime | grep -w gchange_IPFS_swarm.sh | grep -v -E 'color=auto|grep' | tail -n 1 | awk '{print $2}') && echo "KILLING gchange_IPFS_swarm.sh" $MY_PATH/zen/gchange_IPFS_swarm.sh 2>&1 > /home/${YOU}/.zen/ipfs/.${IPFSNODEID}/.log.gchange_IPFS_swarm.txt fi # SYNC IPFS FRIENDS SWARM if [[ $(($runtime % 25)) == 0 ]]; then kill -9 $(ps auxf --sort=+utime | grep -w p4n.swarmscraper.sh | grep -v -E 'color=auto|grep' | tail -n 1 | awk '{print $2}') && echo "KILLING p4n.swarmscraper.sh" killall chromium $MY_PATH/zen/ipfs_SWARM_refresh.sh 2>&1 > /home/${YOU}/.zen/ipfs/.${IPFSNODEID}/.log.ipfs_SWARM_refresh.txt fi ################################################################## # # _________ ______ # ____ ___ ____ /_ __/ | / ____/ # /_ / / _ \/ __ \ / / / /| |/ / __ # / /_/ __/ / / / / / / ___ / /_/ / # /___/\___/_/ /_/ /_/ /_/ |_\____/ # # REFRESHing MEDIAKEY / ZenTAG nano DHTs => Zen File ECONOMY wallet cycle if [[ $(($runtime % 7)) == 0 ]]; then #### Refresh & publish MEDIAKEYs $MY_PATH/zen/ipns_TAG_refresh.sh > /home/${YOU}/.zen/ipfs/.${IPFSNODEID}/.log.ipns_TAG_refresh.txt ## REINIT dead swarm STATIONS rm -f ~/.zen/A_dead_swarm.txt fi ## TODO ACTIVATE/DESACTIVATE LOG ######################################################################## # ACTIVATE ~/astroport directory monitoring (xbian only) ######################################################################## ### # _ _ # __ _| |__ (_) __ _ _ __ # \ \/ / '_ \| |/ _` | '_ \ # > <| |_) | | (_| | | | | # /_/\_\_.__/|_|\__,_|_| |_| inotifywait # # ON Rpi/xbian files added in ~/astroport are monitored to activate "new_file_in_astroport.sh" # Transfert ~/astroport/*/files to IPFS and make Astroport/KODI indexes in IPNS if [[ "$USER" == "xbian" ]]; then [[ ! -e $HOME/astroport ]] && mkdir -p $HOME/astroport # VERIFY LAUNCH inotifywait ?! inotifywaitRunning=$(ps auxf --sort=+utime | grep -w inotifywait | grep -w astroport | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d ' ' -f 1) if [[ "$inotifywaitRunning" != "xbian" ]] then /usr/bin/inotifywait -r -e close_write -m /home/$USER/astroport | while read dir flags file; do $MY_PATH/zen/new_file_in_astroport.sh "$dir" "$file"; done >> /tmp/astroport.inotify.log 2>&1 & fi fi ########################################################## ################################################################## ################################################################## # 5 mn / 24h REBOOT & MIDNIGHT:01 : CLEANING & UPDATE ################################################################## ################################################################## if [[ "$timebar" == "00:01" || "$runtime" == "30" || $(($runtime % 1380)) == 0 ]]; then echo ' # ____ ____ ____ ___ # / __ \/ __ \ _ / __ < / # / / / / / / / (_) / / / / / # / /_/ / /_/ / _ / /_/ / / # \____/\____/ (_) \____/_/ # # MAINTENANCE ' sleep $((1 + RANDOM % 12)) ### Be careful if random sleep is not activated... ############################## That swarm could become an aggressive blob !! ### PEACE & LOVE software is processing... We are HyperWeb people here. # DEFCON 5 quiet behaviour so Please keep cool, take care and be zen. # GOOD BYE GOOGLE, AMAZON, FACEBOOK, APPLE, MICROSOFT. LIBRE WE ARE. #################################################################### # REFRESH & UPGRADE youtube-dl youtube-dl --rm-cache-dir youtube-dl -U ### INDEX DATA MIGRATION SCRIPTS $MY_PATH/actions/p4n.data_evolution.sh & ## LET IT A WHILE FOR ALL SWARM EXECUTE ACTION... AND REMOVE. ################################################################## if [[ $dayoftheweek == 1 ]]; then # EVERY MONDAY # _____ __ __ ___ # / ___// /_____ _________ _____ ____ / |/ /___ __ __ # \__ \/ __/ __ \/ ___/ __ `/ __ `/ _ \ / /|_/ / __ `/ |/_/ # ___/ / /_/ /_/ / / / /_/ / /_/ / __/ / / / / /_/ /> < # /____/\__/\____/_/ \__,_/\__, /\___/ /_/ /_/\__,_/_/|_| # /____/ # 1/2 HDD for IPFS size - dicotomic adaptation 7th EVERY MONTH availableDiskSize=$(df -P ~/ | awk 'NR>1{sum+=$4}END{print sum}') availableDiskSize="$(($availableDiskSize * 1024))" diskSize="$((availableDiskSize / 2))" ipfs config Datastore.StorageMax $diskSize echo "StorageMax = $diskSize" # New full test review in gchange_INIT.sh rm -f ~/.ipfs/test.disk # LOG ROTATE WEEKLY [[ -f /tmp/astroport.log ]] && [[ ! -f ~/.zen/astroport.$weeknumber.log.tgz ]] && tar cvzf ~/.zen/astroport.$weeknumber.log.tgz /tmp/astroport.log && echo "" > /tmp/astroport.log fi ################################################################## ## CHECK STARTGATE LEVEL KEYS # _ open _ # ___| |_ __ _ _ __ __ _ __ _| |_ ___ #/ __| __/ _` | '__/ _` |/ _` | __/ _ \ #\__ \ || (_| | | | (_| | (_| | || __/ #|___/\__\__,_|_| \__, |\__,_|\__\___| # |___/ # IPNS KEYS used to publish with star friends (creates 5 levels of streaming / file sharing) # RESET ipfs key rm star_1; ipfs key rm star_2; ipfs key rm star_3; ipfs key rm star_4; ipfs key rm star_5 rm -Rf ~/.zen/key/ # RENEW & SEND STARS TO FRIENDS ~/.zen/astrXbian/zen/manage_stargates.sh $MY_PATH/zen/manage_stargates.sh ######################################################################## # ACTIVATE TO CONTROL SWARM STATION SAME CODE VERSION ######################################################################## ## myCODE is a SECURITY about code SIMILARITY ## EACH NODE CAN CHECK IF ANOTHER HAS SAME IPFS CODE HASH MyCODE=$(ipfs add -rq --ignore="__pycache__" ~/.zen/astrXbian/ | tail -n 1) [[ ! -f ~/.zen/ipfs/.${IPFSNODEID}/.mycode ]] && echo $MyCODE > ~/.zen/ipfs/.${IPFSNODEID}/.mycode [[ "$(cat ~/.zen/ipfs/.${IPFSNODEID}/.mycode)" != "$MyCODE" ]] && echo $MyCODE > ~/.zen/ipfs/.${IPFSNODEID}/.mycode echo "MyCODE = $MyCODE CODE is ready to be published" ######################################################################## # MEAN CONTROL SWARM STATION HAVE SAME CODE VERSION ######################################################################## fi ### DISAPEAR ONE HOUR FROM IPFS SWARM ZOMBIES > 300 peers in swarm #if [[ $(cat /tmp/ipfs_swarm_peers | wc -l) -gt 300 ]]; then #if [[ "$timebar" == "04:05" ]]; then # ~/.zen/astrXbian/zen/ipfs_SWARM_renew.sh 3600 ## CUT IPFS FOR ONE HOUR ## SWITCHING ON # echo "1" > ~/.zen/ipfs/.$IPFSNODEID/.switch #fi #fi ## BETTER ACTIVATING DEFCON 3 / swarm.key MODE