From ce1611eee7c25909413d5240cd41d1e52b96ac75 Mon Sep 17 00:00:00 2001 From: qo-op Date: Sat, 12 Dec 2020 04:06:15 +0100 Subject: [PATCH] remove unecessary --- .install/ipfs-pi-stream/audio.jpg | Bin 32269 -> 0 bytes .install/ipfs-pi-stream/enable-camera.sh | 31 -- .install/ipfs-pi-stream/install | 52 ---- .../ipfs-pi-stream/process-stream.service | 16 -- .install/ipfs-pi-stream/process-stream.sh | 124 -------- .install/ipfs-pi-stream/uninstall | 18 -- .install/ipfs.sh | 69 ----- .install/loveland.sh | 264 ------------------ .install/nextcloud/README.md | 35 --- .install/nextcloud/install.sh | 186 ------------ .install/nextcloud/ssl.sh | 69 ----- .../nextcloud/templates/config_complete.php | 52 ---- .install/nextcloud/templates/configure_php.sh | 50 ---- .install/nextcloud/templates/my.cnf | 79 ------ .install/nextcloud/templates/nc_optimize.sh | 10 - .install/nextcloud/templates/nextcloud.conf | 149 ---------- .install/nextcloud/templates/occ | 6 - .../nextcloud/templates/optimization.conf | 17 -- .install/nextcloud/templates/permissions.sh | 8 - .../nextcloud/templates/php_optimization.conf | 9 - .install/nextcloud/templates/ssl.conf | 16 -- .install/nextcloud/templates/ssl_renew.sh | 26 -- .install/nextcloud/templates/upgrade.sh | 15 - .install/scuttlebutt.sh | 130 --------- .install/silkaj-php-mysql.sh | 66 ----- .install/ssb-patchfoo/config | 7 - .install/ssb-patchfoo/install | 65 ----- .install/ssb-patchfoo/ssb-patchfoo.conf | 9 - zen/miam_miam.sh | 127 --------- zen/park4night_MONITOR.sh | 113 -------- zen/port_ipfsp2p_g1sms_all.sh | 37 --- zen/ssb_GET_zenyta.sh | 107 ------- zen/ssb_GET_zenytv.sh | 109 -------- zen/ssb_INIT.sh | 260 ----------------- zen/ssb_IPFS_swarm.sh | 99 ------- zen/ssb_SURVEY_contact.sh | 134 --------- zen/ssb_SURVEY_swarmkey.sh | 122 -------- 37 files changed, 2686 deletions(-) delete mode 100644 .install/ipfs-pi-stream/audio.jpg delete mode 100755 .install/ipfs-pi-stream/enable-camera.sh delete mode 100755 .install/ipfs-pi-stream/install delete mode 100644 .install/ipfs-pi-stream/process-stream.service delete mode 100755 .install/ipfs-pi-stream/process-stream.sh delete mode 100755 .install/ipfs-pi-stream/uninstall delete mode 100755 .install/ipfs.sh delete mode 100755 .install/loveland.sh delete mode 100644 .install/nextcloud/README.md delete mode 100755 .install/nextcloud/install.sh delete mode 100755 .install/nextcloud/ssl.sh delete mode 100644 .install/nextcloud/templates/config_complete.php delete mode 100755 .install/nextcloud/templates/configure_php.sh delete mode 100644 .install/nextcloud/templates/my.cnf delete mode 100755 .install/nextcloud/templates/nc_optimize.sh delete mode 100644 .install/nextcloud/templates/nextcloud.conf delete mode 100755 .install/nextcloud/templates/occ delete mode 100644 .install/nextcloud/templates/optimization.conf delete mode 100755 .install/nextcloud/templates/permissions.sh delete mode 100644 .install/nextcloud/templates/php_optimization.conf delete mode 100644 .install/nextcloud/templates/ssl.conf delete mode 100755 .install/nextcloud/templates/ssl_renew.sh delete mode 100755 .install/nextcloud/templates/upgrade.sh delete mode 100755 .install/scuttlebutt.sh delete mode 100755 .install/silkaj-php-mysql.sh delete mode 100644 .install/ssb-patchfoo/config delete mode 100755 .install/ssb-patchfoo/install delete mode 100644 .install/ssb-patchfoo/ssb-patchfoo.conf delete mode 100755 zen/miam_miam.sh delete mode 100755 zen/park4night_MONITOR.sh delete mode 100755 zen/port_ipfsp2p_g1sms_all.sh delete mode 100755 zen/ssb_GET_zenyta.sh delete mode 100755 zen/ssb_GET_zenytv.sh delete mode 100755 zen/ssb_INIT.sh delete mode 100755 zen/ssb_IPFS_swarm.sh delete mode 100755 zen/ssb_SURVEY_contact.sh delete mode 100755 zen/ssb_SURVEY_swarmkey.sh diff --git a/.install/ipfs-pi-stream/audio.jpg b/.install/ipfs-pi-stream/audio.jpg deleted file mode 100644 index 9850d25138c04a8585071467e1c0867ccdf05848..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32269 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 "$3.bak" - local key=assert(arg[1]) - local value=assert(arg[2]) - local fn=assert(arg[3]) - local file=assert(io.open(fn)) - local made_change=false -for line in file:lines() do - if line:match("^#?%s*"..key.."=.*$") then - line=key.."="..value - made_change=true - end - print(line) -end - -if not made_change then - print(key.."="..value) -end -EOF -sudo mv "$3.bak" "$3" -} - -# Command extracted from raspi-config -sed /boot/config.txt -i -e "s/^startx/#startx/" -sed /boot/config.txt -i -e "s/^fixup_file/#fixup_file/" -set_config_var start_x 1 /boot/config.txt -set_config_var gpu_mem 128 /boot/config.txt diff --git a/.install/ipfs-pi-stream/install b/.install/ipfs-pi-stream/install deleted file mode 100755 index 571e541..0000000 --- a/.install/ipfs-pi-stream/install +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash - -set -e - -BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -# Enable camera on the Raspberry Pi -sudo "$BASE_DIR/enable-camera.sh" - -# Install ffmpeg and supporting tools - -sudo apt-get install -y ffmpeg lsof inotify-tools nginx - -# Copy placeholder for audio-only streams -cp "$BASE_DIR/audio.jpg" "$HOME/audio.jpg" - -# Add user to be able to modify nginx directories -sudo usermod -a -G "$USER" www-data -sudo chmod g+rw /var/www/html - -# TODO: why is this needed? -sudo chmod a+rw /var/www/html - -sudo cp -f "$BASE_DIR/process-stream.sh" /usr/bin/process-stream.sh -sudo cp -f "$BASE_DIR/process-stream.service" /etc/systemd/system/process-stream.service -sudo systemctl daemon-reload -sudo systemctl enable process-stream - -# Add hourly job to clear out old data -echo "41 * * * * $USER /usr/local/bin/ipfs repo gc" | sudo tee --append /etc/crontab - -# Install the ipfs video player -mkdir "$BASE_DIR/tmp" -current_dir="$(pwd)" - -git clone https://github.com/tomeshnet/ipfs-live-streaming.git "$BASE_DIR/tmp/ipfs-live-streaming" -cd "$BASE_DIR/tmp/ipfs-live-streaming" -git checkout b9be352582317e5336ddd7183ecf49042dafb33e -cd "$current_dir" - -VIDEO_PLAYER_PATH="$BASE_DIR/tmp/ipfs-live-streaming/terraform/shared/video-player" -sed -i s#__IPFS_GATEWAY_SELF__#/ipfs/# "$VIDEO_PLAYER_PATH/js/common.js" -sed -i s#__IPFS_GATEWAY_ORIGIN__#https://ipfs.io/ipfs/# "$VIDEO_PLAYER_PATH/js/common.js" -IPFS_ID=$(ipfs id | grep ID | head -n 1 | awk -F\" '{print $4}') -sed -i "s#live.m3u8#/ipns/$IPFS_ID#" "$VIDEO_PLAYER_PATH/js/common.js" -sed -i s#__M3U8_HTTP_URLS__#\ # "$VIDEO_PLAYER_PATH/js/common.js" -cp -r "$VIDEO_PLAYER_PATH" /var/www/html/video-player -rm -rf "$BASE_DIR/tmp" - -# Add entry into nginx home screen -APP="" -sudo sed -i "s#<\!--APPLIST-->#$APP\n<\!--APPLIST-->#" "/var/www/html/index.html" diff --git a/.install/ipfs-pi-stream/process-stream.service b/.install/ipfs-pi-stream/process-stream.service deleted file mode 100644 index cd3166b..0000000 --- a/.install/ipfs-pi-stream/process-stream.service +++ /dev/null @@ -1,16 +0,0 @@ -[Unit] -Description=Service to process RTMP stream -Wants=network.target -After=ipfs.service - -[Service] -Type=simple -User=pi -Group=pi -ExecStart=/usr/bin/process-stream.sh -ExecStop=/bin/kill -s QUIT $MAINPID -Restart=on-failure -RestartSec=10s - -[Install] -WantedBy=multi-user.target diff --git a/.install/ipfs-pi-stream/process-stream.sh b/.install/ipfs-pi-stream/process-stream.sh deleted file mode 100755 index 53b92a0..0000000 --- a/.install/ipfs-pi-stream/process-stream.sh +++ /dev/null @@ -1,124 +0,0 @@ -#!/usr/bin/env bash - -HLS_TIME=40 -M3U8_SIZE=3 -IPFS_GATEWAY="https://ipfs.io" - -# Load settings - -# Prepare Pi Camera -sudo modprobe bcm2835-v4l2 -sudo v4l2-ctl --set-ctrl video_bitrate=100000 - -function startFFmpeg() { - while true; do - mv ~/ffmpeg.log ~/ffmpeg.1 - echo 1 > ~/stream-reset - - # Stream Raspberry Pi Camera - ffmpeg -f video4linux2 -input_format h264 -video_size 1280x720 -framerate 30 -i /dev/video0 -vcodec copy -hls_time "${HLS_TIME}" "${what}.m3u8" > ~/ffmpeg.log 2>&1 - - # Stream FM Station from a SDR module (see contrib/pi-stream to install drivers) - # Frequency ends in M IE 99.9M - # rtl_fm -f 99.9M -M fm -s 170k -A std -l0 -E deemp -r 44.1k | ffmpeg -r 15 -loop 1 -i ../audio.jpg -f s16le -ac 1 -i pipe:0 -c:v libx264 -tune stillimage -preset ultrafast -hls_time "${HLS_TIME}" "${what}.m3u8" > ~/ffmpeg 2>&1 - - sleep 0.5 - done -} - -# Create directory for HLS content - -currentpath="$HOME/live" -sudo umount "${currentpath}" -rm -rf "${currentpath}" -mkdir "${currentpath}" -sudo mount -t tmpfs tmpfs "${currentpath}" -# shellcheck disable=SC2164 -cd "${currentpath}" - -what="$(date +%Y%m%d%H%M)-LIVE" - -# Start ffmpeg in background -startFFmpeg & - -while true; do -#TODO# Fix this one -# shellcheck disable=SC2086,SC2012 - nextfile=$(ls -tr ${what}*.ts 2>/dev/null | head -n 1) - - if [ -n "${nextfile}" ]; then - # Check if the next file on the list is still being written to by ffmpeg - if lsof "${nextfile}" | grep -1 ffmpeg; then - # Wait for file to finish writing - # If not finished in 45 seconds something is wrong, timeout - inotifywait -e close_write "${nextfile}" -t ${HLS_TIME} - fi - - # Grab the timecode from the m3u8 file so we can add it to the log - timecode=$(grep -B1 "${nextfile}" "${what}.m3u8" | head -n1 | awk -F : '{print $2}' | tr -d ,) - attempts=5 - until [[ "${timecode}" || ${attempts} -eq 0 ]]; do - # Wait and retry - sleep 0.5 - timecode=$(grep -B1 "${nextfile}" "${what}.m3u8" | head -n1 | awk -F : '{print $2}' | tr -d ,) - attempts=$((attempts-1)) - done - - if ! [[ "${timecode}" ]]; then - # Set approximate timecode - timecode="${HLS_TIME}.000000" - fi - - reset_stream=$(cat ~/stream-reset) - reset_stream_marker='' - if [[ ${reset_stream} -eq '1' ]]; then - reset_stream_marker=" #EXT-X-DISCONTINUITY" - fi - - echo 0 > ~/stream-reset - # Current UTC date for the log - time=$(date "+%F-%H-%M-%S") - - # Add ts file to IPFS - ret=$(ipfs add --pin=false "${nextfile}" 2>/dev/null > ~/tmp.txt; echo $?) - attempts=5 - until [[ ${ret} -eq 0 || ${attempts} -eq 0 ]]; do - # Wait and retry - sleep 0.5 - ret=$(ipfs add --pin=false "${nextfile}" 2>/dev/null > ~/tmp.txt; echo $?) - attempts=$((attempts-1)) - done - if [[ ${ret} -eq 0 ]]; then - # Update the log with the future name (hash already there) - echo "$(cat ~/tmp.txt) ${time}.ts ${timecode}${reset_stream_marker}" >> ~/process-stream.log - - # Remove nextfile and tmp.txt - rm -f "${nextfile}" ~/tmp.txt - - # Write the m3u8 file with the new IPFS hashes from the log - totalLines="$(wc -l ~/process-stream.log | awk '{print $1}')" - - sequence=0 - if ((totalLines>M3U8_SIZE)); then - sequence=$((totalLines-M3U8_SIZE)) - fi - { - echo "#EXTM3U" - echo "#EXT-X-VERSION:3" - echo "#EXT-X-TARGETDURATION:${HLS_TIME}" - echo "#EXT-X-MEDIA-SEQUENCE:${sequence}" - } > current.m3u8 - tail -n ${M3U8_SIZE} ~/process-stream.log | awk '{print $6"#EXTINF:"$5",\n'${IPFS_GATEWAY}'/ipfs/"$2}' | sed 's/#EXT-X-DISCONTINUITY#/#EXT-X-DISCONTINUITY\n#/g' >> current.m3u8 - - # Add m3u8 file to IPFS and IPNS publish - m3u8hash=$(ipfs add current.m3u8 | awk '{print $2}') - ipfs name publish --timeout=5s "${m3u8hash}" & - - # Copy files to web server - cp current.m3u8 /var/www/html/live.m3u8 - cp ~/process-stream.log /var/www/html/live.log - fi - else - sleep 5 - fi -done diff --git a/.install/ipfs-pi-stream/uninstall b/.install/ipfs-pi-stream/uninstall deleted file mode 100755 index 1c0a574..0000000 --- a/.install/ipfs-pi-stream/uninstall +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash - -set -e - -BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -sudo systemctl stop process-stream -sudo systemctl disable process-stream -sudo rm -f /usr/bin/process-stream.sh -sudo rm -f /etc/systemd/system/process-stream.service -sudo systemctl daemon-reload - -# Remove ffmpeg and supporting tools -sudo apt-get -y remove ffmpeg lsof inotify-tools - -# Revert permissions -sudo chmod 755 /var/www/html -sed -i "/ipfs repo gc/d" | sudo tee --append /etc/crontab diff --git a/.install/ipfs.sh b/.install/ipfs.sh deleted file mode 100755 index eedc570..0000000 --- a/.install/ipfs.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/bash -ipfs() { -# Install IPFS - -MY_PATH="`dirname \"$0\"`" # relative -MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized - -## Config -templates="$MY_PATH/.install/templates/ipfs" - -if [ "$EUID" -eq 0 ] - then echo -e "${c_red}DO NOT EXECUTE AS root. Choose a user for your Astroport Station (we like pi)$c_" - exit 1 -else echo -e "${c_yellow}OK $USER, let's go!$c_"; -fi - -[[ -d ~/.ipfs ]] && echo "IPFS install exist, please remove backup before execute this script" && exit 1 - -echo -e "${c_yellow}Onboarding IPFS...$c_" -[[ -f /usr/local/bin/ipfs ]] && sudo service ipfs stop - - -if [[ $ARM == "yes" ]]; then - wget https://dist.ipfs.io/ipfs-update/v1.5.2/ipfs-update_v1.5.2_linux-arm.tar.gz -O $MY_PATH/ipfs-update.tar.gz || err+="Download ipfs-update" -else - wget https://dist.ipfs.io/ipfs-update/v1.5.2/ipfs-update_v1.5.2_linux-amd64.tar.gz -O $MY_PATH/ipfs-update.tar.gz || err+="Download ipfs-update" -fi - -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 latest ipfs" -sudo ipfs-update install latest || err+="Install IPFS" - -echo "CREATE SYSTEMD ipfs SERVICE" -sudo cp -f $templates/ipfs.service /etc/systemd/system/ -sudo sed -i "s/_USER/$USER/g" /etc/systemd/system/ipfs.service - -sudo systemctl daemon-reload || err+="Restart IPFS" -sudo systemctl enable ipfs || err+="Enable IPFS daemon" - -# INIT ipfs -ipfs init -p lowpower -# ipfs init -p server ## Uncomment for server infrastructure - -# ACTIVATE CONFIG OPTIONS -# PUBSUB -ipfs config Pubsub.Router gossipsub -# MAXSTORAGE -availableDiskSize=$(df -P ~/ | awk 'NR>1{sum+=$4}END{print sum}') -diskSize="$((availableDiskSize / 2))" -ipfs config Datastore.StorageMax $diskSize -## PORT FORWARD (SSH) -ipfs config --json Experimental.Libp2pStreamMounting true - -######### UPDATE BOOTSTRAP LIST ########### -ipfs bootstrap rm --all - -sudo systemctl restart ipfs || err+="Restart IPFS daemon" - - -exit 0 -} - -$@ diff --git a/.install/loveland.sh b/.install/loveland.sh deleted file mode 100755 index 19df204..0000000 --- a/.install/loveland.sh +++ /dev/null @@ -1,264 +0,0 @@ -#!/bin/bash -######################################################################## -# Author: Fred (support@qo-op.com) -# Version: 0.3 -# 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##*/}" -######################################################################## -YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) || er+=" ipfs daemon not running" -IPFSNODEID=$(ipfs id -f='\n') || er+=" ipfs id problem" -WHOAMI=$(sbotc whoami | jq -r .id) || er+=" sbotc whoami problem" -[[ "$YOU" == "" || "$IPFSNODEID" == "" || "$WHOAMI" == "" ]] && echo "ERROR : $er " && exit 1 -######################################################################## -#### DO NOT RUN AS ROOT -[[ $USER == "root" ]] && echo "DO NOT RUN AS root!! Use regular USER with sudo AUTHORISATION" && exit 1 -#### APACHE NOT SUPPORTED -is_apache_running=$(ps auxf --sort=+utime | grep -w apache | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1); -[[ $is_apache_running ]] && echo "SORRY ONLY nginx is supported. EXIT" && exit 1 -#### ARM / X64 NOT USED THERE -MACHINE_TYPE=`uname -m` -[ ${MACHINE_TYPE:0:3} == 'arm' ] && isARM="YES" - -### UPDATE apt cache -sudo apt-get update - -### Adding YOU to www-data group -sudo adduser $YOU www-data - -################################## -## INSTALL RAINBOW ASCII ;) -[[ ! $(which figlet) ]] && sudo apt install figlet -y -[[ ! $(which lolcat) ]] && sudo apt install lolcat -y - -echo ' -++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - ______ __ ____ ___ - / ____/___ ____ __ __/ / ____ _/ __ \____ _____/ (_)___ - / / / __ \/ __ \/ / / / / / __ `/ /_/ / __ `/ __ / / __ \ -/ /___/ /_/ / /_/ / /_/ / /___/ /_/ / _, _/ /_/ / /_/ / / /_/ / -\____/\____/ .___/\__, /_____/\__,_/_/ |_|\__,_/\__,_/_/\____/ - /_/ /____/ - -Multimedia Layer (https://www.copylaradio.com) -' | lolcat -## MULTIMEDIA -## VIDEO & AUDIO & PLAYLISTS ~/.zen/ DIR -mkdir -p ~/.zen/video -mkdir -p ~/.zen/audio -mkdir -p ~/.zen/playlists - -######## YOUTUBE-DL ########## -if [[ ! $(which youtube-dl) ]]; then - sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl || err=1 - sudo chmod a+rx /usr/local/bin/youtube-dl - sudo chown $YOU /usr/local/bin/youtube-dl -fi - -############################### -# MPD/MPC RompR AUDIO LAYER -############################### -if [[ ! $(which mpd) ]]; then - sudo apt-get install libid3-tools mpd mpc lame ffmpeg lsof lltag inotify-tools bc -y || err=1 - sudo apt-get install lame sox libsox-fmt-mp3 eyed3 python-chardet imagemagick curl -y || err=1 #libav-tools unavailable on some system - sudo apt-get install ca-certificates git-core binutils rsync alsa-utils bc espeak mpg321 fuse atomicparsley -y || err=1 - - ## CONFIG MPD - sudo cp -f /home/$YOU/.zen/astrXbian/.install/templates/copylaradio/mpd.conf /etc/mpd.conf - sudo sed -i "s/_USER_/$YOU/g" /etc/mpd.conf || err=1 - mkdir ~/.config/mpd && sudo cp -f /etc/mpd.conf ~/.config/mpd/mpd.conf && sudo chown $YOU ~/.config/mpd/mpd.conf - - ## CHOWN mpd FILES STRUCTURE - sudo chown -R $YOU /var/lib/mpd/ /var/run/mpd /run/mpd /var/log/mpd - sudo service mpd restart || err=1 -fi - -### INSTALL NGINX -echo '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - _ - ____ ____ _(_)___ _ __ - / __ \/ __ `/ / __ \| |/_/ - / / / / /_/ / / / / /> < -/_/ /_/\__, /_/_/ /_/_/|_| - /____/ - -install -' | lolcat - -sudo apt-get install fail2ban nginx ssl-cert php-curl php-sqlite3 php-gd php-json php-xml php-mbstring php-fpm sqlite -y || err=1 - -[[ ! $(which nslookup) ]] && sudo apt-get install lolcat dnsutils -y - -echo '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - __ ___ _ ___ - / |/ /_ __ ____ ____ _____ ___ ___ (_)___/__ \ - / /|_/ / / / / / __ \/ __ `/ __ `__ \/ _ \ / / ___// _/ - / / / / /_/ / / / / / /_/ / / / / / / __/ / (__ )/_/ -/_/ /_/\__, / /_/ /_/\__,_/_/ /_/ /_/\___/ /_/____/(_) - /____/ -' | lolcat - -myIP=$(hostname -I | awk '{print $1}' | head -n 1) -isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1$)|(^[fF][cCdD])/") - -# Ask to the router its name (BOX DNS or system defined) -[[ -f /home/$YOU/.zen/astrXbian/zen/tools/nodename ]] && NODENAME=$(/home/$YOU/.zen/astrXbian/zen/tools/nodename) \ -|| NODENAME=$(curl -s https://git.p2p.legal/axiom-team/astroport/raw/master/zen/tools/nodename | bash) ## RUNNING ALONE !! - -echo $NODENAME - -###################################### -### LAUNCHIN OASIS = SSB HTTP interface -###################################### -echo ' - _ - ____ ____ ______(_)____ - / __ \/ __ `/ ___/ / ___/ -/ /_/ / /_/ (__ ) (__ ) -\____/\__,_/____/_/____/ - SSB DEMO HTTP interface -' | lolcat -# IN CASE, KILL RUNNING OASIS -isOASIS=$(ps auxf --sort=+utime | grep -w oasis | grep -v -E 'color=auto|grep' | tail -n 1 | awk '{print $2}') -[[ $isOASIS ]] && sudo kill -9 $isOASIS - -echo "Starting OASIS with good $NODENAME & network config" -echo "TODO: add to your /etc/rc.local or systemd or initV !!!" - -#if [[ ! $isLAN ]]; then -# ### TODO: unlock oasis restrictions!! CANNOT MAKE PRIVATE MESSAGE => Feddless.social CAN add it as module on loveland portal!!) -# oasis --allow-host $NODENAME --host $NODENAME --public 2>&1>/dev/null & -# echo "--public = OASIS STATION IS IN VIEWING MODE ONLY..." -#else -# oasis --allow-host $NODENAME --host $NODENAME 2>&1>/dev/null & -#fi - -#sleep 5 - -echo ' - __ ____ _ __________ __ - / / / __ \ | / / ____/ / ____ _____ ____/ / - / / / / / / | / / __/ / / / __ `/ __ \/ __ / - / /___/ /_/ /| |/ / /___/ /___/ /_/ / / / / /_/ / -/_____/\____/ |___/_____/_____/\__,_/_/ /_/\__,_/ - -Portal -' | lolcat - -### -echo "INSTALL LOVELand WebSite. Linking to /var/www ..." -if [[ ! -L /var/www/loveland ]]; then - sudo ln -s /home/$YOU/.zen/astrXbian/www/LOVELand /var/www/loveland -fi - -echo "JUKEBOX init" -[[ -d /var/www/loveland/jukebox/albumart ]] && sudo chmod -R 777 /var/www/loveland/jukebox/albumart -[[ -d /var/www/loveland/jukebox/prefs ]] && sudo chmod -R 777 /var/www/loveland/jukebox/prefs -[[ -d /var/www/loveland/g1barre/img/qrcodes ]] && sudo chmod -R 777 /var/www/loveland/g1barre/img/qrcodes - -# CONFIG NGINX - LOVE LAND FRONTAL WEB PAGE -echo "$NODENAME" | figlet -f slant | lolcat - -## Write NODENAME to IPFS -echo "$NODENAME" > /home/$YOU/.zen/ipfs/.$IPFSNODEID/G1SSB/_nodename - -PHPVERSION=$(ps auxf | grep php-fpm | grep -v -E 'color=auto|grep' | head -n 1 | grep -oP '(?<=\().*(?=\))' | awk -F '/' '{print $4}') -### ASTROPORT STATION LOVELAND PORTAL -sudo sed "s/_PHPVERSION_/$PHPVERSION/g" /home/$YOU/.zen/astrXbian/www/loveland.conf > /tmp/loveland.conf -sudo sed -i "s/_MY_NODE_NAME_/$NODENAME/g" /tmp/loveland.conf -sudo sed -i "s/_PORT_/10010/g" /tmp/loveland.conf -sudo sed -i "s/_APPLI_//g" /tmp/loveland.conf -sudo cp -f /tmp/loveland.conf /etc/nginx/conf.d/loveland.conf - -### GCHANGE G1 Zen -sudo rm -f /etc/nginx/conf.d/gchange.conf -sudo sed "s/_PHPVERSION_/$PHPVERSION/g" /home/$YOU/.zen/astrXbian/www/loveland.conf > /tmp/gchange.conf -sudo sed -i "s/_MY_NODE_NAME_/$NODENAME/g" /tmp/gchange.conf -sudo sed -i "s/_PORT_/10020/g" /tmp/gchange.conf -sudo sed -i "s/_APPLI_/gchange/g" /tmp/gchange.conf -sudo cp -f /tmp/gchange.conf /etc/nginx/conf.d/gchange.conf - -### CESIUM G1 Zen -sudo sed "s/_PHPVERSION_/$PHPVERSION/g" /home/$YOU/.zen/astrXbian/www/loveland.conf > /tmp/cesium.conf -sudo sed -i "s/_MY_NODE_NAME_/$NODENAME/g" /tmp/cesium.conf -sudo sed -i "s/_PORT_/10030/g" /tmp/cesium.conf -sudo sed -i "s/_APPLI_/cesium/g" /tmp/cesium.conf -sudo cp -f /tmp/cesium.conf /etc/nginx/conf.d/cesium.conf - -### JUKEBOX RompR CopyLaRadio -if [[ $(which mpd) ]]; then - sudo sed "s/_PHPVERSION_/$PHPVERSION/g" /home/$YOU/.zen/astrXbian/www/loveland.conf > /tmp/jukebox.conf - sudo sed -i "s/_MY_NODE_NAME_/$NODENAME/g" /tmp/jukebox.conf - sudo sed -i "s/_PORT_/10011/g" /tmp/jukebox.conf - sudo sed -i "s/_APPLI_/jukebox/g" /tmp/jukebox.conf - sudo cp -f /tmp/jukebox.conf /etc/nginx/conf.d/jukebox.conf -fi - -### SSB OASIS Zen (PROXY MODE 10040 -> 3000) -if [[ $(which oasis) ]]; then - sudo sed "s/_MY_NODE_NAME_/$NODENAME/g" /home/$YOU/.zen/astrXbian/www/oasis.conf > /tmp/oasis.conf - sudo sed -i "s/_PORT_/10040/g" /tmp/oasis.conf - sudo sed -i "s/_LHOST_/$NODENAME:3000/g" /tmp/oasis.conf - sudo sed -i "s/_APPLI_//g" /tmp/oasis.conf - sudo cp -f /tmp/oasis.conf /etc/nginx/conf.d/oasis.conf -# TRICK: COULD BE USED TO ADD .htpasswod ACCESS CONTROL AND REMOVE --public -# TODO use "ipfs p2p" to AGREGATE ALL OASIS on ONE (not ALL like G1SMS) ? -# NEED G1PUB to be identified with same MEMBER owner in 'zen/ipfs_OPEN_ports.sh'? -fi - -### G1SMS propagation to localhost:10099 / 10097 ("ipfs p2p" forwarded) -if [[ $(which gammu) ]]; then -# DIRECT MODE - sudo sed "s/_PHPVERSION_/$PHPVERSION/g" /home/$YOU/.zen/astrXbian/www/loveland.conf > /tmp/g1sms.conf - sudo sed -i "s/_MY_NODE_NAME_/$NODENAME/g" /tmp/g1sms.conf - sudo sed -i "s/_PORT_/10099/g" /tmp/g1sms.conf - sudo sed -i "s/_APPLI_/g1sms/g" /tmp/g1sms.conf - sudo cp -f /tmp/g1sms.conf /etc/nginx/conf.d/g1sms.conf -else -# PROXY MODE (10099 -> 10097) ### ipfs p2p PROPAGATION WITH 'zen/ipfs_OPEN_ports.sh' - sudo sed "s/_MY_NODE_NAME_/$NODENAME/g" /home/$YOU/.zen/astrXbian/www/oasis.conf > /tmp/g1sms_proxy.conf - sudo sed -i "s/_PORT_/10099/g" /tmp/g1sms_proxy.conf - sudo sed -i "s/_LHOST_/127\.0\.0\.1\:10097/g" /tmp/g1sms_proxy.conf - sudo sed -i "s/_APPLI_/g1sms/g" /tmp/g1sms_proxy.conf - sudo cp -f /tmp/g1sms_proxy.conf /etc/nginx/conf.d/g1sms_proxy.conf -fi - -##### RESTART NGINX -sudo systemctl restart nginx || err=1 - -if [[ $err ]]; then - - echo -e "${c_red}Installation de LOVELand bizarre??$c_" - echo "PLEASE... POST YOUR ISSUE! https://git.p2p.legal/axiom-team/astroport/issues" - - exit 1 -else - - echo -e "${c_green}LOVE Land a été installé avec succès$c_" - echo -e "LoveLand Portal link http://$NODENAME:10010 (TRY ME) - -Add ScuttleButt Astroport PUB Invitation: -${c_green}With Patchwork: "Join a server"$c_ -Or with Oasis: http://$NODENAME:3000/settings (dev mode, still buggy) -${c_light}oasis.astroport.com:8008::@UeiA9iqZ0/XTjmYBht230KGr44bsr+Tl5BXSUDFv8vo=.ed25519~jd9Z4y/d/xZCF7bfuSgQSiSGLMeWFhwMosKUFhFxeEY=" $c_ - -fi - -# Open LOVEland in browser -URL="http://$NODENAME" -path=$(which xdg-open || which gnome-open) - -xo () -{ - for var in "$@"; do - $path "$var"; - sleep 0.5 - done -} - -[[ -n $path ]] && xo $URL:10010 $URL:10020 $URL:10030 > /dev/null - -} # for script being completely downloaded before run diff --git a/.install/nextcloud/README.md b/.install/nextcloud/README.md deleted file mode 100644 index 0a53e21..0000000 --- a/.install/nextcloud/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# Automatic install of Nextcloud on Debian 8/9/10 -## Use - -Set good variables for your use case at the beginning of install.sh: - -``` -nc_domain="" # Votre nom de domaine pour votre nextcloud. Si vide il prendra le premier argument que vous passerez, sinon le hostname de votre machine -nc_port=80 # Numéro de port d'écoute de nginx -admin_user="admin" # Le pseudo du compte admin -admin_pass="admin" # Le mot de passe que vous désirez pour le compte admin -db_pass="" # Le mot de passe que vous désirez pour MariaDB. Si vide, un mot de passe aléatoire sécurisé sera choisi -isSSL=false # true si nextcloud et nginx doivent être configuré en https -configMaria=auto # Mettez manual ou auto, attention auto est expérimental et vraiment pas recommendé -p2env=false # true si vous êtes dans un environnement p2p.legal -``` - -Then: - -``` -chmod u+x install.sh -./install.sh -``` - -You can change the ssl state of your instance after the installation if you need. -Just execute ssl.sh: - -`./ssl.sh` - -If you prefere, you can download this script directly via: - -``` -wget https://dev-nextcloud.p2p.legal/installeur/install-nextcloud.tar.gz -tar -zxvf install-nextcloud.tar.gz -./install.sh 2>&1 | tee loginstall.log -``` diff --git a/.install/nextcloud/install.sh b/.install/nextcloud/install.sh deleted file mode 100755 index ab2da4b..0000000 --- a/.install/nextcloud/install.sh +++ /dev/null @@ -1,186 +0,0 @@ -#!/bin/bash -################################################################################ -# Author: poka (poka@p2p.legal) -# Version: 0.1 -# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) -################################################################################ - - -### Variables ### - -nc_domain="" # Votre nom de domaine pour votre nextcloud. Si vide il prendra le premier argument que vous passerez, sinon le hostname de votre machine -nc_port=10050 # Numéro de port d'écoute de nginx -YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) -admin_user="$YOU" # Le pseudo du compte admin -admin_pass="0penS0urce!" # Le mot de passe que vous désirez pour le compte admin -db_pass="" # Le mot de passe que vous désirez pour MariaDB. Si vide, un mot de passe aléatoire sécurisé sera choisi -data_dir="/home/$YOU/.zen/nextcloud" # Le répertoir data de nextcloud, toutes les données utilisateurs s'y trouvent -isSSL=false # true si nextcloud et nginx doivent être configuré en https -configMaria=auto # Mettez manual ou auto, attention auto est expérimental et vraiment pas recommendé -p2env=false # true si vous êtes dans un environnement p2p.legal - -################# - -if [ "$EUID" -ne 0 ] - then echo -e "${c_red}Veuillez executez ce script en root$c_" - exit 1 -fi - -## Atroport config -echo -e "${c_yellow}Getting local hostname...$c_" -nc_domain=$(/home/$YOU/.zen/astrXbian/zen/tools/nodename) -templates="/home/$YOU/.zen/astrXbian/.install/nextcloud/templates" - -## Set var -[[ -z $nc_domain ]] && nc_domain=$1 -[[ -z $nc_domain ]] && nc_domain=$(echo $HOSTNAME.p2p.legal) -[[ -z $db_pass ]] && db_pass="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)" && echo "Votre mot de passe mysql nextcloud est : $db_pass" >> /root/nextcloud_mysql_pwd.txt -db_pass_root="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 32 | head -n 1)" - -if [[ p2env == "true" ]]; then - cd /nextcloud/templates/ -else - [[ ! -e $templates ]] && echo -e "${c_red}Erreur: Le dossier templates n'existe pas, installation impossible.$c_" && exit 1 - cd $templates -fi - -## Update system packages - -apt install -y lsb-release apt-transport-https ca-certificates -apt update -y - -apt install nginx mariadb-server apt-transport-https curl gnupg2 git lsb-release ssl-cert ca-certificates apt-transport-https tree locate software-properties-common dirmngr screen htop net-tools zip unzip curl ffmpeg ghostscript libfile-fcntllock-perl -y - -systemctl start nginx || (echo -e "${c_red}Erreur quelque part ...$c_" && exit 1) -systemctl start mariadb || (echo -e "${c_red}Erreur quelque part ...$c_" && exit 1) -systemctl enable mariadb || (echo -e "${c_red}Erreur quelque part ...$c_" && exit 1) -systemctl enable nginx || (echo -e "${c_red}Erreur quelque part ...$c_" && exit 1) - -echo -e "${c_yellow} === Installing php ... ===$c_" -apt install php php-fpm php-xml php-curl php-gd php php-cgi php-cli php-zip php-mysql php-mbstring php-intl php-json php-bz2 php-ldap php-apcu imagemagick php-imagick php-smbclient -y -export PHPVERSION=$(ps auxf | grep php-fpm | grep -v -E 'color=auto|grep' | head -n 1 | grep -oP '(?<=\().*(?=\))' | awk -F '/' '{print $4}') - -echo -e "${c_yellow} === Configuring php ... ===$c_" -[[ ! -e /etc/php/$PHPVERSION/cli/php.ini.bak ]] && (bash configure_php.sh || (echo -e "${c_red}Erreur quelque part ...$c_" && exit 1)) || echo "PHP déjà configuré, skip" - -echo -e "${c_yellow} === Configure MariaDB ===$c_" -configMariaManual() { - mysql_secure_installation || (echo -e "${c_red}Erreur quelque part ...$c_" && exit 1) -} -configMariaAuto() { - mysql -e "UPDATE mysql.user SET Password = PASSWORD('$db_pass_root') WHERE User = 'root'" - isLocalhostUsers=$(mysql -e "select user from mysql.user;" | grep "localhost") - isTestDB=$(mysql -e "show databases" | grep "test") - [[ -n $isLocalhostUsers ]] && mysql -e "DROP USER ''@'localhost'; DROP USER ''@'$(hostname)'" - [[ -n $isTestDB ]] && mysql -e "DROP DATABASE test" - mysql -e "FLUSH PRIVILEGES" -} - -[[ $configMaria == "auto" ]] && configMariaAuto || configMariaManual -[[ ! -e /etc/mysql/my.cnf.bak ]] && (mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak && cp my.cnf /etc/mysql/ && service mysql restart) || echo "MariaDB déjà configuré, skip" - -echo -e "${c_yellow} === Create and configure database... ===$c_" -isDBCreate=$(mysql -e "show databases" | grep "nextcloud") -[[ -z $isDBCreate ]] && mysql -e "CREATE DATABASE nextcloud;CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY \"$db_pass\";GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';FLUSH PRIVILEGES;ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;" || echo "La base de donnée de nextcloud est déjà créé, skip" - -echo -e "${c_yellow} === Installing and configure Redis... ===$c_" -apt install redis-server php-redis -y - -[[ ! -e /etc/redis/redis.conf.bak ]] && cp /etc/redis/redis.conf /etc/redis/redis.conf.bak || echo "Redis est déjà configuré, skip" -sed -i "s/port 6379/port 0/" /etc/redis/redis.conf -sed -i "s/redis.sock/redis-server.sock/" /etc/redis/redis.conf -sed -i s/\#\ unixsocket/\unixsocket/g /etc/redis/redis.conf -sed -i "s/unixsocketperm 700/unixsocketperm 770/" /etc/redis/redis.conf -sed -i "s/# maxclients 10000/maxclients 512/" /etc/redis/redis.conf -usermod -a -G redis www-data || (echo -e "${c_red}Erreur quelque part ...$c_" && exit 1) -[[ ! -e /etc/sysctl.conf.bak ]] && cp /etc/sysctl.conf /etc/sysctl.conf.bak || echo "sysctl est déjà configuré, skip" -sed -i '$avm.overcommit_memory = 1' /etc/sysctl.conf - -service redis-server restart || (echo -e "${c_red}Erreur quelque part ...$c_" && exit 1) - -echo -e "${c_yellow} === Installing NextCloud... ===$c_" - -if [[ ! -e /var/www/nextcloud ]]; then - mkdir /var/www/nextcloud - chown www-data:www-data /var/www/nextcloud - chmod 750 /var/www/nextcloud || (echo -e "${c_red}Erreur quelque part ...$c_" && exit 1) - - wget https://download.nextcloud.com/server/releases/latest.tar.bz2 - tar -xjf latest.tar.bz2 -C /var/www && chown -R www-data:www-data /var/www/ && rm -f latest.tar.bz2 -fi - -if [[ ! -e $data_dir ]]; then - mkdir -p $data_dir - chown www-data:www-data $data_dir - chmod 750 $data_dir || (echo -e "${c_red}Erreur quelque part ...$c_" && exit 1) -fi - -## Add local IP as secondary trust domain -# Prefere occ methode ... -# sed -i "/0 => '$nc_domain'.*/a \ 1 => '$ip_local:$nc_port'," /var/www/nextcloud/config/config.php -ip_local=$(/sbin/ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p') -[[ $nc_port == 80 ]] && nc_port_loc="" || nc_port_loc=":$nc_port" - -[[ -e /var/www/nextcloud/config/config.php ]] && isNCConfig=$(cat /var/www/nextcloud/config/config.php | grep "'installed' => true") -[[ -z "$isNCConfig" ]] && sudo -u www-data php /var/www/nextcloud/occ maintenance:install --database "mysql" --database-name "nextcloud" --database-user "nextcloud" --database-pass "$db_pass" --admin-user "$admin_user" --admin-pass "$admin_pass" --data-dir "$data_dir" -sleep 0.2 -sudo -u www-data php /var/www/nextcloud/occ config:system:set mysql.utf8mb4 --type boolean --value="true" -sudo -u www-data php /var/www/nextcloud/occ config:system:set trusted_domains 0 --value=$nc_domain -sudo -u www-data php /var/www/nextcloud/occ config:system:set trusted_domains 1 --value=$ip_local$nc_port_loc -sudo -u www-data php /var/www/nextcloud/occ config:system:set overwrite.cli.url --value=$nc_domain - -isNCConfigAdd=$(cat /var/www/nextcloud/config/config.php | grep "activity_expire_days") -if [[ -z "$isNCConfigAdd" ]]; then - sudo -u www-data sed -i 's/^[ ]*//' /var/www/nextcloud/config/config.php - sudo -u www-data sed -i '/);/d' /var/www/nextcloud/config/config.php - cat config_complete.php >> /var/www/nextcloud/config/config.php -fi - -sudo -u www-data sed -i "s/output_buffering=.*/output_buffering=0/" /var/www/nextcloud/.user.ini - -sudo -u www-data php /var/www/nextcloud/occ app:disable survey_client -sudo -u www-data php /var/www/nextcloud/occ app:disable firstrunwizard -sudo -u www-data php /var/www/nextcloud/occ app:enable admin_audit -sudo -u www-data php /var/www/nextcloud/occ app:enable files_pdfviewer - -echo -e "${c_yellow} === Configure nginx ... ===$c_" -cp nextcloud.conf /etc/nginx/conf.d/ -cp *optimization.conf /etc/nginx/ -sed -i "s/NC_DOMAIN/$nc_domain/" /etc/nginx/conf.d/nextcloud.conf -sed -i "s/NC_PORT/$nc_port/" /etc/nginx/conf.d/nextcloud.conf -sed -i "s/_PHPVERSION/$PHPVERSION/" /etc/nginx/conf.d/nextcloud.conf -sed -i "s/80 default_server;/81 default_server;/" /etc/nginx/sites-enabled/default - -chmod u+x ../ssl.sh -if [[ $isSSL == "false" ]]; then - ../ssl.sh nonssl -else - ../ssl.sh certif - ../ssl.sh ssl -fi - -echo -e "${c_yellow} === Mise en place des scripts et crons ... ===$c_" -[[ ! -e /opt/scripts ]] && mkdir /opt/scripts -cp nc_optimize.sh /opt/scripts/ -cp upgrade.sh /opt/scripts/ -cp occ /opt/scripts/ -echo "alias occ='/opt/scripts/occ'" >> ~/.bashrc -alias occ='/opt/scripts/occ' - -[[ -z $(crontab -l | grep "/var/www/nextcloud/cron.php") ]] && (crontab -l ; echo "*/5 * * * * sudo -u www-data /usr/bin/php -f /var/www/nextcloud/cron.php > /dev/null 2>&1") | crontab -u root - || echo "cron nextcloud ever set, skip" -[[ -z $(crontab -l | grep "/opt/scripts/optimize.sh") ]] && (crontab -l ; echo "5 1 * * * /opt/scripts/optimize.sh > /dev/null 2>&1") | crontab -u root - || echo "cron optimize ever set, skip" -sudo -u www-data php /var/www/nextcloud/occ background:cron -sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices -sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigint - -echo -e "${c_yellow} === Restarting services ... ===$c_" -service php$PHPVERSION-fpm restart && service nginx restart && service mysql restart && service redis-server restart || (echo -e "${c_red}Impossible de reloader les service$c_" && exit 1) - -bash /opt/scripts/nc_optimize.sh -usermod -aG www-data $YOU - -echo -e "${c_green}Nextcloud a été installé avec succès !\nOuverture...$c_" -URL="http://$nc_domain:$nc_port" -[[ -x $BROWSER ]] && su -c "exec \"$BROWSER\" \"$URL\"" $YOU > /dev/null -path=$(which xdg-open || which gnome-open) && su -c "exec \"$path\" \"$URL\"" $YOU > /dev/null -echo -e "${c_yellow}Can't find browser$c_" diff --git a/.install/nextcloud/ssl.sh b/.install/nextcloud/ssl.sh deleted file mode 100755 index 8e9521a..0000000 --- a/.install/nextcloud/ssl.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/bash - -if [ "$EUID" -ne 0 ] - then echo "Veuillez executez ce script en root" - exit 1 -fi - -domain=$(cat /etc/nginx/conf.d/nextcloud.conf | grep server_name | awk '{ print $2 }') -domain=$(echo ${domain::-1}) - -[[ ! $1 =~ ^(ssl|nonssl|certif)$ ]] && echo "Veuillez choisir ssl, nonssl ou certif pour créer un certificat ssl" && exit 1 - -ssl(){ - sed -i "s/'overwriteprotocol' => 'http'/'overwriteprotocol' => 'https'/" /var/www/nextcloud/config/config.php - sed -i "s/http/https/" /etc/nginx/conf.d/nextcloud.conf - sed -i "s/fastcgi_param HTTPS off/fastcgi_param HTTPS on/" /etc/nginx/conf.d/nextcloud.conf - sed -i "s/listen 443;/listen 443 ssl;/" /etc/nginx/conf.d/nextcloud.conf - [[ ! -e /etc/nginx/includes ]] && mkdir /etc/nginx/includes - cp .install_templates/ssl.conf /etc/nginx/includes/ - sed -i "/fastcgi_hide_header X-Powered-By;/a \ include includes/ssl.conf;\n ssl_certificate /etc/letsencrypt/live/$domain/fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live/$domain/privkey.pem;" /etc/nginx/conf.d/nextcloud.conf -} - -nonssl(){ - sed -i "s/'overwriteprotocol' => 'https'/'overwriteprotocol' => 'http'/" /var/www/nextcloud/config/config.php - sed -i "s/https/http/" /etc/nginx/conf.d/nextcloud.conf - sed -i "s/fastcgi_param HTTPS on/fastcgi_param HTTPS off/" /etc/nginx/conf.d/nextcloud.conf - sed -i '/ssl.conf;/d' /etc/nginx/conf.d/nextcloud.conf - sed -i '/ssl_certificate/d' /etc/nginx/conf.d/nextcloud.conf -} - - -install_certbot(){ - sudo apt update - if [[ $(grep buster /etc/os-release) ]]; then - [[ -z $(cat /etc/apt/sources.list | grep "buster-backports main") ]] && echo "deb http://deb.debian.org/debian buster-backports main" >> /etc/apt/sources.list - sudo apt install certbot python-certbot-nginx -t buster-backports -y - elif [[ $(grep stretch /etc/os-release) ]]; then - sudo apt install certbot python-certbot-nginx -y - elif [[ $(grep -E '16.|17.|18.|19.' /etc/os-release) ]]; then - sudo apt install software-properties-common - sudo add-apt-repository universe - sudo add-apt-repository ppa:certbot/certbot - sudo apt update - sudo apt install certbot python-certbot-nginx - else - echo "OS non supporté pour certbot." && exit 1 - fi -} - -create_certificate() { - cd .install_templates - certbot --nginx certonly --non-interactive --agree-tos -m $USER@$domain -d $domain && echo "Le certificat de $domain a bien été déployé" || echo "Une erreur s'est produite lors de la création du certificat SSL" - - ## Cronification - [[ ! -e /opt/scripts ]] && mkdir /opt/scripts - cp ssl_renew.sh /opt/scripts/ - [[ -z $(crontab -l | grep "/opt/scripts/ssl_renew.sh") ]] && (crontab -l ; echo "12 2 * * 1 /opt/scripts/ssl_renew.sh") | crontab -u root - -} - -certif() { - [[ -z $(which certbot) ]] && install_certbot - [[ -n /etc/letsencrypt/live/$domain/fullchain.pem ]] && create_certificate -} - -$@ - -service nginx reload - -exit 0 diff --git a/.install/nextcloud/templates/config_complete.php b/.install/nextcloud/templates/config_complete.php deleted file mode 100644 index db825eb..0000000 --- a/.install/nextcloud/templates/config_complete.php +++ /dev/null @@ -1,52 +0,0 @@ -'activity_expire_days' => 14, -'auth.bruteforce.protection.enabled' => true, -'blacklisted_files' => -array ( -0 => '.htaccess', -1 => 'Thumbs.db', -2 => 'thumbs.db', -), -'cron_log' => true, -'enable_previews' => true, -'enabledPreviewProviders' => -array ( -0 => 'OC\\Preview\\PNG', -1 => 'OC\\Preview\\JPEG', -2 => 'OC\\Preview\\GIF', -3 => 'OC\\Preview\\BMP', -4 => 'OC\\Preview\\XBitmap', -5 => 'OC\\Preview\\Movie', -6 => 'OC\\Preview\\PDF', -7 => 'OC\\Preview\\MP3', -8 => 'OC\\Preview\\TXT', -9 => 'OC\\Preview\\MarkDown', -), -'filesystem_check_changes' => 0, -'filelocking.enabled' => 'true', -'htaccess.RewriteBase' => '/', -'integrity.check.disabled' => false, -'knowledgebaseenabled' => false, -'logfile' => '/var/log/nextcloud.log', -'loglevel' => 2, -'logtimezone' => 'Europe/Paris', -'log_rotate_size' => 104857600, -'maintenance' => false, -'memcache.local' => '\\OC\\Memcache\\APCu', -'memcache.locking' => '\\OC\\Memcache\\Redis', -'overwriteprotocol' => 'https', -'preview_max_x' => 1024, -'preview_max_y' => 768, -'preview_max_scale_factor' => 1, -'redis' => -array ( -'host' => '/var/run/redis/redis-server.sock', -'port' => 0, -'timeout' => 0.0, -), -'quota_include_external_storage' => false, -'share_folder' => '/Shares', -'skeletondirectory' => '', -'theme' => '', -'trashbin_retention_obligation' => 'auto, 7', -'updater.release.channel' => 'stable', -); diff --git a/.install/nextcloud/templates/configure_php.sh b/.install/nextcloud/templates/configure_php.sh deleted file mode 100755 index 68ba77d..0000000 --- a/.install/nextcloud/templates/configure_php.sh +++ /dev/null @@ -1,50 +0,0 @@ -cp /etc/php/$PHPVERSION/fpm/pool.d/www.conf /etc/php/$PHPVERSION/fpm/pool.d/www.conf.bak -cp /etc/php/$PHPVERSION/cli/php.ini /etc/php/$PHPVERSION/cli/php.ini.bak -cp /etc/php/$PHPVERSION/fpm/php.ini /etc/php/$PHPVERSION/fpm/php.ini.bak -cp /etc/php/$PHPVERSION/fpm/php-fpm.conf /etc/php/$PHPVERSION/fpm/php-fpm.conf.bak -sed -i "s/;env\[HOSTNAME\] = /env[HOSTNAME] = /" /etc/php/$PHPVERSION/fpm/pool.d/www.conf -sed -i "s/;env\[TMP\] = /env[TMP] = /" /etc/php/$PHPVERSION/fpm/pool.d/www.conf -sed -i "s/;env\[TMPDIR\] = /env[TMPDIR] = /" /etc/php/$PHPVERSION/fpm/pool.d/www.conf -sed -i "s/;env\[TEMP\] = /env[TEMP] = /" /etc/php/$PHPVERSION/fpm/pool.d/www.conf -sed -i "s/;env\[PATH\] = /env[PATH] = /" /etc/php/$PHPVERSION/fpm/pool.d/www.conf -sed -i "s/pm.max_children = .*/pm.max_children = 240/" /etc/php/$PHPVERSION/fpm/pool.d/www.conf -sed -i "s/pm.start_servers = .*/pm.start_servers = 20/" /etc/php/$PHPVERSION/fpm/pool.d/www.conf -sed -i "s/pm.min_spare_servers = .*/pm.min_spare_servers = 10/" /etc/php/$PHPVERSION/fpm/pool.d/www.conf -sed -i "s/pm.max_spare_servers = .*/pm.max_spare_servers = 20/" /etc/php/$PHPVERSION/fpm/pool.d/www.conf -sed -i "s/;pm.max_requests = 500/pm.max_requests = 500/" /etc/php/$PHPVERSION/fpm/pool.d/www.conf -sed -i "s/output_buffering =.*/output_buffering = 'Off'/" /etc/php/$PHPVERSION/cli/php.ini -sed -i "s/max_execution_time =.*/max_execution_time = 1800/" /etc/php/$PHPVERSION/cli/php.ini -sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/$PHPVERSION/cli/php.ini -sed -i "s/post_max_size =.*/post_max_size = 10240M/" /etc/php/$PHPVERSION/cli/php.ini -sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10240M/" /etc/php/$PHPVERSION/cli/php.ini -sed -i "s/max_file_uploads =.*/max_file_uploads = 100/" /etc/php/$PHPVERSION/cli/php.ini -sed -i "s/;date.timezone.*/date.timezone = Europe\/\Paris/" /etc/php/$PHPVERSION/cli/php.ini -## sed -i "s/;session.cookie_secure.*/session.cookie_secure = True/" /etc/php/$PHPVERSION/cli/php.ini # Bug if not using ssl -sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php/$PHPVERSION/fpm/php.ini -sed -i "s/output_buffering =.*/output_buffering = 'Off'/" /etc/php/$PHPVERSION/fpm/php.ini -sed -i "s/max_execution_time =.*/max_execution_time = 1800/" /etc/php/$PHPVERSION/fpm/php.ini -sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/$PHPVERSION/fpm/php.ini -sed -i "s/post_max_size =.*/post_max_size = 10240M/" /etc/php/$PHPVERSION/fpm/php.ini -sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10240M/" /etc/php/$PHPVERSION/fpm/php.ini -sed -i "s/max_file_uploads =.*/max_file_uploads = 100/" /etc/php/$PHPVERSION/fpm/php.ini -sed -i "s/;date.timezone.*/date.timezone = Europe\/\Paris/" /etc/php/$PHPVERSION/fpm/php.ini -## sed -i "s/;session.cookie_secure.*/session.cookie_secure = True/" /etc/php/$PHPVERSION/fpm/php.ini # Bug if not using ssl -sed -i "s/;opcache.enable=.*/opcache.enable=1/" /etc/php/$PHPVERSION/fpm/php.ini -sed -i "s/;opcache.enable_cli=.*/opcache.enable_cli=1/" /etc/php/$PHPVERSION/fpm/php.ini -sed -i "s/;opcache.memory_consumption=.*/opcache.memory_consumption=128/" /etc/php/$PHPVERSION/fpm/php.ini -sed -i "s/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=8/" /etc/php/$PHPVERSION/fpm/php.ini -sed -i "s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=10000/" /etc/php/$PHPVERSION/fpm/php.ini -sed -i "s/;opcache.revalidate_freq=.*/opcache.revalidate_freq=1/" /etc/php/$PHPVERSION/fpm/php.ini -sed -i "s/;opcache.save_comments=.*/opcache.save_comments=1/" /etc/php/$PHPVERSION/fpm/php.ini -sed -i "s/;emergency_restart_threshold =.*/emergency_restart_threshold = 10/" /etc/php/$PHPVERSION/fpm/php-fpm.conf -sed -i "s/;emergency_restart_interval =.*/emergency_restart_interval = 1m/" /etc/php/$PHPVERSION/fpm/php-fpm.conf -sed -i "s/;process_control_timeout =.*/process_control_timeout = 10s/" /etc/php/$PHPVERSION/fpm/php-fpm.conf -sed -i "s/09,39.*/# &/" /etc/cron.d/php -(crontab -l ; echo "09,39 * * * * /usr/lib/php/sessionclean 2>&1") | crontab -u root - -cp /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xml.bak -sed -i "s/rights\=\"none\" pattern\=\"PS\"/rights\=\"read\|write\" pattern\=\"PS\"/" /etc/ImageMagick-6/policy.xml -sed -i "s/rights\=\"none\" pattern\=\"EPI\"/rights\=\"read\|write\" pattern\=\"EPI\"/" /etc/ImageMagick-6/policy.xml -sed -i "s/rights\=\"none\" pattern\=\"PDF\"/rights\=\"read\|write\" pattern\=\"PDF\"/" /etc/ImageMagick-6/policy.xml -sed -i "s/rights\=\"none\" pattern\=\"XPS\"/rights\=\"read\|write\" pattern\=\"XPS\"/" /etc/ImageMagick-6/policy.xml - -service php$PHPVERSION-fpm restart && service nginx restart diff --git a/.install/nextcloud/templates/my.cnf b/.install/nextcloud/templates/my.cnf deleted file mode 100644 index 78e41dd..0000000 --- a/.install/nextcloud/templates/my.cnf +++ /dev/null @@ -1,79 +0,0 @@ -[client] -default-character-set = utf8mb4 -port = 3306 -socket = /var/run/mysqld/mysqld.sock - -[mysqld_safe] -log_error=/var/log/mysql/mysql_error.log -nice = 0 -socket = /var/run/mysqld/mysqld.sock - -[mysqld] -basedir = /usr -bind-address = 127.0.0.1 -binlog_format = ROW -bulk_insert_buffer_size = 16M -character-set-server = utf8mb4 -collation-server = utf8mb4_general_ci -concurrent_insert = 2 -connect_timeout = 5 -datadir = /var/lib/mysql -default_storage_engine = InnoDB -expire_logs_days = 10 -general_log_file = /var/log/mysql/mysql.log -general_log = 0 -innodb_buffer_pool_size = 1024M -innodb_buffer_pool_instances = 1 -innodb_flush_log_at_trx_commit = 2 -innodb_log_buffer_size = 32M -innodb_max_dirty_pages_pct = 90 -innodb_large_prefix = on -innodb_file_format = barracuda -innodb_file_per_table = 1 -innodb_open_files = 400 -innodb_io_capacity = 4000 -innodb_flush_method = O_DIRECT -key_buffer_size = 128M -lc_messages_dir = /usr/share/mysql -lc_messages = en_US -log_bin = /var/log/mysql/mariadb-bin -log_bin_index = /var/log/mysql/mariadb-bin.index -log_error=/var/log/mysql/mysql_error.log -log_slow_verbosity = query_plan -log_warnings = 2 -long_query_time = 1 -max_allowed_packet = 16M -max_binlog_size = 100M -max_connections = 200 -max_heap_table_size = 64M -myisam_recover_options = BACKUP -myisam_sort_buffer_size = 512M -port = 3306 -pid-file = /var/run/mysqld/mysqld.pid -query_cache_limit = 2M -query_cache_size = 64M -query_cache_type = 1 -query_cache_min_res_unit = 2k -read_buffer_size = 2M -read_rnd_buffer_size = 1M -skip-external-locking -skip-name-resolve -slow_query_log_file = /var/log/mysql/mariadb-slow.log -slow-query-log = 1 -socket = /var/run/mysqld/mysqld.sock -sort_buffer_size = 4M -table_open_cache = 400 -thread_cache_size = 128 -tmp_table_size = 64M -tmpdir = /tmp -transaction_isolation = READ-COMMITTED -user = mysql -wait_timeout = 600 - -[mysqldump] -max_allowed_packet = 16M -quick -quote-names - -[isamchk] -key_buffer = 16M diff --git a/.install/nextcloud/templates/nc_optimize.sh b/.install/nextcloud/templates/nc_optimize.sh deleted file mode 100755 index 4a52a92..0000000 --- a/.install/nextcloud/templates/nc_optimize.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -redis-cli -s /var/run/redis/redis-server.sock <> $log -echo "#################################### $date ####################################" >> $log -echo "####################################################################################" >> $log - -echo "$renew" >> $log - -if [[ $renew = *"No hooks were run"* ]]; then - echo "Rien n'a été fait" >> $log -else - sleep 5 - /etc/init.d/nginx stop - sleep 1 - killall nginx - sleep 3 - /etc/init.d/nginx restart &>> $log - echo "Des certificats ont été renouvellés" >> $log -fi - -exit 0 diff --git a/.install/nextcloud/templates/upgrade.sh b/.install/nextcloud/templates/upgrade.sh deleted file mode 100755 index 959386f..0000000 --- a/.install/nextcloud/templates/upgrade.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -/usr/sbin/service nginx stop -sudo -u www-data php /var/www/nextcloud/updater/updater.phar -sudo -u www-data php /var/www/nextcloud/occ status -sudo -u www-data php /var/www/nextcloud/occ -V -sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices -sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigint -sudo -u www-data sed -i "s/output_buffering=.*/output_buffering=O/" /var/www/nextcloud/.user.ini -sudo -u www-data php /var/www/nextcloud/occ update:check -sudo -u www-data php /var/www/nextcloud/occ app:update --all -/usr/sbin/service php7.3-fpm restart -/usr/sbin/service nginx restart - -exit 0 diff --git a/.install/scuttlebutt.sh b/.install/scuttlebutt.sh deleted file mode 100755 index fa7e5e2..0000000 --- a/.install/scuttlebutt.sh +++ /dev/null @@ -1,130 +0,0 @@ -#!/bin/bash -scuttlebutt() { - echo -e "${c_yellow}Onboarding SCUTTLEBUTT...$c_" - where_is_ssb_installed=$(which ssb-server) - where_is_oasis_installed=$(which oasis) - mkdir -p ~/.zen - BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - - if [[ ! $where_is_ssb_installed ]]; then - # KILL the BRUTAL WAY... - kill -9 $(ps auxf --sort=+utime | grep -w ssb-server| grep -v -E 'color=auto|grep' | tail -n 1 | awk '{print $2}') - # Install dependencies - sudo apt-get install -y socat python3-dev libtool python3-setuptools autoconf automake - - # Install nvm - if [[ ! $(which nvm) ]]; then - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash - source ~/.bashrc - export NVM_DIR="$HOME/.nvm" - nvm install --lts - fi - - cd ~/.ssb - - ### Install module - npm install -g sodium-native ssb-backlinks ssb-ws ssb-links ssb-query ssb-secret-blob ssb-private - npm install -g ssb-server - - # TODO plugin activation !?? - # sbot plugins.enable - - ### Install oasis & ssb-cli (could replace ssb-server?? TODO: try it) - npm -g install fraction/oasis#semver: - npm install -g fraction/ssb-daemon - # npm install -g ssb-cli - - # INSTALL sbotc - if [[ ! $(which sbotc) ]]; then - sudo apt install libsodium-dev jq -y - git submodule add https://git.scuttlebot.io/%25133ulDgs%2FoC1DXjoK04vDFy6DgVBB%2FZok15YJmuhD5Q%3D.sha256 sbotc - cd sbotc - make - sudo make install - fi - - fi - - # TEST ssb-server Install - ssbSERVER=$(which ssb-server) - [[ $ssbSERVER == "" ]] && echo "Check your ssb-server install... Cannot find it !!" && exit 1 - # If exists backup ~/.ssb to ~/.ssb_$USER SSB (one time only !) - [[ -d ~/.ssb_$USER ]] && echo "BACKUP already existing... ~/.ssb_$USER !!! Manual check please..." && exit 1 - [[ -d ~/.ssb ]] && [[ ! -d ~/.ssb_$USER ]] && mv ~/.ssb ~/.ssb_$USER - # CREATE ~/.ssb_astroport - [[ ! -d ~/.ssb_astroport ]] && mkdir -p ~/.ssb_astroport && cd ~/.ssb_astroport - # if exists, keep ~/.ssb_$USER/secret* - [[ ! -f ~/.ssb_astroport/secret ]] && [[ -f ~/.ssb_$USER/secret ]] && cp -f ~/.ssb_$USER/secret* ~/.ssb_astroport/ - - # Symlink ~/.ssb -> ~/.ssb_astroport - [[ -L ~/.ssb ]] && rm ~/.ssb - [[ -d ~/.ssb_astroport ]] && ln -s ~/.ssb_astroport ~/.ssb - ## #TODO get ~/.ssb/manifest.json from template - cp ./templates/ssb/manifest.json ~/.ssb/manifest.json - - # Create config (TODO: adapt if public Pub or Local Node) - # TODO: Create unique hostname in swarm !! uidna - - nodename=$(cat /etc/hostname) - extension=$(echo $nodename | cut -d '.' -f 2) - if [[ $extension == $nodename ]]; then - PUB="false" - nodename=$nodename.local - else - PUB="true" - fi - - cat > ~/.ssb/config < ~/.zen/launch-oasis.sh </dev/null | grep -v -E "header|debug symbols" | grep "Network communication" -B1 | head -n1 | awk -F '-' '{ print $1 }') - [[ $libsodium =~ " " ]] && libsodium=$(echo $libsodium | awk '{ print $2 }') - sudo apt install libsodium-dev libssl-dev libffi-dev python3-pip python3-wheel $libsodium -y || err+="Install python3 and $libsodium" - pip3 install duniterpy || err+="Install duniterpy" - pip3 install silkaj --user || err+="Install Silkaj" - - source .profile ## PATH="$HOME/.local/bin:$PATH" -} - - -# Install PHP + MySQL (TODO: REWRITE!!) -php() { - echo -e "${c_yellow}Installation de PHP et MySQL$c_" - if [[ $OS == "buster" ]]; then - sudo apt -y install software-properties-common nginx php php-common php-fpm php-gettext php-gd php-mysql php-curl php-imap php-mbstring php-xml php-cli mariadb-server || err+="Install PHP and MySQL" - elif [[ $OS == "stretch" ]]; then - sudo apt -y install lsb-release apt-transport-https ca-certificates || err+="Install apt-transport-https" - sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg || err+="Download PHP key" - echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php7.3.list - sudo apt update - sudo apt -y install software-properties-common dirmngr nginx php7.3 php7.3-common php7.3-gettext php7.3-fpm php7.3-gd php7.3-mysql php7.3-curl php7.3-imap php7.3-mbstring php7.3-xml php7.3-cli mariadb-server || err+="Install PHP and MySQL" - else - echo "${c_red}Votre système n'est pas pris en charge par ce script d'installation.$c_" - exit 1 - fi - - isLocalhostUsers=$(sudo mysql -e "select user from mysql.user;" | grep "localhost") - isTestDB=$(sudo mysql -e "show databases" | grep "test") - [[ -n $isLocalhostUsers ]] && sudo mysql -e "DROP USER ''@'localhost'; DROP USER ''@'$(hostname)'" - [[ -n $isTestDB ]] && sudo mysql -e "DROP DATABASE test" - sudo mysql -e "FLUSH PRIVILEGES" -} - -# Read arguments -for i in $@; do - echo -e "${c_yellow}Installation de $c_light$i$c_" - $i -done - -if [[ $err ]]; then - echo -e "${c_red}Installation des prérequis incomplète: $err$c_" - exit 1 -else - echo -e "${c_green}Les prérequis ont été correctement installés$c_" - exit 0 -fi diff --git a/.install/ssb-patchfoo/config b/.install/ssb-patchfoo/config deleted file mode 100644 index ce61ea2..0000000 --- a/.install/ssb-patchfoo/config +++ /dev/null @@ -1,7 +0,0 @@ -{ - "plugins": { - "ssb-private": true, - "ssb-backlinks": true, - "patchfoo": true - } -} diff --git a/.install/ssb-patchfoo/install b/.install/ssb-patchfoo/install deleted file mode 100755 index 18ff427..0000000 --- a/.install/ssb-patchfoo/install +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env bash -# shellcheck disable=SC1091 -true -VERSION="TO-V0.5" - -BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -CURRENT_DIR="$(pwd)" - -# Install node.js shared module -# shellcheck source=../shared/node.js/install -source "$BASE_DIR/../shared/node.js/install" - -# Make folder if service did not -mkdir -p ~/.ssb/node_modules || true - -# shellcheck disable=SC2164 -cd ~/.ssb/node_modules - -# Install dependencies -npm install --unsafe-perm asyncmemo hashlru pull-stream pull-cat multicb hyperscript pull-paramap ssb-contact ssb-sort stream-to-pull-stream emoji-server pull-paginate ssb-mentions busboy mime-types pull-identify-filetype human-time pull-hyperscript jpeg-autorotate pull-catch diff pull-split pull-utf8-decoder ssb-web-resolver highlight.js pull-box-stream base64-url ssb-backlinks ssb-private - -# Install patchfoo and enable plugin -git clone https://github.com/tomeshnet/patchfoo.git patchfoo - -( -# shellcheck disable=SC2164 -cd patchfoo -git checkout ${VERSION} -) - -# Replace ssb-server plugins.install with a static config file -# This will prevent the installation of these modules a second time -# and compiling downlevel for a 3rd time -cp "$BASE_DIR/config" ~/.ssb -#ssb-server plugins.install ssb-private -#ssb-server plugins.install ssb-backlinks -#ssb-server plugins.enable patchfoo - -# Stop ssb service to process plugin -sudo systemctl stop ssb - -# Disable the git-ssb and npm-ssb prerequisite -# Comment out two lines in patchwork that create a prerequisite for git-ssb and npm-ssb -# but don't seem to serve any purpose. git-ssb and and npm-ssbis not available on npm -sed -i 's#var Git#//var Git#' patchfoo/lib/app.js patchfoo/lib/app.js -sed -i 's#this.git = new Git(this.sbot, this.config)#//this.git = new Git(this.sbot, this.config)#' patchfoo/lib/app.js -sed -i 's#var SsbNpmRegistry#//var SsbNpmRegistry#' patchfoo/lib/app.js patchfoo/lib/app.js -sed -i 's#this.serveSsbNpmRegistry = SsbNpmRegistry.respond(this.sbot, this.config)#//this.serveSsbNpmRegistry = SsbNpmRegistry.respond(this.sbot, this.config)#' patchfoo/lib/app.js - -# Comment out line that breaks things -sed -i "s#h('input', {type: 'file', name: 'upload'})#//h('input', {type: 'file', name: 'upload'})#" patchfoo/lib/serve.js - -# Start service again to start patchfoo -sudo systemctl start ssb - -# Install nginx reverse proxy file -sudo cp "$BASE_DIR/ssb-patchfoo.conf" /etc/nginx/site-path-enabled/ssb-patchfoo.conf - -# Add entry into nginx home screen -APP="

