#!/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 + Dify.ai + 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 " INSTALL_OLLAMA=yes|no โ†’ Ollama (si GPU dรฉtectรฉ)" echo " INSTALL_COMFYUI=yes|no โ†’ ComfyUI Docker (si GPU dรฉtectรฉ)" echo " INSTALL_AI_SERVICES โ†’ Liste des services IA ร  installer (ex: open-webui,qdrant) (si profil ai-company)" 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 ################################################################## PARAMรˆTRES ## $1 = Email Capitaine (ou "" pour auto) ## $2 = Domaine Armateur/Nล“ud (ou "" pour copylaradio.com) ## $3 = Domaine Email Capitaine (ou "" pour qo-op.com) ## $4 = Profil d'installation (ou "" pour standard) ######################################################################## 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:-}}" ######################################################################## echo "## HARDWARE CHECK (dรฉtection avant toute question) ##" ######################################################################## _CPU=$(grep -c "processor" /proc/cpuinfo 2>/dev/null || echo 1) _RAM=$(awk '/MemTotal/ {printf "%.0f", $2/1048576}' /proc/meminfo 2>/dev/null || echo 0) _VRAM=0; _GPU_VENDOR="none"; _GPU_NAME="" if command -v nvidia-smi >/dev/null 2>&1; then _v=$(nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits 2>/dev/null \ | awk '{sum+=$1} END {printf "%.0f", sum/1024}') if [[ -n "$_v" && "$_v" -gt 0 ]]; then _VRAM=$_v; _GPU_VENDOR="nvidia" _GPU_NAME=$(nvidia-smi --query-gpu=name --format=csv,noheader 2>/dev/null | head -1 | xargs) fi fi if [[ $_VRAM -eq 0 ]]; then for _sysf in /sys/class/drm/card*/device/mem_info_vram_total; do [[ -f "$_sysf" ]] || continue _v=$(( $(cat "$_sysf" 2>/dev/null || echo 0) / 1073741824 )) [[ "$_v" -gt 0 ]] || continue _VRAM=$(( _VRAM + _v )) case "$(cat "${_sysf%mem_info_vram_total}vendor" 2>/dev/null)" in "0x1002") _GPU_VENDOR="amd" ;; "0x8086") _GPU_VENDOR="intel" ;; *) _GPU_VENDOR="unknown" ;; esac done fi if [[ -z "$_GPU_NAME" ]] && command -v lspci >/dev/null 2>&1; then _GPU_NAME=$(lspci 2>/dev/null | grep -iE 'VGA|3D|Display' | head -1 | sed 's/^.*: //' | xargs) if [[ "$_GPU_VENDOR" == "none" ]]; then echo "$_GPU_NAME" | grep -qi 'intel' && _GPU_VENDOR="intel_integrated" echo "$_GPU_NAME" | grep -qi 'amd\|radeon' && _GPU_VENDOR="amd_integrated" fi fi _SCORE=$(( _VRAM * 4 + _CPU * 2 + _RAM / 2 )) if [[ $_SCORE -gt 40 ]]; then _TIER="๐Ÿ”ฅ Brain-Node"; _RANK="DRAGON COMPUTE"; _MVAL=$(( _SCORE * 12 )); _PAF_DEFAULT=28 elif [[ $_SCORE -gt 10 ]]; then _TIER="โšก Standard"; _RANK="DRAGON ORIGIN"; _MVAL=$(( _SCORE * 6 )); _PAF_DEFAULT=14 else _TIER="๐ŸŒฟ Lรฉger"; _RANK="Nล“ud Lรฉger"; _MVAL=100; _PAF_DEFAULT=7 fi ######################################################################## ## EMBARQUEMENT INTERACTIF โ€” affichรฉ si aucun argument CLI fourni ######################################################################## if [[ -z "$CUSTOM_CAPTAIN_EMAIL" && -z "$CUSTOM_NODE_DOMAIN" ]]; then echo "" echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" echo "โ•‘ ๐Ÿš€ EMBARQUEMENT ASTROPORT.ONE โ•‘" echo "โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ" printf "โ•‘ Matรฉriel : CPU=%sc RAM=%sGo VRAM=%sGo Score=%s \n" \ "$_CPU" "$_RAM" "$_VRAM" "$_SCORE" printf "โ•‘ Tier : %-48s โ•‘\n" "$_TIER" [[ -n "$_GPU_NAME" ]] && printf "โ•‘ GPU : %-48s โ•‘\n" "${_GPU_NAME} (${_GPU_VENDOR})" echo "โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ" echo "โ•‘ Appuyez sur Entrรฉe pour utiliser les valeurs automatiques. โ•‘" echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" echo "" read -r -p "Email Capitaine [auto: support+node...@qo-op.com] : " CUSTOM_CAPTAIN_EMAIL read -r -p "Domaine Nล“ud [auto: copylaradio.com] : " CUSTOM_NODE_DOMAIN fi [[ -n "$CUSTOM_CAPTAIN_EMAIL" ]] && echo ">>> Email Capitaine : $CUSTOM_CAPTAIN_EMAIL" || echo ">>> Email Capitaine : Automatique" [[ -n "$CUSTOM_NODE_DOMAIN" ]] && echo ">>> Domaine Nล“ud : $CUSTOM_NODE_DOMAIN" || echo ">>> Domaine Nล“ud : Automatique (copylaradio.com)" [[ -n "$CUSTOM_EMAIL_DOMAIN" ]] && echo ">>> Domaine Email : $CUSTOM_EMAIL_DOMAIN" || echo ">>> Domaine Email : Automatique (qo-op.com)" ## Sรฉlection du profil si non fourni en argument ($4) if [[ -z "$INSTALL_PROFILE" ]]; then echo "" echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" echo "โ•‘ PROFIL D'INSTALLATION (Tier : ${_TIER}) " echo "โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ" echo "โ•‘ (vide) Standard โ€” IPFS + NOSTR + G1 (recommandรฉ) โ•‘" echo "โ•‘ nextcloud Standard + NextCloud AIO (cloud privรฉ 128Go) โ•‘" if [[ $_SCORE -gt 10 ]]; then echo "โ•‘ ai-company Standard + Stack IA (Ollama, Open WebUI, Qdrant)โ•‘" else echo "โ•‘ ai-company โš ๏ธ Score faible โ€” stack IA dรฉconseillรฉe โ•‘" fi echo "โ•‘ dev Standard + rnostr (relay NOSTR Rust โ€” devs) โ•‘" echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" read -r -p "Profil [standard] : " INSTALL_PROFILE fi echo ">>> Profil : ${INSTALL_PROFILE:-standard}" ######################################################################## ## FAIL-FAST ai-company โ€” vรฉrification GPU AVANT tout tรฉlรฉchargement ######################################################################## if [[ "${INSTALL_PROFILE}" == "ai-company" ]]; then if [[ $_VRAM -ge 24 ]]; then _AI_TIER="๐Ÿ”ฅ Excellent (โ‰ฅ24 Go) โ€” grands modรจles 70B+" elif [[ $_VRAM -ge 8 ]]; then _AI_TIER="โšก Bon (8-23 Go) โ€” modรจles 7B-13B" elif [[ $_VRAM -ge 4 ]]; then _AI_TIER="๐ŸŸก Limitรฉ (4-7 Go) โ€” petits modรจles 3B-7B" elif [[ $_VRAM -ge 1 ]]; then _AI_TIER="โš ๏ธ Trรจs limitรฉ (1-3 Go) โ€” โ‰ค 3B seulement" else _AI_TIER="โŒ Pas de VRAM dรฉdiรฉe" fi case "$_GPU_VENDOR" in nvidia) _AI_COMPAT="โœ… CUDA โ€” Ollama + ComfyUI supportรฉs" ;; amd) _AI_COMPAT="โš ๏ธ ROCm (expรฉrimental) โ€” GPU RX 5000+ requis" ;; intel) _AI_COMPAT="โš ๏ธ SYCL/XPU (expรฉrimental) โ€” Intel Arc requis" ;; intel_integrated) _AI_COMPAT="โŒ GPU intรฉgrรฉ โ€” Ollama/ComfyUI non supportรฉs" ;; amd_integrated) _AI_COMPAT="โŒ GPU intรฉgrรฉ โ€” Ollama/ComfyUI non supportรฉs" ;; *) _AI_COMPAT="โ“ Compatibilitรฉ inconnue" ;; esac echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" echo "โ•‘ ๐Ÿง  PROFIL ai-company โ€” vรฉrification matรฉriel โ•‘" printf "โ•‘ %-58s โ•‘\n" "GPU : ${_GPU_NAME:-inconnu} (${_GPU_VENDOR})" printf "โ•‘ %-58s โ•‘\n" "VRAM : ${_VRAM} Go โ†’ ${_AI_TIER}" printf "โ•‘ %-58s โ•‘\n" "Compat : ${_AI_COMPAT}" echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" if [[ $_VRAM -lt 4 || "$_GPU_VENDOR" == *_integrated* ]]; then read -r -p "โš ๏ธ Ce profil n'est pas recommandรฉ sur cette machine. Continuer ? [y/N] " _cont [[ "${_cont}" != "y" && "${_cont}" != "Y" ]] && exit 1 fi fi #### 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 pandoc cargo btop sox ocrmypdf ca-certificates basez markdown jq bc file gawk ffmpeg geoip-bin bind9-dnsutils ntpsec-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 websocket; do echo ">>> Installation/Mise ร  jour $i <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" ~/.astro/bin/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) <<<" ~/.astro/bin/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) ~/.astro/bin/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 ~/.astro/bin/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 ================" ~/.zen/Astroport.ONE/install/install.lazydocker.sh ############################################################### echo "## INSTALL yt-dlp (youtube copier, sans anti-bot) ##############" # Anti-bot optionnel : astrosystemctl local install youtube-antibot ~/.zen/Astroport.ONE/install/youtube-dl.sh ############################################################### echo "## INSTALL PowerJoular (Power consumption monitoring) ##########" ~/.zen/Astroport.ONE/install/install_powerjoular.sh ############################################################### ## prometheus-node-exporter seul : lรฉger, expose /metrics sur :9100 ## Prometheus serveur complet : installรฉ uniquement avec le profil ai-company echo "## INSTALL prometheus-node-exporter (heartbox metrics export) ##########" sudo apt-get install -y prometheus-node-exporter 2>/dev/null \ && echo "โœ… prometheus-node-exporter actif sur :9100" \ || echo "โš ๏ธ prometheus-node-exporter non disponible" 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 ## _CPU/_RAM/_VRAM/_SCORE/_TIER/_MVAL/_PAF_DEFAULT dรฉjร  calculรฉs en tรชte d'install ## Helper : lance le compose unifiรฉ avec le bon profil (+ overlay GPU si NVIDIA) _dc_up() { local _profile="${1:-}" local _compose="$HOME/.zen/Astroport.ONE/docker/docker-compose.yml" local _gpu_overlay="$HOME/.zen/Astroport.ONE/docker/docker-compose.gpu.yml" local _cmd="sg docker -c 'docker compose -f \"$_compose\"" [[ -n "$_profile" ]] && _cmd+=" --profile $_profile" [[ "${_GPU_VENDOR:-none}" == "nvidia" ]] && _cmd+=" -f \"$_gpu_overlay\"" _cmd+=" up -d'" eval "$_cmd" } ############################################################### echo "## INSTALLATIONS CONDITIONNELLES SELON PROFIL ###########" ############################################################### NEXTCLOUD_ACTIVE=false AISTACK_ACTIVE=false RNOSTR_ACTIVE=false case "${INSTALL_PROFILE}" in nextcloud) bash "$HOME/.zen/Astroport.ONE/install/install_nextcloud.sh" ;; ai-company) echo "๐Ÿง  PROFIL ai-company โ€” dรฉmarrage installation Stack IA..." ## Prometheus serveur complet : collecte les mรฉtriques heartbox + node_exporter ## Utile pour les Brain-Nodes (GPU) qui veulent monitorer leur charge IA echo "โณ Installation Prometheus + exporters heartbox..." ~/.zen/Astroport.ONE/install/install_prometheus.sh \ && echo "โœ… Prometheus heartbox monitoring actif (:9090)" \ || echo "โš ๏ธ Prometheus โ€” erreur (non bloquant)" AI_SVC_ARGS="" if [[ -n "${INSTALL_AI_SERVICES:-}" ]]; then AI_SVC_ARGS="${INSTALL_AI_SERVICES}" fi ~/.zen/Astroport.ONE/install/install-ai-company.docker.sh $AI_SVC_ARGS \ && 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 (Dify.ai, 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 "โ•‘ Dify.ai : http://localhost:8010 (agents) โ•‘" 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 "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" ## strfry doit รชtre arrรชtรฉ avant rnostr (port 7777 partagรฉ via NPM) echo "โน๏ธ Arrรชt et dรฉsactivation de strfry..." sudo systemctl stop strfry 2>/dev/null || true sudo systemctl disable strfry 2>/dev/null || true ## 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 ############################################################### echo "## Dร‰TECTION GPU โ€” Installation IA optionnelle ###########" ############################################################### ## Variables optionnelles pour mode silencieux : ## INSTALL_OLLAMA=yes โ†’ Ollama installรฉ sans confirmation ## INSTALL_COMFYUI=yes โ†’ ComfyUI installรฉ sans confirmation ## INSTALL_OLLAMA=no โ†’ Ignorรฉ mรชme si GPU prรฉsent ~/.zen/Astroport.ONE/install/install_gpu_ai.sh ############################################################### echo "## SCORE CARD DU Nล’UD ################################" ############################################################### ## Calcul inline โ€” pas de dรฉpendance ร  IPFS au moment de l'install _CPU=$(grep -c "processor" /proc/cpuinfo 2>/dev/null || echo 1) _RAM=$(awk '/MemTotal/ {printf "%.0f", $2/1048576}' /proc/meminfo 2>/dev/null || echo 0) ## _VRAM/_GPU_VENDOR dรฉjร  calculรฉs en tรชte de section โ€” on ne re-dรฉtecte pas _SCORE=$(( _VRAM * 4 + _CPU * 2 + _RAM / 2 )) if [[ $_SCORE -gt 40 ]]; then _TIER="๐Ÿ”ฅ Brain-Node (GPU)"; _RANK="DRAGON COMPUTE"; _MVAL=$(( _SCORE * 12 )); _PAF_DEFAULT=28 elif [[ $_SCORE -gt 10 ]]; then _TIER="โšก Standard"; _RANK="DRAGON ORIGIN"; _MVAL=$(( _SCORE * 6 )); _PAF_DEFAULT=14 else _TIER="๐ŸŒฟ Lรฉger"; _RANK="Nล“ud Lรฉger"; _MVAL=100; _PAF_DEFAULT=7 fi ## โ”€โ”€ Benchmark disque (une seule fois ร  l'install) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ _DISK_CACHE="$HOME/.zen/game/disk_bench.cache" mkdir -p "$HOME/.zen/game" if [[ ! -s "$_DISK_CACHE" ]]; then echo "โฑ๏ธ Benchmark disque (256 Mo รฉcriture + lecture)..." _tmp_bench="/tmp/astro_dd_$$" _disk_write=0; _disk_read=0 _out=$(LANG=C dd if=/dev/zero of="$_tmp_bench" bs=1M count=256 conv=fdatasync 2>&1) _disk_write=$(echo "$_out" | grep -oE '[0-9.]+ MB/s' | tail -1 | grep -oE '^[0-9]+') _out=$(LANG=C dd if="$_tmp_bench" of=/dev/null bs=1M 2>&1) _disk_read=$(echo "$_out" | grep -oE '[0-9.]+ MB/s' | tail -1 | grep -oE '^[0-9]+') rm -f "$_tmp_bench" echo "${_disk_write:-0} ${_disk_read:-0}" > "$_DISK_CACHE" fi read _disk_write _disk_read < "$_DISK_CACHE" 2>/dev/null _disk_write="${_disk_write:-0}"; _disk_read="${_disk_read:-0}" echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" echo "โ•‘ ๐Ÿ† SCORE CARD โ€” Rang dans la constellation โ•‘" echo "โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ" printf "โ•‘ %-58s โ•‘\n" "CPU : ${_CPU} cล“urs RAM : ${_RAM} Go VRAM : ${_VRAM} Go" printf "โ•‘ %-58s โ•‘\n" "GPU : ${_GPU_NAME:-aucun} (${_GPU_VENDOR})" printf "โ•‘ %-58s โ•‘\n" "Disque รฉcriture : ${_disk_write} Mo/s lecture : ${_disk_read} Mo/s" printf "โ•‘ %-58s โ•‘\n" "Power-Score : ${_SCORE} โ†’ ${_TIER}" printf "โ•‘ %-58s โ•‘\n" "Rang DRAGON : ${_RANK}" echo "โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ" printf "โ•‘ %-58s โ•‘\n" "Valeur matรฉriel estimรฉe : ${_MVAL} แบEN" printf "โ•‘ %-58s โ•‘\n" "PAF hebdomadaire suggรฉrรฉe : ${_PAF_DEFAULT} แบEN" echo "โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ" echo "โ•‘ Participez au concours DRAGON UPlanet : โ•‘" echo "โ•‘ Publiez votre score โ†’ kind:30850 (ECONOMY.broadcast.sh) โ•‘" echo "โ•‘ Faites รฉvaluer votre nล“ud โ†’ support@qo-op.com โ•‘" echo "โ•‘ โ†’ Devenez DRAGON ORIGIN, DRAGON COMPUTE ou DRAGON แบEN โ•‘" echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" ## Initialiser MACHINE_VALUE, PAF, CAPITAL_DATE dans game/.env si absents _GAME_ENV="$HOME/.zen/game/.env" if ! grep -q "^MACHINE_VALUE=" "$_GAME_ENV" 2>/dev/null; then echo "MACHINE_VALUE=${_MVAL}" >> "$_GAME_ENV" echo "PAF=${_PAF_DEFAULT}" >> "$_GAME_ENV" echo "CAPITAL_DATE=$(date +%Y%m%d)000000000" >> "$_GAME_ENV" echo "DEPRECIATION_WEEKS=156" >> "$_GAME_ENV" echo " โœ… Valeurs initiales sauvegardรฉes โ†’ ${_GAME_ENV}" echo " MACHINE_VALUE=${_MVAL} แบEN | PAF=${_PAF_DEFAULT} แบEN/sem" fi 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 -30 || 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 command -v ollama >/dev/null 2>&1; then echo " Ollama http://localhost:11434 โ† LLM GPU local" fi if systemctl is-active --quiet comfyui 2>/dev/null; then echo " ComfyUI http://localhost:8188 โ† Gรฉnรฉration d'images GPU" fi if [[ "${AISTACK_ACTIVE}" == "true" ]]; then echo " Open WebUI http://localhost:8000 โ† portail IA pour les membres" echo " Dify.ai http://localhost:8010 โ† crรฉation d'agents/workflows" echo " Qdrant http://localhost:6333" echo " Ollama http://localhost:11434" fi if [[ "${RNOSTR_ACTIVE}" == "true" ]]; then echo " rnostr ws://localhost:8888 (relay NOSTR Rust โ€” dev)" fi echo echo " DOCKER :" echo " docker ps" echo " docker compose -f ~/.zen/Astroport.ONE/docker/docker-compose.yml ps" echo " docker compose -f ~/.zen/Astroport.ONE/docker/docker-compose.yml logs -f" echo echo " ESSAIM :" echo " IPFS ${IPFS_DISPLAY}" echo " Relay ${RELAY_DISPLAY}" echo " UPassport ${USPOT_DISPLAY}" echo echo " COMMANDES :" echo " astrosystemctl list โ† score local vs swarm" echo " astrosystemctl list-remote โ† Brain-Nodes disponibles" echo " station-info โ† รฉtat station (terminal)" echo " station ~/.zen/Astroport.ONE/station.sh" echo " captain ~/.zen/Astroport.ONE/captain.sh" echo " start / stop ~/.zen/Astroport.ONE/start.sh | stop.sh" if [[ "${AISTACK_ACTIVE}" == "true" ]]; then echo "" echo " STACK IA :" echo " docker compose -f ~/.zen/Astroport.ONE/docker/docker-compose.yml --profile ai ps" echo " install/install-ai-company.docker.sh --check โ† compatibilitรฉ GPU" 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 ########################################################## # Bootstrap WoTx2 โ€” Compรฉtences Capitaine Astroport # Propose au capitaine de dรฉclarer ses compรฉtences techniques initiales [[ -f ~/.zen/Astroport.ONE/tools/oracle_init_captain_wotx2.sh ]] && \ ~/.zen/Astroport.ONE/tools/oracle_init_captain_wotx2.sh ########################################################## ~/.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 }