diff --git a/alpine_install.sh b/alpine_install.sh index e4c8357..ea65b05 100644 --- a/alpine_install.sh +++ b/alpine_install.sh @@ -1,6 +1,6 @@ #!/bin/sh # LabWC Alpine Setup Script -# Version 5 +# Version 6 # # Запускать от имени root! # @@ -8,13 +8,14 @@ # ./setup.sh # ./setup.sh username # -# Скрипт устанавливает: +# Устанавливает: # - LabWC + Wayland # - Waybar / Mako / Wofi # - PipeWire + WirePlumber # - NetworkManager # - Firefox # - zenith-cli +# - seatd # - автоматический вход на tty1 # - автоматический запуск LabWC # @@ -24,9 +25,9 @@ set -eu -# -------------------------------------------------- +# ================================================== # 0. Основные параметры -# -------------------------------------------------- +# ================================================== USER_NAME="${1:-ivan}" HOME_DIR="/home/$USER_NAME" @@ -43,18 +44,18 @@ echo "[*] Пользователь: $USER_NAME" echo "[*] Домашний каталог: $HOME_DIR" echo "==================================================" -# -------------------------------------------------- +# ================================================== # 1. Проверка root -# -------------------------------------------------- +# ================================================== if [ "$(id -u)" -ne 0 ]; then echo "[!] Этот скрипт необходимо запускать от root." exit 1 fi -# -------------------------------------------------- +# ================================================== # 2. Проверка имени пользователя -# -------------------------------------------------- +# ================================================== case "$USER_NAME" in ""|*[!a-zA-Z0-9_-]*) @@ -63,23 +64,31 @@ case "$USER_NAME" in ;; esac -# -------------------------------------------------- -# 3. Проверка существования /etc/apk/repositories -# -------------------------------------------------- +# ================================================== +# 3. Проверка repositories +# ================================================== if [ ! -f /etc/apk/repositories ]; then echo "[!] Файл /etc/apk/repositories не найден." exit 1 fi -# -------------------------------------------------- +# ================================================== # 4. Вспомогательные функции -# -------------------------------------------------- +# ================================================== add_user_group() { GROUP_NAME="$1" - if groups "$USER_NAME" 2>/dev/null | grep -qw "$GROUP_NAME"; then + if ! getent group "$GROUP_NAME" >/dev/null 2>&1; then + echo "[!] Группа $GROUP_NAME не существует — пропуск." + return 0 + fi + + if id -nG "$USER_NAME" 2>/dev/null | + tr ' ' '\n' | + grep -qx "$GROUP_NAME" + then echo "[+] $USER_NAME уже состоит в группе $GROUP_NAME." else echo "[*] Добавление $USER_NAME в группу $GROUP_NAME..." @@ -90,21 +99,21 @@ add_user_group() { enable_service() { SERVICE="$1" - echo "[*] Включение службы $SERVICE..." + echo "[*] Настройка службы $SERVICE..." - rc-update add "$SERVICE" default 2>/dev/null || true - - if rc-service "$SERVICE" status >/dev/null 2>&1; then - echo "[+] $SERVICE уже запущен." - else + if ! rc-service "$SERVICE" status >/dev/null 2>&1; then echo "[*] Запуск $SERVICE..." rc-service "$SERVICE" start 2>/dev/null || true + else + echo "[+] $SERVICE уже запущен." fi + + rc-update add "$SERVICE" default 2>/dev/null || true } -# -------------------------------------------------- +# ================================================== # 5. Репозитории -# -------------------------------------------------- +# ================================================== echo "[*] Проверка репозитория community..." @@ -135,9 +144,9 @@ echo "[*] Обновление индекса пакетов..." apk update -# -------------------------------------------------- +# ================================================== # 6. Базовые инструменты -# -------------------------------------------------- +# ================================================== echo "[*] Установка базовых инструментов..." @@ -148,9 +157,9 @@ apk add \ bash \ build-base -# -------------------------------------------------- +# ================================================== # 7. Пользователь -# -------------------------------------------------- +# ================================================== echo "[*] Настройка пользователя $USER_NAME..." @@ -171,26 +180,64 @@ else fi -# -------------------------------------------------- -# 8. Группы -# -------------------------------------------------- +# ================================================== +# 8. Wayland / seatd / системные компоненты +# +# ВАЖНО: +# seatd устанавливается ДО добавления пользователя +# в группу seat. +# ================================================== + +echo "[*] Установка Wayland и системных компонентов..." + +apk add \ + mesa \ + mesa-dri \ + libinput \ + seatd \ + seatd-openrc \ + dbus \ + dbus-openrc \ + polkit + +# ================================================== +# 9. Группы +# ================================================== echo "[*] Настройка групп пользователя..." +# Sudo add_user_group wheel -add_user_group seat -# При использовании seatd отдельные группы video/input -# обычно не требуются. +# seatd # -# При необходимости их можно добавить: +# Alpine использует группу "seat". +# "seatd" — это имя демона/пакета, НЕ имя группы. +# +# Документация Alpine: +# adduser $USER seat +# +if getent group seat >/dev/null 2>&1; then + add_user_group seat +else + echo "[!] Группа seat отсутствует." + echo "[!] Создаю группу seat..." + + addgroup seat + + add_user_group seat +fi + +# Для seatd обычно НЕ нужны input/video. +# +# video можно добавить отдельно, если PipeWire +# должен напрямую работать с веб-камерой: # # add_user_group video -# add_user_group input -# -------------------------------------------------- -# 9. Sudo -# -------------------------------------------------- +# ================================================== +# 10. Sudo +# ================================================== echo "[*] Настройка sudo..." @@ -232,47 +279,20 @@ else fi fi -# -------------------------------------------------- -# 10. Wayland / LabWC -# -------------------------------------------------- - -echo "[*] Установка Wayland и системных компонентов..." - -apk add \ - mesa \ - mesa-dri \ - libinput \ - seatd \ - dbus \ - polkit - -# -------------------------------------------------- +# ================================================== # 11. Зависимости zenith-cli -# -------------------------------------------------- +# ================================================== echo "[*] Установка зависимостей zenith-cli..." -# zenith-cli: -# -# Bash -> build.sh -# C/C++ -> build-base -# CMake -> cmake -# libcurl -> curl-dev -# OpenCV -> opencv-dev -# -# CMakeLists.txt использует: -# -# find_package(CURL REQUIRED) -# find_package(OpenCV REQUIRED) - apk add \ cmake \ curl-dev \ opencv-dev -# -------------------------------------------------- +# ================================================== # 12. Desktop environment -# -------------------------------------------------- +# ================================================== echo "[*] Установка рабочего окружения..." @@ -297,9 +317,9 @@ apk add \ firefox \ swaylock -# -------------------------------------------------- +# ================================================== # 13. OpenRC -# -------------------------------------------------- +# ================================================== echo "[*] Настройка системных служб..." @@ -307,64 +327,98 @@ enable_service seatd enable_service dbus enable_service networkmanager -# -------------------------------------------------- +# ================================================== # 14. Конфигурация LabWC -# -------------------------------------------------- +# ================================================== echo "[*] Создание конфигурации LabWC..." mkdir -p "$HOME_DIR/.config/labwc" +# -------------------------------------------------- +# LabWC environment +# -------------------------------------------------- + cat > "$HOME_DIR/.config/labwc/environment" << 'EOF' XDG_CURRENT_DESKTOP=labwc XDG_SESSION_DESKTOP=labwc XDG_SESSION_TYPE=wayland +# Runtime directory для Wayland/seatd +XDG_RUNTIME_DIR=/tmp/user-1000 + MOZ_ENABLE_WAYLAND=1 QT_QPA_PLATFORM=wayland SDL_VIDEODRIVER=wayland + +# Явно использовать seatd +LIBSEAT_BACKEND=seatd EOF +# -------------------------------------------------- +# LabWC autostart +# -------------------------------------------------- + cat > "$HOME_DIR/.config/labwc/autostart" << 'EOF' #!/bin/sh -# -------------------------------------------------- +# ================================================== +# XDG_RUNTIME_DIR +# ================================================== + +if [ -z "${XDG_RUNTIME_DIR:-}" ]; then + XDG_RUNTIME_DIR="/tmp/user-$(id -u)" + export XDG_RUNTIME_DIR +fi + +if [ ! -d "$XDG_RUNTIME_DIR" ]; then + mkdir -p "$XDG_RUNTIME_DIR" + chmod 700 "$XDG_RUNTIME_DIR" +fi + +# ================================================== # NetworkManager applet -# -------------------------------------------------- +# ================================================== -nm-applet & +if command -v nm-applet >/dev/null 2>&1; then + nm-applet & +fi -# -------------------------------------------------- +# ================================================== # Waybar -# -------------------------------------------------- +# ================================================== -waybar & +if command -v waybar >/dev/null 2>&1; then + waybar & +fi -# -------------------------------------------------- +# ================================================== # Notification daemon -# -------------------------------------------------- +# ================================================== -mako & +if command -v mako >/dev/null 2>&1; then + mako & +fi -# -------------------------------------------------- +# ================================================== # PipeWire -# -------------------------------------------------- +# ================================================== if ! pgrep -x pipewire >/dev/null 2>&1; then pipewire & fi -# -------------------------------------------------- +# ================================================== # WirePlumber -# -------------------------------------------------- +# ================================================== if ! pgrep -x wireplumber >/dev/null 2>&1; then wireplumber & fi -# -------------------------------------------------- +# ================================================== # Wallpaper -# -------------------------------------------------- +# ================================================== if [ -f /usr/share/backgrounds/alpine/alpine-wallpaper.png ]; then swaybg \ @@ -375,9 +429,9 @@ EOF chmod +x "$HOME_DIR/.config/labwc/autostart" -# -------------------------------------------------- +# ================================================== # 15. zenith-cli -# -------------------------------------------------- +# ================================================== echo "[*] Установка zenith-cli..." @@ -402,9 +456,9 @@ else fi -# -------------------------------------------------- +# ================================================== # 16. Проверка build.sh -# -------------------------------------------------- +# ================================================== echo "[*] Проверка build.sh..." @@ -414,9 +468,9 @@ if [ ! -f "$ZENITH_DIR/build.sh" ]; then exit 1 fi -# -------------------------------------------------- +# ================================================== # 17. Проверка CMakeLists.txt -# -------------------------------------------------- +# ================================================== echo "[*] Проверка CMakeLists.txt..." @@ -426,9 +480,9 @@ if [ ! -f "$ZENITH_DIR/CMakeLists.txt" ]; then exit 1 fi -# -------------------------------------------------- +# ================================================== # 18. Сборка zenith-cli -# -------------------------------------------------- +# ================================================== echo "[*] Сборка zenith-cli..." @@ -463,9 +517,9 @@ su - "$USER_NAME" -c " echo '[+] Установлен в: $LOCAL_BIN/zenith-cli' " -# -------------------------------------------------- -# 19. Проверка бинарника zenith-cli -# -------------------------------------------------- +# ================================================== +# 19. Проверка бинарника +# ================================================== echo "[*] Проверка zenith-cli..." @@ -474,9 +528,9 @@ if [ ! -x "$LOCAL_BIN/zenith-cli" ]; then exit 1 fi -# -------------------------------------------------- +# ================================================== # 20. PATH -# -------------------------------------------------- +# ================================================== echo "[*] Настройка PATH..." @@ -492,9 +546,35 @@ EOF fi -# -------------------------------------------------- -# 21. Автологин tty1 -# -------------------------------------------------- +# ================================================== +# 21. XDG_RUNTIME_DIR +# ================================================== + +echo "[*] Настройка XDG_RUNTIME_DIR..." + +if ! grep -qF '# XDG-RUNTIME-DIR' "$PROFILE"; then + + cat >> "$PROFILE" << 'EOF' + +# XDG-RUNTIME-DIR +# +# seatd/Wayland требует XDG_RUNTIME_DIR. +# +if [ -z "${XDG_RUNTIME_DIR:-}" ]; then + export XDG_RUNTIME_DIR="/tmp/user-$(id -u)" +fi + +if [ ! -d "$XDG_RUNTIME_DIR" ]; then + mkdir -p "$XDG_RUNTIME_DIR" + chmod 700 "$XDG_RUNTIME_DIR" +fi +EOF + +fi + +# ================================================== +# 22. Автологин tty1 +# ================================================== echo "[*] Настройка автоматического входа..." @@ -528,9 +608,9 @@ else fi -# -------------------------------------------------- -# 22. Автозапуск LabWC -# -------------------------------------------------- +# ================================================== +# 23. Автозапуск LabWC +# ================================================== echo "[*] Настройка запуска LabWC..." @@ -542,12 +622,15 @@ if ! grep -qF '# LABWC-AUTOSTART' "$PROFILE"; then # # Запуск LabWC только на tty1. # -# dbus-run-session создаёт отдельную D-Bus session bus -# для графической сессии. -# + if [ "$(tty 2>/dev/null)" = "/dev/tty1" ] && [ -z "${WAYLAND_DISPLAY:-}" ]; then + export XDG_SESSION_TYPE=wayland + export XDG_CURRENT_DESKTOP=labwc + export XDG_SESSION_DESKTOP=labwc + export LIBSEAT_BACKEND=seatd + exec dbus-run-session -- labwc fi @@ -555,15 +638,19 @@ EOF fi -# -------------------------------------------------- -# 23. Права -# -------------------------------------------------- +# ================================================== +# 24. Права +# ================================================== echo "[*] Настройка владельцев файлов..." -chown -R "$USER_NAME:$USER_NAME" "$HOME_DIR/.config" +if [ -d "$HOME_DIR/.config" ]; then + chown -R "$USER_NAME:$USER_NAME" "$HOME_DIR/.config" +fi -chown "$USER_NAME:$USER_NAME" "$PROFILE" +if [ -f "$PROFILE" ]; then + chown "$USER_NAME:$USER_NAME" "$PROFILE" +fi if [ -d "$HOME_DIR/.local" ]; then chown -R "$USER_NAME:$USER_NAME" "$HOME_DIR/.local" @@ -573,9 +660,28 @@ if [ -d "$ZENITH_DIR" ]; then chown -R "$USER_NAME:$USER_NAME" "$ZENITH_DIR" fi -# -------------------------------------------------- -# 24. Финальная проверка -# -------------------------------------------------- +# ================================================== +# 25. Проверка групп +# ================================================== + +echo +echo "==================================================" +echo "[*] Группы пользователя" +echo "==================================================" + +id "$USER_NAME" + +echo + +if id -nG "$USER_NAME" | tr ' ' '\n' | grep -qx seat; then + echo "[+] seat: OK" +else + echo "[!] seat: НЕ НАЙДЕНА" +fi + +# ================================================== +# 26. Финальная проверка +# ================================================== echo echo "==================================================" @@ -617,13 +723,27 @@ else echo "ERROR" fi -printf '%-20s' "D-Bus session:" +printf '%-20s' "D-Bus:" if command -v dbus-run-session >/dev/null 2>&1; then echo "OK" else echo "ERROR" fi +printf '%-20s' "seatd:" +if command -v seatd >/dev/null 2>&1; then + echo "OK" +else + echo "ERROR" +fi + +printf '%-20s' "seatd service:" +if rc-service seatd status >/dev/null 2>&1; then + echo "RUNNING" +else + echo "NOT RUNNING" +fi + printf '%-20s' "Bash:" if command -v bash >/dev/null 2>&1; then echo "OK" @@ -664,10 +784,11 @@ echo echo "После перезагрузки:" echo echo " 1. $USER_NAME будет автоматически авторизован на tty1." -echo " 2. LabWC запустится через dbus-run-session." -echo " 3. Waybar, Mako и NetworkManager applet запустятся автоматически." -echo " 4. PipeWire и WirePlumber будут запущены в пользовательской сессии." -echo " 5. zenith-cli будет доступен как:" +echo " 2. seatd будет запущен OpenRC." +echo " 3. LabWC запустится через dbus-run-session." +echo " 4. Waybar, Mako и NetworkManager applet запустятся автоматически." +echo " 5. PipeWire и WirePlumber будут запущены в пользовательской сессии." +echo " 6. zenith-cli будет доступен как:" echo echo " zenith-cli" echo