#!/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 ######################################################################## 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" #### INIT STATION PARAMETERS export YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) [[ ! $YOU ]] && echo "ERREUR processus ipfs absent" && exit 1 [[ $IPFSNODEID ]] && export IPFSNODEID=$IPFSNODEID || export IPFSNODEID=$(ipfs id -f='\n') ######################################################################## # 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/ ######################################################################## ### NO IP GATEWAY : EXIT export LAN=1 && echo "1" > /tmp/LAN ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` 2>&1>/dev/null && echo "GATEWAY OK" && export LAN=0 && echo "0" > /tmp/LAN ######################################################################## ### 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)) fi # RUN TIME $runtime echo "$runtime ($timebar)" ######################################################################## # 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 # ____ _______ __ __ # / __ \/ ____/ | / / ____ ___ ____ ____/ /__ # / / / / __/ | | / / / __ `__ \/ __ \/ __ / _ \ # / /_/ / /___ | |/ / / / / / / / /_/ / /_/ / __/ # /_____/_____/ |___/ /_/ /_/ /_/\____/\__,_/\___/ # # # ACTIVATE 15-17 MN "git pull" update if [[ $(($minute % 15)) == 0 ]]; then ########## DESYNCH SWARM NODE REQUESTS ################# sleep $((1 + RANDOM % 120)) # git reset --hard git pull # 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 ########## 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 fi # __ __ _____ ____ # __/ // /_/ ___/ ______ __________ ___ / __ \ # /_ _ __/\__ \ | /| / / __ `/ ___/ __ `__ \/ / / / # /_ _ __/___/ / |/ |/ / /_/ / / / / / / / / /_/ / # /_//_/ /____/|__/|__/\__,_/_/ /_/ /_/ /_/\____/ gchange sync # ################################################################## # TODO: IDEA make gchange/ipfs/ipns refresh speed depending on ipfs swarm size and DEFCON level ! # SYNC GCHANGE EVERY 2 hours +/- 3 minutes [[ $(($runtime % 120)) == 0 ]] && $MY_PATH/zen/gchange_INIT.sh && $MY_PATH/zen/gchange_IPFS_swarm.sh & # QUICK SYNC SWARM EVERY 20 minutes +/- 1 minute # [[ $(($runtime % 20)) == 0 ]] && $MY_PATH/zen/ipfs_SWARM_refresh.sh "quick" & # ~/astroport # _ _ # __ _| |__ (_) __ _ _ __ # \ \/ / '_ \| |/ _` | '_ \ # > <| |_) | | (_| | | | | # /_/\_\_.__/|_|\__,_|_| |_| 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 [[ "$YOU" == "xbian" ]]; then [[ ! -e /home/$YOU/astroport ]] && mkdir -p /home/$YOU/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/$YOU/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 ########################################################## if [[ "$timebar" == "12:12" || "$timebar" == "00:12" || $(($runtime % 720)) == 0 ]]; then #### timebar DESYNC # Restarting IPFS daemon [[ -f /etc/sudoers.d/systemctl || "$USER" == "xbian" ]] && sudo systemctl restart ipfs sleep $((1 + RANDOM % 5)) ################################################################## # # _________ ______ # ____ ___ ____ /_ __/ | / ____/ # /_ / / _ \/ __ \ / / / /| |/ / __ # / /_/ __/ / / / / / / ___ / /_/ / # /___/\___/_/ /_/ /_/ /_/ |_\____/ # # REFRESHing KEY ZenTAG nano DHTs => Zen File ECONOMY door $MY_PATH/zen/ipns_TAG_refresh.sh ## RESCAN dead swarm rm -f ~/.zen/A_dead_swarm.txt fi ################################################################## ################################################################## # MIDNIGHT:01 : CLEANING & UPDATE ################################################################## ################################################################## if [[ "$timebar" == "00:01" || "$runtime" == "5" || $(($runtime % 1380)) == 0 ]]; then echo ' # ____ ____ ____ ___ # / __ \/ __ \ _ / __ < / # / / / / / / / (_) / / / / / # / /_/ / /_/ / _ / /_/ / / # \____/\____/ (_) \____/_/ # # MAINTENANCE ' sleep $((1 + RANDOM % 15)) ### 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 ################################################################## 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 [[ -f /tmp/astroport.log ]] && 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 fi if [[ "$timebar" == "05:05" ]]; then ~/.zen/astrXbian/zen/ipfs_SWARM_renew.sh & fi