#!/bin/sh ACTION=${1} shift 1 get_image() { IMAGE_NAME="benbusby/whoogle-search" } do_install_detail() { local config=`uci get whoogle.@whoogle[0].config_path 2>/dev/null` local port=`uci get whoogle.@whoogle[0].port 2>/dev/null` local IMAGE_NAME=`uci get whoogle.@whoogle[0].image_name 2>/dev/null` #Generate the generic environment variables for the docker-compose GEN_PASS=$(< /dev/urandom tr -dc A-Za-z0-9 2>/dev/null | head -c14; echo) GEN_PASS2=$(< /dev/urandom tr -dc A-Za-z0-9 2>/dev/null | head -c14; echo) # Get our local LAN IP Address LAN_IP=$(uci get network.lan.ipaddr) # Strip trailing network mask LAN_IP="${LAN_IP%/*}" if [ -z "$config" ]; then echo "config path is empty!" exit 1 fi [ -z "$port" ] && port=5000 [ -z "$IMAGE_NAME" ] && IMAGE_NAME=benbusby/whoogle-search # Create Docker Compose file with custom variables rm -R /opt/docker2/compose/whoogle-app mkdir /opt/docker2/compose/whoogle-app touch /opt/docker2/compose/whoogle-app/docker-compose.yml cat > /opt/docker2/compose/whoogle-app/docker-compose.yml < #- WHOOGLE_PASS= # Proxy configuration, uncomment to enable #- WHOOGLE_PROXY_USER= #- WHOOGLE_PROXY_PASS= #- WHOOGLE_PROXY_TYPE= # Site alternative configurations, uncomment to enable # Note: If not set, the feature will still be available # with default values. #- WHOOGLE_ALT_TW=farside.link/nitter #- WHOOGLE_ALT_YT=farside.link/invidious #- WHOOGLE_ALT_IG=farside.link/bibliogram/u #- WHOOGLE_ALT_RD=farside.link/libreddit #- WHOOGLE_ALT_MD=farside.link/scribe #- WHOOGLE_ALT_TL=farside.link/lingva #- WHOOGLE_ALT_IMG=farside.link/rimgo #- WHOOGLE_ALT_WIKI=farside.link/wikiless #- WHOOGLE_ALT_IMDB=farside.link/libremdb #- WHOOGLE_ALT_QUORA=farside.link/quetre #env_file: # Alternatively, load variables from whoogle.env #- whoogle.env ports: - ${port}:5000 labels: plugsy.name: "Whoogle" plugsy.category: "Home" plugsy.icon: "@styled-icons/boxicons-logos/Google" plugsy.link: "http://${LAN_IP}:${port}" EOF docker-compose -f /opt/docker2/compose/whoogle-app/docker-compose.yml up -d # Add a new list option to the "shortcutmenu" configuration file uci add shortcutmenu lists uci set shortcutmenu.@lists[-1].webname="$IMAGE_NAME" uci set shortcutmenu.@lists[-1].weburl="$LAN_IP:$port" uci set shortcutmenu.@lists[-1].webpath="/" uci commit shortcutmenu } usage() { echo "usage: $0 sub-command" echo "where sub-command is one of:" echo " install Install whoogle" echo " upgrade Upgrade whoogle" echo " rm/start/stop/restart Remove/Start/Stop/Restart whoogle" echo " status whoogle status" echo " port whoogle port" } case ${ACTION} in "install") get_image do_install_detail ;; "upgrade") get_image do_install_detail ;; "rm") IMAGE_NAME=$(uci get whoogle.@whoogle[0].image_name 2>/dev/null) [ -z "$IMAGE_NAME" ] && IMAGE_NAME="benbusby/whoogle-search" CONTAINER_IDS=$(docker ps -a --filter "ancestor=${IMAGE_NAME}" --format '{{.ID}}') echo "Stopping and removing containers..." for ID in $CONTAINER_IDS; do docker stop "$ID" docker rm "$ID" done docker rmi -f "$IMAGE_NAME" rm -r /opt/docker2/compose/whoogle-app 2>/dev/null ;; "start" | "stop" | "restart") docker ${ACTION} whoogle-search ;; "status") CONTAINER_NAME=$(docker ps -a --filter "name=whoogle-search" --format '{{.Names}}') CONTAINER_STATUS=$(docker ps --all --filter "name=${CONTAINER_NAME}" --format '{{.Status}}' | awk '/^Up/ { print "up " substr($0, 4) } !/^Up/ && /.+/ { print "down" }') if [ -z "$CONTAINER_NAME" ]; then echo "Whoogle is not installed" else echo "${CONTAINER_STATUS}" fi ;; "port") docker ps --all -f 'name=whoogle' --format '{{.Ports}}' | grep -om1 '0.0.0.0:[0-9]*' | sed 's/0.0.0.0://' ;; *) usage exit 1 ;; esac