diff --git a/setup.sh b/setup.sh index a141165..c320994 100755 --- a/setup.sh +++ b/setup.sh @@ -9,16 +9,14 @@ if [ "$UID" != "0" ]; then fi # Get settings -read -rsp "User Password: " pass; echo RID=$(cat /etc/radio_id) read -rp "Radio ID (${RID:-1-254}): " ip ip=${ip:-$RID} echo $ip > /etc/radio_id read -rp "Radio Name ($HOSTNAME): " name name=${name:-$HOSTNAME} -read -rp "Mesh Name: " mesh_ssid -read -rsp "Mesh Password: " mesh_pass; echo -read -rsp "Hotspot Password: " ap_pass; echo +read -rp "HuggingFace Token: " token +export HUGGING_FACE_HUB_TOKEN=${token} read -p "Enable wireguard (Y/N): " wireguard if [ "${wireguard,,}" == "y" ]; then while [ ! -f "/etc/wireguard/wg0.conf" ]; do @@ -51,6 +49,11 @@ cat <> /etc/motd EOF +# Node +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.7/install.sh | bash +source ~/.bashrc +nvm install stable && nvm use stable + # Setup wireguard if [ "${wireguard,,}" == "y" ]; then apt install wireguard -y @@ -74,15 +77,8 @@ refclock SHM 0 offset 0.5 delay 0.2 refid NMEA EOF systemctl enable --now gpsd chrony -# Setup DNS -# TODO: Setup AP management -apt install -y dnsmasq -tee -a /etc/dnsmasq.d/local.conf > /dev/null <<'EOF' -server=1.1.1.1 -server=1.0.0.1 -address=/$HOSTNAME/$IP -address=/.$HOSTNAME/$IP -EOF +# Setup Fallback AP +curl -sL https://git.zakscode.com/ztimson/fallback-ap/raw/branch/master/install.sh | sudo bash # Install docker apt install -y qemu-user-static @@ -90,70 +86,85 @@ curl -fsSL https://get.docker.com | sh usermod -aG docker $USER newgrp docker -# Setup Guacamole - http://localhost:8080 -sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication yes/' /etc/ssh/sshd_config -systemctl restart ssh -apt-get install -y xrdp -tee /etc/xrdp/startwm.sh > /dev/null <<'EOF' -#!/bin/sh -unset DBUS_SESSION_BUS_ADDRESS -unset XDG_RUNTIME_DIR -exec startlxde-pi +# VNC +sudo raspi-config nonint do_vnc 0 +cat < /dev/null <<'EOF' -polkit.addRule(function(action, subject) { - return polkit.Result.YES; -}); -EOF -systemctl restart polkit -systemctl enable --now xrdp -docker run -d --name guacamole --network host --restart unless-stopped -v guacamole:/config flcontainers/guacamole:latest # Setup Automount + FileBrowser - http://localhost:1200 -mkdir -p /etc/udev/rules.d/ -echo 'ENV{ID_FS_USAGE}=="filesystem", ENV{UDISKS_FILESYSTEM_SHARED}="1"' > /etc/udev/rules.d/99-udisks2.rules -docker run -d --name filebrowser --restart unless-stopped -p 1200:8080 -e FB_USERNAME=$USER -v filebrowser:/config -v /media:/data hurlenko/filebrowser:latest -sleep 3 -fb_pass=$(docker logs filebrowser 2>&1 | grep -oP 'randomly generated password: \K.*'); echo $fb_pass +# mkdir -p /etc/udev/rules.d/ +# echo 'ENV{ID_FS_USAGE}=="filesystem", ENV{UDISKS_FILESYSTEM_SHARED}="1"' > /etc/udev/rules.d/99-udisks2.rules +# docker run -d --name filebrowser --restart unless-stopped -p 1200:8080 -e FB_USERNAME=$USER -v filebrowser:/config -v /media:/data hurlenko/filebrowser:latest +# sleep 3 +# fb_pass=$(docker logs filebrowser 2>&1 | grep -oP 'randomly generated password: \K.*'); echo $fb_pass # Setup Kiwix - http://localhost:1300 -mkdir -p /media/library/archive -mkdir -p /media/library/zim -docker run -d --name kiwix --restart unless-stopped -p 1300:3000 -v /media/library:/data ztimson/kiwixm:latest +# mkdir -p /media/library/archive +# mkdir -p /media/library/zim +# docker run -d --name kiwix --restart unless-stopped -p 1300:3000 -v /media/library:/data ztimson/kiwixm:latest # Maps - http://localhost:1400 mkdir -p /media/maps/tiles mkdir -p /media/maps/styles docker run -d --name maps --restart unless-stopped -p 1400:8080 -v /media/maps/config.json:/config.json -v /media/maps/tiles:/data -v /media/maps/styles:/styles maptiler/tileserver-gl:v4.11.0 -# Setup Ollama + OpenWebUI - http://localhost:1000 -docker run -d --name ollama --restart unless-stopped -p 11434:11434 -v ollama:/root/.ollama ollama/ollama:latest -docker exec -d ollama ollama pull llama3.2:1b-instruct-q4_K_M # Works best on Pi5 (High TPS, Low memory) -docker run -d --name open-webui --restart unless-stopped -p 1000:8080 -e OLLAMA_BASE_URL=http://ollama:11434 --link ollama -v open-webui:/app/backend/data ghcr.io/open-webui/open-webui:main +# Setup AI (LiteRT + Gemma4-E2B) +curl -LsSf https://astral.sh/uv/install.sh | sh +source $HOME/.local/bin/env +INSTALL_DIR="$(pwd)" +uv venv --clear --python=3.13 --seed +source .venv/bin/activate +uv pip install litert-cli-nightly litert-lm-nightly +litert-lm import --from-huggingface-repo litert-community/gemma-4-E2B-it-litert-lm +MODEL_PATH="$INSTALL_DIR/gemma-4-E2B-it.litertlm" +LITERT_BIN="$INSTALL_DIR/.venv/bin/litert-lm" +SERVICE_USER="$(whoami)" +cat < /etc/element/config.json -docker run -d --name element --restart unless-stopped -p 1500:80 -v /etc/element/config.json:/app/config.json vectorim/element-web:latest +# docker run -it --rm -v synapse:/data -e SYNAPSE_SERVER_NAME=server.local -e SYNAPSE_REPORT_STATS=no matrixdotorg/synapse:latest generate +# tee -a /var/lib/docker/volumes/synapse/_data/homeserver.yaml < /etc/element/config.json +# docker run -d --name element --restart unless-stopped -p 1500:80 -v /etc/element/config.json:/app/config.json vectorim/element-web:latest # Setup pentest suite - http:localhost:1600 sudo apt install -y arp-scan aircrack-ng gobuster hashcat hcxtools hydra john netcat-openbsd nikto nmap masscan reaver sqlmap tcpdump wireshark @@ -173,6 +184,6 @@ docker run -d --name atak --restart unless-stopped --platform=linux/amd64 -p 808 # Speedtest - http://localhost:1900 docker run -d --name speedtest --restart unless-stopped -p 1900:80 lscr.io/linuxserver/librespeed:latest -# TODO: Captive Portal + PWA & Caddy +# TODO: Captive Portal + PWA # TODO: E-Ink + QR Join AP # TODO: Mesh