68 lines
3.7 KiB
Bash
Executable File
68 lines
3.7 KiB
Bash
Executable File
#!/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)
|
||
#
|
||
# 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"
|
||
|
||
if [ "$1" = "--deps" ]; then
|
||
if command -v apt-get >/dev/null; then
|
||
sudo apt-get update && sudo apt-get install -y $DEPS_DEBIAN $BUILD_DEBIAN
|
||
elif command -v dnf >/dev/null; then
|
||
sudo dnf install -y $DEPS_FEDORA gcc pkgconf alsa-lib-devel
|
||
elif command -v pacman >/dev/null; then
|
||
sudo pacman -S --needed $DEPS_ARCH base-devel
|
||
else
|
||
echo "Install these with your package manager: $DEPS_DEBIAN"
|
||
fi
|
||
if command -v docker >/dev/null && ! id -nG | grep -qw docker; then
|
||
echo "Adding you to the docker group (the bot's computer needs it); log out and back in afterwards."
|
||
sudo usermod -aG docker "$USER"
|
||
fi
|
||
fi
|
||
|
||
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
|