Merge branch 'master'

Conflicts:
	install.sh
pull/39/head
Yann Autissier 5 months ago
commit c1aa201afd
  1. 4
      .gitignore
  2. 2
      .install/.kodi/addons/plugin.video.vstream/resources/sites/astroport.py
  3. 2
      .install/.kodi/userdata/guisettings.xml
  4. 2
      .install/astroport.desktop
  5. 67
      .install/ipfs_alone.sh
  6. 28
      .install/kodi_uqload_downloader.sh
  7. 11
      .install/nvh/README.md
  8. 116
      .install/nvh/nvh.sh
  9. 12
      .install/nvh/ssl-bloc-redirect.txt
  10. 35
      .install/nvh/vhost.txt
  11. 45
      .install/nvh/vhost_php.txt
  12. 4
      .install/templates/nginx/astrxbian.conf
  13. 6
      .install/templates/nginx/jukebox.conf
  14. 18803
      .install/templates/tiddlyipfs/index.html
  15. 17047
      .install/templates/tiddlyone/index.html
  16. 22
      .install/update_bashrc.sh
  17. BIN
      .install/youtube-dl
  18. 22
      .install/youtube-dl.sh
  19. 2
      A_boostrap_nodes.txt
  20. 5
      A_boostrap_public.txt
  21. 2
      DEFCON
  22. 48
      ISOconfig.sh
  23. 27
      Makefile
  24. 137
      README.md
  25. 15
      actions/check_my_wallet.sh
  26. 49
      actions/p4n.data_evolution.sh
  27. 169
      actions/p4n.swarmscraper.sh
  28. 78
      actions/view_counter_increment_or_allow.sh
  29. 474
      ajouter_video.sh
  30. 302
      cron_MINUTE.sh
  31. 16
      docs/Infos-utiles.md
  32. 98
      include.sh
  33. 58
      install.sh
  34. 11
      install_www.sh
  35. 257
      ipfs4astroport.sh
  36. 1
      minetest/.gitignore
  37. BIN
      minetest/map.sqlite
  38. 107
      minetest/minetest-common.conf
  39. 259
      minetest/recreate_world.sh
  40. 3
      minetest/start_server.sh
  41. 39
      nginx.conf
  42. 184
      open_with_linux.py
  43. 16
      search
  44. 20
      specs/astrXbian_spec.sh
  45. 35
      www/boris/ajax.php
  46. 41
      www/boris/ajaxform.js
  47. 3
      www/boris/ajouter_video_youtube.sh
  48. 13
      www/boris/check_entrance.sh
  49. 51
      www/boris/conf.php
  50. 104
      www/boris/crowdbunker.css
  51. 1
      www/boris/crowdbunker.css
  52. 424
      www/boris/css/flipclock.css
  53. 162
      www/boris/css/landing-page.css
  54. 1
      www/boris/css/landing-page.min.css
  55. BIN
      www/boris/favicon.ico
  56. 106
      www/boris/film.php
  57. 176
      www/boris/functions.php
  58. 36
      www/boris/g1scan.html
  59. BIN
      www/boris/g1scan_fichiers/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875.png
  60. 3
      www/boris/g1scan_fichiers/adapter.js
  61. 36
      www/boris/g1scan_fichiers/app.js
  62. 48
      www/boris/g1scan_fichiers/instascan.js
  63. 77
      www/boris/g1scan_fichiers/style.css
  64. 8
      www/boris/g1scan_fichiers/vue.js
  65. 7
      www/boris/get_PIN.sh
  66. 21
      www/boris/get_astrxbian_index.sh
  67. 5
      www/boris/get_ipfs_node_id.sh
  68. 6
      www/boris/get_xzuid.sh
  69. 9
      www/boris/get_youtube_videos.sh
  70. BIN
      www/boris/img/LivingTV.gif
  71. BIN
      www/boris/img/bg-masthead (autre copie).jpg
  72. BIN
      www/boris/img/bg-masthead (copie).jpg
  73. BIN
      www/boris/img/bg-masthead.jpg
  74. BIN
      www/boris/img/bg-showcase-1.jpg
  75. BIN
      www/boris/img/bg-showcase-2.jpg
  76. BIN
      www/boris/img/bg-showcase-3 (copie).jpg
  77. BIN
      www/boris/img/bg-showcase-3.jpg
  78. BIN
      www/boris/img/cite_volante.jpg
  79. BIN
      www/boris/img/content_not_available.gif
  80. BIN
      www/boris/img/pierre_volante.jpg
  81. BIN
      www/boris/img/testimonials-1 (copie).jpg
  82. BIN
      www/boris/img/testimonials-1.jpg
  83. BIN
      www/boris/img/testimonials-2 (copie).jpg
  84. BIN
      www/boris/img/testimonials-2.jpg
  85. BIN
      www/boris/img/testimonials-3 (copie).jpg
  86. BIN
      www/boris/img/testimonials-3.jpg
  87. 21
      www/boris/inc/footer.php
  88. 66
      www/boris/inc/header.php
  89. 147
      www/boris/index.html
  90. 70
      www/boris/install.sh
  91. 1
      www/boris/lib/lazyImg.min.js
  92. 18
      www/boris/menu.php
  93. 10
      www/boris/php-ipfs-api/LICENSE
  94. 113
      www/boris/php-ipfs-api/README.md
  95. 25
      www/boris/php-ipfs-api/composer.json
  96. 21
      www/boris/php-ipfs-api/composer.lock
  97. 129
      www/boris/php-ipfs-api/src/IPFS.php
  98. 7
      www/boris/php-ipfs-api/vendor/autoload.php
  99. 445
      www/boris/php-ipfs-api/vendor/composer/ClassLoader.php
  100. 19
      www/boris/php-ipfs-api/vendor/composer/LICENSE
  101. Some files were not shown because too many files have changed in this diff Show More

4
.gitignore vendored

@ -0,0 +1,4 @@
__pycache__
www/boris/me
www/boris/swarm

@ -31,7 +31,7 @@ SITE_IDENTIFIER = 'astroport'
SITE_NAME = 'ASTROPORT _PROFIL_ (_LOGIN_) (_MDP_)'
SITE_DESC = 'Partage ~/astroport/films (animes, series) avec ses amis https://gchange.fr (https://cesium.app ) via IPFS'
URL_MAIN = 'http://127.0.0.1:8181/ipns/_IPFSNODEID_/._IPFSNODEID_/'
URL_MAIN = 'http://127.0.0.1:8080/ipns/_IPFSNODEID_/._IPFSNODEID_/'
KEY_PASTE_ID = 'PASTE_ID'
SETTING_PASTE_ID = SITE_IDENTIFIER + '_id_'

@ -226,7 +226,7 @@
<setting id="services.useairplaypassword" default="true">false</setting>
<setting id="services.webserver">true</setting>
<setting id="services.webserverpassword" default="true"></setting>
<setting id="services.webserverport">8181</setting>
<setting id="services.webserverport">8081</setting>
<setting id="services.webserverssl" default="true">false</setting>
<setting id="services.webserverusername">xbmc</setting>
<setting id="services.webskin" default="true">webinterface.default</setting>

@ -1,6 +1,6 @@
#!/usr/bin/env xdg-open
[Desktop Entry]
Name=Astroport/Kodi
Name=Astroport
Exec=/home/_USER_/.zen/astrXbian/ajouter_video.sh
Icon=/home/_USER_/.zen/astrXbian/logo96.png
Type=Application

