update script

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