AnyBot/deploy/linux/install.sh

61 lines
3.5 KiB
Bash
Raw Normal View History

#!/bin/sh
# Install AnyBot on a Linux desktop for the current user (no root needed for this part).
#
# ./deploy/linux/install.sh build from source, then install
# ./deploy/linux/install.sh --deps also install the system packages (asks for sudo)
# ./deploy/linux/install.sh --deps-only only the system packages (make deps)
#
# Puts the app in ~/.local/bin/anybot, the menu entry in ~/.local/share/applications and the
# icon in ~/.local/share/icons. Run it from the app/ folder.
set -e
cd "$(dirname "$0")/../.."
# What AnyBot uses on Linux (all optional except the first line; the app explains what's missing):
# libasound2 libxkbcommon-x11-0 libgl1 xdg-utils – the window and sound
# libnotify-bin notifications libsecret-tools saved logins (系統鑰匙圈)
# espeak-ng reading answers aloud zenity file pickers
# xclip / wl-clipboard pasting pictures; typing Chinese on GNOME/KDE Wayland
# ffmpeg video posters, Opus, demo videos
# docker.io the bot's own computer fonts-noto-cjk extra CJK glyphs (粉圓體 is built in)
DEPS_DEBIAN="libasound2 libxkbcommon-x11-0 libgl1 xdg-utils libnotify-bin libsecret-tools espeak-ng zenity xclip wl-clipboard ffmpeg docker.io fonts-noto-cjk"
DEPS_FEDORA="alsa-lib libxkbcommon-x11 mesa-libGL xdg-utils libnotify libsecret espeak-ng zenity xclip wl-clipboard ffmpeg-free moby-engine google-noto-sans-cjk-fonts"
DEPS_ARCH="alsa-lib libxkbcommon-x11 mesa xdg-utils libnotify libsecret espeak-ng zenity xclip wl-clipboard ffmpeg docker noto-fonts-cjk"
BUILD_DEBIAN="build-essential pkg-config libasound2-dev"
# The package lists above are for reference; ../../install.sh installs them (it picks the right
# names per release, e.g. libasound2t64 on Ubuntu 24.04, and installs Rust when it's missing).
if [ "${1:-}" = "--deps" ] || [ "${1:-}" = "--deps-only" ]; then
sh ./install.sh deps
fi
[ "${1:-}" = "--deps-only" ] && exit 0
OUT="${CARGO_TARGET_DIR:-target}/release/anybot"
if [ -x "$OUT" ] && [ "${1:-}" != "--rebuild" ]; then
echo "Using the existing build ($OUT)."
else
command -v cargo >/dev/null || { echo "Rust is needed to build: https://rustup.rs"; exit 1; }
cargo build --release
fi
BIN="$HOME/.local/bin"
APPS="$HOME/.local/share/applications"
ICONS="$HOME/.local/share/icons/hicolor"
mkdir -p "$BIN" "$APPS" "$ICONS/256x256/apps" "$ICONS/128x128/apps" "$ICONS/scalable/apps"
install -m 755 "$OUT" "$BIN/anybot"
install -m 644 deploy/linux/anybot.desktop "$APPS/anybot.desktop"
install -m 644 icons/anybot.svg "$ICONS/scalable/apps/anybot.svg"
"$BIN/anybot" --write-icon "$ICONS/256x256/apps/anybot.png" 256
"$BIN/anybot" --write-icon "$ICONS/128x128/apps/anybot.png" 128
command -v update-desktop-database >/dev/null && update-desktop-database "$APPS" 2>/dev/null || true
command -v gtk-update-icon-cache >/dev/null && gtk-update-icon-cache -q "$ICONS" 2>/dev/null || true
echo "AnyBot is installed: find it in your app menu, or run: anybot"
echo "To make this computer a brain, or hands for your brain (also without a screen): anybot setup"
case ":$PATH:" in *":$BIN:"*) ;; *) echo "(Add $BIN to your PATH to start it from a terminal.)" ;; esac
if [ "${XDG_SESSION_TYPE:-}" = "wayland" ]; then
echo "Wayland: bots can see and use your screen. On GNOME/KDE the first time, a system window asks:"
echo " turn on 「允許遠端操作」 (Allow remote interaction), then press 「分享」 (Share)."
echo " Recording a demonstration (教它一項任務) needs an Xorg session."
fi