@ -17,22 +17,19 @@ sudo true
## Error funciton
err() {
echo -e "ERREUR: $1"
exit 1
echo -e "ERREUR: $1"
exit 1
}
# CHECK if daemon is already running
if [[ $(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) ]]; then
echo "ipfs daemon already running...! Must STOP ipfs AND remove ~/.ipfs to install again !!"
ipfs id && echo "ipfs swarm peers: " && ipfs swarm peers
echo "ipfs bootstrap list: " && ipfs bootstrap list
echo "Please RUN : sudo service ipfs stop"
exit 1
ipfs id && echo "ipfs swarm peers: " && ipfs swarm peers
echo "ipfs bootstrap list: " && ipfs bootstrap list
echo "ipfs daemon already running...!"
exit 0
fi
[[ -d ~/.ipfs ]] && echo "IPFS install exist! Please remove or backup before executing this script" && exit 1
echo -e "Astroport IPFS Layer installation..."
echo -e "Astroport activate IPFS Layer installation..."
# CHECK node IP isLAN?
myIP=$(hostname -I | awk '{print $1}')
@ -40,36 +37,18 @@ isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(
MACHINE_TYPE=`uname -m`
if [ ${MACHINE_TYPE} == 'x86_64' ]; then
curl -s https://dist.ipfs.io/ipfs-update/v1.6.0/ipfs-update_v1.6.0_linux-amd64.tar.gz -o $MY_PATH/ipfs-update.tar.gz
elif [ ${MACHINE_TYPE:0:3} == 'arm' ]; then
curl -s https://dist.ipfs.io/ipfs-update/v1.6.0/ipfs-update_v1.6.0_linux-arm.tar.gz -o $MY_PATH/ipfs-update.tar.gz
else
[ ! -f $MY_PATH/ipfs-update.tar.gz ] && err "Your $MACHINE_TYPE is not supported yet... Please add an issue."
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 ipfs 0.7.0 >>>>>>>>>>>>>>>>>>>>>>>>>>"
sudo ipfs-update install 0.7.0 || err "Install IPFS"
# INIT ipfs
[[ $isLAN ]] && ipfs init -p lowpower \
|| ipfs init -p server
## Special Xbian init.d config
## Special Xbian init.d config
if [[ "$USER" == "xbian" ]]; then
sudo cp ~/.zen/astrXbian/.install/templates/ipfs/ipfs-initV.sh /etc/init.d/ipfs
sudo chmod 755 /etc/init.d/ipfs
sudo touch /var/log/ipfs.log && sudo chown xbian /var/log/ipfs.log
sudo cp ~/.zen/astrXbian/.install/templates/ipfs/ipfs-initV.sh /etc/init.d/ipfs
sudo chmod 755 /etc/init.d/ipfs
sudo touch /var/log/ipfs.log && sudo chown xbian /var/log/ipfs.log
else
## DEBIAN
echo "CREATE SYSTEMD ipfs SERVICE >>>>>>>>>>>>>>>>>>"
## DEBIAN
echo "CREATE SYSTEMD ipfs SERVICE >>>>>>>>>>>>>>>>>>"
cat > /tmp/ipfs.service <<EOF
[Unit]
Description=IPFS daemon
@ -86,12 +65,12 @@ CPUQuota=60%
WantedBy=multi-user.target
EOF
sudo cp -f /tmp/ipfs.service /etc/systemd/system/
sudo sed -i "s/_USER_/$USER/g" /etc/systemd/system/ipfs.service
sudo cp -f /tmp/ipfs.service /etc/systemd/system/
sudo sed -i "s/_USER_/$USER/g" /etc/systemd/system/ipfs.service
[[ -d ~/.ipfs ]] && sudo chown -R $USER:$USER ~/.ipfs
sudo systemctl daemon-reload
sudo systemctl enable ipfs
[[ -d ~/.ipfs ]] && sudo chown -R $USER:$USER ~/.ipfs
sudo systemctl daemon-reload
sudo systemctl enable ipfs
fi
@ -109,14 +88,18 @@ ipfs config Datastore.StorageMax $diskSize
## Activate Rapid "ipfs p2p"
ipfs config --json Experimental.Libp2pStreamMounting true
ipfs config --json Experimental.P2pHttpProxy true
ipfs config --json Swarm.ConnMgr.LowWater 0
ipfs config --json Swarm.ConnMgr.HighWater 0
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials '["true"]'
######### CLEAN DEFAULT BOOTSTRAP TO STAY INVISIBLE ###########
ipfs bootstrap rm --all
###########################################
# BOOTSTRAP NODES ARE ADDED LATER
###########################################
# AVOID CONFLICT WITH KODI REMOTE
ipfs config Addresses.Gateway "/ip4/127.0.0.1/tcp/8181"
# AVOID CONFLICT WITH KODI ./.install/.kodi/userdata/guisettings.xml
ipfs config Addresses.Gateway "/ip4/0.0.0.0/tcp/8080"
[[ "$USER" != "xbian" ]] && sudo systemctl restart ipfs

@ -0,0 +1,28 @@
#!/bin/bash
########################################################################
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
ME="${0##*/}"
######## YOUTUBE-DL ##########
## NOW INSTALL yt-dlp AND LINK TO youtube-dl
# _ _ _
#| | _____ __| (_)
#| |/ / _ \ / _` | |
#| < (_) | (_| | |
#|_|\_\___/ \__,_|_|
# COPY UQLOAD LINKS DETECTED IN KODI LOG
##############################################
### TODO INSTALL FROM START and AUTO SCRAPE KODI LOG
##############################################
if [[ ! -f $HOME/.local/bin/uqload_downloader ]]; then
cd /tmp
git clone https://github.com/papiche/uqload_downloader.git
cd uqload_downloader/cli
./download_from_kodi_log.sh
[[ -f $HOME/.local/bin/uqload_downloader ]] && zenity --warning --width ${large} --text "INSTALLATION download_from_kodi_log.sh OK"
cp download_from_kodi_log.sh $HOME/.local/bin/
else
## UTILISEZ $HOME/.local/bin/download_from_kodi_log.sh
zenity --warning --width ${large} --text "UTILISEZ download_from_kodi_log.sh en ligne de commande..."
exit 0
fi

@ -0,0 +1,11 @@
# Create custom Nginx reverse proxy easily
Create a reverse proxy for domain tata.toto.com go to port 80 of device 192.168.1.27, with auto-https and 443 redirection:
`./nvh.sh tata.toto.com 192.168.1.27 80 ssl=1`
Create a reverse proxy for my service on localhost on port 10010, no https:
`./nvh.sh mylocalservice.fr 127.0.0.1 10010`
TODO: Add option to configure a webserver, and option for php-fpm7.4 server
enjoy

@ -0,0 +1,116 @@
#/bin/bash
red=`tput setaf 1`
green=`tput setaf 2`
yellow=`tput setaf 3`
bold=`tput bold`
blue=`tput setaf 4`
reset=`tput sgr0`
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
sslRedir="$MY_PATH/ssl-bloc-redirect.txt"
tplVHost="$MY_PATH/templates/vhost.txt"
###
# Get Arguments
###
args="$@"
domain="$1"
ip="$2"
port="$3"
parseArgs(){
i=0
for cmd in $args; do
arg[$i]=$cmd
[[ ${arg[$i]} =~ "domain=" ]] && domain=$(echo ${arg[$i]} | grep "\<domain=" | awk -F '=' '{ print $2 }')
[[ ${arg[$i]} =~ "ip=" ]] && ip=$(echo ${arg[$i]} | grep "\<ip=" | awk -F '=' '{ print $2 }')
[[ ${arg[$i]} =~ "port=" ]] && port=$(echo ${arg[$i]} | grep "\<port=" | awk -F '=' '{ print $2 }')
[[ ${arg[$i]} =~ "ssl=" ]] && ssl=$(echo ${arg[$i]} | grep "\<ssl=" | awk -F '=' '{ print $2 }')
((i++))
done
}
parseArgs
newVHost="/etc/nginx/conf.d/$domain.conf"
[[ $ip == "local" ]] && ip="127.0.0.1"
addSSL(){
echo "${yellow}Création du certificat SSL pour $domain...${reset}"
sudo /usr/bin/certbot --nginx certonly -d $domain && echo "${green}Le certificat de $domain a bien été déployé${reset}" || echo "${red}Une erreur s'est produite lors de la création du certificat SSL${reset}"
sudo sed -i -e 's/listen 80;/listen 443 ssl;/' $newVHost
sudo sed -i -e '/includes\/errors.conf/i \\ listen [::]:443 ssl;\n include includes/ssl.conf;' $newVHost
sudo sed -i -e '/error_log/i \\ ssl_certificate /etc/letsencrypt/live/$domain/fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live/$domain/privkey.pem;\n' $newVHost
sudo cat $sslRedir | sudo tee -a $newVHost > /dev/null
sudo sed -i -e 's/$domain/'"$domain"'/g' $newVHost
}
if [[ -e $newVHost ]]; then
echo "${yellow}Le virtualhost existe déjà${reset}"
if [[ -z $(grep "ssl_certificate_key" $newVHost) ]]; then
echo "Certificat SSL non présent"
if [[ $ssl =~ ^(1|true|oui)$ ]]; then
echo "Installation du certificat SSL ..."
addSSL
sudo service nginx reload && echo "${green}Le domaine $domain à bien été créé et configuré =)${reset}" || echo "${red}Impossible de recharger nginx${reset}"
exit 0
else
echo "${yellow}Aucune action n'a été effectué${reset}"
exit 0
fi
else
echo "${yellow}Le SSL est déjà configuré sur le VHost${reset}"
exit 0
fi
fi
create_vhost(){
echo "${yellow}Génération du nouveau VirtualHost...${reset}"
sudo cp $tplVHost $newVHost
sudo sed -i -e 's/$_DOMAIN/'"$domain"'/g' $newVHost
sudo sed -i -e 's/$_IP/'"$ip"'/g' $newVHost
sudo sed -i -e 's/$_PORT/'"$port"'/g' $newVHost
if [[ $ssl =~ ^(1|true|oui)$ ]]; then
printf "${yellow}Configuration SSL du VHost...${reset}"
addSSL && echo "${green}OK${reset}" || echo "${red}KO${reset}"
else
echo "${yellow}Aucune configuration SSL ne sera effectué.${reset}"
fi
sudo service nginx reload && echo "${green}Le domaine $domain à bien été créé et configuré =)${reset}" || echo "${red}Impossible de recharger nginx${reset}"
}
echo "Nous allons créer le domaine ${blue}$domain ${reset}qui sera lié au port ${blue}$port ${reset}de l'IP ${blue}$ip.${reset}"
if [[ $p2vmProvided != 1 ]]; then
read -p "${bold}Confirmez-vous cette action ?${reset} (${green}y${reset} ou ${red}n${reset}) : " yn
case $yn in
[Yy]* ) create_vhost break;;
[Nn]* ) echo "${red}Fermeture du script${reset}" && exit;;
* ) echo "Merci de sélectionner yes ou no";;
esac
else
create_vhost
fi
## 1ere analyse
# A priori utiliser avec domain=$IPFSNODEID ip=local port=10101 ssl=no
# [[ ! $(ipfs p2p ls | grep '/x/10101') ]] && ipfs p2p listen /x/10101 /ip4/127.0.0.1/tcp/10101
# Chaque station publie ses services/API sur un port numéroté /x/10101 relayé en 127.0.0.1/tcp/20101
# Elle publie cette information aux bootstrap (gateway) qui prennent en charge le relai https "ipfs p2p"
# [[ ! $(ipfs p2p ls | grep '/x/10101') ]] && ipfs --timeout=5s ping -n 1 /p2p/$IPFSNODEID && ipfs p2p forward /x/10101 /ip4/127.0.0.1/tcp/20101 /p2p/$IPFSNODEID
# A l'autre boût on sort domain=tata.toto.com ip=local port=20101 ssl=yes
## PAR défaut tous publient ~/.zen/astrXbian/www/boris sur leur port 80 / 443 (pour éxécuter l'API PHP)
# Ca ressemble au fonctionnement du ln -s ;)
# ipfs p2p ln -s /p2p/$IPFSNODEID/tcp/10101 /ip4/127.0.0.1/tcp/20101
## Dédier Le canal star1 pour le flux m3u8 webcam activable.
# Utiliser les canaux stars pour publier ses ports à ceux de ses amis du niveau choisi.
# Publier en json !
exit 0