Patch Foo

Plain SSB web UI.
Go
" -sudo sed -i "s#<\!--APPLIST-->#$APP\n<\!--APPLIST-->#" "/var/www/html/index.html" - -# shellcheck disable=SC2164 -cd "$CURRENT_DIR" diff --git a/.install/ssb-patchfoo/ssb-patchfoo.conf b/.install/ssb-patchfoo/ssb-patchfoo.conf deleted file mode 100644 index 5ca513f..0000000 --- a/.install/ssb-patchfoo/ssb-patchfoo.conf +++ /dev/null @@ -1,9 +0,0 @@ - location /patchfoo { - proxy_pass http://127.0.0.1:8027/; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - sub_filter "=\"/" "=\"/patchfoo/"; - sub_filter_once off; - } diff --git a/zen/miam_miam.sh b/zen/miam_miam.sh deleted file mode 100755 index e9fc9e0..0000000 --- a/zen/miam_miam.sh +++ /dev/null @@ -1,127 +0,0 @@ -#!/bin/bash -######################################################################## -# Author: Fred (support@qo-op.com) -# Version: 2020.04.16 -# 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##*/}" - -######################################################################## -# \\/// -# qo-op -############# '$ME' HELLO!! I am getting files from ~/.zen/miam -######################################################################## -# ex: '$MY_PATH'/'$ME' -# MOVE ~/.zen/miam/* IN ZenTag AS PASSENGER -# Then find SSB same timestamp message and make a reply ;) -######################################################################## -# [ASTROPORT](https://astroport.com) -######################################################################## -echo ' - ___ -|\/| | /\ |\/| |_ ._ _ ._ -| | _|_ /--\ | | | | |_| | | (_| | \/ - _| / - -' -tstamp="$1" - -# for tstamp in $(ls ~/.zen/miam/); do - [[ $tstamp == "" ]] && echo "MISSING tstamp $tstamp" && exit 1 - [ ! -d ~/.zen/miam/$tstamp ] && echo "NOT FOUND ~/.zen/miam/$tstamp" && exit 1 - [ -f ~/.zen/miam/$tstamp/msg_key ] && msg_key=$(cat ~/.zen/miam/$tstamp/msg_key) || echo "HEY I cannot find source SSB message in $tstamp" || exit 1 - - echo "$msg_key" - msg=$(sbotc get '{"id":"'"$msg_key"'"}') - - [[ $msg == "" ]] && echo "No SSB message for $tstamp" && continue - msg_root=$(printf %s "$msg" | jq -r .value.content.root) - msg_branch=$(printf %s "$msg" | jq -r .value.content.branch) - # TREATING miam $tstamp FILES - echo "##############################################################" - for file in ~/.zen/miam/$tstamp/*; do - # file --mime-type "$file" - filename=$(basename -- "$file") - extension="${filename##*.}" - filena="${filename%.*}" - - case "$extension" in - - json) - JSON="$file" - echo "# METADATA FILE" - echo "$filename" - extractor=$(cat "$file" | jq -r '.extractor') - if [[ $extractor == "youtube" ]]; then - id=$(cat "$file" | jq -r '.id') - fulltitle=$(cat "$file" | jq -r '.fulltitle') - description=$(cat "$file" | jq -r '.description') - artist=$(cat "$file" | jq -r '.artist') - album=$(cat "$file" | jq -r '.album') - duration=$(cat "$file" | jq -r '.duration') - upload_date=$(cat "$file" | jq -r '.upload_date') - uploader_id=$(cat "$file" | jq -r '.uploader_id') - echo "YOUTUBE: $id : $fulltitle ($duration s) by $uploader_id " - else - echo "ERROR Unknown METADATA TYPE, please add some code here..." && JSON="" - fi - continue - ;; - - jpg) - JPG="$file" - echo "# THUMBNAIL FILE" - echo "$filename" - convert "$file" -strip -resize 640 -format jpg ~/.zen/miam/$tstamp/ssb_thumb.jpg - - continue - ;; - - mp4) - MP4="$file" - echo "# VIDEO FILE" - echo "$filename" - - continue - ;; - - - mp3) - MP3="$file" - echo "# AUDIO FILE" - echo "$filename" - continue - ;; - - *) - echo "TYPE is UNKNOWN for $file" && UNKOWN="$file" - continue - ;; - - esac - done - # File analyse finished... - # WHAT DO WE HAVE THERE? - [[ "$JSON" == "" ]] && echo "NO METADATA !!!!" \ - && echo "BAD PASSENGER ERASING ~/.zen/miam/$tstamp" && rm -Rf ~/.zen/miam/$tstamp \ - && exit 1 - - [[ -f $MP3 ]] && $MY_PATH/zen_MAKE.sh "1000" "$tstamp" "$MP3" "$JSON" "10" "10" - [[ -f $MP4 ]] && $MY_PATH/zen_MAKE.sh "1000" "$tstamp" "$MP4" "$JSON" "10" "10" - -# [[ -f $MP3 ]] && mv "$MP3" "~/.zen/audio/$fulltitle.mp3" # && lltag -a "$artist" -A "$album" -t "$fulltitle" "~/.zen/audio/$fulltitle.mp3" -# [[ -f $MP4 ]] && mv "$MP4" "~/.zen/video/$fulltitle.mp4" - - # CLEAN A LITTLE - UNKOWN="" - MP3="" - MP4="" - JPG="" - JSON="" - [[ -d ~/.zen/miam/$tstamp && "$tstamp" != "" ]] && rm -Rf ~/.zen/miam/$tstamp && echo "# DELETE miam, it has been EATEN" - - exit 0 - -#done diff --git a/zen/park4night_MONITOR.sh b/zen/park4night_MONITOR.sh deleted file mode 100755 index 04bc417..0000000 --- a/zen/park4night_MONITOR.sh +++ /dev/null @@ -1,113 +0,0 @@ -#!/bin/bash -################################################################################ -# Author: Fred (support@qo-op.com) -# Version: 0.1 -# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) -################################################################################ -# Extract last ads -# Thank you @kimamila for cesium & gchange -# ES backend http://www.elasticsearchtutorial.com/spatial-search-tutorial.html -MY_PATH="`dirname \"$0\"`" # relative -MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized - -mkdir ~/.zen/cache/gchange -p - -ipfsnodeid=$(ipfs id -f='\n') -[[ ! -f ~/.ssb/secret.dunikey ]] && $MY_PATH/tools/secret2dunikey.sh -g1pub=$(cat ~/.ssb/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) - -CESIUM="https://g1.data.le-sou.org" - -curl -sk ${CESIUM}/user/profile/${g1pub} -o ~/.zen/cache/cesium_profile.json -LON=$(cat ~/.zen/cache/cesium_profile.json | jq '._source.geoPoint.lon') -LAT=$(cat ~/.zen/cache/cesium_profile.json | jq '._source.geoPoint.lat') - -RAD="$1" -[[ ! $RAD ]] && RAD="50km" - -if [[ "$LON" != "null" ]]; then -curl -sk -XPOST 'https://data.gchange.fr/market/record/_search?pretty&_source=title' -d ' - { - "size": 200, - "query": { - "bool": { - "filter": [{ - "geo_distance": { - "distance": "'$RAD'", - "geoPoint": { - "lat": '$LAT', - "lon": '$LON' - } - } - }] - } - } - }' > /tmp/gchange.json || exit 1 -else - echo "Aucune coordonnées geoPoint pour $g1pub" - sbotc publish '{"type":"post","text":"Ajouter sa géolocalisation dans Cesium+ permet de publier les annonces autour de chez soi..."}' - exit 1 -fi -TIMEBEFORE=$(date -u --date="-$DELAY" +"%s") -TIMESTAMP=$(date -u +"%s") -TOTAL=$(cat /tmp/gchange.json | jq .hits.total) -echo 'tail -f ~/.zen/cache/gchange.txt' -echo 'Annonces_Gchange' > ~/.zen/cache/gchange.txt -echo "Portefeuille_[June_:heart:](https://demo.cesium.app/#/app/wot/$g1pub/)" >> ~/.zen/cache/gchange.txt -echo "Carte_[$RAD](https://www.openstreetmap.org/#map=10/$LAT/$LON) " >> ~/.zen/cache/gchange.txt -chunk=0 -fullcount=0 - -DUNITERNODE=$($MY_PATH/tools/duniter_getnode.sh) -DUNITERURL="https://$DUNITERNODE" -LASTDU=$(curl -s ${DUNITERURL}/blockchain/with/ud | jq '.result.blocks[]' | tail -n 1); -[[ $LASTDU != "" ]] && LASTDU=$(curl -s ${DUNITERURL}/blockchain/block/${LASTDU} | jq '.dividend') -echo "DU = $LASTDU G1" - -for gID in $(cat /tmp/gchange.json | jq -r .hits.hits[]._id); do - - NEW="" - - [[ ! -f ~/.zen/cache/gchange/$gID.json ]] && - NEW="true" \ - && curl -s --create-dirs -o ~/.zen/cache/gchange/$gID.json -s https://data.gchange.fr/market/record/$gID?_source=category,title,description,issuer,time,creationTime,location,address,city,price,unit,currency,thumbnail._content_type,thumbnail._content,picturesCount,type,stock,fees,feesCurrency,geoPoint \ - && sleep $((1 + RANDOM % 3)) - - type=$(cat ~/.zen/cache/gchange/$gID.json | jq -r ._source.type) - stock=$(cat ~/.zen/cache/gchange/$gID.json | jq -r ._source.stock) - [[ $stock == 0 ]] && continue - - # [[ $type == "need" ]] && continue - creationTime=$(cat ~/.zen/cache/gchange/$gID.json | jq -r ._source.creationTime) - title=$(cat ~/.zen/cache/gchange/$gID.json | jq -r ._source.title) - - currency=$(cat ~/.zen/cache/gchange/$gID.json | jq -r ._source.currency) - price=$(cat ~/.zen/cache/gchange/$gID.json | jq -r ._source.price) - - categoryname=$(cat ~/.zen/cache/gchange/$gID.json | jq -r ._source.category.name) - - [[ $price == null ]] && price="0" - [[ $currency == "g1" ]] && love=$(bc -l <<< "scale=2; $price / $LASTDU * 100") || love="?.??" - love="$love_LOVE" - price=$(bc -l <<< "scale=2; $price / 100") - - fullcount=$((fullcount+1)) && echo "DEBUG : $fullcount - $type - $price $currency - $title " - [[ $price == "0" ]] && love="..." && price="A débattre " - - - [[ $type == "offer" ]] && LINE="___OFFRE___[$title](https://data.gchange.fr/market/record/$gID/_share)_$love" - [[ $type == "need" ]] && LINE="__DEMANDE__[$title](https://data.gchange.fr/market/record/$gID/_share)_$love" - - [[ $NEW == "true" ]] && echo "$LINE" >> ~/.zen/cache/gchange.txt && chunk=$((chunk+1)) && echo $chunk - -done -echo "$chunk_nouvelles_annonces_($TOTAL)" >> ~/.zen/cache/gchange.txt - -## TODO AUTOMATIC PUBLISHING \n and message size problem ?? -if [[ $(cat ~/.zen/cache/gchange.txt | wc -c) -lt 8000 ]]; then - export raw="$(cat ~/.zen/cache/gchange.txt)" - annonces=$(node -p "JSON.stringify(process.env.raw)") - sbotc publish '{"type":"post","text":'$annonces'}' -fi -# EXTRA COULD CREATE IT'S OWN MAP with https://github.com/zicmama/tile-stitch.git -# And magick to overlay... But best would be a local map proxy... diff --git a/zen/port_ipfsp2p_g1sms_all.sh b/zen/port_ipfsp2p_g1sms_all.sh deleted file mode 100755 index 0abe59d..0000000 --- a/zen/port_ipfsp2p_g1sms_all.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -################################################################################ -# Author: Fred (support@qo-op.com) -# Version: 0.1 -# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) -################################################################################ -# Activate SUPPORT MODE: open ssh over IPFS -MY_PATH="`dirname \"$0\"`" # relative -MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized -######################################################################## -YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) || er+=" ipfs daemon not running" -IPFSNODEID=$(ipfs id -f='\n') || er+=" ipfs id problem" -WHOAMI=$(sbotc whoami | jq -r .id) || er+=" sbotc whoami problem" -[[ "$YOU" == "" || "$IPFSNODEID" == "" || "$WHOAMI" == "" ]] && echo "ERROR : $er " && exit 1 -######################################################################## -# TODO ESTABLISH A PORT FORWARD STRATEGY (depending on Node Flavour) - -# Arrange local port forwarded to swarm - -# GET _uidna (means g1sms/init.sh been run) -[[ -f /home/$YOU/.zen/ipfs/.$IPFSNODEID/G1SSB/_uidna ]] && UIDNA=$(cat /home/$YOU/.zen/ipfs/.$IPFSNODEID/G1SSB/_uidna) - -if [[ $(which gammu) ]]; then - # I am a g1sms NODE, pushing my web interface - ipfs p2p listen /x/g1sms /ip4/127.0.0.1/tcp/10099 -else - # Looking for g1sms NODE in my swarm - SMSNODE=$(ls /home/$YOU/.zen/ipfs_swarm/.12D3KooW*/G1SSB/_g1sms | shuf -n 1 | cut -d '/' -f 6 | cut -d '.' -f 2) - # Wait for DHT to propagate.... before getting eventual /x/g1sms forward - [[ $SMSNODE ]] && sleep $((1 + RANDOM % 10)) && ipfs p2p forward /x/g1sms /ip4/127.0.0.1/tcp/10097 /p2p/$SMSNODE -fi - -# ipfs p2p close --all -# ipfs p2p listen /x/ssh-$UIDNA /ip4/127.0.0.1/tcp/22 -# ipfs p2p listen /x/http-$UIDNA /ip4/127.0.0.1/tcp/80 -# ipfs p2p listen /x/https-$UIDNA /ip4/127.0.0.1/tcp/443 -ipfs p2p ls diff --git a/zen/ssb_GET_zenyta.sh b/zen/ssb_GET_zenyta.sh deleted file mode 100755 index 0123f50..0000000 --- a/zen/ssb_GET_zenyta.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/bash -######################################################################## -# Author: Fred (support@qo-op.com) -# Version: 2020.03.24 -# 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' -# #zenyta = youtube-dl video to ~/.zen/miam/$timestamp -######################################################################## -' -######## YOUTUBE-DL ########## -if [[ ! $(which youtube-dl) ]]; then - sudo curl -s https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl || err=1 - sudo chmod a+rx /usr/local/bin/youtube-dl - sudo chown $(whoami) /usr/local/bin/youtube-dl -fi - -mkdir -p ~/.zen/miam/ - -self=$(sbotc whoami | jq -r .id) || exit 1 -[[ "$self" == "" ]] && exit 1 -g1self=$(echo $self | cut -d '@' -f 2 | cut -d '.' -f 1 | base64 -d | base58) -self_name=$(sbotc query.read '{"query":[{"$filter":{"value":{"author": "'"$self"'", "content":{"type":"about", "about": "'"$self"'"}}}}]}' | jq -r .value?.content?.name | grep -v null | tail -n 1) -ipfsnodeid=$(ipfs id -f='\n') - -current_ts=$(date -u +%s%N | cut -b1-13) -[ -s ~/.zen/zenyta.last.ts ] && last_ts=$(cat ~/.zen/zenyta.last.ts) || last_ts=$((current_ts - 24*3600*1000)) # 24h ago -last_ts=$((last_ts + 10)) - -echo "Hi, i am [$self_name]($self) -last timestamp: $last_ts" -echo ' -a u d i o - _ _ - __ _ _ _ __| | (_) ___ -/ _` | | || | / _` | | | / _ \ -\__,_| \_,_| \__,_| |_| \___/ - -' - - -#messages=$(sbotc messagesByType '{"type":"post","gt":'$last_ts'}') -# SEARCH "#zenyta" CMD in message text -echo "sbotc backlinks.read '{\"query\":[{\"\$filter\":{\"dest\":\"#zenyta\",\"value\":{\"content\":{\"type\":\"post\"}},\"timestamp\":{\"\$gt\":'\"$last_ts\"'}}}]}'" -messages=$(sbotc backlinks.read '{"query":[{"$filter":{"dest":"#zenyta","value":{"content":{"type":"post"}},"timestamp":{"$gt":'"$last_ts"'}}}]}') -[[ $messages == "" ]] && messages=$(sbotc query.read '{"query":[{"$filter":{"value":{"author": "'"$WHOAMI"'", "content":{"type":"zenyta"}}}}]}') && echo "sbotc query.read '{\"query\":[{\"\$filter\":{\"value\":{\"author\": \"'"$WHOAMI"'\", \"content\":{\"type\":\"zenyta\"}}}}]}'" -while read -r msg -do - # EXTRACT CMD PARAM - msg_key=$(printf %s "$msg" | jq -r .key) - author=$(printf %s "$msg" | jq -r .value.author) - timestamp=$(printf %s "$msg" | jq -r .value.timestamp) - - # TEST CURRENT NODE last_ts - [[ $timestamp -lt $last_ts ]] && echo "$last_ts: ALREADY DONE $msg_key timestamp is $timestamp " && continue - - # SWARM REFRESH - $MY_PATH/ipfs_SWARM_refresh.sh - # SWARM ALREADY DONE IT ?? - # IS LIKE "SELECT FROM ipfs_swarm WHERE _tag.zensource=$timestamp"(or something like that in SQL), means a ZenTag already exists. - CHECKSWARM=$(grep -Rwl "$timestamp" ~/.zen/ipfs_swarm/.12D3KooW*/TAG/*/_tag.zensource | tail -n 1 | cut -f 6 -d '/') - # OR SWARM PROCESS IN ACTION (NB: copy tasks must be asynchronous in swarm) - [[ ! $CHECKSWARM ]] && CHECKSWARM=$(grep -Rwl "$timestamp" ~/.zen/ipfs_swarm/.12D3KooW*/TAG/process.timestamp.ssb | tail -n 1 | cut -f 6 -d '/') - [[ $CHECKSWARM ]] \ - && echo "$timestamp ALREADY on NODE $CHECKSWARM CONTINUE" \ - && echo "$timestamp" > ~/.zen/zenyta.last.ts \ - && continue - - # ANTI DOUBLE COPY START - echo "$timestamp" > ~/.zen/ipfs/.$ipfsnodeid/process.timestamp.ssb - $MY_PATH/ipfs_SWARM_refresh.sh - # ANTI DOUBLE COPY - - msg_root=$(printf %s "$msg" | jq -r .value.content.root) - msg_branch=$(printf %s "$msg" | jq -r .value.content.branch) - msg_text=$(printf %s "$msg" | jq -r .value.content.text) - msg_ytdlurl=$(echo $msg_text | egrep -o 'https?://[^ ]+' | grep you | cut -d '\' -f 1 | tail -n 1) - - # YOUTUBE-DL AUDIO - -[[ $timestamp ]] && mkdir -p ~/.zen/miam/$timestamp - -[[ $msg_ytdlurl ]] && /usr/local/bin/youtube-dl -x --audio-format mp3 \ ---write-thumbnail --write-info-json --add-metadata --embed-thumbnail \ ---no-mtime -o "~/.zen/miam/$timestamp/%(id)s.%(ext)s" $msg_ytdlurl - - # REFERENCE msg_key AND timestamp - [[ $timestamp ]] && echo "$((timestamp + 1))" > ~/.zen/zenyta.last.ts - [[ $msg_key ]] && echo "$msg_key" > ~/.zen/miam/$timestamp/msg_key - - $MY_PATH/miam_miam.sh "$timestamp" - - # ANTI DOUBLE COPY END - rm ~/.zen/ipfs/.$ipfsnodeid/process.timestamp.ssb - $MY_PATH/ipfs_SWARM_refresh.sh - # ANTI DOUBLE COPY - -done < <(printf '%s\n' "$messages") diff --git a/zen/ssb_GET_zenytv.sh b/zen/ssb_GET_zenytv.sh deleted file mode 100755 index af4efdf..0000000 --- a/zen/ssb_GET_zenytv.sh +++ /dev/null @@ -1,109 +0,0 @@ -#!/bin/bash -######################################################################## -# Author: Fred (support@qo-op.com) -# Version: 2020.03.24 -# 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##*/}" -######################################################################## -# \\/// -# qo-op -############# '$MY_PATH/$ME' -######################################################################## -# ex: ./'$ME' -# #zenytv = youtube-dl video to ~/.zen/miam/$timestamp -######################################################################## - -######## YOUTUBE-DL ########## -if [[ ! $(which youtube-dl) ]]; then - sudo curl -s https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl || err=1 - sudo chmod a+rx /usr/local/bin/youtube-dl - sudo chown $(whoami) /usr/local/bin/youtube-dl -fi - -mkdir -p ~/.zen/miam/ - -self=$(sbotc whoami | jq -r .id) || exit 1 -[[ "$self" == "" ]] && exit 1 -g1self=$(echo $self | cut -d '@' -f 2 | cut -d '.' -f 1 | base64 -d | base58) -self_name=$(sbotc query.read '{"query":[{"$filter":{"value":{"author": "'"$self"'", "content":{"type":"about", "about": "'"$self"'"}}}}]}' | jq -r .value?.content?.name | grep -v null | tail -n 1) -ipfsnodeid=$(ipfs id -f='\n') - -current_ts=$(date -u +%s%N | cut -b1-13) -[ -s ~/.zen/zenytv.last.ts ] && last_ts=$(cat ~/.zen/zenytv.last.ts) || last_ts=$((current_ts - 24*3600*1000)) # 24h ago -# last_ts=$((last_ts + 10)) - -echo "Hi, i am [$self_name]($self) -last timestamp: $last_ts" -echo ' -v i d e o - _ _ -__ __ (_) __| | ___ ___ -\ V / | | / _` | / -_) / _ \ - \_/ |_| \__,_| \___| \___/ - -' - - -#messages=$(sbotc messagesByType '{"type":"post","gt":'$last_ts'}') -# SEARCH "#zenytv" CMD in message text -echo "sbotc backlinks.read '{\"query\":[{\"\$filter\":{\"dest\":\"#zenytv\",\"value\":{\"content\":{\"type\":\"post\"}},\"timestamp\":{\"\$gt\":'\"$last_ts\"'}}}]}'" -messages=$(sbotc backlinks.read '{"query":[{"$filter":{"dest":"#zenytv","value":{"content":{"type":"post"}},"timestamp":{"$gt":'"$last_ts"'}}}]}') -[[ $messages == "" ]] && exit 1 -while read -r msg -do - # EXTRACT CMD PARAM - msg_key=$(printf %s "$msg" | jq -r .key) - author=$(printf %s "$msg" | jq -r .value.author) - timestamp=$(printf %s "$msg" | jq -r .value.timestamp) - - # TEST CURRENT NODE last_ts - [[ $timestamp -lt $last_ts ]] && echo "ALREADY DONE $msg_key timestamp is $timestamp " && continue - - # SWARM REFRESH - $MY_PATH/ipfs_SWARM_refresh.sh - # SWARM ALREADY DONE - CHECKSWARM=$(grep -Rwl "$timestamp" ~/.zen/ipfs_swarm/.12D3KooW*/TAG/*/_tag.zensource | tail -n 1 | cut -f 6 -d '/') - # OR SWARM PROCESS IN ACTION - [[ ! $CHECKSWARM ]] && CHECKSWARM=$(grep -Rwl "$timestamp" ~/.zen/ipfs_swarm/.12D3KooW*/TAG/process.timestamp.ssb | tail -n 1 | cut -f 6 -d '/') - [[ $CHECKSWARM ]] \ - && echo "$timestamp ALREADY on NODE $CHECKSWARM CONTINUE" \ - && echo "$timestamp" > ~/.zen/zenytv.last.ts \ - && continue - - # ANTI DOUBLE COPY START - echo "$timestamp" > ~/.zen/ipfs/.$ipfsnodeid/process.timestamp.ssb - $MY_PATH/ipfs_SWARM_refresh.sh - # ANTI DOUBLE COPY - - msg_root=$(printf %s "$msg" | jq -r .value.content.root) - msg_branch=$(printf %s "$msg" | jq -r .value.content.branch) - msg_text=$(printf %s "$msg" | jq -r .value.content.text) - msg_ytdlurl=$(echo $msg_text | egrep -o 'https?://[^ ]+' | grep you | cut -d '\' -f 1 | tail -n 1) - - # YOUTUBE-DL VIDEO - -[[ $timestamp ]] && mkdir -p ~/.zen/miam/$timestamp - -[[ $msg_ytdlurl ]] && /usr/local/bin/youtube-dl -f '[height=720]/best' \ ---write-thumbnail --all-subs --write-info-json --write-annotations \ ---no-mtime -o "~/.zen/miam/$timestamp/%(id)s.%(ext)s" $msg_ytdlurl - -# ###### TODO make gif tu push to SSB -# ffmpeg -ss 00:00:00.000 -i yesbuddy.mov -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif -# convert -layers Optimize output.gif output_optimized.gif - - # REFERENCE msg_key AND timestamp - [[ $timestamp ]] && echo "$((timestamp))" > ~/.zen/zenytv.last.ts - [[ $msg_key ]] && echo "$msg_key" > ~/.zen/miam/$timestamp/msg_key - - $MY_PATH/miam_miam.sh "$timestamp" - - # ANTI DOUBLE COPY END - echo "$timestamp" > ~/.zen/ipfs/.$ipfsnodeid/process.timestamp.ssb - $MY_PATH/ipfs_SWARM_refresh.sh - # ANTI DOUBLE COPY - -done < <(printf '%s\n' "$messages") diff --git a/zen/ssb_INIT.sh b/zen/ssb_INIT.sh deleted file mode 100755 index c033e95..0000000 --- a/zen/ssb_INIT.sh +++ /dev/null @@ -1,260 +0,0 @@ -#!/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:8181/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:8181/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 diff --git a/zen/ssb_IPFS_swarm.sh b/zen/ssb_IPFS_swarm.sh deleted file mode 100755 index 23d68e4..0000000 --- a/zen/ssb_IPFS_swarm.sh +++ /dev/null @@ -1,99 +0,0 @@ -#!/bin/bash -######################################################################## -# Author: Fred (support@qo-op.com) -# Version: 2020.04.27 -# 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##*/}" - -######################################################################## -# \\/// -# qo-op -############# '$MY_PATH/$ME' -######################################################################## -# ex: ./'$ME' -# GET SSB FRIENDS AND FIND THEIR IPFS ID TO "ipfs swarm connect" THEM -########################################################################' - -## TODO: REMOVE DUPLICATES -## TODO: MODE : COOL, STRAIGHT, ARMORED - -######################################################################## -## CONNECT GLOBAL "ipfs.io" ## DANGEROUS only for short time... -######################################################################## -# ADD ipfs.io public bootstrap into your swarm peers -# RUN: cat ~/.zen/astrXbian/ipfs.swarm.ipfs.io | ipfs swarm connect -# SOON ipfs swarm peers will GROW!!! YOU ARE VSIBLE !!! -# RUN: sudo systemctl restart ipfs # GOES BACK TO SWARM0 -######################################################################## - -######################################################################## -# ENVIRONEMENT DETECTION + IPFS ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_info -######################################################################## -IPFSNODEID=$(ipfs id -f='\n') -[[ $IPFSNODEID == "" ]] && echo "ERROR missing IPFS Node id !! IPFS is not installed !?" && exit 1 -######################################################################## - -echo ' - __ __ ____ - __/ // /_______ ______ __________ ___ / __ \ - /_ _ __/ ___/ | /| / / __ `/ ___/ __ `__ \/ / / / -/_ _ __(__ )| |/ |/ / /_/ / / / / / / / / /_/ / - /_//_/ /____/ |__/|__/\__,_/_/ /_/ /_/ /_/\____/ - - -EXTEND IPFS SWARM and SHAPE IT FROM (ssb_INIT.sh) FRIENDS -Search "ipfstryme" message type in SSB feed -' -[[ ! $WHOAMI ]] && WHOAMI=$($MY_PATH/tools/timeout.sh -t 3 sbotc whoami | jq -r .id) -######################################################################## - -# GET /tmp/ssb-friends.txt -sbotc query.read '{"query":[{"$filter":{"value":{"author": "'"$WHOAMI"'", "content":{"type":"contact"}}}}]}' | jq -r '.value?.content?.contact' > /tmp/ssb-friends.txt - -# GET /tmp/ssb-NOTfriends.txt -sbotc links "{\"source\": \"${WHOAMI}\", \"rel\": \"contact\", \"values\": true, \"reverse\": true}" | jq -c . | grep 'blocking":true' | jq -r .dest > /tmp/ssb-NOTfriends.txt - -count=1 -######################################################################## -# Let's look if our SSB Friends ARE "IPFS swarm connected" -######################################################################## -echo "" > /tmp/This_NOTfriends_are_astroport -echo "" > /tmp/This_friends_connect_astroport -echo "" > /tmp/This_friends_should_install_astroport -### TODO -> send sbotc message (private or zip attached?) with this reports - -for SSBFRIEND in $(uniq /tmp/ssb-friends.txt); do - - # Force Strict #swarm0 !! - [[ $count == 1 ]] && ipfs bootstrap rm --all - - ### sbotc $SSBFRIEND name - MYFRIEND=$(sbotc query.read '{"query":[{"$filter":{"value":{"author": "'"$SSBFRIEND"'", "content":{"type":"about", "about": "'"$SSBFRIEND"'"}}}}]}' | jq -r .value?.content?.name | grep -v null | tail -n 1) - ### GET SSB "ipfstryme" message type !!! Astroport Node should have publish it during "ssb_INIT.sh" - TRYME=$(sbotc query.read '{"query":[{"$filter":{"value":{"author": "'"$SSBFRIEND"'", "content":{"type":"ipfstryme"}}}}]}' | jq -r .value?.content?.text | tail -n 1) - - ## !! REMOVE NOTfriends from IPFS swarm - [[ $TRYME ]] && [[ $(grep -Rwl "$SSBFRIEND" /tmp/ssb-NOTfriends.txt) ]] && MES="($count) HUMMMM $MYFRIEND ($SSBFRIEND) IS NOT my friend disconnecting" && ipfs swarm disconnect $TRYME && ipfs bootstrap rm $TRYME && echo $MES >> /tmp/This_NOTfriends_are_astroport && continue - ## Ici, on peut décider de demander à faire supprimer la couche astroport à son PAS AMI - - ## ADD Friend to our IPFS swarm - [[ $TRYME ]] && MES="($count) $MYFRIEND ($SSBFRIEND) connect OK $TRYME" && ipfs swarm connect $TRYME && ipfs bootstrap add $TRYME && echo $MES >> /tmp/This_friends_connect_astroport - ## Ce pote est connecté IPFS avec moi - - ## This_friends_should_install_astroport - [[ ! $TRYME ]] && MES="($count) $MYFRIEND ($SSBFRIEND) is NOT running ASTROPORT !!!" && echo $MES >> /tmp/This_friends_should_install_astroport - - ### WHAT HAPPENED this loop on my ssb friends - echo $MES - echo "_________________________________________________" - count=$((count+1)) - -done - - -echo "__________________________________________ -$WHOAMI ipfs peers are:" -ipfs swarm peers diff --git a/zen/ssb_SURVEY_contact.sh b/zen/ssb_SURVEY_contact.sh deleted file mode 100755 index 8fbea45..0000000 --- a/zen/ssb_SURVEY_contact.sh +++ /dev/null @@ -1,134 +0,0 @@ -#!/bin/bash -######################################################################## -# Author: Fred (support@qo-op.com) -# Version: 2020.03.24 -# 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' -# SURVEY SSB contact from "invite" is happening in feed -######################################################################## _ _ _ _ _ -(_)_ ____ _(_) |_ __ _| |_(_) ___ _ __ -| | _ \ \ / / | __/ _| | __| |/ _ \| _ \ -| | | | \ V /| | || (_| | |_| | (_) | | | | -|_|_| |_|\_/ |_|\__\__|_|\__|_|\___/|_| |_| contact SURVEY - -# New Station is joining ASTROPORT !! - -DETECT in SSB feed messages "type": "contact", "autofollow": true - -LIKE -https://tube.p2p.legal/videos/watch/ef319fdd-caf1-4e03-ba22-91c456e94f73 -{ - "key": "%jVQewn0/ey0tfdvYCjYXJqVivaaZ6NpeUL9xK5QeGTk=.sha256", - "value": { - "previous": "%ilrZ+8CvMXpu09LWh75Uq37j7lVJnoxTvipyooRSjpg=.sha256", - "sequence": 3, - "author": "@S2KB1zRQNAuCRs1vW08c+63+0gjI2egDj4pjUUrt+dw=.ed25519", - "timestamp": 1585068288462, - "hash": "sha256", - "content": { - "type": "contact", - "following": true, - "autofollow": true, - "contact": "@t/giTDc0EtzdPQGC7iAAzgzVOkFo++XZRvzOOlqgX1c=.ed25519" - }, - "signature": "kXsFqfBGqZXZApf7UANDYlqnwLXuGdWFbMMofljBOp4dNGc4dAv+P2hzK3XV/jPT8a1u7PHIraJASugR1NCLCw==.sig.ed25519" - }, - "timestamp": 1585068290213 -} -' -# CACHE -[[ ! -d ~/.zen/ssb_contact ]] && mkdir -p ~/.zen/ssb_contact - -self=$(sbotc whoami | jq -r .id) || exit 1 -g1self=$(echo $self | cut -d '@' -f 2 | cut -d '.' -f 1 | base64 -d | base58) -self_name=$(sbotc query.read '{"query":[{"$filter":{"value":{"author": "'"$self"'", "content":{"type":"about", "about": "'"$self"'"}}}}]}' | jq -r .value?.content?.name | grep -v null | tail -n 1) - -messages=$(sbotc query.read '{"query":[{"$filter":{"value":{"content":{"type":"contact", "contact":"'"$self"'", "autofollow":true}}}}]}') -while read -r msg -do - - timestamp=$(printf %s "$msg" | jq .value.timestamp) - -echo ' - _ _ ___ ____ - / / \|\ || /\ / | - \_\_/| \||/--\\_ | FROM NEW STATION' -echo $timestamp - - - author=$(printf %s "$msg" | jq -r .value.author) - [[ "$author" == "$self" ]] && echo "Message from myself" && continue - g1author=$(printf %s "$msg" | jq -r .value.author | cut -d '@' -f 2 | cut -d '.' -f 1 | base64 -d | base58) - - # Crypt, ipfs store, send - if [[ -f ~/.ipfs/swarm.key ]]; then - - ipfsnodeid=$(ipfs id -f='\n') - mkdir -p ~/.zen/ipfs/.${ipfsnodeid}/CONTACT/${g1author} - - # PUBLISH swarm.key.crypt to IPFS, so PUB can push new swam.key to our CONTACT - file=~/.zen/ipfs/.${ipfsnodeid}/CONTACT/${g1author}/ipfs_swarm.key.crypt - - $MY_PATH/tools/natools.py encrypt -p ${g1author} -i ~/.ipfs/swarm.key -o ${file} - - # 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 - - bootstrap=$(cat ~/.zen/ipfs/.${ipfsnodeid}/Addresses | tail -n 1) - -echo " -$author - -\|/ \|/ \|/ -/|\ /|\ /|\ preparing cypher swarmkey - -~/.zen/ipfs/.${ipfsnodeid}/CONTACT/${g1author}/ipfs_swarm.key.crypt - -PUBLISH IPFS -http://localhost:8181/ipns/ -" - ipfs name publish --quieter /ipfs/$(ipfs add -rHq ~/.zen/ipfs | tail -n 1) - - name=${file##*/} - id="$(sbotc blobs.add < "$file")" - type="$(file -b --mime-type "$file")" - size="$(wc -c < "$file")" - -echo ' - ______ _ _ _ ____ __ _ _ - /\ (_ ||_)/ \|_)/ \|_)|__(_\ //\ |_)|\/||/|_\_/ -/--\__) || \\_/| \_/| \| __)\/\//--\| \| ||\|_ | message send -' -echo "SSB -#astroport-swarmkey -[$name]($id) -TO.SSB_${author} -TO.G1_${g1author} -+++ -FROM.SSB_${self_name} -FROM.G1_${g1self} -FROM.IPFS_${ipfsnodeid} - -" - sbotc publish '{"type":"post","text":"#astroport-swarmkey = ['"$name"']('"$id"') TO.SSB_'"$author"' TO.G1_'"$g1author"' +++ FROM.SSB_'"$self_name"' FROM.G1_'"$g1self"' FROM.IPFS_'"$ipfsnodeid"'","mentions":[{"link":"'"$id"'","name":"'"$name"'","size":'"$size"',"type":"'"$type"'"}]}' - - else - - echo "NO swarm.key here." - - fi - -done < <(printf '%s\n' "$messages") diff --git a/zen/ssb_SURVEY_swarmkey.sh b/zen/ssb_SURVEY_swarmkey.sh deleted file mode 100755 index 2979e90..0000000 --- a/zen/ssb_SURVEY_swarmkey.sh +++ /dev/null @@ -1,122 +0,0 @@ -#!/bin/bash -######################################################################## -# Author: Fred (support@qo-op.com) -# Version: 2020.03.24 -# 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' -# SURVEY received #astroport-swarmkey ipfs_swarm.key.crypt for IPFS -######################################################################## -___DESACTIVATED___ TODO testing. - __ __ _ _ -(_ (_ |_) _ ._ _ _|_o| -__)__)|_) _>|_||\/(/_\/ | ||(/__> - / - -USED ONLY ONCE... Next swarm.key change will accurs in ~/.zen/ipfs-swarm - -{ - "key": "%ydN2fyzKTKzVZiZJSxiTXbb17GVvu0ZOf7LPY6u3Bc8=.sha256", - "value": { - "previous": "%SM2J1D8RcWzd2/P6I3ATyN4VXHuQEP3sXy7YCtK0djE=.sha256", - "sequence": 18, - "author": "@t/giTDc0EtzdPQGC7iAAzgzVOkFo++XZRvzOOlqgX1c=.ed25519", - "timestamp": 1585194822251, - "hash": "sha256", - "content": { - "type": "post", - "text": "#astroport-swarmkey = [ipfs_swarm.key.crypt](&L9nCidDjJ4c4Jz1LNTtx8Xp0SJW9HPCD9IVsbbAhS/I=.sha256) TO.SSB_${author} TO.G1_${g1author} +++ FROM.SSB_${self_name} FROM.G1_${g1self} FROM.IPFS_${ipfsnodeid}", - "mentions": [ - { - "link": "&L9nCidDjJ4c4Jz1LNTtx8Xp0SJW9HPCD9IVsbbAhS/I=.sha256", - "name": "ipfs_swarm.key.crypt", - "size": 144, - "type": "application/octet-stream" - } - ] - }, - "signature": "DHMTIS17yF450CqFssuP2iwYMMdOd3PzCDTkLYdjprTtvjWZYUEG9vHaXBrGuaFZRhV2gGZ3WSknM7YLevilAQ==.sig.ed25519" - }, - "timestamp": 1585194822367 -} -' - -[[ -f ~/.ipfs/ipfs_swarm.key ]] && echo "SWARM KEY ~/.ipfs/ipfs_swarm.key OK !!!" && exit 0 -self=$(sbotc whoami | jq -r .id) || exit 1 -g1self=$(echo $self | cut -d '@' -f 2 | cut -d '.' -f 1 | base64 -d | base58) -self_name=$(sbotc query.read '{"query":[{"$filter":{"value":{"author": "'"$self"'", "content":{"type":"about", "about": "'"$self"'"}}}}]}' | jq -r .value?.content?.name | grep -v null | tail -n 1) -ipfsnodeid=$(ipfs id -f='\n') - -# SEARCH "#astroport-swarmkey" CMD in message text -# Not working without patchwork (TODO: find bug. installation ok!? activate? ssb-server ssb-backlinks node_modules. HELP !! ) -# messages=$(sbotc backlinks.read '{"query":[{"$filter":{"dest":"#astroport-swarmkey","value":{"content":{"type":"post"}}}}]}') -# The backlinks.read command does not publish a message, it queries the database for messages. It comes from the ssb-backlinks plugin. This plugin does not come with ssb-server by default (but it does come with Patchwork) so if you are using plain ssb-server and want to use ssb-backlinks you have to install it additionally. But to publish a message you would use the publish method (or private.publish to publish a private message, and that requires the ssb-private plugin, which is included in Patchwork but must be installed separately for ssb-server). - -# SCRIPT RUN BY cron_MINUTE.sh check last hour messages -current_ts=$(date -u +%s%N | cut -b1-13) -last_ts=$((current_ts - 24*3600*1000 - 1)) # timestamp from 24h ago - -echo ' - _ _ --|-|- _. __|_.__ ._ _ .__|___/ |\/|| \ --|-|-(_|_> |_|(_)|_)(_)| |_ \_| ||_/ - | -sbotc messagesByType "post" > $last_ts -' - -messages=$(sbotc messagesByType '{"type":"post","gt":'$last_ts'}') -#messages=$(sbotc messagesByType '{"type":"post"}') #DEBUG - -while read -r msg -do - - author=$(printf %s "$msg" | jq -r .value.author) - attached_file=$(printf %s "$msg" | jq -r .value.content.mentions[].name 2>/dev/null) - - if [[ $attached_file == "ipfs_swarm.key.crypt" ]]; then - - -echo ' - __ _ _ -(_\ //\ |_)|\/| |/|_\_/ _._ .__|_ -__)\/\//--\| \| | |\|_ | de(_|\/|_)|_ - / | -to ~/.ipfs/ipfs_swarm.key -' - - mylink=$(printf %s "$msg" | jq -r .value.content.mentions[].link) - mytmp=$(mktemp -d "${TMPDIR:-/tmp}/astroport.swarmkey.XXXXXXXXX") - -echo "http://localhost:8989/blobs/get/$mylink" -continue - curl -s "http://localhost:8989/blobs/get/$mylink" > $mytmp/ipfs_swarm.key.crypt - $MY_PATH/tools/natools.py decrypt -f pubsec -k ~/.ssb/secret.dunikey -i $mytmp/ipfs_swarm.key.crypt -o ~/.ipfs/ipfs_swarm.key && \ - echo "IPFS SWARM KEY ~/.ipfs/ipfs_swarm.key received from SSB $author ... OK !" - - -echo ' -___ _ _ __ - | |_)|_(_ _| _. _ ._ _ _ ._ -_|_| | __) (_|(_|(/_| | |(_)| | ... restart ... - -' - - - # TODO!!! Add user in sudo without password like "pi" = Run astroport under pi user IDEA. - sudo systemctl restart ipfs - - - fi - - -done < <(printf '%s\n' "$messages") -