#!/bin/bash ############################################################ install.sh # Version: 0.4 # 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` ################################################################## 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 ################################################################### IPFS ## installation de ipfs ######################################################################## [[ ! $(which ipfs) ]] \ && echo "bash <(wget -qO- https://raw.githubusercontent.com/papiche/Astroport.ONE/master/install.kubo_v0.30.0_linux.sh)" \ && architecture=$(uname -m) && [[ $architecture == "x86_64" || $architecture == "aarch64" || "$architecture" == "armv7l" ]] \ && bash <(wget -qO- https://raw.githubusercontent.com/papiche/Astroport.ONE/master/install.kubo_v0.30.0_linux.sh) \ || echo "=== IPFS FOUND === OK" [[ ! $(which ipfs) ]] && echo "INSTALL IPFS PLEASE" && exit 1 #################################################################### # MAIN # AUCUNE CLEF PLAYER... if [[ ! -d ~/.zen/game/players/ ]]; then echo "#############################################" echo "###### ASTROPORT.ONE ZEN STATION ##############" echo "############# TW HOSTING & Ŋ1 SERVICES #############" echo "##################################################" mkdir -p ~/.zen echo ; echo "UPDATING SYSTEM REPOSITORY" #~ [[ $XDG_SESSION_TYPE == 'x11' || $XDG_SESSION_TYPE == 'wayland' ]] && sudo add-apt-repository ppa:obsproject/obs-studio sudo apt-get update echo "#############################################" echo "######### INSTALL PRECIOUS FREE SOFTWARE ####" echo "#############################################" for i in git zip ssss make cmake docker.io docker-compose hdparm iptables ufw fail2ban wireguard openssh-server sshfs parallel npm shellcheck multitail netcat-traditional ncdu chromium miller inotify-tools curl net-tools mosquitto libsodium* 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-wheel python3-dotenv python3-gpg python3-jwcrypto python3-brotli python3-aiohttp python3-prometheus-client python3-tk ssss; 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 #### GIT CLONE ############################################################### echo "#############################################" echo "=== CODE CLONING TO '~/.zen/Astroport.ONE' ===" echo "#############################################" mkdir -p ~/.zen/workspace cd ~/.zen/workspace git clone --recurse-submodules --depth 1 https://github.com/papiche/UPlanet cd ~/.zen git clone --recurse-submodules --depth 1 https://github.com/papiche/Astroport.ONE.git # TODO INSTALL FROM IPFS / IPNS git config --global submodule.recurse true 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 ## Correct PDF restrictions for imagemagick echo "######### IMAGEMAGICK PDF ############" if [[ $(cat /etc/ImageMagick-6/policy.xml | grep PDF) ]]; then cat /etc/ImageMagick-6/policy.xml | grep -Ev PDF > /tmp/policy.xml sudo cp /tmp/policy.xml /etc/ImageMagick-6/policy.xml fi ### PYTHON ENV sudo ln -f -s /usr/bin/python3 /usr/bin/python cd $HOME [[ ! -s ~/.astro/bin/activate ]] && python -m venv .astro . ~/.astro/bin/activate cd - echo "#####################################" echo "## PYTHON TOOLS & CRYPTO LIB ##" echo "#####################################" export PATH=$HOME/.local/bin:$PATH pipx install duniterpy --include-deps ## keeps own dep ## add monero & bitcoin compatible keys for i in pip python-dotenv setuptools wheel termcolor amzqr ollama requests geohash beautifulsoup4 pyppeteer cryptography jwcrypto secp256k1 gql base58 pybase64 google pynacl python-gnupg pynentry paho-mqtt aiohttp ipfshttpclient bitcoin monero ecdsa pynostr bech32 nostpy-cli matplotlib readability-lxml duniterpy; do echo ">>> Installation $i <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" pip install -U $i 2>> ~/.zen/install.errors.log # [[ $? != 0 ]] && pipx install $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 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 "#############################################" 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_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 (.deb from GitLab CI artifacts) echo "######### g1cli Duniter v2 Client ##############" if [[ ! $(which gcli 2>/dev/null) ]]; then GCLI_API="https://git.duniter.org/api/v4/projects/clients%2Frust%2Fg1cli" architecture=$(uname -m) case "$architecture" in x86_64) DEB_ARCH="amd64"; TARGET_ARCH="x86_64-unknown-linux-musl" ;; aarch64) DEB_ARCH="arm64"; TARGET_ARCH="aarch64-unknown-linux-musl" ;; *) echo "g1cli: unsupported architecture $architecture" && DEB_ARCH="" ;; esac if [[ -n "$DEB_ARCH" ]]; then GCLI_VERSION=$(curl -sL "${GCLI_API}/releases" | jq -r '.[0].tag_name' 2>/dev/null) if [[ -n "$GCLI_VERSION" && "$GCLI_VERSION" != "null" ]]; then echo "Installing g1cli ${GCLI_VERSION} (.deb ${DEB_ARCH})..." ## Find the CI pipeline for this release tag PIPELINE_ID=$(curl -sL "${GCLI_API}/pipelines?ref=${GCLI_VERSION}&status=success&per_page=1" | jq -r '.[0].id' 2>/dev/null) if [[ -n "$PIPELINE_ID" && "$PIPELINE_ID" != "null" ]]; then ## Find the build job matching our target architecture JOB_ID=$(curl -sL "${GCLI_API}/pipelines/${PIPELINE_ID}/jobs?per_page=100" \ | jq -r "[.[] | select(.name | test(\"${TARGET_ARCH}\"))] | .[0].id" 2>/dev/null) if [[ -n "$JOB_ID" && "$JOB_ID" != "null" ]]; then DEB_NAME="g1cli_${GCLI_VERSION}-1_${DEB_ARCH}.deb" DEB_URL="https://git.duniter.org/clients/rust/g1cli/-/jobs/${JOB_ID}/artifacts/file/target/${TARGET_ARCH}/debian/${DEB_NAME}" curl -sL "$DEB_URL" -o /tmp/${DEB_NAME} \ && sudo dpkg -i /tmp/${DEB_NAME} \ && rm -f /tmp/${DEB_NAME} \ && echo "g1cli installed: $(gcli --version 2>/dev/null)" \ || echo "INSTALL g1cli FAILED." >> ~/.zen/install.errors.log else echo "INSTALL g1cli FAILED: no CI job found for ${TARGET_ARCH}" >> ~/.zen/install.errors.log fi else echo "INSTALL g1cli FAILED: no pipeline found for ${GCLI_VERSION}" >> ~/.zen/install.errors.log fi else echo "INSTALL g1cli FAILED: cannot fetch latest version." >> ~/.zen/install.errors.log fi fi else echo "=== g1cli FOUND === $(gcli --version 2>/dev/null)" fi ## G1BILLET echo "######### G1BILLET ##############" echo "INSTALL G1BILLET : http://g1billet.localhost:33101" cd ~/.zen git clone https://github.com/papiche/G1BILLET.git cd G1BILLET && ./setup_systemd.sh cd - ## TROCZEN echo "######### TROCZEN ##############" echo "INSTALL TROCZEN API : http://localhost:5000" cd ~/.zen/workspace git clone https://github.com/papiche/troczen.git cd troczen/api && ./install_service.sh cd $MY_PATH echo ############################################################### echo "## ADDING lazydocker ================" # INSTALL lazydocker GUI ~/.zen/Astroport.ONE/install.lazydocker.sh ############################################################### echo "##INSTALL yt-dlp & SYMLINK youtube-dl ##########################" ~/.zen/Astroport.ONE/youtube-dl.sh ############################################################### echo "## INSTALL Deno (for yt-dlp EJS when Node < 20) ##################" ~/.zen/Astroport.ONE/tools/install_deno.sh ############################################################### echo "## CONFIGURE yt-dlp JavaScript runtime (Deno or Node + EJS) ######" ~/.zen/Astroport.ONE/tools/install_yt_dlp_ejs_node.sh ############################################################### echo "## INSTALL PowerJoular (Power consumption monitoring) ##########" ~/.zen/Astroport.ONE/tools/install_powerjoular.sh echo "=== SETUP ASTROPORT" ~/.zen/Astroport.ONE/setup.sh end=`date +%s` echo Installation time was `expr $end - $start` seconds. echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" echo "xXX LOG ERRORS XXx" echo "~/.zen/install.errors.log" echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" echo "xXX please report any errors encountered during install XXx" echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" echo "RUN TEST : ~/.zen/Astroport.ONE/test.sh" echo echo "#########################################################" echo "Astroport.ONE - Web3 Information System over IPFS - " echo "#############################################" echo "### ASK FOR SUPPORT #########################" echo "### support@qo-op.com" echo "#############################################" echo echo "╔══════════════════════════════════════════════════════════════════════════════╗" echo "║ 🏴‍☠️ INSTALLATION TERMINÉE 🏴‍☠️ ║" echo "║ ║" echo "║ Félicitations ! Astroport.ONE est maintenant installé sur votre machine. ║" echo "║ ║" echo "║ 🎯 PROCHAINES ÉTAPES: ║" echo "║ ║" echo "║ 1. 🚀 EMBARQUEMENT UPLANET ẐEN (Recommandé) ║" echo "║ Rejoignez la coopérative des autohébergeurs ║" echo "║ → ~/.zen/Astroport.ONE/uplanet_onboarding.sh ║" echo "║ ║" echo "║ 2. 🏴‍☠️ EMBARQUEMENT CAPITAINE SIMPLE ║" echo "║ Configuration basique pour commencer ║" echo "║ → ~/.zen/Astroport.ONE/captain.sh ║" echo "║ ║" echo "║ 3. 📊 TABLEAU DE BORD ║" echo "║ Interface principale de gestion ║" echo "║ → ~/.zen/Astroport.ONE/tools/dashboard.sh ║" echo "║ ║" echo "║ 4. 🌐 INTERFACE WEB ║" echo "║ → http://astroport.localhost/ipns/copylaradio.com ║" echo "║ ║" echo "╚══════════════════════════════════════════════════════════════════════════════╝" echo echo "🏴‍☠️ Embarquement UPlanet ẐEN ORIGIN... Terminé" echo "#############################################" . ~/.bashrc ########################################################## ~/.zen/Astroport.ONE/RUNTIME/DRAGON_p2p_ssh.sh ON else echo "ABORTING INSTALL =============================== PLAYER already onboard... =============================== $(cat ~/.zen/game/players/.current/secret.june) ===============================" # MAIN # fi }