@ -0,0 +1,12 @@
server {
listen 80;
server_name $domain;
include includes/letsencrypt.conf;
if ($host = $domain) {
return 301 https://$host$request_uri;
}
return 404;
}

@ -0,0 +1,35 @@
upstream $domain {
server 192.168.9.$ipvm:$port; #Production
#server 192.168.9.9; #Redirection maintenance
}
server {
server_name $domain;
listen 80;
include includes/errors.conf;
location / {
proxy_pass http://$domain;
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 https;
proxy_set_header Host $http_host;
proxy_redirect off;
}
location /ipfs {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /ipns {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
error_log /var/log/nginx/$domain_error.log;
access_log /var/log/nginx/$domain_access.log;
}

@ -0,0 +1,45 @@
upstream $domain {
server 192.168.9.$ipvm:$port; #Production
#server 192.168.9.9; #Redirection maintenance
}
server {
server_name $domain;
listen 80;
include includes/errors.conf;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files \$uri \$uri/ =404;
}
index index.php;
# pass PHP scripts to FastCGI server
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php-fpm.sock; # Faites le ln -s qui va bien
# With php-cgi (or other tcp sockets):
#fastcgi_pass 127.0.0.1:9000;
}
location /ipfs {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /ipns {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
error_log /var/log/nginx/$domain_error.log;
access_log /var/log/nginx/$domain_access.log;
}

@ -9,13 +9,13 @@ server {
# IPFS GATEWAY PROXY
location /ipfs {
proxy_pass http://127.0.0.1:8181;
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /ipns {
proxy_pass http://127.0.0.1:8181;
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}

@ -13,7 +13,7 @@ server {
index index.php index.html index.htm;
location ~ \.php {
try_files $uri index.php =404;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include /etc/nginx/fastcgi_params;
@ -28,13 +28,13 @@ server {
# IPFS GATEWAY PROXY
location /ipfs {
proxy_pass http://127.0.0.1:8181;
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /ipns {
proxy_pass http://127.0.0.1:8181;
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -6,6 +6,8 @@
########################################################################
# update_bashrc.sh
# Add $YOU $IPFSNODEID $G1PUB to ~/.bashrc
## TODO REMOVE... Not so good idea since Astroport.One switch identities between captains
XZUID="$1"
source ~/.bashrc
@ -17,10 +19,10 @@ newIPFSNODEID=$(ipfs id -f='<id>\n') || er+=" ipfs id problem"
if [[ $YOU != "" && $IPFSNODEID != "" && $G1PUB != "" ]]; then
# UPDATE
sed -i "s/YOU=$YOU/YOU=$newYOU/g" ~/.bashrc
sed -i "s/$G1PUB/$newG1PUB/g" ~/.bashrc
sed -i "s/$IPFSNODEID/$newIPFSNODEID/g" ~/.bashrc
sed -i "s/YOU=$YOU/YOU=$newYOU/g" ~/.bashrc
sed -i "s/$G1PUB/$newG1PUB/g" ~/.bashrc
sed -i "s/$IPFSNODEID/$newIPFSNODEID/g" ~/.bashrc
if [[ $IPNSKEY == "_IPNSKEY_" ]]; then
ipfs key rm xbian
IPNSKEY=$(ipfs key gen xbian)
@ -28,12 +30,12 @@ if [[ $YOU != "" && $IPFSNODEID != "" && $G1PUB != "" ]]; then
fi
else
# CREATE
echo "### ASTROPORT IDENTITY ###" >> ~/.bashrc
echo "export YOU=$newYOU" >> ~/.bashrc
echo "export G1PUB=$newG1PUB" >> ~/.bashrc
echo "export IPFSNODEID=$newIPFSNODEID" >> ~/.bashrc
echo "export IPNSKEY=_IPNSKEY_" >> ~/.bashrc
[[ "$XZUID" != "" ]] && echo "export XZUID=$XZUID" >> ~/.bashrc
echo "### ASTROPORT IDENTITY ###" >> ~/.bashrc
echo "export YOU=$newYOU" >> ~/.bashrc
echo "export G1PUB=$newG1PUB" >> ~/.bashrc
echo "export IPFSNODEID=$newIPFSNODEID" >> ~/.bashrc
echo "export IPNSKEY=_IPNSKEY_" >> ~/.bashrc
[[ "$XZUID" != "" ]] && echo "export XZUID=$XZUID" >> ~/.bashrc
fi
source ~/.bashrc

Binary file not shown.

@ -1,8 +1,22 @@
#!/bin/bash
########################################################################
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
ME="${0##*/}"
######## YOUTUBE-DL ##########
if [[ ! $(which youtube-dl) ]]; then
sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl || exit 1
sudo chmod a+rx /usr/local/bin/youtube-dl
sudo chown $USER /usr/local/bin/youtube-dl
## NOW INSTALL yt-dlp AND LINK TO youtube-dl
if [[ ! -f /usr/local/bin/yt-dlp ]]; then
sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp && \
sudo chmod a+rx /usr/local/bin/yt-dlp && sudo chown $USER /usr/local/bin/yt-dlp
ytdl=$(which youtube-dl) # modify old
[[ -f ${ytdl} && ! -f ${ytdl}.old ]] &&\
sudo cp ${ytdl} ${ytdl}.old && \
sudo rm ${ytdl}
sudo ln -s /usr/local/bin/yt-dlp /usr/local/bin/youtube-dl ## NOW youtube-dl is linked to yt-dlp (COMMANDS ARE THE SAME ?)
fi
## UPGRADE TO LATEST
ls -al /usr/local/bin/youtube-dl

@ -3,3 +3,5 @@
/ip4/51.15.166.54/tcp/4001/p2p/12D3KooWBYme2BsNUrtx4mEdNX6Yioa9AV7opWzQp6nrPs6ZKabN
# aries.copylaradio.com (thuya83pk) = HbBJDXDrN8swxvMohMxmegYRyZ7m99jqgxwwN1gwxck2
/ip4/37.187.127.175/tcp/4001/p2p/12D3KooWSQYTxeoZZ39SNosEKxi7RUdGTtAQAqpKeZJxjzqqrZTx
# cancer.copylaradio.com (yan14tricot75) = GmUD53TFfEfb6NiVqYXwxMGbxpP9nKgHPgF4jex6FBvj
/ip4/185.202.238.69/udp/4001/quic/p2p/12D3KooWRaqNpB2xr8w5WGDvU9HHj9MST9Rnp1kmMGc67e6z98ef

@ -0,0 +1,5 @@
/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN
/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa
/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb
/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt
/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ

@ -1 +1 @@
4
5

@ -9,7 +9,7 @@ IPFSNODEID=$(ipfs id -f='<id>\n')
isIPFSRunning=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d ' ' -f 1)
[[ ! ${IPFSNODEID} ]] && echo "IPFS MUST BE INSTALLED" && exit 1
########################################################################
# Create secret key files
# Create STATION IPFS/G1 IDENTITY & secret key files
# ~/.zen/secret.june
# ~/.zen/secret.dunikey
# ~/.zen/secret.ipfs & /tmp/config.ipfs
@ -23,16 +23,16 @@ rm -f /tmp/A_booting_log.txt
ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` 2>&1>/dev/null && echo "CONNEXION OK" || exit 1
## TEST BOOTSTRAP IP CONNECTIVITY
IPTEST=$(cat ~/.zen/astrXbian/A_boostrap_nodes.txt | grep -Ev "#" | cut -d '/' -f 3 | shuf | head -n 1)
ping -q -w 1 -c 1 $IPTEST 2>&1>/dev/null && echo "CONNEXION BOOTSTRAP OK" || echo "VERIFIER CONNEXION INTERNET" && exit 1
ping -q -w 1 -c 1 $IPTEST 2>&1>/dev/null && echo "CONNEXION BOOTSTRAP OK" || (echo "VERIFIER CONNEXION INTERNET" && exit 1)
# GIT PULL astrXbian code
mkdir -p ~/.zen/astrXbian && cd ~/.zen/astrXbian && git pull || exit 1
# MAJ astrXbian code
[[ -d ~/.zen/astrXbian ]] && cd ~/.zen/astrXbian && git pull || ( echo "astrXbian ERROR" && exit 1 )
# CHECK IF CONFIG ALREADY DONE !!
# ~/.zen/ipfs ~/.zen/secret ~/.zen/ipfs.sync
if [[ -f ~/.zen/ipfs.sync ]]; then
echo "CONFIG ALREADY DONE.... logging init in /tmp/A_booting_log.txt"
source ~/.zen/ipfs.sync
source ~/.zen/ipfs.sync; echo "CAPTAIN is $CAPTAIN"
# Wait for IPFS to connect SWARM
sleep 20
~/.zen/astrXbian/zen/gchange_INIT.sh >> /tmp/A_booting_log.txt
@ -47,13 +47,14 @@ fi
echo "CREATING Gchange credentials"
########################################################################
salt="$(~/.zen/astrXbian/zen/tools/diceware.sh 3 | xargs)"
salto="$salt"
[[ $salt == "" ]] && echo "ERROR" && exit 1
pepper="$(~/.zen/astrXbian/zen/tools/diceware.sh 3 | xargs)"
XZUID=$(~/.zen/astrXbian/zen/tools/diceware.sh 1 | xargs)${RANDOM:0:2}$(~/.zen/astrXbian/zen/tools/diceware.sh 1 | xargs)
[[ "$USER" != "xbian" ]] && echo "Modifier identifiant (passphrase 1)? $salt" && read salty && [[ $salty ]] && salt="$salty"
[[ "$USER" != "xbian" ]] && echo "Modifier mot de passe (passphrase 2)? $pepper" && read peppery && [[ $peppery ]] && pepper="$peppery"
# [[ "$USER" != "xbian" ]] && echo "Modifier Pseudo? $XZUID" && read XZUIDy && [[ $XZUIDy ]] && XZUID="$XZUIDy"
[[ "$USER" != "xbian" ]] && echo "Gardez ou modifiez cet identifiant (passphrase 1)? $salt" && read salty && [[ $salty ]] && salt="$salty"
[[ "$USER" != "xbian" ]] && echo "Gardez ou modifiez cet mot de passe (passphrase 2)? $pepper" && read peppery && [[ $peppery ]] && pepper="$peppery"
[[ "$USER" != "xbian" && "$salt" != "$salto" ]] && echo "Gardez ou modifiez ce Pseudo? $XZUID" && read XZUIDy && [[ $XZUIDy ]] && XZUID="$XZUIDy"
g1_salt="$salt"
g1_pepper="$pepper"
@ -119,7 +120,7 @@ mkdir -p ~/.zen/ipfs/.${IPFSNODEID}/G1SSB
# Give $XZUID to your (gchange friends)
########################################################################
echo "SETTING ASTRXBIAN PROFILE NAME = $XZUID"
echo "$XZUID" > ~/.zen/ipfs/.${IPFSNODEID}/_xbian.zuid
echo "$XZUID" > ~/.zen/ipfs/.${IPFSNODEID}/.player
########################################################################
echo "CREATING GCHANGE+ PROFILE"
@ -164,9 +165,9 @@ echo ".... ACTUAL SWARM PEERS ..."
ipfs swarm peers
########################################################################
echo 'UPDATING ~/.bashrc'
# echo 'UPDATING ~/.bashrc'
########################################################################
~/.zen/astrXbian/.install/update_bashrc.sh "$XZUID"
# ~/.zen/astrXbian/.install/update_bashrc.sh "$XZUID"
## CREATE RAMDISK permanent
#sudo mkdir /mnt/ramdisk
@ -216,20 +217,14 @@ fi
done
########################################################################
echo "Synchronize GCHANGE+ with IPFS SWARM"
########################################################################
~/.zen/astrXbian/zen/gchange_IPFS_swarm.sh
~/.zen/astrXbian/zen/ipfs_SWARM_refresh.sh
########################################################################
echo 'Installing Astroport cron_MINUTE'
########################################################################
~/.zen/astrXbian/zen/cron_VRFY.sh
########################################################################
#echo "CHANGE hostname"
#myname=$(cat ~/.zen/ipfs/.$IPFSNODEID/_xbian.zuid)
#echo "$(hostname). Changez votre HOSTNAME ($myname)?" && read mynamey && [[ $mynamey ]] && myname="$mynamey"
#echo "CHANGE hostname"
#myname=$(cat ~/.zen/ipfs/.$IPFSNODEID/.player)
#echo "$(hostname). Changez votre HOSTNAME ($myname)?" && read mynamey && [[ $mynamey ]] && myname="$mynamey"
########################################################################
#sudo sed -i "s/$(hostname)/$myname/g" /etc/hostname
#sudo sed -i "s/$(hostname)/$myname/g" /etc/hosts
@ -246,7 +241,7 @@ sudo chattr -i /etc/resolv.conf
sudo cat > /tmp/resolv.conf <<EOF
domain home
search home
nameserver 80.67.169.12
nameserver 80.67.169.12
nameserver 80.67.169.40
nameserver 94.247.43.254
nameserver 2001:67c:13e4:1::37
@ -286,7 +281,7 @@ do
done
# AVOID CONFLICT WITH KODI REMOTE
ipfs config Addresses.Gateway "/ip4/127.0.0.1/tcp/8181"
ipfs config Addresses.Gateway "/ip4/127.0.0.1/tcp/8080"
########################################################################
# SUDO permissions
@ -302,11 +297,20 @@ echo "$USER ALL=(ALL) NOPASSWD:/usr/bin/apt" | (sudo su -c 'EDITOR="tee" visudo
## USED FOR "systemctl restart ipfs"
echo "$USER ALL=(ALL) NOPASSWD:/bin/systemctl" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/systemctl')
## brother_ql_print
echo "$USER ALL=(ALL) NOPASSWD:/usr/local/bin/brother_ql_print" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/brother_ql_print')
## INSTALL TiddlyWiki
[[ ! -f ~/.zen/ipfs/.${IPFSNODEID}/index.html ]] && mkdir -p ~/.zen/ipfs/.${IPFSNODEID} && cp ~/.zen/astrXbian/.install/templates/tiddlywiki/index.html ~/.zen/ipfs/.${IPFSNODEID}/index.html
########################################################################
# echo "Synchronize GCHANGE+ with IPFS SWARM"
########################################################################
# ~/.zen/astrXbian/zen/gchange_IPFS_swarm.sh
# ~/.zen/astrXbian/zen/ipfs_SWARM_refresh.sh
########################################################################
# echo 'ONLY XBIAN REBOOT NOW...' else SHOW CONFIG
########################################################################
[[ "$USER" == "xbian" ]] && sudo reboot

@ -1,11 +1,30 @@
-include $(if $(MYOS),$(MYOS),../myos)/make/include.mk
MYOS ?= ../myos
-include $(MYOS)/make/include.mk
.PHONY: all default install shellcheck shellcheck-% shellspec shellspec-% tests uninstall
tests: ~/.zen/secret.june shellcheck-specs shellspec-specs
SHELL_FILES ?= $(wildcard .*/*.sh */*.sh */*/*.sh)
$(MYOS):
git clone https://git.p2p.legal/aya/myos $(MYOS)
default: tests
all: install tests
install:
./install.sh
tests: shellcheck shellspec
shellcheck:
shellcheck $(SHELL_FILES) ||:
shellcheck-%:
shellcheck $*/*
shellcheck $*/*.sh
shellspec: shellspec-specs
shellspec-%:
shellspec -f tap $*
~/.zen/secret.june:
uninstall:

@ -1,9 +1,84 @@
# ASTROPORT/KODI (astrXbian)
# Astroport répare ton internet
## Tout ce qui t'emmerde dans internet
Youtube :
- les suggestions te font perdre un temps fou, mais regarder toutes ces vidéos ne t'apportent que rarement de la valeur, car elle te font tourner en boucle sur du contenu toujours similaire
- le contenu qui diverge de la norme se retrouve censuré. Ça ne dérange pas trop tant que tu es toi-même dans la norme, mais que se passe-t-il lorsque ta pensée devient minoritaire ? Tu ne peux plus partager ton opinion.
- tu es obligé de passer par la page d'accueil pour effectuer une recherche
- tu crées des playlists pour organiser toi-même le contenu, mais parfois une vidéo est supprimé, sans que Youtube te laisse même le titre de la vidéo
- les commentaires, t'exposent souvent à toute la haine d'inconnus, et sont souvent source de désespoir
Facebook :
- le contenu qui remonte est le contenu le plus consensuel : la photo de profil à 50 likes de Cindy
- tu te tapes une pub tous les 4-5 posts
9gag :
- tu y viens pour rire un peu, mais tu te retrouve face à beaucoup de posts à caractère politique, anxiogène ou source de colère
- l'humour des autres n'est pas forcément le tiens, et le contenu qui t'es proposé ne te fait pas forcément marrer
Netflix :
- un peu de contenu intéressant, mais il est noyé dans un océan de médiocrité
- tu n'as accès à rien si tu n'es pas connecté
Spotify :
- l'interface devient de plus en plus source de nuisances, en te proposant de recommander Spotify à des amis par exemple
## Astroport libère ton internet
Astroport remplace tous ces services, en apportant quelques degrés de liberté en plus :
Dans Astroport, le contenu n'est pas filtré par des algorithme, mais par les choix que tu fais de te nourir du contenu partagé par tel ou tel ami.
Si le contenu est trop abondant, tu peux choisir un algorithme pour le filtrer, mais tu restes toujours maître de la façon dont les choses te sont présentées ; tu peux choisir ton interface parmi une quantité d'interfaces déjà codées, ou coder ta propre interface.
Un contenu taggué comme "drôle" a plus de chances de l'être, car il t'es apporté par tes amis, et entre amis, on partage souvent le même sens de l'humour.
## C'est le moment idéal pour libérer internet
Le déploiement massif de la fibre nous fournit la possibilité de revenir au "vrai" internet : un internet pair-à-pair.
Du l'ADSL, avec son débit asymétrique (80ko/s en débit ascendant, en upload), on passe avec la fibre à 80Mo/s.
Il devient donc possible de regarder une vidéo en streaming directement depuis chez ses amis, plutôt que de la récupérer depuis un datacenter inconnu localisé à 400km.
L'apparition et la popularisation des Raspberry Pi rend possible à chacun de se créer son propre petit datacenter de 1 To pour mettre à la disposition de ses amis toute sa vidéothèque. Le Raspberry Pi peut rester allumer en permanence sans faire exploser ta facture électrique ni causer de catastrophe environnementale, puisqu'il a une puissance de l'ordre de 15W. Astroport peut aussi tourner sur un vieux PC de 2005 dont on pensait ne plus jamais pouvoir faire quoi que ce soit.
La France est par ailleurs le terrain idéal pour expérimenter cette façon de partager du contenu, grâce au droit à la copie privée, qui nous autorise à garder pour soi un contenu diffusé par d'autres (à l'époque : enregistrer sur K7 un contenu diffusé à la radio).
## Comment Astroport libère l'internet
Astroport utilise IPFS pour stocker les fichiers.
Ces fichiers sont partagés uniquement avec les gens que vous avez explicitement choisis, et vous recevez du contenu uniquement des personnes en qui vous avez confiance. Cette identification des "amis" se fait pour l'instant via Gchange, mais cela pourrait évoluer.
Les vidéos peuvent être affichées dans différentes interfaces. Astroport en propose pour l'instant deux :
1. Une interface web, personnalisable à loisir grâce aux thèmes
2. Kodi, qui peut s'installer sur une Android TV
## Un modèle économique pour les créateurs et le partage pair-à-pair
À chaque fichier, Astroport associe un porte-monnaie de monnaie libre G1.
Lors de la consultation d'un fichier, un peu de monnaie libre G1 est transmise au noeud qui sert le fichier (vous ou un ami, par exemple), et la monnaie récoltée sera à terme partagée entre le noeud et le créateur du contenu.
Le modèle pair-à-pair, en diminuant les coûts de diffusion, permet d'augmenter la part récupérée par le créateur.
D'un point de vue écologique, le modèle pair-à-pair diminue aussi l'électricité consommée, car le terminal de consultation devient aussi serveur de fichiers, et fait ainsi d'une pierre deux coups. S'ils souhaitent rejoindre ce modèle, les créateurs ne seront plus obligés d'utiliser les datacenters de Netflix pour diffuser leur contenu.
Grâce aux contrats, même Netflix pourra choisir de fermer ses datacenter, pour proposer à tout un chacun de participer à la diffusion de son catalogue, et le rémuner en conséquence.
**Découvrez l'[Internet des gens](https://astroport.com)**
astrXbian est une première façon de programmer Astroport en le connectant avec KODI.
Utilisé de cette façon, il constitue un **Vidéo Club "pair à pair" entre amis**
Utilisé de cette façon, il constitue un **Vidéo Club "pair à pair" entre amis**
Il permet de mettre en partage vos copies privées dans votre essaim au travers du média-center KODI.
Vos relations Gchange s'appliquent comme relations (A-B(-C)) (ami (d'amis)) de votre essaim IPFS et de toutes données à échanger selon le nombre d'étoiles envoyées.
@ -17,12 +92,15 @@ Il contrôle son réseau IPFS en fonction des "étoiles" transmisent par Gchange
ASTROPORT, automate cellulaire sécurisé, prend en compte vos relations pour ouvrir des canaux de partage selon 5 niveaux de confiance.
Ces "stargate" permettent de créer des espaces numériques public ou privés tout en contrôlant l'étendue du partage.
---
---
## INSTALLATION (Debian/Ubuntu/Mint ou Xbian)
```bash <(wget -qO- https://git.p2p.legal/axiom-team/astrXbian/raw/branch/master/install.sh)```
### **IMPORTANT** Restez en contact avec l'équipe de développement!! [Groupe Framagenda en cours de création](https://framagenda.org/apps/contacts/circle/vUAH4ggf7DyfznqN9bJDHu3nitjL7K6)
---
## [INSTALLATION sur RaspberryPi (Xbian)](https://www.copylaradio.com/en_US/blog/blog-1/post/astrxbian-20)
@ -52,7 +130,7 @@ Cela tombe bien, parce que tout utilisateur averti de son ordinateur se doit de
Il s'agit des logiciels ipfs et de diverses couches cryptographiques compatible avec toute application du système hote pour en partager les données avec les amis de son essaim
cette distribution permet de facilement relier nos ordinateurs en cloud sans datacenter.
**Ouvrez un terminal puis copiez/collez cette ligne de commande**:
**Ouvrez un terminal puis copiez/collez cette ligne de commande**:
```bash <(wget -qO- https://git.p2p.legal/axiom-team/astrXbian/raw/branch/master/install.sh)```
@ -91,7 +169,7 @@ Ensemble transformons le monde numérique pour qu'il devienne LIBRE P2P et LEGAL
## Installation Image pour Rpi4
Nous avons préparé une image système pré-installée
Nous avons préparé une image système pré-installée
[TELECHARGER IMAGE POUR RPI](https://qo-op.com/astrXbian_2021_03_10.img)
- Copier l'image sur une carte micro-SD. Utiliser un RaspberryPi4 (2 ou 4Go) est recommandé!
@ -103,31 +181,31 @@ NB: Les films placés dans ~/astroport/film/$TMDBID/ sont automatiquement transf
-- Automate Astroport/KODI en demonstration pour Xbian.org --
## PRINCIPE DE FONCTIONNEMENT
## PRINCIPE DE FONCTIONNEMENT ([index des PAD astroport](https://pad.p2p.legal/s/astroport-index))
> Astroport/KODI vous permet de partager les vidéos que vous aimez avec les gens que vous aimez.
Le répertoire ~/astroport sert de sas de transfert de vos fichiers dans IPFS.
Le répertoire ~/astroport sert de sas de transfert de vos fichiers dans IPFS (vous pouvez en effacer les fichiers une fois importés).
Votre essaim de pairs connectés se dessine selon les "étoiles" échangées sur https://gchange.fr
Chaque noeud astXbian possède une identité (paire de clef ed25519) qui correspond à son identité sur https://gchange.fr et un portefeuille sur https://cesium.app
Chaque noeud astXbian possède une identité (paire de clef ed25519) qui correspond à son identité sur https://gchange.fr et un portefeuille sur https://cesium.app
Lorsqu'une identité "like/étoile" un autre compte sur Gchange, elle lui expédie le message "ipfstryme" ```~/.zen/ipfs/.${IPFSNODEID}/tryme.addr``` qui contient les adresses IP/IPFS connues (amis d'ami).
Chaque fichier placé dans ```~/.zen/ipfs``` est partagé sur la clef IPNS "self" de chacun puis collecté dans ```~/.zen/ipfs_swarm``` régulièrement.
Chaque fichier placé dans ```~/.zen/ipfs``` est partagé sur la clef IPNS "self" de chacun puis collecté dans ```~/.zen/ipfs_swarm``` régulièrement (c'est la Balise de votre Station)
Chaque noeud conserve la mémoire de sa bibliothèque au travers du fichier ```~/.zen/ipfs/.${IPFSNODEID}/astroport/kodi/vstream/${PREFIX}ASTRXBIAN```
et transmet à Kodi l'ensemble de des "film" de son swarm dans ```~/.zen/ipfs/.$IPFSNODEID/FASTRXBIAN``` (PREFIX = F), selon le format
et transmet à Kodi l'ensemble de des "film" dans ```~/.zen/ipfs/.$IPFSNODEID/FASTRXBIAN``` (PREFIX = F), selon le format
```
CAT;TMDB;YEAR;TITLE;SAISON;GENRES;GROUPES;RES;URLS
film;$TMDB;2013;Frequencies;;["Science fiction","Romance","Mystere"];$XZUID;480p;http://127.0.0.1:8181/ipfs/QmcXMAHbFH3gDwmxJRX7uh753oCbXAEajwQsAWFkvqbRY3/Frequencies.mp4
film;$TMDB;2013;Frequencies;;["Science fiction","Romance","Mystere"];$XZUID;480p;http://127.0.0.1:8080/ipfs/QmcXMAHbFH3gDwmxJRX7uh753oCbXAEajwQsAWFkvqbRY3/Frequencies.mp4
# FORMAT DU FICHIER : https://github.com/Kodi-vStream/venom-xbmc-addons/wiki/Voir-et-partager-sa-biblioth%C3%A8que-priv%C3%A9e#d%C3%A9clarer-des-films
```
* ```~/.zen/PIN``` memorise l'état des PIN du réseau
* ```~/.zen/ipfs/.${IPFSNODEID}/KEY``` attribue une clef MEDIAKEY IPNS à chaque SOURCE_ID et applique un contrat fixe ou dynamique (selon le chiffrage appliqué au Thunder Network)
* ```~/.zen/ipfs/.${IPFSNODEID}/index.html``` l'application par défaut de votre clef self est un TiddlyWiki
* ```~/.zen/ipfs/.${IPFSNODEID}/KEY``` attribue une clef MEDIAKEY IPNS à chaque SOURCE_ID et applique un contrat fixe ou dynamique (selon le chiffrage appliqué à votre Thunder Network)
* ```~/.zen/ipfs/.${IPFSNODEID}/index.html``` l'application par défaut de votre Station est [TiddlyWiki](https://tiddlywiki.com/languages/fr-FR/index.html)
L'essaim se restructure toutes les minutes (code: ```cron_MINUTE.sh```) et active l'automate Astroport/BLOB.
@ -142,7 +220,7 @@ L'essaim se restructure toutes les minutes (code: ```cron_MINUTE.sh```) et activ
Chaque station fabrique 5 clefs qui sont envoyées à tous ses amis en fonction des étoiles attribuées.
Ces "stargate" partagés sur le même espace IPNS sont signés par chaque participant qui le modifie construisant une blockchain (sauvegarde).
En cas de conflit (quand le swarm est trop grand ou désynchronisé), une procédure envoi des messages aux 2 signatures et invite à résoudre de façon manuelle le problème.
En cas de conflit (quand le swarm est trop grand ou désynchronisé), une procédure envoi des messages aux 2 signatures et invite à résoudre de façon manuelle le problème.
# Magic commands
@ -151,10 +229,10 @@ En cas de conflit (quand le swarm est trop grand ou désynchronisé), une procé
~/.zen/astrXbian/zen/ssh_forward2onelove.sh
# Obtenir la liste de tous ses amis (gchange+)
cat ~/.zen/ipfs_swarm/.12D*/G1SSB/_g1.gchange_title
cat ~/.zen/ipfs_swarm/.12D*/.player
# Noms des stations astroport de son swarm
for peer in $(ipfs swarm peers); do ipfsnodeid=${peer##*/}; echo "$(ipfs cat /ipns/$ipfsnodeid/.$ipfsnodeid/G1SSB/_g1.gchange_title) => $(ipfs cat /ipns/$ipfsnodeid/.$ipfsnodeid/_xbian.zuid)"; done
# Scan des stations IPFS de son swarm
for peer in $(ipfs swarm peers); do ipfsnodeid=${peer##*/}; echo $ipfsnodeid; echo "$(ipfs --timeout=2s cat /ipns/$ipfsnodeid/.$ipfsnodeid/G1SSB/_g1.gchange_title) => $(ipfs --timeout=1s cat /ipns/$ipfsnodeid/.$ipfsnodeid/.player)"; ipfs --timeout=1s ls /ipns/$ipfsnodeid/; done
# Obtenir le nom des fichiers contenus dans PIN IPFS
for ID in $( ls ~/.zen/PIN/ | cut -d '/' -f 6); do ipfs ls $ID; done
@ -172,12 +250,12 @@ ipfs ls /ipns/k51qzi5uqu5dk1nt1pfbtgfis4bep8pcip78w30xykhgba7y7wk0xyu8nwci5m
MYCODE=$(cat ~/.zen/ipfs_swarm/.$IPFSNODEID/.mycode);
for CODE in $(ls ~/.zen/ipfs_swarm/.12D*/.mycode);
do
echo
echo
ipfsnodeid=$(echo $CODE | cut -d '.' -f 3 | cut -d '/' -f 1 );
code=$(cat $CODE);
IPNSCODE=$(ipfs cat /ipns/$ipfsnodeid/.$ipfsnodeid/.mycode)
zuid=$(cat ~/.zen/ipfs_swarm/.$ipfsnodeid/_xbian.zuid);
# zuid=$(ipfs cat /ipns/$ipfsnodeid/.$ipfsnodeid/_xbian.zuid)
zuid=$(cat ~/.zen/ipfs_swarm/.$ipfsnodeid/.player);
# zuid=$(ipfs cat /ipns/$ipfsnodeid/.$ipfsnodeid/.player)
g1name=$(cat ~/.zen/ipfs_swarm/.$ipfsnodeid/G1SSB/_g1.gchange_title)
# g1name=$(ipfs cat /ipns/$ipfsnodeid/.$ipfsnodeid/G1SSB/_g1.gchange_title)
echo "---> $zuid / $g1name : $IPNSCODE"
@ -187,14 +265,14 @@ do
done;
# Get your ipfs swarm peers station names (XZUID)
for ipfsnodeid in $(ipfs swarm peers | grep -o '[^/]*$'); do ipfs cat /ipns/$ipfsnodeid/.$ipfsnodeid/_xbian.zuid; done
for ipfsnodeid in $(ipfs swarm peers | grep -o '[^/]*$'); do ipfs cat /ipns/$ipfsnodeid/.$ipfsnodeid/.player; done
```
# ANNEXES
## PRESENTATIONS VIDEO
### [Fred présente Astroport à la Ressourcerie](https://tube.p2p.legal/videos/watch/7ff4a8c9-7fb7-44ef-a1ee-bdf8ecc74cfe)
### [Première visite de Astroport/KODI](https://tube.p2p.legal/videos/watch/d74631e9-b1bd-43f4-9db7-5effca1ef46a)
@ -242,16 +320,13 @@ https://astroport.com
# Surcouche logicielle P2P à Debian (Essaim IPFS/Gchange+) + Interface média center KODI / IPFS
---
# OFFRES ENMPLOIS
Deux offres d'emplois ala TroporstA (only real GNU understand)
https://forum.monnaie-libre.fr/t/offres-emplois/16903?u=qoop
# NOUS RECRUTONS
**Activation de la Zen Economie Astroport.**
Pour rejoindre l'Astrocrew: Installez AstrXbian TestNET apprenez à programmer de votre automate cellulaire (BASH + multilanguage).
**Et oui, on peut gagner jusqu'à 3 DU en sélectionnant, traduisant, les sources du Web qui vous plaisent !!**
Des offres d'emploi et de stage en pagaille: visitez https://www.copylaradio.com/makers
- 1 DU par compte ouvert sur https://oasis.astroport.com
- 2 DU par article autour du DIY Raspberry Pi sur https://copylaradio.com (+ 1 DU pour l'ouverture du compte)
A la clef un concours des meilleurs articles par activation de la Zen Economie sur Astroport.
Pour rejoindre l'Astrocrew installez AstrXbian TestNET en cour s de développement et devenez programmateur de cette automate cellulaire (BASH + multilanguage).
Le nouveau JEu du LOVE peut commencer.

@ -0,0 +1,15 @@
#!/bin/bash
########################################################################
# Author: Astrocrew
# Version: 0.1
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
########################################################################
YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) && [[ ! $YOU ]] && echo "ipfs NOT RUNNING. EXIT" && exit 1
MYG1PUB=$(cat /home/$YOU/.zen/ipfs/.*/G1SSB/_g1.pubkey)
MYIPFSNODEID=$(cat /home/$YOU/.zen/ipfs/.*/.ipfsnodeid)
[[ $MYG1PUB == "" ]] && echo "$MYIPFSNODEID MISSING $MYG1PUB" && exit 1
echo $(/home/$YOU/.zen/astrXbian/zen/jaklis/jaklis.py balance -p $MYG1PUB)
exit 0

@ -0,0 +1,49 @@
#!/bin/bash
########################################################################
# Author: Astrocrew
# Version: 0.1
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
########################################################################
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
ME="${0##*/}"
countMErunning=$(ps auxf --sort=+utime | grep -w $ME | grep -v -E 'color=auto|grep' | wc -l)
[[ $countMErunning -gt 2 ]] && echo "$ME already running $countMErunning time" && exit 0
YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) && [[ ! $YOU ]] && echo "ipfs NOT RUNNING. EXIT" && exit 1
G1PUB=$(cat ~/.zen/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) && [[ ! $G1PUB ]] && echo "NO ~/.zen/secret.dunikey EXIT" && exit 1
IPFSNODEID=$(ipfs --timeout=20s id -f='<id>\n' 2>/dev/null) && [[ "$IPFSNODEID" == "" ]] && echo 'NO IPFS RUNNING. EXIT' && exit 1
[ ! -d ~/.zen/ipfs/.$IPFSNODEID/astroport ] && echo 'ASTROPORT NOT READY' && exit 1
###### MOVE MAP FROM SELF IPNS INDEX
if [ ! -d ~/.zen/ipfs/map ]; then
mv ~/.zen/ipfs/.$IPFSNODEID/astroport/map ~/.zen/
else
exit 0
fi
## TODO CREATE SPECIAL IPNS KEY FOR SHARING
##############################################################"
## DO NOT RECORD output.pdf, bu convert to jpg and link throug index.html REDIRECT
##############################################################"
for pdflink in $(ls ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/*/bulle.pdf); do
lid=$(echo $pdflink | cut -d '/' -f 11)
## PDF convert and crop to JPG / ipfs add / index.html for redirect
convert -density 200 -quality 80 $pdflink /tmp/bulle.jpg
convert -crop 1260x420+55+30 /tmp/bulle.jpg /tmp/$lid.jpg
IPFS=$(ipfs add -wq "/tmp/$lid.jpg") ## Add $lid.pdf to IPFS
IPFSREPFILEID=$(echo $IPFS | cut -d ' ' -f 2) ## Get repertory ipfs link
[[ "$IPFSREPFILEID" == "" ]] && echo "IPFS ADD TROUBLE. CONTINUE" && exit 1
## Create index.html with Redirect to /ipfs/$IPFSREPFILEID/$lid.jpg
echo "<html><head><meta http-equiv=\"Refresh\" content=\"0; URL=/ipfs/$IPFSREPFILEID/$lid.jpg\"></head></html>" > ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid/index.html
# mv ./output.pdf ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid/bulle.pdf
rm ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid/bulle.pdf 2>/dev/null
echo "NOW LIEU redirect to http://127.0.0.1:8080/ipfs/$IPFSREPFILEID/$lid.jpg"
cat ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid/index.html
done
exit 0

@ -0,0 +1,169 @@
#!/bin/bash
########################################################################
# Author: Astrocrew
# Version: 0.1
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
########################################################################
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
ME="${0##*/}"
countMErunning=$(ps auxf --sort=+utime | grep -w $ME | grep -v -E 'color=auto|grep' | wc -l)
[[ $countMErunning -gt 2 ]] && echo "$ME already running $countMErunning time" && exit 0
YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) && [[ ! $YOU ]] && echo "ipfs NOT RUNNING. EXIT" && exit 1
G1PUB=$(cat ~/.zen/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) && [[ ! $G1PUB ]] && echo "NO ~/.zen/secret.dunikey EXIT" && exit 1
IPFSNODEID=$(ipfs --timeout=20s id -f='<id>\n' 2>/dev/null) && [[ $IPFSNODEID == "" ]] && echo 'NO IPFS RUNNING. EXIT' && exit 1
[ ! -d ~/.zen/ipfs/.$IPFSNODEID/astroport ] && echo 'ASTROPORT NOT READY' && exit 1
## INSTALL MISSING PACKAGES
if [[ -f /etc/sudoers.d/apt ]]; then
for i in chromium nmap httrack imagemagick; do
if [ $(dpkg-query -W -f='${Status}' $i 2>/dev/null | grep -c "ok installed") -eq 0 ]; then
sudo apt install -y $i
fi
done
else
echo "No sudo access for apt install... Please correct situation"
echo "PUT : $USER ALL=(ALL) NOPASSWD:/usr/bin/apt INTO /etc/sudoers.d/apt (use sudo visudo)"
exit 1
fi
##############################################################"
## Backing up europa p4n collected spots from collective intelligence ##
# SWARM is collectively PLAYing bataille navale
# Randomly get geaodata in south europe
# FOCUS on SOUTH EUROPE
# LON = -10 to 30
# LAT = 35 to 60
# https://fr.mapsofworld.com/lat_long/europe.html
##############################################################"
# initial first spot.
lon=0
lat=40
try=1
# Randomly choose spot from in RANGE $lat.$lon
while [[ $(ls ~/.zen/ipfs_swarm/.*/astroport/map/$lat.$lon/p4n/spot.json 2>/dev/null) ]]; do
echo "astroport/$lat.$lon geodata already swarm captured. CONTINUE"
FLOOR=-5; #-10;
CEILING=10; #30
RANGE=$(($CEILING-$FLOOR+1));
RESULT=$RANDOM;
let "RESULT %= $RANGE";
lon=$(($RESULT+$FLOOR));
#echo $lon
FLOOR=40; #35;
CEILING=50; #60;
RANGE=$(($CEILING-$FLOOR+1));
RESULT=$RANDOM;
let "RESULT %= $RANGE";
lat=$(($RESULT+$FLOOR));
#echo $lat
try=$(($try+1));
[ $try -eq 99 ] && break ## tirages aléatoire maximum
done
##############################################################"
## $lat.$lon GEODATA NOT SCRAPED YET ?
##############################################################"
if [ ! -d ~/.zen/ipfs/.$IPFSNODEID/astroport/map/$lat.$lon/p4n/ ]; then
### ADD Spot randomness
# Fuzzle geoloc
one=$(echo "000$RANDOM$RANDOM$RANDOM" | cut -b1-12)
latitude="$lat.$one"
two=$(echo "000$RANDOM$RANDOM$RANDOM" | cut -b1-12)
longitude="$lon.$two"
### SCRAPE P4N
## curl spot.json into /astroport/map/$lat.$lon/p4n/spot.json
echo "GETTING /astroport/map/$lat.$lon/p4n/spot.json"
mkdir -p ~/.zen/ipfs/.$IPFSNODEID/astroport/map/$lat.$lon/p4n/
echo "https://www.park4night.com/services/V3/getLieuxAroundMeLite.php?latitude=$latitude&longitude=$longitude"
curl -s "https://www.park4night.com/services/V3/getLieuxAroundMeLite.php?latitude=$latitude&longitude=$longitude" -o ~/.zen/ipfs/.$IPFSNODEID/astroport/map/$lat.$lon/p4n/spot.json
echo "SAVED ~/.zen/ipfs/.$IPFSNODEID/astroport/map/$lat.$lon/p4n/spot.json"
## TODO REFRESH OLD spot.json
fi
##############################################################"
## GEODATA. continue. Let's extract lieu pdf from my spot
##############################################################"
geosrc=$(ls ~/.zen/{ipfs,ipfs_swarm}/.*/astroport/map/$lat.$lon/p4n/spot.json 2>/dev/null)
geodata=$(echo "$geosrc" | tail -n 1)
ipfsnodeid=$(echo "$geodata" | cut -d '/' -f 6 | cut -d '.' -f 2)
if [[ "$ipfsnodeid" != "$IPFSNODEID" ]]; then
echo "This spot.json is managed by
$geosrc"
echo "getting geodata from one of mine"
geodata=$(ls ~/.zen/ipfs/.*/astroport/map/*.*/p4n/spot.json | shuf | tail -n 1)
fi
[[ $geodata ]] && ipfsnodeid=$(echo "$geodata" | cut -d '/' -f 6 | cut -d '.' -f 2) || exit 1
## SUB-SCRAPE SOME of my p4n/spot.json RANDOM "lieu"
echo "SUB-SCRAPING lieu FROM $geodata"
loop=1
while [ $loop -lt 21 ]; do
#{"id":"208264","latitude":"40.730727","longitude":"0.367303","hauteur_limite":"0.00","publique":"1","top_liste":"0","code":"APN","validation_admin":"1","distance":"97.341"}
# flatten json
lieu=$(cat $geodata | jq -r '.lieux[] | "\(.id),\(.latitude),\(.longitude),\(.hauteur_limite),\(.publique),\(.top_liste),\(.code),\(.validation_admin),\(.distance)"' | shuf | tail -n 1)
## GET RANDOM LIEU ID AND TRY MORE TO GET ( prefered APN)
lid=$(echo "$lieu" | cut -d ',' -f 1); code=$(echo "$lieu" | cut -d ',' -f 7)
[[ "$code" != "APN" ]] && [ -d ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid ] && lieu=$(cat $geodata | jq -r '.lieux[] | "\(.id),\(.latitude),\(.longitude),\(.hauteur_limite),\(.publique),\(.top_liste),\(.code),\(.validation_admin),\(.distance)"' | shuf | tail -n 1)
lid=$(echo "$lieu" | cut -d ',' -f 1); code=$(echo "$lieu" | cut -d ',' -f 7)
[[ "$code" != "APN" ]] && [ -d ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid ] && lieu=$(cat $geodata | jq -r '.lieux[] | "\(.id),\(.latitude),\(.longitude),\(.hauteur_limite),\(.publique),\(.top_liste),\(.code),\(.validation_admin),\(.distance)"' | shuf | tail -n 1)
lid=$(echo "$lieu" | cut -d ',' -f 1); code=$(echo "$lieu" | cut -d ',' -f 7)
[[ "$code" != "APN" ]] && [ -d ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid ] && lieu=$(cat $geodata | jq -r '.lieux[] | "\(.id),\(.latitude),\(.longitude),\(.hauteur_limite),\(.publique),\(.top_liste),\(.code),\(.validation_admin),\(.distance)"' | shuf | tail -n 1)
lid=$(echo "$lieu" | cut -d ',' -f 1); code=$(echo "$lieu" | cut -d ',' -f 7)
[ -d ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid ] && lieu=$(cat $geodata | jq -r '.lieux[] | "\(.id),\(.latitude),\(.longitude),\(.hauteur_limite),\(.publique),\(.top_liste),\(.code),\(.validation_admin),\(.distance)"' | shuf | tail -n 1)
lid=$(echo "$lieu" | cut -d ',' -f 1); code=$(echo "$lieu" | cut -d ',' -f 7)
[ -d ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid ] && lieu=$(cat $geodata | jq -r '.lieux[] | "\(.id),\(.latitude),\(.longitude),\(.hauteur_limite),\(.publique),\(.top_liste),\(.code),\(.validation_admin),\(.distance)"' | shuf | tail -n 1)
lid=$(echo "$lieu" | cut -d ',' -f 1); code=$(echo "$lieu" | cut -d ',' -f 7)
[[ "$lid" == "" ]] && echo "ERROR LIEU NO ID. CONTINUE" && loop=$(($loop+1)) && continue
mkdir -p /tmp/$lid && cd /tmp/$lid
echo "Downloading https://www.park4night.com/?page=lieu&id=$lid&bulle=YES"
mkdir -p ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid/$code
echo "id,latitude,longitude,hauteur_limite,publique,top_liste,code,validation_admin,distance" > ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid/$code/lieu.txt
echo "$lieu" >> ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid/$code/lieu.txt
cat ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid/$code/lieu.txt
# Get 1st copy bulle.pdf... Now converting to index.html redirect to $lid.jpg
[ -f ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid/bulle.pdf ] && mv ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid/bulle.pdf ./output.pdf && echo "ancien fichier bulle.pdf"
[ ! -f ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid/index.html ] && echo "running chromium... " && chromium --timeout=10000 --headless --no-sandbox --disable-gpu --print-to-pdf=output.pdf "https://www.park4night.com/?page=lieu&id=$lid&bulle=YES" 2>/dev/null
[ ! -f ./output.pdf ] && rm -Rf ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid && echo "## CHROMIUM TIMEOUT, CANCEL MISSION" && loop=$(($loop+1)) && continue
## PDF convert and crop to JPG / ipfs add / index.html for redirect
if [ -f ./output.pdf ]; then
convert -density 200 -quality 80 ./output.pdf ./bulle.jpg
convert -crop 1260x420+55+30 ./bulle.jpg ./$lid.jpg
IPFS=$(ipfs add -wq "./$lid.jpg") && echo "## Added $lid.pdf to IPFS: $IPFS"
IPFSREPFILEID=$(echo $IPFS | cut -d ' ' -f 2) && echo "## Repertory $IPFSREPFILEID"
[[ "$IPFSREPFILEID" == "" ]] && echo "IPFS ADD TROUBLE. CONTINUE" && rm -Rf ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid && rm -Rf /tmp/$lid && loop=$(($loop+1)) && continue
## Create index.html with Redirect to /ipfs/$IPFSREPFILEID/$lid.jpg
echo "<html><head><meta http-equiv=\"Refresh\" content=\"0; URL=/ipfs/$IPFSREPFILEID/$lid.jpg\"></head></html>" > ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid/index.html
# mv ./output.pdf ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid/bulle.pdf
rm ~/.zen/ipfs/.$IPFSNODEID/astroport/map/p4n/lieu/$lid/bulle.pdf 2>/dev/null
echo "NOW LIEU redirect to http://127.0.0.1:8080/ipfs/$IPFSREPFILEID/$lid.jpg"
rm ./$lid.jpg
rm ./bulle.jpg
fi
cd -
sleep $((1 + RANDOM % 2))
rm -Rf /tmp/$lid
loop=$(($loop+1));
done
## CHECK SWARM GEODATA MAP
# ls -d ~/.zen/ipfs_swarm/.*/astroport/map/*/ | rev | cut -d '/' -f 2 | rev | sort
## NB OF lieu: ls -d ~/.zen/ipfs_swarm/.*/astroport/map/p4n/lieu/*/ | rev | cut -d '/' -f 2 | rev | sort | wc
# ipfs cat /ipns/$IPFSNODEID/.$IPFSNODEID/astroport/map/$lat.$lon/p4n/spot.json | jq
exit 0

@ -0,0 +1,78 @@
#!/bin/bash
########################################################################
# Author: Astrocrew
# Version: 0.1
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
########################################################################
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
ME="${0##*/}"
countMErunning=$(ps auxf --sort=+utime | grep -w $ME | grep -v -E 'color=auto|grep' | wc -l)
[[ $countMErunning -gt 2 ]] && echo "$ME already running $countMErunning time" && exit 0
YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) && [[ ! $YOU ]] && echo "ipfs NOT RUNNING. EXIT" && exit 1
G1PUB=$(cat ~/.zen/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) && [[ ! $G1PUB ]] && echo "NO ~/.zen/secret.dunikey EXIT" && exit 1
IPFSNODEID=$(ipfs --timeout=20s id -f='<id>\n') && [[ ! $IPFSNODEID ]] && echo 'NO IPFS RUNNING. EXIT' && exit 1
MEDIAKEYIPNS="$1"&& [[ ! $MEDIAKEYIPNS ]] && echo 'NO MEDIAKEY. Enter ipns/??? value. EXIT' && exit 1
OPENACCES="$2" && [[ ! $OPENACCES ]] && echo 'OPEN ACCES TO "$2=$G1PUB"'
tempdir=$(mktemp -d)
cd $tempdir
## GET CURRENT DHT PROPAGATED VERSION
ipfs --timeout=10s get --output="$tempdir" /ipns/$MEDIAKEYIPNS
[[ ! $? == 0 ]] && echo "CANNOT GET MEDIAKEY" && exit 1
## DO I OWN THE KEY, OR SHOUD I REQUEST IT
MEDIAKEY=$(cat ./*/.id | tail -n 1)
[[ ! $MEDIAKEY ]] && echo "MISSING MATCHING MEDIAKEY ID" && exit 1
if [[ ! $(ipfs key list -l | grep $MEDIAKEY) ]]; then
## SEND A MESSAGE ASKING FOR THE KEY (I am a bootstrap or http gateway)
for sharedowners in $(ls -d */ | cut -d '/' -f 1); do
~/.zen/astrXbian/zen/jaklis/jaklis.py -k ~/.zen/secret.dunikey -n "https://data.gchange.fr" send -d "$sharedowners" -t "MEDIAKEY ask for sharing contract" -m "I was wishing to increment $MEDIAKEY views, but not in your contracts yet. Please run ~/.zen/astrXbian/actions/view_counter_increment_or_allow.sh $MEDIAKEYIPNS $G1PUB to activate."
done
exit 1
fi
## INCREMENT COUNTER
## GO INTO $G1PUB EXCHANGE SPACE
[[ ! -d ./$G1PUB ]] && echo "MISSING RELATION WITH $G1PUB. EXIT" && exit 1
cd $G1PUB
count=$(cat .views.counter 2>/dev/null) || count=0
echo $((count+1)) > .views.counter
if [[ $OPENACCES ]]; then
echo "Creating ${OPENACCES}/.ipns.mediakey.encrypt and .ipfsid.encrypt"
## CREATE OFFICIAL RELATION DETECTED BY autoPINfriends.sh with ~/.zen/ipfs_swarm/.12D*/KEY/*/*/${G1PUB}/.ipfsid.encrypt
mkdir -p /home/$YOU/.zen/ipfs/.${IPFSNODEID}/KEY/${MEDIAKEY}/${G1PUB}/${OPENACCES}/
key2send=$(/home/$YOU/.zen/astrXbian/zen/tools/give_me_keystore_filename.py $MEDIAKEY)
/home/$YOU/.zen/astrXbian/zen/tools/natools.py encrypt -p ${OPENACCES} -i /home/$YOU/.ipfs/keystore/$key2send -o /home/$YOU/.zen/ipfs/.${IPFSNODEID}/KEY/${MEDIAKEY}/${G1PUB}/${OPENACCES}/.ipns.mediakey.encrypt
/home/$YOU/.zen/astrXbian/zen/tools/natools.py decrypt -f pubsec -k "/home/$YOU/.zen/secret.dunikey" -i "/home/$YOU/.zen/ipfs/.${IPFSNODEID}/KEY/${MEDIAKEY}/${G1PUB}/.ipfsid.encrypt" -o "./ipfsid_$MEDIAKEY.txt"
/home/$YOU/.zen/astrXbian/zen/tools/natools.py encrypt -p ${OPENACCES} -i ./ipfsid_$MEDIAKEY.txt -o /home/$YOU/.zen/ipfs/.${IPFSNODEID}/KEY/${MEDIAKEY}/${G1PUB}/${OPENACCES}/.ipfsid.encrypt
## Ask PIN to Bootstraps executed through autoPINfriends.sh
rm ./ipfsid_$MEDIAKEY.txt
## TODO COULD SEND JUNE FOR THAT?
syncronizedir="/home/$YOU/.zen/ipfs/.${IPFSNODEID}/KEY/${MEDIAKEY}"
else
syncronizedir="$tempdir"
fi
echo "WE ARE in $syncronizedir"
cd $syncronizedir
## PUBLISH NEW STATE
I=$(ipfs add -qrH $syncronizedir | tail -n 1)
echo "CHAIN: $I"
echo "$(date -u +%s%N | cut -b1-13)" > .timestamp
echo $I > .chain
I=$(ipfs add -qrH $syncronizedir | tail -n 1)
echo "${MEDIAKEY} NAME PUBLISHING "
# MEDIAKEY IPNS name publish
J=$(ipfs --timeout=180s name publish --quieter -k ${MEDIAKEY} /ipfs/${I})
echo "$MEDIAKEY VIEW COUNTER UPDATED in https://tube.copylaradio.com/ipns/$J/$G1PUB/.views.counter"

@ -6,27 +6,50 @@
########################################################################
# SCRIPT INTERACTIF POUR AJOUTER UN FICHIER à ASTROPORT/KODI
#
# 1. CAT: film, serie, anime
# 1. CAT: film, serie
# 2. TMDB: ID de la fiche sur https://www.themoviedb.org/
# 3. TITLE: Titre de la vidéo
# 4. YEAR: Année de la vidéo
# 5. RES: Résolution 1080p, 4K, SD, 720, HD
# 6. SAISON: Pour les séries et animes, c'est le numéro de saison.
# 6. SAISON: Pour les séries, c'est le numéro de saison.
# Pour un film, le champ SAISON est utilisé pour renseigner la Saga
# 7. GENRES: Action, Aventure, Fantastique, Animation, etc (choix multiple).
# 8. GROUPES: Permet de regrouper des films. (choix multiple)
#
# 7. GENRES: Action, Aventure, Fantastique, Animation, etc (choix multiple).
# 8. GROUPES: Stocker la clef IPNS du MEDIAKEY.