Files
labwc-alpine/alpine_install.sh
T

382 lines
8.8 KiB
Bash
Raw Normal View History

2026-09-06 02:04:47 +06:00
#!/bin/sh
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 02:04:47 +06:00
# LabWC Alpine Setup Script
2026-09-06 14:29:46 +06:00
# Version 9
2026-09-06 02:04:47 +06:00
#
2026-09-06 14:24:56 +06:00
# Запуск:
2026-09-06 02:04:47 +06:00
#
# ./setup.sh
2026-09-06 14:24:56 +06:00
# ./setup.sh ivan
2026-09-06 02:04:47 +06:00
#
2026-09-06 14:24:56 +06:00
# Можно запускать:
# - от root
# - от обычного пользователя
2026-09-06 02:04:47 +06:00
#
2026-09-06 14:24:56 +06:00
# Если запущено не от root, скрипт автоматически использует sudo.
2026-09-06 14:29:46 +06:00
#
# ВАЖНО:
# - mesa-dri НЕ используется
# - networkmanager-applet НЕ является обязательным
# - xdg-desktop-portal-gtk НЕ является обязательным
# - seatd != группа seat
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 02:04:47 +06:00
set -eu
2026-09-06 14:24:56 +06:00
# ============================================================
# 0. Параметры
# ============================================================
2026-09-06 02:04:47 +06:00
USER_NAME="${1:-ivan}"
2026-09-06 14:24:56 +06:00
2026-09-06 02:04:47 +06:00
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"
2026-09-06 14:29:46 +06:00
# ============================================================
# 1. Определяем абсолютный путь к самому скрипту
# ============================================================
case "$0" in
/*)
SCRIPT_PATH="$0"
;;
*)
SCRIPT_PATH="$(pwd)/$0"
;;
esac
2026-09-06 02:04:47 +06:00
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 14:29:46 +06:00
# 2. Проверка имени пользователя
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 02:04:47 +06:00
case "$USER_NAME" in
""|*[!a-zA-Z0-9_-]*)
echo "[!] Некорректное имя пользователя: $USER_NAME"
exit 1
;;
esac
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 14:29:46 +06:00
# 3. Автоматический переход в root
2026-09-06 14:24:56 +06:00
# ============================================================
if [ "$(id -u)" -ne 0 ]; then
2026-09-06 14:29:46 +06:00
echo
2026-09-06 14:24:56 +06:00
echo "=================================================="
2026-09-06 14:29:46 +06:00
echo "[*] Скрипт запущен от: $(id -un)"
2026-09-06 14:24:56 +06:00
echo "[*] Требуются root-права."
echo "=================================================="
2026-09-06 14:29:46 +06:00
echo
2026-09-06 14:24:56 +06:00
if ! command -v sudo >/dev/null 2>&1; then
2026-09-06 14:29:46 +06:00
2026-09-06 14:24:56 +06:00
echo "[!] sudo не установлен."
echo
echo "[!] Один раз выполните от root:"
echo
echo " apk add sudo"
echo
2026-09-06 14:29:46 +06:00
echo "[!] После этого снова:"
echo
echo " ./setup.sh"
echo
2026-09-06 14:24:56 +06:00
exit 1
fi
echo "[*] Перезапуск через sudo..."
2026-09-06 14:29:46 +06:00
echo
2026-09-06 14:24:56 +06:00
exec sudo "$SCRIPT_PATH" "$@"
fi
# ============================================================
2026-09-06 14:29:46 +06:00
# 4. Root
2026-09-06 14:24:56 +06:00
# ============================================================
echo
echo "=================================================="
2026-09-06 14:29:46 +06:00
echo " LabWC Alpine Setup - Version 9"
2026-09-06 14:24:56 +06:00
echo "=================================================="
2026-09-06 14:29:46 +06:00
echo
2026-09-06 14:24:56 +06:00
echo "[*] Root: OK"
echo "[*] User: $USER_NAME"
echo "[*] Home: $HOME_DIR"
echo
# ============================================================
2026-09-06 14:29:46 +06:00
# 5. Проверка Alpine
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
if [ ! -f /etc/alpine-release ]; then
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[!] Это не похоже на Alpine Linux."
echo "[!] /etc/alpine-release не найден."
2026-09-06 02:04:47 +06:00
2026-09-06 14:24:56 +06:00
exit 1
2026-09-06 02:04:47 +06:00
fi
2026-09-06 14:29:46 +06:00
ALPINE_VERSION="$(cat /etc/alpine-release)"
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[*] Alpine: $ALPINE_VERSION"
2026-09-06 02:04:47 +06:00
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 14:29:46 +06:00
# 6. Проверка repositories
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
if [ ! -f /etc/apk/repositories ]; then
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[!] /etc/apk/repositories не найден."
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
exit 1
2026-09-06 02:04:47 +06:00
fi
2026-09-06 14:24:56 +06:00
echo
2026-09-06 14:29:46 +06:00
echo "[*] Проверка repositories..."
2026-09-06 14:21:26 +06:00
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 14:29:46 +06:00
# 7. Функции
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
package_exists() {
PACKAGE="$1"
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
apk search -x "$PACKAGE" 2>/dev/null |
grep -Eq "^${PACKAGE}(-[0-9].*)?$"
}
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
install_required() {
PACKAGE="$1"
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo
echo "[*] Обязательный пакет: $PACKAGE"
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
if apk info -e "$PACKAGE" >/dev/null 2>&1; then
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[+] $PACKAGE уже установлен."
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
return 0
2026-09-06 02:04:47 +06:00
fi
2026-09-06 14:24:56 +06:00
2026-09-06 14:29:46 +06:00
if ! package_exists "$PACKAGE"; then
2026-09-06 14:21:26 +06:00
2026-09-06 14:29:46 +06:00
echo
echo "[!!!] ОШИБКА"
echo "[!!!] Пакет '$PACKAGE' отсутствует."
echo
echo "[!] Alpine: $ALPINE_VERSION"
echo
echo "[!] Репозитории:"
cat /etc/apk/repositories
echo
2026-09-06 14:21:26 +06:00
2026-09-06 14:29:46 +06:00
exit 1
2026-09-06 14:21:26 +06:00
2026-09-06 14:29:46 +06:00
fi
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
apk add "$PACKAGE"
}
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
install_optional() {
PACKAGE="$1"
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo
echo "[*] Необязательный пакет: $PACKAGE"
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
if apk info -e "$PACKAGE" >/dev/null 2>&1; then
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[+] $PACKAGE уже установлен."
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
return 0
2026-09-06 02:04:47 +06:00
2026-09-06 14:24:56 +06:00
fi
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
if package_exists "$PACKAGE"; then
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
apk add "$PACKAGE"
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[+] $PACKAGE установлен."
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
else
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[!] $PACKAGE отсутствует в текущих репозиториях."
echo "[!] Пропуск."
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
fi
}
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
add_user_group() {
GROUP_NAME="$1"
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
if ! getent group "$GROUP_NAME" >/dev/null 2>&1; then
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[!] Группа '$GROUP_NAME' отсутствует."
echo "[!] Пропуск."
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
return 0
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
fi
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
if id -nG "$USER_NAME" 2>/dev/null |
tr ' ' '\n' |
grep -qx "$GROUP_NAME"
then
2026-09-06 14:24:56 +06:00
2026-09-06 14:29:46 +06:00
echo "[+] $USER_NAME уже состоит в группе $GROUP_NAME."
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
else
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[*] Добавление $USER_NAME в группу $GROUP_NAME..."
2026-09-06 14:24:56 +06:00
2026-09-06 14:29:46 +06:00
addgroup "$USER_NAME" "$GROUP_NAME"
2026-09-06 14:24:56 +06:00
2026-09-06 14:29:46 +06:00
echo "[+] $USER_NAME добавлен в $GROUP_NAME."
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
fi
}
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
enable_service() {
SERVICE="$1"
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo
echo "[*] Настройка службы: $SERVICE"
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
if ! command -v rc-service >/dev/null 2>&1; then
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[!] rc-service отсутствует."
echo "[!] Пропуск."
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
return 0
2026-09-06 02:04:47 +06:00
fi
2026-09-06 14:29:46 +06:00
if rc-service "$SERVICE" status >/dev/null 2>&1; then
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[+] $SERVICE уже запущен."
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
else
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[*] Запуск $SERVICE..."
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
rc-service "$SERVICE" start 2>/dev/null || {
echo "[!] Не удалось запустить $SERVICE сейчас."
echo "[!] Продолжаем."
}
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
fi
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
rc-update add "$SERVICE" default 2>/dev/null || {
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[!] Не удалось добавить $SERVICE в default."
echo "[!] Продолжаем."
2026-09-06 14:21:26 +06:00
2026-09-06 14:29:46 +06:00
}
2026-09-06 14:21:26 +06:00
2026-09-06 14:29:46 +06:00
}
2026-09-06 14:21:26 +06:00
2026-09-06 14:24:56 +06:00
2026-09-06 14:29:46 +06:00
check_command() {
NAME="$1"
COMMAND="$2"
2026-09-06 14:21:26 +06:00
2026-09-06 14:29:46 +06:00
printf '%-25s' "$NAME:"
2026-09-06 14:21:26 +06:00
2026-09-06 14:29:46 +06:00
if command -v "$COMMAND" >/dev/null 2>&1; then
echo "OK"
else
echo "ERROR"
fi
}
2026-09-06 14:21:26 +06:00
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 14:29:46 +06:00
# 8. Community
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 02:04:47 +06:00
2026-09-06 14:24:56 +06:00
echo
2026-09-06 14:29:46 +06:00
echo "=================================================="
echo "[*] Проверка community"
echo "=================================================="
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
if grep -qE '^[[:space:]]*[^#[:space:]].*/community/?[[:space:]]*$' \
/etc/apk/repositories
then
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[+] community уже включён."
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
elif grep -qE '^[[:space:]]*#.*\/community/?[[:space:]]*$' \
/etc/apk/repositories
then
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[*] Раскомментирование community..."
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
sed -i \
's|^[[:space:]]*#\(.*\/community/?[[:space:]]*\)$|\1|' \
/etc/apk/repositories
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
echo "[+] community включён."
2026-09-06 02:04:47 +06:00
else
2026-09-06 14:29:46 +06:00
echo "[!] Репозиторий community не найден."
echo
echo "[!] Текущий /etc/apk/repositories:"
echo
cat /etc/apk/repositories
echo
exit 1
2026-09-06 02:04:47 +06:00
fi
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 14:29:46 +06:00
# 9. APK update
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 02:04:47 +06:00
2026-09-06 14:24:56 +06:00
echo
2026-09-06 14:29:46 +06:00
echo "=================================================="
echo "[*] Обновление APK"
echo "=================================================="
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
apk update
2026-09-06 02:04:47 +06:00
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 14:29:46 +06:00
# 10. Базовые инструменты
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 02:04:47 +06:00
2026-09-06 14:24:56 +06:00
echo
2026-09-06 14:29:46 +06:00
echo "=================================================="
echo "[*] Базовые инструменты"
echo "=================================================="
2026-09-06 02:04:47 +06:00
2026-09-06 14:29:46 +06:00
install_required sudo
install_required nano
install_required git
install_required bash
install_required build-base
2026-09-06 02:04:47 +06:00
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 14:29:46 +06:00
# 11. Пользователь
2026-09-06 14:24:56 +06:00
# ============================================================
2026-09-06 14:21:26 +06:00
echo
echo "=================================================="
2026-09-06 14:29:46 +06:00
echo "[*] Пользователь $USER_NAME"
2026-09-06 14:21:26 +06:00
echo "=================================================="
2026-09-06 14:29:46 +06:00
if id "$USER_NAME" >/dev/null 2>&1 then
:
2026-09-06 02:04:47 +06:00
fi