one update

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