#!/bin/bash ############################################################ install.sh # Version: 0.5 (Modifiรฉ pour forcer MAJ apt/pip) # License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) ######################################################################## { ## Dรฉtection emplacement script et initialisation "MY_PATH" MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized ME="${0##*/}" start=`date +%s` ################################################################## HELP if [[ "${1:-}" == "--help" || "${1:-}" == "-h" ]]; then echo "=================================================================" echo " ๐Ÿš€ ASTROPORT.ONE INSTALLER ๐Ÿš€ " echo "=================================================================" echo "Usage :" echo " bash install.sh [EMAIL] [NODE_DOMAIN] [EMAIL_DOMAIN] [PROFILE]" echo "" echo "Options :" echo " --help, -h Affiche cette aide et quitte." echo "" echo "Paramรจtres positionnels (optionnels) :" echo " 1. EMAIL Email du Capitaine (ex: alice@mail.com)." echo " Laissez vide (\"\") pour un email automatique." echo " 2. NODE_DOMAIN Domaine du Nล“ud/Armateur (ex: ma-base.org)." echo " Laissez vide (\"\") pour copylaradio.com." echo " 3. EMAIL_DOMAIN Domaine pour l'email captainerie (ex: mon-asso.org)." echo " Laissez vide (\"\") pour qo-op.com." echo " 4. PROFILE Profil d'installation (voir ci-dessous)." echo " Laissez vide pour l'installation standard." echo "" echo "Profils disponibles :" echo " (vide) Standard : IPFS + Nostr strfry + UPassport + Astroport" echo " nextcloud Standard + NextCloud AIO (cloud privรฉ 128Go pour ZEN Card)" echo " ai-company Standard + Stack IA (Ollama + Paperclip + Open WebUI + Qdrant)" echo " โ†’ install-ai-company.docker.sh + code_assistant" echo " dev Standard + rnostr (remplace strfry, sรฉmantique Qdrant)" echo "" echo "Variables d'environnement supportรฉes :" echo " CAPTAIN_EMAIL, NODE_DOMAIN, CAPTAIN_EMAIL_DOMAIN, INSTALL_PROFILE" echo "" echo "Exemples d'installation silencieuse :" echo " bash install.sh \"\" \"ma-base.org\" -> Standard sur ma-base.org" echo " bash install.sh \"\" \"\" \"\" nextcloud -> Standard + NextCloud" echo " bash install.sh \"\" \"\" \"\" ai-company -> Standard + Stack IA" echo " bash install.sh \"contact@me.com\" \"\" \"\" dev -> Dev (rnostr)" echo "=================================================================" exit 0 fi ######################################################################## ################################################################## SUDO ## Lancement "root" interdit... ######################################################################## [ $(id -u) -eq 0 ] && echo "LANCEMENT root INTERDIT. " && exit 1 [[ ! $(groups | grep -w sudo) ]] \ && echo "AUCUN GROUPE \"sudo\" : su -; usermod -aG sudo $USER" \ && su - && apt-get install sudo -y \ && echo "Run Install Again..." && exit 0 ################################################################## EMAIL & DOMAINE CAPITAINE ## Paramรจtres : ## $1 = Email personnalisรฉ (ou "" pour auto) ## $2 = Domaine Armateur/Noeud (ou "" pour copylaradio.com) ## $3 = Domaine Email Capitaine (ou "" pour qo-op.com, si email auto) ######################################################################## export CUSTOM_CAPTAIN_EMAIL="${1:-${CAPTAIN_EMAIL:-}}" export CUSTOM_NODE_DOMAIN="${2:-${NODE_DOMAIN:-}}" export CUSTOM_EMAIL_DOMAIN="${3:-${CAPTAIN_EMAIL_DOMAIN:-}}" export INSTALL_PROFILE="${4:-${INSTALL_PROFILE:-}}" if [[ -z "$CUSTOM_CAPTAIN_EMAIL" && -z "$CUSTOM_NODE_DOMAIN" ]]; then echo "=========================================================" echo " EMBARQUEMENT CAPITAINE & ARMATEUR" echo "=========================================================" echo "Appuyez sur Entrรฉe pour utiliser les valeurs automatiques." read -p "Email Capitaine [auto: support+node...@qo-op.com] : " CUSTOM_CAPTAIN_EMAIL read -p "Domaine Noeud [auto: copylaradio.com] : " CUSTOM_NODE_DOMAIN echo "" echo "Profil d'installation :" echo " (vide) Standard (recommandรฉ)" echo " nextcloud + NextCloud AIO cloud privรฉ 128Go" echo " ai-company + Stack IA Swarm (Ollama, Paperclip, Open WebUI)" echo " dev + rnostr (remplace strfry โ€” expรฉrimental)" read -p "Profil [standard] : " INSTALL_PROFILE fi [[ -n "$CUSTOM_CAPTAIN_EMAIL" ]] && echo ">>> Email Capitaine : $CUSTOM_CAPTAIN_EMAIL" || echo ">>> Email Capitaine : Automatique" [[ -n "$CUSTOM_NODE_DOMAIN" ]] && echo ">>> Domaine Noeud : $CUSTOM_NODE_DOMAIN" || echo ">>> Domaine Noeud : Automatique (copylaradio.com)" [[ -n "$CUSTOM_EMAIL_DOMAIN" ]] && echo ">>> Domaine Email : $CUSTOM_EMAIL_DOMAIN" || echo ">>> Domaine Email : Automatique (qo-op.com)" #### GIT CLONE ############################################################### echo "#############################################" echo "=== CODE CLONING TO '~/.zen/Astroport.ONE' ===" echo "#############################################" echo "UPDATING SYSTEM REPOSITORY" sudo apt-get update sudo apt install -y git mkdir -p ~/.zen/workspace cd ~/.zen/workspace git clone --depth 1 https://github.com/papiche/UPlanet cd ~/.zen git clone --depth 1 https://github.com/papiche/Astroport.ONE.git # TODO INSTALL FROM IPFS / IPNS ## S'assurer que tous les scripts principaux sont exรฉcutables aprรจs le clone chmod +x ~/.zen/Astroport.ONE/*.sh \ ~/.zen/Astroport.ONE/tools/*.sh \ ~/.zen/Astroport.ONE/RUNTIME/*.sh 2>/dev/null || true echo "โœ… Scripts rendus exรฉcutables" ## Crรฉer .env depuis template si absent (รฉvite "Aucun fichier" au dรฉmarrage des services) [[ ! -f ~/.zen/Astroport.ONE/.env ]] \ && cp ~/.zen/Astroport.ONE/.env.template ~/.zen/Astroport.ONE/.env \ && echo "โœ… ~/.zen/Astroport.ONE/.env crรฉรฉ depuis .env.template" \ || echo "โ„น๏ธ ~/.zen/Astroport.ONE/.env dรฉjร  prรฉsent" ################################################################### IPFS ## installation de ipfs ######################################################################## [[ ! $(which ipfs) ]] \ && ~/.zen/Astroport.ONE/install/install.kubo_v0.40.0_linux.sh \ || echo "=== IPFS FOUND === OK" [[ ! $(which ipfs) ]] && echo "INSTALL IPFS PLEASE" && exit 1 #################################################################### # MISES ร€ JOUR GLOBALES (APT & PIP) # -> S'exรฉcute TOUJOURS, mรชme si une installation est dรฉjร  prรฉsente #################################################################### echo "#############################################" echo "###### MISE A JOUR DU SYSTEME (APT/PIP) #####" echo "#############################################" # Mise ร  jour gรฉnรฉrale des paquets existants sudo apt-get update -y # sudo apt-get upgrade -y ## run at the beginning could need reboot !! echo "#############################################" echo "######### INSTALL PRECIOUS FREE SOFTWARE ####" echo "#############################################" for i in zip ssss make cmake hdparm iptables ufw fail2ban wireguard openssh-server sshfs parallel npm shellcheck multitail netcat-traditional socat ncdu chromium miller inotify-tools curl net-tools libsodium* miniupnpc libcurl4-openssl-dev libgpgme-dev libffi-dev; do if [ $(dpkg-query -W -f='${Status}' $i 2>/dev/null | grep -c "ok installed") -eq 0 ]; then echo ">>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Installation $i <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" sudo apt install -y $i [[ $? != 0 ]] && echo "INSTALL $i FAILED." && echo "INSTALL $i FAILED." >> ~/.zen/install.errors.log && continue fi done echo "#############################################" echo "####### INSTALL PYTHON3 SYSTEM LIBRARIES ####" echo "#############################################" for i in pipx python3-pip python3-setuptools python3-base58 python3-wheel python3-dotenv python3-gpg python3-jwcrypto python3-brotli python3-aiohttp python3-prometheus-client python3-tk; do if [ $(dpkg-query -W -f='${Status}' $i 2>/dev/null | grep -c "ok installed") -eq 0 ]; then echo ">>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Installation $i <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" sudo apt install -y $i [[ $? != 0 ]] && echo "INSTALL $i FAILED." && echo "INSTALL $i FAILED." >> ~/.zen/install.errors.log && continue fi done echo "#############################################" echo "##### INSTALL MULTIMEDIA & DATA TOOLS ######" echo "#############################################" for i in qrencode pv gnupg gpa pandoc cargo btop sox prometheus ocrmypdf ca-certificates basez markdown jq bc file gawk ffmpeg geoip-bin dnsutils ntpdate v4l-utils espeak vlc mp3info musl-dev openssl* detox nmap httrack html2text imagemagick; do if [ $(dpkg-query -W -f='${Status}' $i 2>/dev/null | grep -c "ok installed") -eq 0 ]; then echo ">>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Installation $i <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" sudo apt install -y $i [[ $? != 0 ]] && echo "INSTALL $i FAILED." && echo "INSTALL $i FAILED." >> ~/.zen/install.errors.log && continue fi done echo "#############################################" echo "######### INSTALL ASCII ART TOOLS ###########" echo "#############################################" for i in figlet cmatrix cowsay fonts-hack-ttf; do if [ $(dpkg-query -W -f='${Status}' $i 2>/dev/null | grep -c "ok installed") -eq 0 ]; then echo ">>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Installation $i <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" sudo apt install -y $i [[ $? != 0 ]] && echo "INSTALL $i FAILED." && echo "INSTALL $i FAILED." >> ~/.zen/install.errors.log && continue fi done if [[ $(which X 2>/dev/null) ]]; then echo "#############################################" echo "######### INSTALL DESKTOP TOOLS ######" echo "#############################################" for i in x11-utils xclip zenity; do if [ $(dpkg-query -W -f='${Status}' $i 2>/dev/null | grep -c "ok installed") -eq 0 ]; then echo ">>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Installation $i <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" sudo apt install -y $i; [[ $? != 0 ]] && echo "INSTALL $i FAILED." && echo "INSTALL $i FAILED." >> ~/.zen/install.errors.log && continue fi done fi echo "################################## ~/.astro/bin PYTHON ENV" cd $HOME ## Ubuntu 22.04 : 'python' n'existe pas โ†’ utiliser python3 if [[ ! -s ~/.astro/bin/activate ]]; then python3 -m venv .astro \ && echo "โœ… Python venv crรฉรฉ : ~/.astro" \ || echo "โš ๏ธ Crรฉation venv รฉchouรฉe (python3 absent ?)" fi [[ -s ~/.astro/bin/activate ]] && . ~/.astro/bin/activate || echo "โš ๏ธ ~/.astro/bin/activate absent โ€” pip install sans venv" cd - echo "#####################################" echo "## PYTHON TOOLS & CRYPTO LIB ##" echo "#####################################" export PATH=$HOME/.local/bin:$PATH pipx install duniterpy --include-deps ## keeps old v1 dep (soon deprecated) ## add monero & bitcoin compatible keys for i in pip python-dotenv scrypt setuptools wheel termcolor amzqr ollama requests geohash beautifulsoup4 cryptography jwcrypto secp256k1 gql base58 pybase64 google pynacl python-gnupg pynentry paho-mqtt aiohttp ipfshttpclient bitcoin monero ecdsa pynostr bech32 matplotlib readability-lxml duniterpy cachetools pydantic-settings robohash substrate-interface; do echo ">>> Installation/Mise ร  jour $i <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" pip install -U $i 2>> ~/.zen/install.errors.log [[ $? != 0 ]] && echo "INSTALL $i FAILED." && echo "python -m pip install -U $i FAILED." >> ~/.zen/install.errors.log && continue done ## playwright remplace pyppeteer (abandonnรฉ 2022) pour tools/page_screenshot.py echo ">>> playwright (remplaรงant pyppeteer โ€” tools/page_screenshot.py) <<<" pip install -U playwright 2>> ~/.zen/install.errors.log \ && echo "โœ… playwright installรฉ" \ || echo "โš ๏ธ playwright install FAILED โ€” voir ~/.zen/install.errors.log" ## Installe le binaire Chromium de playwright (utilise le Chromium systรจme si prรฉsent) python -m playwright install chromium 2>> ~/.zen/install.errors.log \ && echo "โœ… playwright chromium prรชt" \ || echo "โš ๏ธ playwright chromium install FAILED (page_screenshot.py utilisera /usr/bin/chromium)" #################################################################### # MAIN # Vร‰RIFICATION CLร‰ PLAYER POUR SUITE INSTALLATION COMPLETE if [[ ! -d ~/.zen/game/players/ ]]; then echo "#############################################" echo "###### ASTROPORT.ONE ZEN STATION ############" echo "#############################################" echo "######### INSTALL DOCKER ........ ###########" echo "#############################################" ~/.zen/Astroport.ONE/install/install.docker.sh echo "#############################################" echo "######### INSTALL TIDDLYWIKI ############" echo "#############################################" ########################################################## sudo npm install -g tiddlywiki@5.2.3 [[ $? != 0 ]] \ && echo "INSTALL tiddlywiki FAILED." \ && echo "INSTALL tiddlywiki FAILED." >> ~/.zen/install.errors.log ## โ”€โ”€ Vรฉrification Docker, Node.js, NPM, TiddlyWiki โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ echo "#############################################" echo "######### VERIFICATION DOCKER & NODE ######" echo "#############################################" DOCKER_OK=false; NPM_OK=false; TW_OK=false; DOCKER_COMPOSE_OK=false; DENO_OK=false ## Utiliser sg docker pour รฉviter de nรฉcessiter newgrp (groupe activรฉ sans nouveau shell interactif) sg docker -c "docker --version" 2>/dev/null && DOCKER_OK=true || echo "โš ๏ธ Docker non disponible" sg docker -c "docker compose version" 2>/dev/null && DOCKER_COMPOSE_OK=true || echo "โš ๏ธ Docker Compose non disponible" node --version 2>/dev/null && NPM_OK=true || echo "โš ๏ธ Node.js non disponible" npm --version 2>/dev/null || echo "โš ๏ธ NPM non disponible" tiddlywiki --version 2>/dev/null && TW_OK=true || echo "โš ๏ธ TiddlyWiki non accessible (PATH?)" ## Deno : moteur JS alternatif pour yt-dlp EJS quand Node < v20 ## Permet aussi d'exรฉcuter des scripts navigateur dans un conteneur Docker (youtube-dl via EJS) deno --version 2>/dev/null | head -1 && DENO_OK=true || echo "โš ๏ธ Deno non disponible (yt-dlp EJS peut รชtre affectรฉ)" echo "" echo " Docker : $($DOCKER_OK && echo 'โœ…' || echo 'โŒ') | Compose : $($DOCKER_COMPOSE_OK && echo 'โœ…' || echo 'โŒ')" echo " Node.js : $($NPM_OK && echo 'โœ…' || echo 'โŒ') | TW : $($TW_OK && echo 'โœ…' || echo 'โŒ') | Deno : $($DENO_OK && echo 'โœ…' || echo 'โŒ')" echo "" echo " DOCKER STATUS:" sg docker -c "docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'" 2>/dev/null | head -10 || echo " (aucun conteneur)" echo "#############################################" ## Correct PDF restrictions for imagemagick echo "######### IMAGEMAGICK PDF ############" if [[ $(cat /etc/ImageMagick-6/policy.xml | grep PDF) ]]; then ## Backup AVANT modification (pour restauration par uninstall.sh) [[ ! -f /etc/ImageMagick-6/policy.xml.backup ]] \ && sudo cp /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xml.backup \ && echo "Backup ImageMagick policy.xml โ†’ policy.xml.backup" cat /etc/ImageMagick-6/policy.xml | grep -Ev PDF > /tmp/policy.xml sudo cp /tmp/policy.xml /etc/ImageMagick-6/policy.xml fi echo "#############################################" echo "#############################################" LP=$(ls /dev/usb/lp* 2>/dev/null) if [[ ! -z $LP ]]; then echo "######### $LP PRINTER ##############" ########### QRCODE : ZENCARD / G1BILLET : PRINTER ############## ## PRINT & FONTS sudo apt install ttf-mscorefonts-installer printer-driver-all cups -y pip install brother_ql # pipx install brother_ql sudo cupsctl --remote-admin sudo usermod -aG lpadmin $USER sudo usermod -a -G tty $USER sudo usermod -a -G lp $USER ## 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') fi ## UPASSPORT API echo "######### UPASSPORT ##############" echo "INSTALL UPASSPORT : http://localhost:54321" ~/.zen/Astroport.ONE/install/install_upassport.sh ## NIP-101 strfry NOSTR relay echo "######### NIP-101 strfry NOSTR relay ##############" echo "INSTALL NOSTR RELAY : wss://localhost:7777" bash <(wget -qO- https://github.com/papiche/NIP-101/raw/refs/heads/main/install_strfry.sh) ## g1cli (gcli) โ€” Duniter v2s CLI client (compiled from source, branche nostr) echo "######### g1cli Duniter v2 Client ##############" ~/.zen/Astroport.ONE/install/install_gcli.sh ## G1BILLET -- needs reviewing --- code used for .print.sh scipt echo "######### G1BILLET ##############" echo "INSTALL G1BILLET : http://g1billet.localhost:33101" cd ~/.zen git clone https://github.com/papiche/G1BILLET.git # cd G1BILLET && ./setup_systemd.sh ## NETWORK SERVICE NOT USED cd - echo ############################################################### echo "## ADDING lazydocker ================" # INSTALL lazydocker GUI ~/.zen/Astroport.ONE/install/install.lazydocker.sh ############################################################### echo "##INSTALL yt-dlp & SYMLINK youtube-dl ##########################" ~/.zen/Astroport.ONE/install/youtube-dl.sh ############################################################### echo "## INSTALL Deno (for yt-dlp EJS when Node < 20) ##################" ~/.zen/Astroport.ONE/install/install_deno.sh ############################################################### echo "## CONFIGURE yt-dlp JavaScript runtime (Deno or Node + EJS) ######" ~/.zen/Astroport.ONE/install/install_yt_dlp_ejs_node.sh ############################################################### echo "## INSTALL PowerJoular (Power consumption monitoring) ##########" ~/.zen/Astroport.ONE/install/install_powerjoular.sh ############################################################### echo "## INSTALL Prometheus exporters (heartbox monitoring) ##########" ~/.zen/Astroport.ONE/install/install_prometheus.sh if [[ $INSTALL_PROFILE == "dev" ]]; then ############################################################### echo "## INSTALL Flutter SDK (web builds for Ginkgo app) ##########" ~/.zen/Astroport.ONE/install/install_flutter.sh ## Add Flutter to PATH for the rest of install export PATH="$HOME/.flutter/bin:$PATH" fi echo "=== INSTALL SYSTEM (sudoers, systemd, SSH, symlinks)" ~/.zen/Astroport.ONE/install/install_system.sh echo "=== SETUP ASTROPORT (runtime config)" ~/.zen/Astroport.ONE/install/setup/setup.sh ############################################################### echo "## ACTIVER LE PARE-FEU UFW ################################" ~/.zen/Astroport.ONE/tools/firewall.sh ON ############################################################### echo "## INSTALLATIONS CONDITIONNELLES SELON PROFIL ###########" ############################################################### NEXTCLOUD_ACTIVE=false AISTACK_ACTIVE=false RNOSTR_ACTIVE=false case "${INSTALL_PROFILE}" in nextcloud) echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" echo "โ•‘ โ˜๏ธ PROFIL nextcloud โ€” NextCloud AIO (cloud privรฉ 128Go) โ•‘" echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" ## NextCloud AIO utilise son propre docker-compose dans _DOCKER/nextcloud/ ## Ports : 8443 (AIO admin setup), 8001 (Apache nextcloud app), 8002 (AIO dashboard) ## โ”€โ”€ Vรฉrification et conseil disque BTRFS โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" echo "โ•‘ ๐Ÿ’พ STOCKAGE โ€” /nextcloud-data โ•‘" echo "โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ" if [[ -d /nextcloud-data ]]; then _NC_FS=$(stat -f -c %T /nextcloud-data 2>/dev/null || findmnt -no FSTYPE /nextcloud-data 2>/dev/null) _NC_SIZE=$(df -h /nextcloud-data | tail -1 | awk '{print $2" total, "$4" libre"}' 2>/dev/null) echo "โ•‘ โœ… /nextcloud-data existe (${_NC_FS:-?} โ€” ${_NC_SIZE:-taille inconnue}) โ•‘" if [[ "${_NC_FS}" != "btrfs" ]]; then echo "โ•‘ โšก Conseil: formater en BTRFS pour les avantages suivants : โ•‘" echo "โ•‘ โ€ข CoW + dรฉdup IPFS (blocs identiques รฉconomisรฉs) โ•‘" echo "โ•‘ โ€ข Snapshots instantanรฉs (sauvegardes NextCloud) โ•‘" echo "โ•‘ โ€ข compression zstd transparente (~25% espace) โ•‘" else echo "โ•‘ ๐ŸŒฟ Excellent : BTRFS dรฉtectรฉ โ€” CoW + compression actifs โœ… โ•‘" fi else echo "โ•‘ โš ๏ธ /nextcloud-data n'existe pas โ€” crรฉation en cours... โ•‘" sudo mkdir -p /nextcloud-data sudo chown $USER:$USER /nextcloud-data 2>/dev/null || sudo chmod 777 /nextcloud-data echo "โ•‘ โœ… /nextcloud-data crรฉรฉ โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ ๐Ÿ’ก RECOMMANDATION BTRFS (disque dรฉdiรฉ) : โ•‘" echo "โ•‘ Formatez un disque en BTRFS et montez-le sur /nextcloud-data โ•‘" echo "โ•‘ pour y hรฉberger NextCloud, ~/.zen et ~/.ipfs : โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ sudo mkfs.btrfs -L astrodata /dev/sdX โ•‘" echo "โ•‘ sudo mount -o compress=zstd,noatime /dev/sdX /nextcloud-data โ•‘" echo "โ•‘ # Dans /etc/fstab : โ•‘" echo "โ•‘ # UUID=xxx /nextcloud-data btrfs compress=zstd,noatime 0 0 โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ Puis migrer les donnรฉes (voir day3/captain ZINE) : โ•‘" echo "โ•‘ sudo mv ~/.zen /nextcloud-data/zen โ•‘" echo "โ•‘ ln -s /nextcloud-data/zen ~/.zen โ•‘" echo "โ•‘ sudo mv ~/.ipfs /nextcloud-data/ipfs โ•‘" echo "โ•‘ ln -s /nextcloud-data/ipfs ~/.ipfs โ•‘" fi echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" echo "" _NC_COMPOSE="$HOME/.zen/Astroport.ONE/_DOCKER/nextcloud/docker-compose.yml" if [[ ! -f "$_NC_COMPOSE" ]]; then echo "โš ๏ธ Fichier introuvable : $_NC_COMPOSE" echo " โ†’ Vรฉrifiez que Astroport.ONE est bien clonรฉ" else echo "โณ Dรฉmarrage NextCloud AIO (peut prendre 2-3 minutes)..." sg docker -c "docker compose -f '$_NC_COMPOSE' up -d" 2>&1 _nc_exit=$? if [[ $_nc_exit -eq 0 ]]; then NEXTCLOUD_ACTIVE=true echo "โœ… Conteneur nextcloud-aio-mastercontainer dรฉmarrรฉ" ## Attendre que le conteneur soit prรชt avant de relancer NPM echo "โณ Attente NextCloud (30s pour initialisation)..." sleep 30 ## Re-lancer setup_npm.sh pour crรฉer le proxy cloud.DOMAIN โ†’ :8001 echo "๐Ÿ”ง Crรฉation proxy cloud.${DOMAIN_DISPLAY:-DOMAIN} via NPM..." bash "$HOME/.zen/Astroport.ONE/install/setup/setup_npm.sh" 2>/dev/null \ && echo "โœ… Proxy cloud.$DOMAIN crรฉรฉ dans NPM" \ || echo "โš ๏ธ NPM proxy non crรฉรฉ โ€” relancez manuellement : setup_npm.sh" else echo "โš ๏ธ Erreur dรฉmarrage NextCloud (code: $_nc_exit)" echo " โ†’ Logs : docker compose -f $_NC_COMPOSE logs" fi fi cd - >/dev/null 2>/dev/null echo "" echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" echo "โ•‘ ๐Ÿ“‹ CONFIGURATION NEXTCLOUD AIO โ€” 3 รฉtapes โ•‘" echo "โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ" echo "โ•‘ โ•‘" echo "โ•‘ Ports NextCloud AIO : โ•‘" echo "โ•‘ 8443 = Interface admin AIO (setup initial, HTTPS) โ•‘" echo "โ•‘ 8001 = Apache NextCloud (app, aprรจs config AIO) โ•‘" echo "โ•‘ 8002 = Dashboard AIO (surveillance, HTTP) โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ 1. SETUP INITIAL โ€” interface AIO (premiรจre fois seul.) : โ•‘" echo "โ•‘ https://127.0.0.1:8443 โ•‘" echo "โ•‘ โ†’ Acceptez le certificat auto-signรฉ โ•‘" echo "โ•‘ โ†’ Entrez : cloud.${DOMAIN_DISPLAY:-VOTRE_DOMAINE} โ•‘" echo "โ•‘ โ†’ AIO tรฉlรฉcharge et installe automatiquement NextCloud โ•‘" echo "โ•‘ โ†’ Activez les apps : Calendar, Contacts, Talk โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ 2. PROXY NPM cloud.${DOMAIN_DISPLAY:-DOMAINE} โ†’ :8001 : โ•‘" if [[ "${NEXTCLOUD_ACTIVE}" == "true" ]]; then echo "โ•‘ โœ… CRร‰ร‰ AUTOMATIQUEMENT (setup_npm.sh relancรฉ) โ•‘" echo "โ•‘ Vรฉrification : https://cloud.${DOMAIN_DISPLAY:-DOMAINE} โ•‘" else echo "โ•‘ โš ๏ธ ร€ crรฉer manuellement (NextCloud non dรฉmarrรฉ) : โ•‘" echo "โ•‘ sudo ~/.zen/Astroport.ONE/install/setup/setup_npm.sh โ•‘" fi echo "โ•‘ NPM admin : http://127.0.0.1:81 โ•‘" echo "โ•‘ Mot de passe : cat ~/.zen/nginx-proxy-manager/data/.admin_pass โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ 3. COMPTES ZEN CARD (1 compte = 1 abonnรฉ 128Go) : โ•‘" echo "โ•‘ Interface web NextCloud : Utilisateurs โ†’ Nouveau โ•‘" echo "โ•‘ CLI : docker exec -it nextcloud-aio-mastercontainer \ โ•‘" echo "โ•‘ bash โ•‘" echo "โ•‘ # puis : su -s /bin/bash www-data -c โ•‘" echo "โ•‘ # 'php /var/www/html/occ user:add --display-name U E' โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ ๐Ÿ“– Guide : pad.p2p.legal/Smartphone2NextCloud โ•‘" echo "โ•‘ ๐Ÿ“– Blog : copylaradio.com โ€” Le pas-ร -pas du grand cloud โ•‘" echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" ;; ai-company) echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" echo "โ•‘ ๐Ÿง  PROFIL ai-company โ€” Stack IA Swarm (EXPร‰RIMENTAL) โ•‘" echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" ~/.zen/Astroport.ONE/install/install-ai-company.docker.sh \ && AISTACK_ACTIVE=true \ && echo "โœ… AI Company Stack dรฉmarrรฉe" \ || echo "โš ๏ธ AI Stack โ€” erreur (voir ~/.zen/ai-company/)" echo "" echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" echo "โ•‘ โš ๏ธ AVERTISSEMENT โ€” Stack en cours d'intรฉgration โ•‘" echo "โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ" echo "โ•‘ โ•‘" echo "โ•‘ Les services IA dรฉmarrรฉs (Paperclip, Open WebUI, LiteLLM) โ•‘" echo "โ•‘ ne sont PAS encore intรฉgrรฉs nativement ร  Astroport.ONE. โ•‘" echo "โ•‘ Ils fonctionnent en parallรจle mais nรฉcessitent : โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ โ€ข Connexion Open WebUI โ†’ crรฉer compte admin ร  1รจre ouvert. โ•‘" echo "โ•‘ โ€ข Connexion Ollama โ†” LiteLLM ร  valider โ•‘" echo "โ•‘ โ€ข Intรฉgration #BRO (NOSTR โ†’ Open WebUI OpenAI API) โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ ๐Ÿ‰ APPEL AUX DRAGONS U.SOCIETY : โ•‘" echo "โ•‘ Cette stack est votre terrain d'expรฉrimentation. โ•‘" echo "โ•‘ Participez ร  son intรฉgration dans la constellation : โ•‘" echo "โ•‘ โ†’ support@qo-op.com โ€” Objet : 'DRAGON ai-company' โ•‘" echo "โ•‘ โ†’ Salon Nostr U.SOCIETY : #BRO develop โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ Services (si dรฉmarrรฉs) : โ•‘" echo "โ•‘ Open WebUI : http://localhost:8000 โ† interface IA โ•‘" echo "โ•‘ Paperclip : http://localhost:3100 (agents) โ•‘" echo "โ•‘ LiteLLM : http://localhost:8010 (proxy modรจles) โ•‘" echo "โ•‘ Qdrant : http://localhost:6333/dashboard โ•‘" echo "โ•‘ Ollama : http://localhost:11434 โ•‘" echo "โ•‘ code_assistant : ~/.zen/Astroport.ONE/code_assistant โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ DOC : ~/.zen/ai-company/install-ai-company.md โ•‘" echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" ;; dev) echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" echo "โ•‘ โš™๏ธ PROFIL dev โ€” Migration strfry โ†’ rnostr (Rust) โ•‘" echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" ## rnostr = relai Nostr en Rust, plus performant, support Qdrant sรฉmantique if [[ -f ~/.zen/Astroport.ONE/install/install_rnostr_semantic.sh ]]; then ~/.zen/Astroport.ONE/install/install_rnostr_semantic.sh \ && RNOSTR_ACTIVE=true \ && echo "โœ… rnostr installรฉ (remplace strfry)" \ || echo "โš ๏ธ rnostr โ€” erreur d'installation" else echo "โš ๏ธ install_rnostr_semantic.sh introuvable โ€” rnostr non installรฉ" echo " โ†’ compilez depuis : https://github.com/rnostr/rnostr" fi echo "" echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" echo "โ•‘ ๐Ÿ“‹ CHANTIER DEV โ€” Migration des plugins writePolicy โ•‘" echo "โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ" echo "โ•‘ โ•‘" echo "โ•‘ SITUATION ACTUELLE (strfry bash) : โ•‘" echo "โ•‘ Les plugins de filtrage Nostr sont des scripts bash : โ•‘" echo "โ•‘ โ€ข all_but_blacklist.sh (filtre principal) โ•‘" echo "โ•‘ โ€ข filter/1.sh 7.sh 9735.sh 30023.sh ... โ•‘" echo "โ•‘ Ils reรงoivent les รฉvรฉnements Nostr via stdin/stdout JSON, โ•‘" echo "โ•‘ filtrent par kind, classifient (nobody/player/uplanet), โ•‘" echo "โ•‘ gรจrent la blacklist et la liste amisOfAmis.txt. โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ OBJECTIF (rnostr Rust) : โ•‘" echo "โ•‘ Rรฉรฉcrire ces filtres comme des rรจgles rnostr en Rust ou โ•‘" echo "โ•‘ comme plugins WASM compatibles rnostr. Avantages : โ•‘" echo "โ•‘ โ€ข Performance ร— 10-100 vs bash โ•‘" echo "โ•‘ โ€ข Intรฉgration Qdrant sรฉmantique native โ•‘" echo "โ•‘ โ€ข Classification IA des messages (LLM local Ollama) โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ FICHIERS ร€ MIGRER : โ•‘" echo "โ•‘ NIP-101/relay.writePolicy.plugin/all_but_blacklist.sh โ•‘" echo "โ•‘ NIP-101/relay.writePolicy.plugin/filter/*.sh โ•‘" echo "โ•‘ โ†’ Logique cible : rnostr/config.toml rules + Rust plugin โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ ๐Ÿ‰ APPEL AUX DRAGONS dev/Rust : โ•‘" echo "โ•‘ โ†’ support@qo-op.com โ€” Objet : 'DRAGON rnostr migration' โ•‘" echo "โ•‘ โ†’ Repo rnostr : https://github.com/rnostr/rnostr โ•‘" echo "โ•‘ โ†’ Repo NIP-101 : https://github.com/papiche/NIP-101 โ•‘" echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" ;; ""|standard) echo " Profil standard โ€” pas d'installation supplรฉmentaire." ;; *) echo "โš ๏ธ Profil inconnu '${INSTALL_PROFILE}' โ€” installation standard uniquement." ;; esac end=`date +%s` DURATION=$((end - start)) MINUTES=$((DURATION / 60)) SECONDS_REM=$((DURATION % 60)) ## Source my.sh for display variables (domain, hostname, network type) . ~/.zen/Astroport.ONE/tools/my.sh 2>/dev/null HOSTNAME_DISPLAY=$(hostname) DOMAIN_DISPLAY="${myDOMAIN:-copylaradio.com}" IPFS_DISPLAY="${myIPFS:-https://ipfs.${DOMAIN_DISPLAY}}" RELAY_DISPLAY="${myRELAY:-wss://relay.${DOMAIN_DISPLAY}}" USPOT_DISPLAY="${uSPOT:-https://u.${DOMAIN_DISPLAY}}" if [[ "${UPLANETNAME}" == "0000000000000000000000000000000000000000000000000000000000000000" ]]; then NETWORK_DISPLAY="UPlanet ORIGIN (sandbox)" else NETWORK_DISPLAY="UPlanet ZEN (${DOMAIN_DISPLAY})" fi # echo "######### rnostr + nomic + Qdrant ##############" # ~/.zen/Astroport.ONE/install/install_rnostr_semantic.sh ## NEED MORE WORK ---TODO migrate strfry plugin to rnsotr rules echo "######### Enterprise Swarm AI Stack Manager ############## TRY IT UPGRADE IT : ~/.zen/Astroport.ONE/install/install-ai-company.docker.sh" echo echo "#############################################" echo " INSTALLATION TERMINEE (${MINUTES}min ${SECONDS_REM}s)" echo "#############################################" echo echo " Station: ${HOSTNAME_DISPLAY}" echo " Reseau: ${NETWORK_DISPLAY}" echo " Capitaine: $(cat ~/.zen/game/players/.current/.player 2>/dev/null || echo 'embarquement en cours...')" echo echo " PROFIL INSTALLร‰: ${INSTALL_PROFILE:-standard}" echo echo " INFRASTRUCTURE (Docker) :" sg docker -c "docker ps --format ' {{.Names}}: {{.Status}}'" 2>/dev/null | head -12 || echo " (aucun conteneur actif)" echo echo " NODE.JS / NPM / DENO :" echo " Node.js $(node --version 2>/dev/null || echo 'โš ๏ธ non disponible')" echo " NPM v$(npm --version 2>/dev/null || echo 'โš ๏ธ non disponible')" echo " TiddlyWiki $(tiddlywiki --version 2>/dev/null || echo 'โš ๏ธ โ€” relancez: sudo npm install -g tiddlywiki@5.2.3')" echo " Deno $(deno --version 2>/dev/null | head -1 || echo 'โš ๏ธ non disponible (yt-dlp EJS)')" echo " (Deno sert de runtime JS pour yt-dlp EJS : extraction YouTube via navigateur)" echo echo " SERVICES ASTROPORT :" echo " Astroport http://localhost:12345" echo " UPassport http://localhost:54321" echo " IPFS http://localhost:8080" echo " NOSTR ws://localhost:7777" echo " G1Billet http://localhost:33101" if [[ "${NEXTCLOUD_ACTIVE}" == "true" ]]; then echo " NextCloud http://127.0.0.1:8443 (admin initial)" echo " https://cloud.${DOMAIN_DISPLAY} (via NPM)" fi if [[ "${AISTACK_ACTIVE}" == "true" ]]; then echo " Open WebUI http://localhost:8000 โ† interface IA principale" echo " Paperclip http://localhost:3100" echo " LiteLLM http://localhost:8010" echo " Qdrant http://localhost:6333" echo " Ollama http://localhost:11434" fi if [[ "${RNOSTR_ACTIVE}" == "true" ]]; then echo " rnostr ws://localhost:7777 (remplace strfry)" fi echo echo " Vร‰RIFICATION DOCKER :" echo " docker ps # conteneurs actifs" echo " docker compose -f ~/.zen/Astroport.ONE/docker-compose.yml ps # stack principale" echo " docker compose logs -f # logs en direct" echo echo " ESSAIM (ipfs.domain = round-robin DNS vers toutes les stations):" echo " IPFS ${IPFS_DISPLAY}" echo " STATION D'ATTACHE (celle ou votre MULTIPASS est enregistre):" echo " Relay ${RELAY_DISPLAY}" echo " UPassport ${USPOT_DISPLAY}" echo echo " COMMANDES :" echo " station ~/.zen/Astroport.ONE/station.sh โ† INTERFACE PRINCIPALE" echo " captain ~/.zen/Astroport.ONE/captain.sh (dashboard รฉconomique)" echo " media ~/.zen/Astroport.ONE/ajouter_media.sh" echo " test ~/.zen/Astroport.ONE/test.sh" echo " start/stop ~/.zen/Astroport.ONE/start.sh | stop.sh" if [[ "${AISTACK_ACTIVE}" == "true" ]]; then echo " code IA ~/.zen/Astroport.ONE/code_assistant " echo " ai stack docker compose -p ai-company-swarm ps" fi echo echo " ERREURS: ~/.zen/install.errors.log" echo "#############################################" echo ## โ”€โ”€โ”€ Message final conditionnรฉ par le mode rรฉseau โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ if [[ "${UPLANETNAME}" == "0000000000000000000000000000000000000000000000000000000000000000" || -z "${UPLANETNAME}" ]]; then ## โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• MODE ACADร‰MIE / UPLANET ORIGIN โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" echo "โ•‘ ๐ŸŽฎ ACADร‰MIE UPLANET ORIGIN โ€” ร‰TAPE 1 / 4 โ•‘" echo "โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ" echo "โ•‘ โ•‘" echo "โ•‘ Cette station fonctionne en mode BACS ร€ SABLE (swarm.key = zรฉro). โ•‘" echo "โ•‘ Elle est hรฉbergรฉe par vous (ARMATEUR) mais opรฉrรฉe par le collectif โ•‘" echo "โ•‘ G1FabLab en attendant votre certification comme CAPITAINE. โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ ๐Ÿ’ฐ En tant qu'Armateur, vous pouvez percevoir : 14 แบen / semaine โ•‘" echo "โ•‘ โ†’ Souscrivez sur : https://opencollective.com/monnaie-libre โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ ๐Ÿ‘‰ VOTRE MISSION POUR DEVENIR CAPITAINE : โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ 1. Ouvrez votre navigateur : http://127.0.0.1:54321/g1 โ•‘" echo "โ•‘ 2. Crรฉez votre MULTIPASS avec votre Vร‰RITABLE adresse email. โ•‘" echo "โ•‘ 3. Lisez les ZINEs quotidiens que le systรจme va vous envoyer. โ•‘" echo "โ•‘ 4. Contactez support@qo-op.com pour valider votre formation DRAGON. โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ ๐Ÿ‰ Formation DRAGON โ†’ swarm.key privรฉ โ†’ UPlanet แบEN โ†’ 28 แบen/semaine โ•‘" echo "โ•‘ โ•‘" echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" else ## โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• MODE PRODUCTION / UPLANET แบEN โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" echo "โ•‘ ๐Ÿš€ PROCHAINE ร‰TAPE โ€” ACTIVATION CAPITAINE โ•‘" echo "โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ" echo "โ•‘ โ•‘" echo "โ•‘ Votre station est installรฉe et votre compte GMARKMAIL crรฉรฉ. โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ โš ๏ธ IMPORTANT : Pour activer votre statut de Capitaine, un autre โ•‘" echo "โ•‘ Capitaine de la constellation doit valider votre recrutement en โ•‘" echo "โ•‘ envoyant la Primo-Transaction ฤž1 vers votre ZEN Card. โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ Sans cette validation, votre compte sera progressivement supprimรฉ โ•‘" echo "โ•‘ (DESTROY) et la station rรฉinitialisรฉe. โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ ๐Ÿ“ง Contactez-nous pour rejoindre la constellation : โ•‘" echo "โ•‘ support@qo-op.com โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ Indiquez dans votre email : โ•‘" echo "โ•‘ โ€ข Votre email GMARKMAIL : $(cat ~/.zen/game/players/.current/.player 2>/dev/null || echo 'voir ci-dessus') โ•‘" echo "โ•‘ โ€ข Votre hostname : $(hostname) โ•‘" echo "โ•‘ โ€ข Votre position GPS : $(cat ~/.zen/GPS 2>/dev/null || echo 'non dรฉtectรฉe') โ•‘" echo "โ•‘ โ•‘" echo "โ•‘ ๐ŸŒ Notre Systรจme d'Information Dรฉcentralisรฉ : https://qo-op.com โ•‘" echo "โ•‘ ๐Ÿ“š Documentation : https://astroport.com โ•‘" echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" fi echo . ~/.bashrc ########################################################## ~/.zen/Astroport.ONE/RUNTIME/DRAGON_p2p_ssh.sh ON else echo "=============================================" echo " MISES ร€ JOUR (APT/PIP) EFFECTUร‰ES AVEC SUCCรˆS" echo "=============================================" echo " INSTALLATION COMPLรˆTE IGNORร‰E :" echo " PLAYER already onboard..." echo "=============================================" $(cat ~/.zen/game/players/.current/secret.june) echo "=============================================" # MAIN # fi }