/
sapertlt
/
layout_switcher
Обзор
Документация
Войти
/
sapertlt
/
layout_switcher
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
scripts/check-deps.sh
134 строки
5 KB
Andrey Nikolaev
Автоматическое создание и запуск ydotoold.service при установке
28 июл 2026, 11:03
28 июл 2026, 11:03
3b80e86
Код
Авторство
О чём код?
#!/usr/bin/env bash # ============================================================================ # Скрипт проверки системных зависимостей перед установкой приложения. # ============================================================================ # Отключаем pipefail, чтобы grep -q не приводил к падению при отсутствии совпадений set -eu RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' info() { echo -e "${BLUE}[INFO]${NC} $*"; } success() { echo -e "${GREEN}[OK]${NC} $*"; } warn() { echo -e "${YELLOW}[ВНИМАНИЕ]${NC} $*"; } error() { echo -e "${RED}[ОШИБКА]${NC} $*"; } # Проверяем, является ли ОС Ubuntu/Debian if [[ ! -f /etc/os-release ]]; then warn "Неизвестная ОС. Автоматическая проверка системных пакетов пропущена." exit 0 fi source /etc/os-release if [[ "$ID" != "ubuntu" && "$ID" != "debian" && "${ID_LIKE:-}" != *"ubuntu"* && "${ID_LIKE:-}" != *"debian"* ]]; then warn "ОС не является Ubuntu/Debian. Автоматическая проверка системных пакетов пропущена." exit 0 fi # Список критических пакетов для проверки CRITICAL_PACKAGES=( "linux-headers-$(uname -r)" "python3-dev" "python3-gi" "python3-gi-cairo" "gir1.2-gtk-3.0" "gir1.2-ayatanaappindicator3-0.1" "xdotool" "xclip" "wl-clipboard" "ydotool" ) missing_packages=() for pkg in "${CRITICAL_PACKAGES[@]}"; do if ! dpkg-query -W -f='${Status}' "$pkg" 2>/dev/null | grep -q "ok installed"; then missing_packages+=("$pkg") fi done # Функция проверки и создания сервиса ydotoold check_ydotoold_service() { if dpkg-query -W -f='${Status}' "ydotool" 2>/dev/null | grep -q "ok installed"; then if ! systemctl list-unit-files ydotoold.service | grep -q ydotoold.service; then info "Сервис ydotoold не найден. Создаю systemd-сервис..." echo '[Unit] Description=ydotool daemon After=network.target [Service] ExecStart=/usr/bin/ydotoold Restart=always User=root Group=root [Install] WantedBy=multi-user.target' | sudo tee /etc/systemd/system/ydotoold.service >/dev/null sudo systemctl daemon-reload sudo systemctl enable --now ydotoold success "Сервис ydotoold создан и запущен." else if ! systemctl is-active --quiet ydotoold; then info "Запускаю сервис ydotoold..." sudo systemctl enable --now ydotoold fi fi fi } if [ ${#missing_packages[@]} -eq 0 ]; then success "Все системные зависимости установлены." check_ydotoold_service exit 0 fi warn "Обнаружены отсутствующие системные зависимости:" for pkg in "${missing_packages[@]}"; do echo " • $pkg" done echo "" # Предлагаем установить echo -e "Для продолжения установки приложения необходимо установить недостающие пакеты." read -p "Хотите установить их сейчас через sudo apt? (Y/n) " -n 1 -r echo if [[ ! ${REPLY:-y} =~ ^[Yy]$ ]]; then error "Установка отменена пользователем." echo "" echo "Рекомендация: пожалуйста, установите недостающие пакеты вручную:" echo " sudo apt update" echo " sudo apt install -y ${missing_packages[*]}" echo "Или запустите: make install-system" echo "" exit 1 fi info "Запуск установки системных зависимостей..." if sudo apt update && sudo apt install -y "${missing_packages[@]}"; then success "Системные зависимости успешно установлены." # Добавляем пользователя в группу input на всякий случай, если это не сделано current_user="$(whoami)" if ! groups "$current_user" | grep -q '\binput\b'; then info "Добавление пользователя '$current_user' в группу 'input'..." sudo usermod -a -G input "$current_user" warn "Пользователь добавлен в группу 'input'. Пожалуйста, перелогиньтесь после завершения установки!" fi check_ydotoold_service exit 0 else error "Не удалось установить системные зависимости." echo "" echo "Рекомендация: установите недостающие пакеты вручную:" echo " sudo apt update" echo " sudo apt install -y ${missing_packages[*]}" echo "Или выполните: make install-system" echo "" exit 1 fi