diff --git a/alphine b/alphine new file mode 100644 index 0000000..3a27b7c --- /dev/null +++ b/alphine @@ -0,0 +1,132 @@ +#install guide labwc configure by s13bby + + +#after install needed + +#uncomment community repos +echo "http://dl-cdn.alpinelinux.org/alpine/v3.24/community" >> /etc/apk/repositories + +#or + +#sed -i 's/#\(.*community\)/\1/' /etc/apk/repositories + +apk update +apk add sudo nano +adduser ivan wheel +nano /etc/sudoers + +#and uncomment line %wheel ALL=(ALL) ALL + + +#first needed packages + +sudo +nano +git + +#after install this packages + +#clone repo ; change directory to clone repo ; add executable flag to install.sh ; execute install.sh +git clone https://zenithcode.duckdns.org/s13bby/labwc-alpine ; cd labwc-alpine ; chmod +x install.sh ; ./install.sh + +#install.sh include all stuff write bellow + + +#install this packages +gcc +g++ +curl +libcurl +opencv + +#prepare before install wayland stack + +#install this packages + +mesa +mesa-dri +libinput +seatd +dbus +polkit + +#after install do + +addgroup $USER video +addgroup $USER input +addgroup $USER seat + +rc-update add seatd default +rc-service seatd start + +#after install this packages + +labwc +alacritty (or another terminal emulator what do u like) +waybar +mako +swaybg +wofi +font-noto +font-dejavu +wl-clipboard +xdg-desktop-portal +xdg-desktop-portal-gtk +pipewire +wireplumber +alsa-utils +networkmanager +nm-applet +pcmanfm-gtk3 +firefox +swaylock + + +#enviroment config labwc +# +#XDG_CURRENT_DESKTOP=labwc +#XDG_SESSION_TYPE=wayland +#MOZ_ENABLE_WAYLAND=1 +#QT_QPA_PLATFORM=wayland +#SDL_VIDEODRIVER=wayland + + +#autostart config labwc +# +#nm-applet & +#waybar & +#wireplumber & +#pipewire & +#wofi & + +#clone repo ; change directory to clone repo ; add executable flag to build.sh ; execute build.sh +git clone https://zenithcode.duckdns.org/s13bby/zenith-cli.git ; cd zenith-cli/ ; chmod +x build.sh ; ./build.sh + +mkdir -p ~/.local/bin ; cp zenith-cli ~/.local/bin/ ; chmod +x ~/.local/bin/zenith-cli + +echo $PATH | grep -o ".local/bin" + +#if output in none, do + +#export PATH="$HOME/.local/bin:$PATH" + + +#add automatic start labwc + +nano /etc/inittab + +#find line +#tty1::respawn:/sbin/getty 38400 tty1 + +#change to, where "username" is ur username +#tty1::respawn:/bin/sh -c "while true; do /sbin/getty -a username 38400 tty1; done" + + +nano ~/.profile + +#and write this + +if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then + exec labwc +fi + diff --git a/alpine_install.sh b/alpine_install.sh new file mode 100644 index 0000000..e4c8357 --- /dev/null +++ b/alpine_install.sh @@ -0,0 +1,674 @@ +#!/bin/sh +# LabWC Alpine Setup Script +# Version 5 +# +# Запускать от имени root! +# +# Использование: +# ./setup.sh +# ./setup.sh username +# +# Скрипт устанавливает: +# - LabWC + Wayland +# - Waybar / Mako / Wofi +# - PipeWire + WirePlumber +# - NetworkManager +# - Firefox +# - zenith-cli +# - автоматический вход на tty1 +# - автоматический запуск LabWC +# +# ВАЖНО: +# zenith-cli использует build.sh на Bash, +# поэтому bash устанавливается явно. + +set -eu + +# -------------------------------------------------- +# 0. Основные параметры +# -------------------------------------------------- + +USER_NAME="${1:-ivan}" +HOME_DIR="/home/$USER_NAME" +PROFILE="$HOME_DIR/.profile" + +ZENITH_REPO="https://zenithcode.duckdns.org/s13bby/zenith-cli.git" +ZENITH_DIR="$HOME_DIR/zenith-cli" +LOCAL_BIN="$HOME_DIR/.local/bin" + +echo "==================================================" +echo "[*] LabWC Alpine Setup" +echo "==================================================" +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_-]*) + echo "[!] Некорректное имя пользователя: $USER_NAME" + exit 1 + ;; +esac + +# -------------------------------------------------- +# 3. Проверка существования /etc/apk/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 + echo "[+] $USER_NAME уже состоит в группе $GROUP_NAME." + else + echo "[*] Добавление $USER_NAME в группу $GROUP_NAME..." + addgroup "$USER_NAME" "$GROUP_NAME" + fi +} + +enable_service() { + SERVICE="$1" + + echo "[*] Включение службы $SERVICE..." + + rc-update add "$SERVICE" default 2>/dev/null || true + + if rc-service "$SERVICE" status >/dev/null 2>&1; then + echo "[+] $SERVICE уже запущен." + else + echo "[*] Запуск $SERVICE..." + rc-service "$SERVICE" start 2>/dev/null || true + fi +} + +# -------------------------------------------------- +# 5. Репозитории +# -------------------------------------------------- + +echo "[*] Проверка репозитория community..." + +if ! grep -qE '^[[:space:]]*[^#[:space:]].*/community/?[[:space:]]*$' \ + /etc/apk/repositories +then + + if grep -qE '^[[:space:]]*#.*\/community/?[[:space:]]*$' \ + /etc/apk/repositories + then + + echo "[*] Раскомментирование community..." + + sed -i \ + 's|^[[:space:]]*#\(.*\/community/?[[:space:]]*\)$|\1|' \ + /etc/apk/repositories + + else + + echo "[!] Репозиторий community не найден." + echo "[!] Добавьте community в /etc/apk/repositories." + exit 1 + + fi +fi + +echo "[*] Обновление индекса пакетов..." + +apk update + +# -------------------------------------------------- +# 6. Базовые инструменты +# -------------------------------------------------- + +echo "[*] Установка базовых инструментов..." + +apk add \ + sudo \ + nano \ + git \ + bash \ + build-base + +# -------------------------------------------------- +# 7. Пользователь +# -------------------------------------------------- + +echo "[*] Настройка пользователя $USER_NAME..." + +if id "$USER_NAME" >/dev/null 2>&1; then + + echo "[+] Пользователь $USER_NAME уже существует." + +else + + echo "[*] Создание пользователя $USER_NAME..." + + adduser -D "$USER_NAME" + + echo + echo "[!] Сейчас необходимо задать пароль пользователя $USER_NAME." + passwd "$USER_NAME" + echo + +fi + +# -------------------------------------------------- +# 8. Группы +# -------------------------------------------------- + +echo "[*] Настройка групп пользователя..." + +add_user_group wheel +add_user_group seat + +# При использовании seatd отдельные группы video/input +# обычно не требуются. +# +# При необходимости их можно добавить: +# +# add_user_group video +# add_user_group input + +# -------------------------------------------------- +# 9. Sudo +# -------------------------------------------------- + +echo "[*] Настройка sudo..." + +if [ -d /etc/sudoers.d ] && + grep -qE '^[[:space:]]*#?[[:space:]]*includedir[[:space:]]+/etc/sudoers\.d' \ + /etc/sudoers +then + + echo "[+] Используется /etc/sudoers.d." + + cat > /etc/sudoers.d/wheel << 'EOF' +%wheel ALL=(ALL) ALL +EOF + + chmod 440 /etc/sudoers.d/wheel + +else + + echo "[*] sudoers.d не подключен." + + if grep -qE '^%wheel[[:space:]]+ALL=\(ALL\)[[:space:]]+ALL' \ + /etc/sudoers + then + + echo "[+] Правило wheel уже существует." + + elif grep -qE '^#[[:space:]]*%wheel[[:space:]]+ALL=\(ALL\)[[:space:]]+ALL' \ + /etc/sudoers + then + + sed -i \ + 's/^#[[:space:]]*\(%wheel[[:space:]]*ALL=(ALL)[[:space:]]*ALL\)/\1/' \ + /etc/sudoers + + else + + echo '%wheel ALL=(ALL) ALL' >> /etc/sudoers + + 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 "[*] Установка рабочего окружения..." + +apk add \ + labwc \ + alacritty \ + waybar \ + mako \ + swaybg \ + wofi \ + font-noto \ + font-dejavu \ + wl-clipboard \ + xdg-desktop-portal \ + xdg-desktop-portal-gtk \ + pipewire \ + wireplumber \ + alsa-utils \ + networkmanager \ + networkmanager-applet \ + pcmanfm \ + firefox \ + swaylock + +# -------------------------------------------------- +# 13. OpenRC +# -------------------------------------------------- + +echo "[*] Настройка системных служб..." + +enable_service seatd +enable_service dbus +enable_service networkmanager + +# -------------------------------------------------- +# 14. Конфигурация LabWC +# -------------------------------------------------- + +echo "[*] Создание конфигурации LabWC..." + +mkdir -p "$HOME_DIR/.config/labwc" + +cat > "$HOME_DIR/.config/labwc/environment" << 'EOF' +XDG_CURRENT_DESKTOP=labwc +XDG_SESSION_DESKTOP=labwc +XDG_SESSION_TYPE=wayland + +MOZ_ENABLE_WAYLAND=1 +QT_QPA_PLATFORM=wayland +SDL_VIDEODRIVER=wayland +EOF + +cat > "$HOME_DIR/.config/labwc/autostart" << 'EOF' +#!/bin/sh + +# -------------------------------------------------- +# NetworkManager applet +# -------------------------------------------------- + +nm-applet & + +# -------------------------------------------------- +# Waybar +# -------------------------------------------------- + +waybar & + +# -------------------------------------------------- +# Notification daemon +# -------------------------------------------------- + +mako & + +# -------------------------------------------------- +# 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 \ + -i /usr/share/backgrounds/alpine/alpine-wallpaper.png \ + -m fill & +fi +EOF + +chmod +x "$HOME_DIR/.config/labwc/autostart" + +# -------------------------------------------------- +# 15. zenith-cli +# -------------------------------------------------- + +echo "[*] Установка zenith-cli..." + +if [ -d "$ZENITH_DIR/.git" ]; then + + echo "[*] Репозиторий zenith-cli уже существует." + + su - "$USER_NAME" -c " + set -eu + cd '$ZENITH_DIR' + git pull --ff-only + " + +else + + echo "[*] Клонирование zenith-cli..." + + su - "$USER_NAME" -c " + set -eu + git clone '$ZENITH_REPO' '$ZENITH_DIR' + " + +fi + +# -------------------------------------------------- +# 16. Проверка build.sh +# -------------------------------------------------- + +echo "[*] Проверка build.sh..." + +if [ ! -f "$ZENITH_DIR/build.sh" ]; then + echo "[!] build.sh не найден:" + echo " $ZENITH_DIR/build.sh" + exit 1 +fi + +# -------------------------------------------------- +# 17. Проверка CMakeLists.txt +# -------------------------------------------------- + +echo "[*] Проверка CMakeLists.txt..." + +if [ ! -f "$ZENITH_DIR/CMakeLists.txt" ]; then + echo "[!] CMakeLists.txt не найден:" + echo " $ZENITH_DIR/CMakeLists.txt" + exit 1 +fi + +# -------------------------------------------------- +# 18. Сборка zenith-cli +# -------------------------------------------------- + +echo "[*] Сборка zenith-cli..." + +su - "$USER_NAME" -c " + set -eu + + cd '$ZENITH_DIR' + + chmod +x build.sh + + echo '[*] Запуск build.sh...' + ./build.sh + + echo '[*] Проверка результата сборки...' + + if [ ! -f './zenith-cli' ]; then + echo '[!] ./zenith-cli не найден после сборки.' + exit 1 + fi + + if [ ! -x './zenith-cli' ]; then + chmod +x './zenith-cli' + fi + + mkdir -p '$LOCAL_BIN' + + cp './zenith-cli' '$LOCAL_BIN/zenith-cli' + + chmod +x '$LOCAL_BIN/zenith-cli' + + echo '[+] zenith-cli успешно собран.' + echo '[+] Установлен в: $LOCAL_BIN/zenith-cli' +" + +# -------------------------------------------------- +# 19. Проверка бинарника zenith-cli +# -------------------------------------------------- + +echo "[*] Проверка zenith-cli..." + +if [ ! -x "$LOCAL_BIN/zenith-cli" ]; then + echo "[!] Бинарник zenith-cli не установлен." + exit 1 +fi + +# -------------------------------------------------- +# 20. PATH +# -------------------------------------------------- + +echo "[*] Настройка PATH..." + +touch "$PROFILE" + +if ! grep -qF 'export PATH="$HOME/.local/bin:$PATH"' "$PROFILE"; then + + cat >> "$PROFILE" << 'EOF' + +# User local binaries +export PATH="$HOME/.local/bin:$PATH" +EOF + +fi + +# -------------------------------------------------- +# 21. Автологин tty1 +# -------------------------------------------------- + +echo "[*] Настройка автоматического входа..." + +if [ -f /etc/inittab ]; then + + if [ ! -f /etc/inittab.bak ]; then + echo "[*] Создание резервной копии /etc/inittab..." + cp /etc/inittab /etc/inittab.bak + fi + + if grep -q '^tty1::respawn:/sbin/getty' /etc/inittab; then + + sed -i \ + "s|^tty1::respawn:/sbin/getty.*|tty1::respawn:/sbin/getty -a $USER_NAME 38400 tty1|" \ + /etc/inittab + + elif ! grep -q '^tty1::respawn:' /etc/inittab; then + + echo "[*] Добавление tty1..." + + echo \ + "tty1::respawn:/sbin/getty -a $USER_NAME 38400 tty1" \ + >> /etc/inittab + + fi + +else + + echo "[!] /etc/inittab не найден." + echo "[!] Автологин не настроен." + +fi + +# -------------------------------------------------- +# 22. Автозапуск LabWC +# -------------------------------------------------- + +echo "[*] Настройка запуска LabWC..." + +if ! grep -qF '# LABWC-AUTOSTART' "$PROFILE"; then + + cat >> "$PROFILE" << 'EOF' + +# LABWC-AUTOSTART +# +# Запуск LabWC только на tty1. +# +# dbus-run-session создаёт отдельную D-Bus session bus +# для графической сессии. +# +if [ "$(tty 2>/dev/null)" = "/dev/tty1" ] && + [ -z "${WAYLAND_DISPLAY:-}" ]; then + + exec dbus-run-session -- labwc + +fi +EOF + +fi + +# -------------------------------------------------- +# 23. Права +# -------------------------------------------------- + +echo "[*] Настройка владельцев файлов..." + +chown -R "$USER_NAME:$USER_NAME" "$HOME_DIR/.config" + +chown "$USER_NAME:$USER_NAME" "$PROFILE" + +if [ -d "$HOME_DIR/.local" ]; then + chown -R "$USER_NAME:$USER_NAME" "$HOME_DIR/.local" +fi + +if [ -d "$ZENITH_DIR" ]; then + chown -R "$USER_NAME:$USER_NAME" "$ZENITH_DIR" +fi + +# -------------------------------------------------- +# 24. Финальная проверка +# -------------------------------------------------- + +echo +echo "==================================================" +echo "[*] Финальная проверка" +echo "==================================================" + +printf '%-20s' "LabWC:" +if command -v labwc >/dev/null 2>&1; then + echo "OK" +else + echo "ERROR" +fi + +printf '%-20s' "Waybar:" +if command -v waybar >/dev/null 2>&1; then + echo "OK" +else + echo "ERROR" +fi + +printf '%-20s' "PipeWire:" +if command -v pipewire >/dev/null 2>&1; then + echo "OK" +else + echo "ERROR" +fi + +printf '%-20s' "WirePlumber:" +if command -v wireplumber >/dev/null 2>&1; then + echo "OK" +else + echo "ERROR" +fi + +printf '%-20s' "NetworkManager:" +if command -v nmcli >/dev/null 2>&1; then + echo "OK" +else + echo "ERROR" +fi + +printf '%-20s' "D-Bus session:" +if command -v dbus-run-session >/dev/null 2>&1; then + echo "OK" +else + echo "ERROR" +fi + +printf '%-20s' "Bash:" +if command -v bash >/dev/null 2>&1; then + echo "OK" +else + echo "ERROR" +fi + +printf '%-20s' "CMake:" +if command -v cmake >/dev/null 2>&1; then + echo "OK" +else + echo "ERROR" +fi + +printf '%-20s' "OpenCV:" +if apk info -e opencv-dev >/dev/null 2>&1; then + echo "OK" +else + echo "ERROR" +fi + +printf '%-20s' "zenith-cli:" +if [ -x "$LOCAL_BIN/zenith-cli" ]; then + echo "OK" +else + echo "ERROR" +fi + +echo +echo "==================================================" +echo "[+] Установка завершена." +echo "==================================================" +echo +echo "[!] Следующий шаг:" +echo +echo " reboot" +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 +echo " zenith-cli" +echo +echo "=================================================="