has/install.sh

241 lines
10 KiB
Bash
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

#!/usr/bin/env bash
# ==============================================================================
# Home Autli Server (HAS) - Универсальный установщик для Linux через терминал
# Поддерживает: Ubuntu, Debian, Fedora, Arch Linux, CachyOS, Manjaro и др.
#
# Быстрый запуск одной командой в терминале:
# curl -fsSL https://raw.githubusercontent.com/autli5/has/main/install.sh | bash
# или
# wget -qO- https://raw.githubusercontent.com/autli5/has/main/install.sh | bash
# ==============================================================================
set -e
REPO="autli5/has"
APP_NAME="Home Autli Server"
BIN_NAME="has"
# Цвета для вывода в терминале
BOLD="\033[1m"
GREEN="\033[0;32m"
BLUE="\033[0;34m"
CYAN="\033[0;36m"
YELLOW="\033[1;33m"
RED="\033[0;31m"
RESET="\033[0m"
echo -e "${CYAN}${BOLD}"
echo "=========================================================="
echo " 🚀 Установка Home Autli Server (HAS) для Linux "
echo " Кинотеатр (Full HD + Русская озвучка) и Облако "
echo " Поддержка: Ubuntu, Debian, Fedora, Arch, CachyOS "
echo "=========================================================="
echo -e "${RESET}"
# 1. Проверка архитектуры системы
ARCH=$(uname -m)
if [ "$ARCH" != "x86_64" ] && [ "$ARCH" != "aarch64" ]; then
echo -e "${RED}Ошибка: архитектура $ARCH не поддерживается.${RESET}"
exit 1
fi
# 2. Определение дистрибутива Linux
PKG_TYPE=""
for arg in "$@"; do
case "$arg" in
--deb) PKG_TYPE="deb" ;;
--rpm) PKG_TYPE="rpm" ;;
--arch|--cachyos) PKG_TYPE="arch" ;;
--appimage) PKG_TYPE="appimage" ;;
esac
done
if [ -z "$PKG_TYPE" ]; then
if [ -f /etc/os-release ]; then
. /etc/os-release
DISTRO_ID="${ID:-linux}"
DISTRO_LIKE="${ID_LIKE:-}"
case "$DISTRO_ID $DISTRO_LIKE" in
*ubuntu*|*debian*|*linuxmint*|*pop*|*elementary*|*zorin*|*kali*)
PKG_TYPE="deb"
echo -e "${BLUE}ℹ️ Обнаружен дистрибутив Debian / Ubuntu (${DISTRO_ID}). Формат: .deb${RESET}"
;;
*fedora*|*rhel*|*centos*|*rocky*|*almalinux*)
PKG_TYPE="rpm"
echo -e "${BLUE}ℹ️ Обнаружен дистрибутив Fedora / Red Hat (${DISTRO_ID}). Формат: .rpm${RESET}"
;;
*arch*|*cachyos*|*cachy*|*manjaro*|*endeavouros*|*artix*)
PKG_TYPE="arch"
echo -e "${BLUE}ℹ️ Обнаружен дистрибутив Arch Linux / CachyOS (${DISTRO_ID}).${RESET}"
;;
*)
PKG_TYPE="appimage"
echo -e "${BLUE}ℹ️ Обнаружен дистрибутив Linux (${DISTRO_ID}). Формат: .AppImage${RESET}"
;;
esac
else
PKG_TYPE="appimage"
echo -e "${YELLOW}⚠️ Не удалось определить дистрибутив. Будет использован универсальный AppImage.${RESET}"
fi
fi
# 3. Получение последней версии из GitHub Releases
echo -e "${CYAN}🔍 Поиск последней версии в GitHub (${REPO})...${RESET}"
RELEASE_JSON=$(curl -s "https://api.github.com/repos/${REPO}/releases/latest" || true)
TAG_NAME=$(echo "$RELEASE_JSON" | grep -m1 '"tag_name":' | cut -d '"' -f 4 || true)
if [ -z "$TAG_NAME" ]; then
TAG_NAME="v0.1.5"
echo -e "${YELLOW}⚠️ Использована версия по умолчанию: ${TAG_NAME}${RESET}"
else
echo -e "${GREEN}✓ Найдена версия: ${TAG_NAME}${RESET}"
fi
# 4. Поиск прямой ссылки на скачивание нужного пакета
DOWNLOAD_URL=""
case "$PKG_TYPE" in
deb)
DOWNLOAD_URL=$(echo "$RELEASE_JSON" | grep -o 'https://[^"]*\.deb' | head -n 1 || true)
;;
rpm)
DOWNLOAD_URL=$(echo "$RELEASE_JSON" | grep -o 'https://[^"]*\.rpm' | head -n 1 || true)
;;
arch|appimage)
DOWNLOAD_URL=$(echo "$RELEASE_JSON" | grep -o 'https://[^"]*\.AppImage' | head -n 1 || true)
;;
esac
# Запасные прямые URL если GitHub API не вернул ссылки в JSON
if [ -z "$DOWNLOAD_URL" ]; then
case "$PKG_TYPE" in
deb)
DOWNLOAD_URL="https://github.com/${REPO}/releases/download/${TAG_NAME}/home-autli-server_${TAG_NAME#v}_amd64.deb"
;;
rpm)
DOWNLOAD_URL="https://github.com/${REPO}/releases/download/${TAG_NAME}/home-autli-server-${TAG_NAME#v}-1.x86_64.rpm"
;;
arch|appimage)
DOWNLOAD_URL="https://github.com/${REPO}/releases/download/${TAG_NAME}/home-autli-server_${TAG_NAME#v}_amd64.AppImage"
;;
esac
fi
TMP_DIR=$(mktemp -d /tmp/has-install.XXXXXX)
trap 'rm -rf "$TMP_DIR"' EXIT
FILE_NAME=$(basename "$DOWNLOAD_URL")
TMP_FILE="$TMP_DIR/$FILE_NAME"
echo -e "${CYAN}⬇️ Скачивание пакета (${FILE_NAME})...${RESET}"
if command -v curl &>/dev/null; then
curl -fL --progress-bar "$DOWNLOAD_URL" -o "$TMP_FILE"
elif command -v wget &>/dev/null; then
wget -q --show-progress "$DOWNLOAD_URL" -O "$TMP_FILE"
else
echo -e "${RED}Ошибка: необходимо установить curl или wget.${RESET}"
exit 1
fi
echo -e "${GREEN}✓ Файл успешно загружен.${RESET}"
# 5. Установка пакета в систему
echo -e "${CYAN}⚙️ Установка ${APP_NAME}...${RESET}"
case "$PKG_TYPE" in
deb)
echo -e "${BLUE}Выполняется установка .deb через dpkg / apt...${RESET}"
if sudo dpkg -i "$TMP_FILE"; then
echo -e "${GREEN}✓ Пакет установлен.${RESET}"
else
echo -e "${YELLOW}Доустановка недостающих зависимостей...${RESET}"
sudo apt-get update -qq
sudo apt-get install -f -y
fi
;;
rpm)
echo -e "${BLUE}Выполняется установка .rpm через dnf / rpm...${RESET}"
if command -v dnf &>/dev/null; then
sudo dnf install -y "$TMP_FILE"
elif command -v yum &>/dev/null; then
sudo yum localinstall -y "$TMP_FILE"
else
sudo rpm -Uvh --replacepkgs "$TMP_FILE"
fi
;;
arch)
echo -e "${BLUE}Настройка для Arch Linux / CachyOS...${RESET}"
# Проверка и установка зависимостей через pacman при необходимости
if command -v pacman &>/dev/null; then
echo -e "${CYAN}Проверка зависимостей (webkit2gtk-4.1, libappindicator-gtk3)...${RESET}"
sudo pacman -S --needed --noconfirm webkit2gtk-4.1 libappindicator-gtk3 librsvg || true
fi
chmod +x "$TMP_FILE"
INSTALL_BIN="$HOME/.local/bin"
mkdir -p "$INSTALL_BIN"
mv "$TMP_FILE" "$INSTALL_BIN/$BIN_NAME"
# Скачивание логотипа HAS для меню CachyOS / Arch
ICON_DIR="$HOME/.local/share/icons/hicolor/512x512/apps"
mkdir -p "$ICON_DIR"
curl -sL "https://raw.githubusercontent.com/${REPO}/main/public/logo.png" -o "$ICON_DIR/has.png" 2>/dev/null || true
# Создание .desktop файла для меню приложений (KDE Plasma, GNOME, Hyprland, XFCE)
DESKTOP_DIR="$HOME/.local/share/applications"
mkdir -p "$DESKTOP_DIR"
cat <<EOF > "$DESKTOP_DIR/home-autli-server.desktop"
[Desktop Entry]
Name=Home Autli Server
Comment=Личный сервер, Кинотеатр (Full HD + Русская озвучка) и Облако
Exec=$INSTALL_BIN/$BIN_NAME
Icon=$ICON_DIR/has.png
Terminal=false
Type=Application
Categories=AudioVideo;Player;Network;Utility;
StartupWMClass=home-autli-server
EOF
chmod +x "$DESKTOP_DIR/home-autli-server.desktop"
echo -e "${GREEN}✓ Исполняемый файл установлен в $INSTALL_BIN/$BIN_NAME${RESET}"
echo -e "${GREEN}✓ Ярлык добавлен в меню приложений Arch / CachyOS.${RESET}"
;;
appimage)
echo -e "${BLUE}Настройка переносимого AppImage...${RESET}"
chmod +x "$TMP_FILE"
INSTALL_BIN="$HOME/.local/bin"
mkdir -p "$INSTALL_BIN"
mv "$TMP_FILE" "$INSTALL_BIN/$BIN_NAME"
ICON_DIR="$HOME/.local/share/icons"
mkdir -p "$ICON_DIR"
curl -sL "https://raw.githubusercontent.com/${REPO}/main/public/logo.png" -o "$ICON_DIR/has.png" 2>/dev/null || true
DESKTOP_DIR="$HOME/.local/share/applications"
mkdir -p "$DESKTOP_DIR"
cat <<EOF > "$DESKTOP_DIR/home-autli-server.desktop"
[Desktop Entry]
Name=Home Autli Server
Comment=Личный сервер, Кинотеатр и Хранилище
Exec=$INSTALL_BIN/$BIN_NAME
Icon=$ICON_DIR/has.png
Terminal=false
Type=Application
Categories=AudioVideo;Player;Network;Utility;
StartupWMClass=home-autli-server
EOF
chmod +x "$DESKTOP_DIR/home-autli-server.desktop"
echo -e "${GREEN}✓ Исполняемый файл установлен в $INSTALL_BIN/$BIN_NAME${RESET}"
echo -e "${GREEN}✓ Ярлык добавлен в меню приложений.${RESET}"
;;
esac
echo ""
echo -e "${GREEN}${BOLD}==========================================================${RESET}"
echo -e "${GREEN}${BOLD} 🎉 ${APP_NAME} успешно установлен на ваш Linux! ${RESET}"
echo -e "${GREEN}${BOLD}==========================================================${RESET}"
echo ""
echo -e "Вы можете запустить приложение:"
echo -e " 1. Из меню приложений вашего рабочего стола: ${BOLD}Home Autli Server${RESET}"
echo -e " 2. Или прямо в терминале командой: ${CYAN}${BOLD}has${RESET}"
echo ""