AnyBot/deploy/linux/install.sh

68 lines
3.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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