AnyBot/deploy/linux/install.sh

61 lines
3.5 KiB
Bash
Executable File
Raw Permalink 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)
# ./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