#!

/bin/bash
# =============================================
# КОМПЛЕКСНЫЙ СКРИПТ УСТАНОВКИ И ТЕСТИРОВАНИЯ ДРАЙВЕРОВ
# Версия 2.1 | Система мониторинга и симуляции
# =============================================
# Конфигурационные переменные
LOG_FILE="/var/log/driver_installation.log"
BACKUP_DIR="/opt/driver_backups"
TEST_ITERATIONS=500
SIMULATION_TIMEOUT=300
SYSTEM_INFO_FILE="/opt/system_report.txt"
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Функция логирования
log_message() {
echo -e "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
# Функция проверки ошибок
check_error() {
if [ $? -ne 0 ]; then
log_message "${RED}ОШИБКА: $1${NC}"
exit 1
fi
}
# Функция создания резервной копии драйверов
create_backup() {
log_message "${BLUE}Создание резервной копии драйверов...${NC}"
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/drivers_backup_$(date +%Y%m%d_%H%M%S).tar.gz" \
/lib/modules/$(uname -r)/kernel/drivers \
/etc/modprobe.d \
/etc/modules-load.d 2>/dev/null
log_message "${GREEN}Резервная копия создана в $BACKUP_DIR${NC}"
}
# Функция сбора системной информации
collect_system_info() {
log_message "${BLUE}Сбор информации о системе...${NC}"
echo "=== СИСТЕМНЫЙ ОТЧЕТ ===" > "$SYSTEM_INFO_FILE"
echo "Дата: $(date)" >> "$SYSTEM_INFO_FILE"
echo "Пользователь: $(whoami)" >> "$SYSTEM_INFO_FILE"
echo "ОС: $(lsb_release -d | cut -f2)" >> "$SYSTEM_INFO_FILE"
echo "Ядро: $(uname -r)" >> "$SYSTEM_INFO_FILE"
echo "Архитектура: $(uname -m)" >> "$SYSTEM_INFO_FILE"
echo "Процессор: $(grep "model name" /proc/cpuinfo | head -1 | cut -d: -f2 | xargs)" >> "$SYSTEM_INFO_FILE"
echo "Память: $(free -h | grep Mem | awk '{print $2}')" >> "$SYSTEM_INFO_FILE"
# Информация о графической системе
echo "=== ГРАФИЧЕСКАЯ СИСТЕМА ===" >> "$SYSTEM_INFO_FILE"
if command -v lspci >/dev/null; then
lspci | grep -i vga >> "$SYSTEM_INFO_FILE"
fi
# Информация о сетевых интерфейсах
echo "=== СЕТЕВЫЕ ИНТЕРФЕЙСЫ ===" >> "$SYSTEM_INFO_FILE"
ip -brief address >> "$SYSTEM_INFO_FILE"
log_message "${GREEN}Системная информация сохранена в $SYSTEM_INFO_FILE${NC}"
}
# Функция установки драйверов
install_drivers() {
log_message "${BLUE}Начало установки драйверов...${NC}"
# Обновление списка пакетов
apt-get update >> "$LOG_FILE" 2>&1
check_error "Не удалось обновить список пакетов"
# Установка основных драйверов
local drivers_to_install=""
# Определение необходимых драйверов на основе оборудования
if lspci | grep -i "nvidia" >/dev/null; then
drivers_to_install="$drivers_to_install nvidia-driver nvidia-settings"
fi
if lspci | grep -i "amd" >/dev/null; then
drivers_to_install="$drivers_to_install firmware-amd-graphics"
fi
if lspci | grep -i "intel" >/dev/null; then
drivers_to_install="$drivers_to_install intel-microcode i915-udev"
fi
# Базовые драйверы
drivers_to_install="$drivers_toinstall mesa-utils firmware-linux firmware-linux-nonfree"
# Установка драйверов
if [ -n "$drivers_to_install" ]; then
log_message "${BLUE}Установка драйверов: $drivers_to_install${NC}"
apt-get install -y $drivers_to_install >> "$LOG_FILE" 2>&1
check_error "Не удалось установить драйверы"
fi
# Обновление initramfs
update-initramfs -u >> "$LOG_FILE" 2>&1
check_error "Не удалось обновить initramfs"
log_message "${GREEN}Драйверы успешно установлены${NC}"
}
# Функция настройки драйверов
configure_drivers() {
log_message "${BLUE}Настройка драйверов...${NC}"
# Создание конфигурационных файлов для modprobe
echo "options i915 enable_fbc=1 enable_guc=3" > /etc/modprobe.d/i915.conf
echo "options nvidia NVreg_EnableMSI=1" > /etc/modprobe.d/nvidia.conf
# Обновление конфигурации загрузчика
if [ -f /etc/default/grub ]; then
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="[^"]*/& i915.fastboot=1 i915.enable_fbc=1 i915.enable_guc=3/' /etc/default/grub
update-grub >> "$LOG_FILE" 2>&1
fi
log_message "${GREEN}Настройка драйверов завершена${NC}"
}
# Функция симуляции нагрузки
run_simulations() {
log_message "${BLUE}Запуск симуляций ($TEST_ITERATIONS итераций)...${NC}"
local success_count=0
local fail_count=0
for ((i=1; i<=$TEST_ITERATIONS; i++)); do
log_message "${BLUE}Запуск симуляции $i/$TEST_ITERATIONS...${NC}"
# Запуск различных тестов в фоновом режиме
run_graphics_test &
run_network_test &
run_storage_test &
# Ожидание завершения тестов
wait
# Проверка результатов
if [ $? -eq 0 ]; then
((success_count++))
log_message "${GREEN}Симуляция $i завершена успешно${NC}"
else
((fail_count++))
log_message "${RED}Симуляция $i завершена с ошибками${NC}"
fi
# Промежуточный отчет каждые 50 итераций
if (( i % 50 == 0 )); then
log_message "${YELLOW}Промежуточный отчет: Успешно $success_count/$i, Неудачно $fail_count/${NC}"
fi
done
# Финальный отчет
log_message "${GREEN}=== РЕЗУЛЬТАТЫ СИМУЛЯЦИИ ==="
log_message "Всего симуляций: $TEST_ITERATIONS"
log_message "Успешных: $success_count"
log_message "Неудачных: $fail_count"
log_message "Успешность: $(echo "scale=2; $success_count*100/$TEST_ITERATIONS" | bc)%${NC}"
# Сохранение отчета
echo "=== ОТЧЕТ СИМУЛЯЦИИ ===" >> "$SYSTEM_INFO_FILE"
echo "Всего симуляций: $TEST_ITERATIONS" >> "$SYSTEM_INFO_FILE"
echo "Успешных: $success_count" >> "$SYSTEM_INFO_FILE"
echo "Неудачных: $fail_count" >> "$SYSTEM_INFO_FILE"
echo "Успешность: $(echo "scale=2; $success_count*100/$TEST_ITERATIONS" | bc)%" >> "$SYSTEM_INFO_FILE"
}
# Функция тестирования графической системы
run_graphics_test() {
local result=0
# Проверка наличия графических драйверов
if glxinfo >/dev/null 2>&1; then
# Тест производительности OpenGL
timeout $SIMULATION_TIMEOUT glxgears >/dev/null 2>&1
if [ $? -eq 0 ]; then
log_message "${GREEN}Графический тест пройден успешно${NC}"
else
log_message "${RED}Графический тест не пройден${NC}"
result=1
fi
else
log_message "${YELLOW}Графические драйверы не обнаружены, пропуск теста${NC}"
fi
return $result
}
# Функция тестирования сети
run_network_test() {
local result=0
# Тест скорости сети
if ping -c 3 8.8.8.8 >/dev/null 2>&1; then
log_message "${GREEN}Сетевой тест пройден успешно${NC}"
else
log_message "${RED}Сетевой тест не пройден${NC}"
result=1
fi
return $result
}
# Функция тестирования хранилища
run_storage_test() {
local result=0
# Тест скорости диска
if dd if=/dev/zero of=/tmp/testfile bs=1M count=100 oflag=direct >/dev/null 2>&1; then
log_message "${GREEN}Тест хранилища пройден успешно${NC}"
rm -f /tmp/testfile
else
log_message "${RED}Тест хранилища не пройден${NC}"
result=1
fi
return $result
}
# Функция создания итогового отчета
generate_report() {
log_message "${BLUE}Генерация итогового отчета...${NC}"
local report_file="/opt/driver_installation_report_$(date +%Y%m%d_%H%M%S).log"
echo "=== ИТОГОВЫЙ ОТЧЕТ УСТАНОВКИ ДРАЙВЕРОВ ===" > "$report_file"
echo "Дата генерации: $(date)" >> "$report_file"
echo "Система: $(lsb_release -d | cut -f2)" >> "$report_file"
echo "Ядро: $(uname -r)" >> "$report_file"
echo "===========================================" >> "$report_file"
# Добавление информации о драйверах
echo "=== УСТАНОВЛЕННЫЕ ДРАЙВЕРЫ ===" >> "$report_file"
dpkg -l | grep -E "nvidia|amd|intel|mesa|firmware" >> "$report_file"
# Добавление информации из dmesg
echo "=== ЖУРНАЛ СИСТЕМНЫХ СОБЫТИЙ ===" >> "$report_file"
dmesg | tail -50 >> "$report_file"
# Добавление информации о модулях ядра
echo "=== ЗАГРУЖЕННЫЕ МОДУЛИ ЯДРА ===" >> "$report_file"
lsmod | head -20 >> "$report_file"
log_message "${GREEN}Итоговый отчет сохранен в $report_file${NC}"
}
# Функция проверки системы после установки
post_installation_check() {
log_message "${BLUE}Проверка системы после установки...${NC}"
# Проверка загруженных модулей
local loaded_modules=$(lsmod | wc -l)
log_message "${BLUE}Загружено модулей ядра: $loaded_modules${NC}"
# Проверка графической системы
if command -v glxinfo >/dev/null; then
local opengl_version=$(glxinfo | grep "OpenGL version" | head -1)
log_message "${GREEN}Версия OpenGL: $opengl_version${NC}"
fi
# Проверка сетевых интерфейсов
local network_interfaces=$(ip -brief address | wc -l)
log_message "${BLUE}Сетевых интерфейсов обнаружено: $network_interfaces${NC}"
log_message "${GREEN}Проверка системы завершена${NC}"
}
# Основная функция
main() {
log_message "${GREEN}Запуск комплексной системы установки и тестирования драйверов${NC}"
# Проверка прав администратора
if [ "$(id -u)" -ne 0 ]; then
log_message "${RED}Этот скрипт должен запускаться с правами root${NC}"
exit 1
fi
# Создание рабочих директорий
mkdir -p "$BACKUP_DIR"
mkdir -p "/opt"
# Шаг 1: Сбор системной информации
collect_system_info
# Шаг 2: Создание резервной копии
create_backup
# Шаг 3: Установка драйверов
install_drivers
# Шаг 4: Настройка драйверов
configure_drivers
# Шаг 5: Запуск симуляций
run_simulations
# Шаг 6: Проверка системы после установки
post_installation_check
# Шаг 7: Генерация отчета
generate_report
log_message "${GREEN}Комплексная установка и тестирование драйверов завершены${NC}"
log_message "${GREEN}Подробная информация в файлах:"
log_message " - Логи: $LOG_FILE"
log_message " - Отчет: $SYSTEM_INFO_FILE"
log_message " - Резервные копии: $BACKUP_DIR${NC}"
}
# Запуск основной функции
main "$@"

Комментарии

Комментариев нет.