one update
This commit is contained in:
@@ -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
|
#!/bin/sh
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user