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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user