/
arch_linux
/
postinstall
Обзор
Документация
Войти
/
arch_linux
/
postinstall
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
scripts/common.sh
223 строки
7 KB
arch_linux
upload files
22 ноя 2025, 09:19
22 ноя 2025, 09:19
a4711e8
Код
Авторство
О чём код?
#!/bin/bash # Общие функции и переменные для всех скриптов # Цвета для вывода RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' NC='\033[0m' # No Color # Общие переменные (значения по умолчанию) AUDIO_SYSTEM="" AUDIO_SYSTEM_SELECTED=false RESOLVE_CONFLICTS="ask" INSTALL_GRAPHICAL=false DESKTOP_ENVIRONMENT="" SUDO_USER="" GPU_VENDOR="" GPU_TYPE="" CPU_VENDOR="" CPU_ARCH="" # Массивы для отслеживания установки INSTALLED_PACKAGES=() MISSING_PACKAGES=() SKIPPED_PACKAGES=() CONFLICT_RESOLUTIONS=() # Функции для вывода print_info() { echo -e "${GREEN}[INFO]${NC} $1"; } print_success() { echo -e "${PURPLE}[SUCCESS]${NC} $1"; } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; } print_error() { echo -e "${RED}[ERROR]${NC} $1"; } print_header() { echo -e "${GREEN}$1${NC}"; } print_subheader() { echo -e "${CYAN}$1${NC}"; } # Сохранение состояния переменных save_state() { local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" local state_file="$script_dir/state.vars" # Создаем файл с правильными путями cat > "$state_file" << EOF AUDIO_SYSTEM="$AUDIO_SYSTEM" INSTALL_GRAPHICAL="$INSTALL_GRAPHICAL" DESKTOP_ENVIRONMENT="$DESKTOP_ENVIRONMENT" SUDO_USER="$SUDO_USER" GPU_VENDOR="$GPU_VENDOR" GPU_TYPE="$GPU_TYPE" CPU_VENDOR="$CPU_VENDOR" CPU_ARCH="$CPU_ARCH" EOF print_success "Состояние сохранено в: $state_file" } # Загрузка состояния переменных load_state() { local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" local state_file="$script_dir/state.vars" if [ -f "$state_file" ]; then source "$state_file" print_success "Состояние загружено из: $state_file" print_info "Текущие настройки:" echo " Аудио: $AUDIO_SYSTEM" echo " Графика: $INSTALL_GRAPHICAL" echo " Окружение: $DESKTOP_ENVIRONMENT" echo " Пользователь: $SUDO_USER" else print_warning "Файл состояния не найден: $state_file" print_info "Будут использованы значения по умолчанию" fi } # Определение пользователя detect_user() { if [ -n "$SUDO_USER" ]; then return 0 fi if [ -n "$USER" ] && [ "$USER" != "root" ]; then SUDO_USER="$USER" else local logged_user=$(who | awk '{print $1}' | grep -v root | head -n1) if [ -n "$logged_user" ]; then SUDO_USER="$logged_user" else local home_user=$(ls /home | head -n1) if [ -n "$home_user" ]; then SUDO_USER="$home_user" else print_error "Не удалось определить не-root пользователя" exit 1 fi fi fi print_success "Определен пользователь: $SUDO_USER" } # Определение процессора detect_cpu() { print_info "Определение процессора..." if grep -q "GenuineIntel" /proc/cpuinfo; then CPU_VENDOR="intel" print_success "Обнаружен процессор Intel" elif grep -q "AuthenticAMD" /proc/cpuinfo; then CPU_VENDOR="amd" print_success "Обнаружен процессор AMD" else CPU_VENDOR="unknown" print_warning "Не удалось определить производителя процессора" fi if uname -m | grep -q "x86_64"; then CPU_ARCH="x64" elif uname -m | grep -q "aarch64"; then CPU_ARCH="arm64" else CPU_ARCH="unknown" fi print_info "Архитектура: $CPU_ARCH" } # Определение видеокарты detect_gpu() { print_info "Определение видеокарты..." if lspci | grep -i "VGA" | grep -qi "nvidia"; then GPU_VENDOR="nvidia" GPU_TYPE="dedicated" print_success "Обнаружена видеокарта NVIDIA" elif lspci | grep -i "VGA" | grep -qi "amd"; then GPU_VENDOR="amd" GPU_TYPE="dedicated" print_success "Обнаружена видеокарта AMD" elif lspci | grep -i "VGA" | grep -qi "intel"; then GPU_VENDOR="intel" GPU_TYPE="integrated" print_success "Обнаружена интегрированная графика Intel" elif lspci | grep -i "VGA" | grep -qi "radeon"; then GPU_VENDOR="amd" GPU_TYPE="dedicated" print_success "Обнаружена видеокарта AMD Radeon" else if command -v glxinfo &>/dev/null && glxinfo 2>/dev/null | grep -qi "nvidia"; then GPU_VENDOR="nvidia" GPU_TYPE="dedicated" print_success "Обнаружена видеокарта NVIDIA (через glxinfo)" elif [ -f /sys/class/drm/card0/device/vendor ]; then local vendor_id=$(cat /sys/class/drm/card0/device/vendor 2>/dev/null | cut -d 'x' -f2) case $vendor_id in "10de") GPU_VENDOR="nvidia"; GPU_TYPE="dedicated" ;; "1002") GPU_VENDOR="amd"; GPU_TYPE="dedicated" ;; "8086") GPU_VENDOR="intel"; GPU_TYPE="integrated" ;; *) GPU_VENDOR="unknown"; GPU_TYPE="unknown" ;; esac else GPU_VENDOR="unknown" GPU_TYPE="unknown" print_warning "Не удалось определить видеокарту" fi fi } # Проверка установки пакета check_package() { local package=$1 if pacman -Qi "$package" &> /dev/null || pacman -Qg "$package" &> /dev/null; then return 0 else return 1 fi } # Проверка установки команды check_command() { local command=$1 if command -v "$command" &> /dev/null; then return 0 else return 1 fi } # Проверка AUR пакета check_aur_package() { local package=$1 if command -v paru &> /dev/null && paru -Qi "$package" &> /dev/null; then return 0 else return 1 fi } # Функция установки с проверкой install_with_check() { local package_name=$1 local install_command=$2 local check_command=$3 if eval "$check_command"; then print_success "$package_name уже установлен" SKIPPED_PACKAGES+=("$package_name") return 0 else print_info "Установка $package_name..." if eval "$install_command"; then print_success "$package_name установлен" INSTALLED_PACKAGES+=("$package_name") return 0 else print_error "Ошибка установки $package_name" MISSING_PACKAGES+=("$package_name") return 1 fi fi }