commit 37c4c3530823dd4ed46efab0c6fc923b089a367b Author: svsptech Date: Sat Apr 18 23:37:16 2026 +0500 Инициализация diff --git a/=0x00 hdr=0x00 vendor=0x104c device=0x803a subvendor=0x1179 subdevice=0xff10 b/=0x00 hdr=0x00 vendor=0x104c device=0x803a subvendor=0x1179 subdevice=0xff10 new file mode 100644 index 0000000..ed1b158 Binary files /dev/null and b/=0x00 hdr=0x00 vendor=0x104c device=0x803a subvendor=0x1179 subdevice=0xff10 differ diff --git a/=0x00 hdr=0x00 vendor=0x104c device=0x803b subvendor=0x1179 subdevice=0xff10 b/=0x00 hdr=0x00 vendor=0x104c device=0x803b subvendor=0x1179 subdevice=0xff10 new file mode 100644 index 0000000..110286a Binary files /dev/null and b/=0x00 hdr=0x00 vendor=0x104c device=0x803b subvendor=0x1179 subdevice=0xff10 differ diff --git a/builtin_devices b/builtin_devices new file mode 100644 index 0000000..e788acf --- /dev/null +++ b/builtin_devices @@ -0,0 +1,22 @@ +ver0 +0x8086:0x27a0:Intel 945GM/PM Host Bridge:builtin: +0x8086:0x27a1:Intel 945GM/PM PCI Express Root Port:builtin: +0x8086:0x27d8:Intel ICH7-M High Definition Audio:builtin: +0x8086:0x27d0:Intel ICH7-M PCI Express Port 1:builtin: +0x8086:0x27d2:Intel ICH7-M PCI Express Port 2:builtin: +0x8086:0x27d4:Intel ICH7-M PCI Express Port 3:builtin: +0x8086:0x27c8:Intel ICH7-M USB UHCI Controller #1:builtin: +0x8086:0x27c9:Intel ICH7-M USB UHCI Controller #2:builtin: +0x8086:0x27ca:Intel ICH7-M USB UHCI Controller #3:builtin: +0x8086:0x27cb:Intel ICH7-M USB UHCI Controller #4:builtin: +0x8086:0x27cc:Intel ICH7-M USB2 EHCI Controller:builtin: +0x8086:0x2448:Intel 82801 PCI Bridge:builtin: +0x8086:0x27b9:Intel ICH7-M LPC Interface Bridge:builtin: +0x8086:0x27c4:Intel ICH7-M IDE/SATA Controller:builtin: +0x8086:0x27da:Intel ICH7-M SMBus Controller:builtin: +0x8086:0x4222:Intel PRO/Wireless 3945ABG Wi-Fi:builtin: +0x104c:0x8039:Texas Instruments PCIxx12 CardBus Controller:builtin: +0x104c:0x803a:Texas Instruments PCIxx12 FireWire Controller:builtin: +0x104c:0x803b:Texas Instruments PCIxx12 Flash Media Controller:builtin: +0x104c:0x803c:Texas Instruments PCIxx12 SD/MMC Host Controller:builtin: +0x8086:0x1092:Intel PRO/100 VE Ethernet:builtin: diff --git a/cache/driver.list b/cache/driver.list new file mode 100644 index 0000000..7075ac1 --- /dev/null +++ b/cache/driver.list @@ -0,0 +1,23 @@ +ver0 +0x8086:0x27a0:Intel 945GM/PM Host Bridge:builtin: +0x8086:0x27a1:Intel 945GM/PM PCI Express Root Port:builtin: +0x8086:0x27d8:Intel ICH7-M High Definition Audio:builtin: +0x8086:0x27d0:Intel ICH7-M PCI Express Port 1:builtin: +0x8086:0x27d2:Intel ICH7-M PCI Express Port 2:builtin: +0x8086:0x27d4:Intel ICH7-M PCI Express Port 3:builtin: +0x8086:0x27c8:Intel ICH7-M USB UHCI Controller #1:builtin: +0x8086:0x27c9:Intel ICH7-M USB UHCI Controller #2:builtin: +0x8086:0x27ca:Intel ICH7-M USB UHCI Controller #3:builtin: +0x8086:0x27cb:Intel ICH7-M USB UHCI Controller #4:builtin: +0x8086:0x27cc:Intel ICH7-M USB2 EHCI Controller:builtin: +0x8086:0x2448:Intel 82801 PCI Bridge:builtin: +0x8086:0x27b9:Intel ICH7-M LPC Interface Bridge:builtin: +0x8086:0x27c4:Intel ICH7-M IDE/SATA Controller:builtin: +0x8086:0x27da:Intel ICH7-M SMBus Controller:builtin: +0x10de:0x0398:Nvidia GeForce Go 7600:https:gitlab.svsptech.ru/svsptech/calista_nvidia304driver/archive/main.zip +0x8086:0x4222:Intel PRO/Wireless 3945ABG Wi-Fi:builtin: +0x104c:0x8039:Texas Instruments PCIxx12 CardBus Controller:builtin: +0x104c:0x803a:Texas Instruments PCIxx12 FireWire Controller:builtin: +0x104c:0x803b:Texas Instruments PCIxx12 Flash Media Controller:builtin: +0x104c:0x803c:Texas Instruments PCIxx12 SD/MMC Host Controller:builtin: +0x8086:0x1092:Intel PRO/100 VE Ethernet:builtin: \ No newline at end of file diff --git a/cache/drivers/0x10de_0x0398/driver.zip b/cache/drivers/0x10de_0x0398/driver.zip new file mode 100644 index 0000000..e36452d Binary files /dev/null and b/cache/drivers/0x10de_0x0398/driver.zip differ diff --git a/cache/drivers/0x10de_0x0398/extracted/calista_nvidia304driver/build b/cache/drivers/0x10de_0x0398/extracted/calista_nvidia304driver/build new file mode 100755 index 0000000..6e76b4f --- /dev/null +++ b/cache/drivers/0x10de_0x0398/extracted/calista_nvidia304driver/build @@ -0,0 +1,13 @@ +#/bin/sh + +tar -xzvf driver304.pkg -C / +tar -xzvf kmod304.pkg -C / + +if grep -q "kld_list=.*nvidia" "/etc/rc.conf" 2>/dev/null; then + echo "Модуль nvidia уже есть в kld_list" +else + sysrc kld_list+=" nvidia" + echo "Модуль nvidia добавлен в kld_list" +fi + +kldload nvidia diff --git a/cache/drivers/0x10de_0x0398/extracted/calista_nvidia304driver/driver304.pkg b/cache/drivers/0x10de_0x0398/extracted/calista_nvidia304driver/driver304.pkg new file mode 100644 index 0000000..ed1b158 Binary files /dev/null and b/cache/drivers/0x10de_0x0398/extracted/calista_nvidia304driver/driver304.pkg differ diff --git a/cache/drivers/0x10de_0x0398/extracted/calista_nvidia304driver/kmod304.pkg b/cache/drivers/0x10de_0x0398/extracted/calista_nvidia304driver/kmod304.pkg new file mode 100644 index 0000000..110286a Binary files /dev/null and b/cache/drivers/0x10de_0x0398/extracted/calista_nvidia304driver/kmod304.pkg differ diff --git a/devices b/devices new file mode 100755 index 0000000..28ef968 --- /dev/null +++ b/devices @@ -0,0 +1,221 @@ +#!/bin/sh + +export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin" + +REGISTRY_FILE="/calista/registry.db" +BUILTIN_FILE="/calista/builtin_devices" +DRIVER_INSTALLER="/calista/driver_installer" +DETECTED_DEVICES="/tmp/calista_detected_devices.tmp" + +# Функция логирования +log_to_registry() { + local type="$1" + local details="$2" + sqlite3 "$REGISTRY_FILE" "INSERT INTO calista_log (type, user, details) + VALUES ('$type', '$USER', '$details');" 2>/dev/null +} + +# Проверяем, что реестр существует +if [ ! -f "$REGISTRY_FILE" ]; then + echo "Ошибка: Реестр не найден: $REGISTRY_FILE" + exit 1 +fi + +# Функция поиска устройства в файле builtin_devices +lookup_builtin_device() { + local vendor="$1" + local device="$2" + if [ -f "$BUILTIN_FILE" ]; then + grep -v "^ver" "$BUILTIN_FILE" 2>/dev/null | grep "^${vendor}:${device}:" | head -1 + fi +} + +# Очищаем файл обнаруженных устройств +> "$DETECTED_DEVICES" + +log_to_registry "info" "Запущено обновление списка устройств" + +# ------------------------------------------------------------------- +# 1. Сканирование PCI-устройств +# ------------------------------------------------------------------- +echo "Сканирование PCI-устройств..." + +pciconf -l | while read -r line; do + DEV_NAME=$(echo "$line" | awk '{print $1}' | cut -d'@' -f1) + + VENDOR=$(echo "$line" | grep -o 'vendor=0x[0-9a-fA-F]*' | cut -d'=' -f2 | head -1) + DEVICE=$(echo "$line" | grep -o 'device=0x[0-9a-fA-F]*' | cut -d'=' -f2 | head -1) + SUBVENDOR=$(echo "$line" | grep -o 'subvendor=0x[0-9a-fA-F]*' | cut -d'=' -f2 | head -1) + SUBDEVICE=$(echo "$line" | grep -o 'subdevice=0x[0-9a-fA-F]*' | cut -d'=' -f2 | head -1) + CLASS=$(echo "$line" | grep -o 'class=0x[0-9a-fA-F]*' | cut -d'=' -f2 | head -1) + + if [ -z "$VENDOR" ] || [ -z "$DEVICE" ]; then + continue + fi + + echo "pci|$VENDOR|$DEVICE" >> "$DETECTED_DEVICES" + + CURRENT_STATUS=$(sqlite3 "$REGISTRY_FILE" "SELECT status FROM devices + WHERE bus='pci' AND vendor='$VENDOR' AND device='$DEVICE';" 2>/dev/null) + + BUILTIN_INFO=$(lookup_builtin_device "$VENDOR" "$DEVICE") + + if [ -n "$BUILTIN_INFO" ]; then + DEVICE_NAME=$(echo "$BUILTIN_INFO" | cut -d':' -f3) + DEVICE_TYPE=$(echo "$BUILTIN_INFO" | cut -d':' -f4) + + if [ "$DEVICE_TYPE" = "builtin" ]; then + if [ "$DEV_NAME" != "none" ] && [ -n "$DEV_NAME" ]; then + STATUS="installed" + DRIVER="$DEV_NAME" + else + STATUS="builtin_available" + DRIVER="" + fi + else + if [ "$DEV_NAME" != "none" ] && [ -n "$DEV_NAME" ]; then + STATUS="installed" + DRIVER="$DEV_NAME" + else + STATUS="not_installed" + DRIVER="" + fi + fi + else + DEVICE_NAME="Неизвестное устройство (Class: $CLASS)" + DEVICE_TYPE="unknown" + + if [ "$DEV_NAME" != "none" ] && [ -n "$DEV_NAME" ]; then + STATUS="installed" + DRIVER="$DEV_NAME" + else + STATUS="not_installed" + DRIVER="" + fi + fi + + # Проверяем, существует ли запись + EXISTS=$(sqlite3 "$REGISTRY_FILE" "SELECT 1 FROM devices WHERE bus='pci' AND vendor='$VENDOR' AND device='$DEVICE';" 2>/dev/null) + + if [ -z "$EXISTS" ]; then + # Новая запись + sqlite3 "$REGISTRY_FILE" < $DEVICE_NAME (статус: $STATUS) [НОВОЕ]" + else + # Обновляем только статус и driver, если они изменились и статус не calista + if [ "$CURRENT_STATUS" != "installed_calista" ] && [ "$CURRENT_STATUS" != "installed_calista_error" ]; then + sqlite3 "$REGISTRY_FILE" < $DEVICE_NAME (статус: $STATUS) [ОБНОВЛЕНО]" + fi + + # Логика установки драйвера + if [ "$CURRENT_STATUS" != "installed_calista" ] && [ "$CURRENT_STATUS" != "installed_calista_error" ] && [ "$DEVICE_TYPE" != "builtin" ]; then + echo " -> Попытка установки через driver-installer..." + + if [ -x "$DRIVER_INSTALLER" ]; then + "$DRIVER_INSTALLER" get_name "$VENDOR" "$DEVICE" > /dev/null 2>&1 + DEVICE_CHECK=$("$DRIVER_INSTALLER" get_name "$VENDOR" "$DEVICE" 2>/dev/null) + + if [ "$DEVICE_CHECK" != "Неизвестное устройство" ] && [ -n "$DEVICE_CHECK" ]; then + echo " -> Найден драйвер: $DEVICE_CHECK" + "$DRIVER_INSTALLER" install "$VENDOR" "$DEVICE" + else + echo " -> Драйвер не найден в driver.list" + fi + fi + elif [ "$CURRENT_STATUS" = "installed_calista" ]; then + echo " -> Уже установлен через Calista, пропускаем" + elif [ "$DEVICE_TYPE" = "builtin" ]; then + echo " -> Встроен в ядро, установка не требуется" + fi +done + +# ------------------------------------------------------------------- +# 2. Сканирование USB-устройств +# ------------------------------------------------------------------- +echo "Сканирование USB-устройств..." + +usbconfig list | grep -E "^ugen[0-9]+\.[0-9]+:" | while read -r line; do + DEV_NAME=$(echo "$line" | awk '{print $1}' | cut -d':' -f1) + + if echo "$DEV_NAME" | grep -q "\.1$"; then + continue + fi + + DEV_INFO=$(usbconfig -d "$DEV_NAME" dump_device_desc 2>/dev/null) + + VENDOR=$(echo "$DEV_INFO" | grep "idVendor" | sed -E 's/.*idVendor *= *0x([0-9a-fA-F]+).*/0x\1/' | head -1) + PRODUCT=$(echo "$DEV_INFO" | grep "idProduct" | sed -E 's/.*idProduct *= *0x([0-9a-fA-F]+).*/0x\1/' | head -1) + + if [ -z "$VENDOR" ] || [ -z "$PRODUCT" ]; then + continue + fi + + echo "usb|$VENDOR|$PRODUCT" >> "$DETECTED_DEVICES" + + BUILTIN_INFO=$(lookup_builtin_device "$VENDOR" "$PRODUCT") + + if [ -n "$BUILTIN_INFO" ]; then + DEVICE_NAME=$(echo "$BUILTIN_INFO" | cut -d':' -f3) + DEVICE_TYPE=$(echo "$BUILTIN_INFO" | cut -d':' -f4) + STATUS="not_installed" + else + MANUFACTURER=$(echo "$DEV_INFO" | grep "iManufacturer" | head -1 | sed -E 's/.*<([^>]+)>.*/\1/') + PRODUCT_NAME=$(echo "$DEV_INFO" | grep "iProduct" | head -1 | sed -E 's/.*<([^>]+)>.*/\1/') + + if [ -n "$MANUFACTURER" ] && [ -n "$PRODUCT_NAME" ]; then + DEVICE_NAME="$MANUFACTURER $PRODUCT_NAME" + else + DEVICE_NAME="USB-устройство" + fi + STATUS="unknown" + fi + + # Проверяем, существует ли запись + EXISTS=$(sqlite3 "$REGISTRY_FILE" "SELECT 1 FROM devices WHERE bus='usb' AND vendor='$VENDOR' AND device='$PRODUCT';" 2>/dev/null) + + if [ -z "$EXISTS" ]; then + sqlite3 "$REGISTRY_FILE" < $DEVICE_NAME (статус: $STATUS) [НОВОЕ]" + else + sqlite3 "$REGISTRY_FILE" < $DEVICE_NAME (статус: $STATUS) [ОБНОВЛЕНО]" + fi +done + +# ------------------------------------------------------------------- +# 3. Удаление отсутствующих устройств +# ------------------------------------------------------------------- +echo "Проверка отсутствующих устройств..." + +sqlite3 "$REGISTRY_FILE" "SELECT bus, vendor, device FROM devices;" 2>/dev/null | while IFS='|' read -r bus vendor device; do + if [ -z "$bus" ] || [ -z "$vendor" ] || [ -z "$device" ]; then + continue + fi + + if ! grep -q "^${bus}|${vendor}|${device}$" "$DETECTED_DEVICES" 2>/dev/null; then + DEVICE_NAME=$(sqlite3 "$REGISTRY_FILE" "SELECT name FROM devices + WHERE bus='$bus' AND vendor='$vendor' AND device='$device';" 2>/dev/null) + echo " Удаление: $bus $vendor:$device ($DEVICE_NAME)" + log_to_registry "info" "Устройство удалено: $bus $vendor:$device" + sqlite3 "$REGISTRY_FILE" "DELETE FROM devices + WHERE bus='$bus' AND vendor='$vendor' AND device='$device';" 2>/dev/null + fi +done + +rm -f "$DETECTED_DEVICES" +log_to_registry "info" "Проверка устройств завершена" +echo "Проверка устройств завершена." diff --git a/driver_installer b/driver_installer new file mode 100755 index 0000000..8075cd6 --- /dev/null +++ b/driver_installer @@ -0,0 +1,314 @@ +#!/bin/sh + +# Конфигурация +CACHE_DIR="/calista/cache" +DRIVER_LIST_URL="https://gitlab.svsptech.ru/svsptech/calista_drivers/raw/branch/main/driver.list" +DRIVER_LIST_FILE="$CACHE_DIR/driver.list" +REGISTRY_FILE="/calista/registry.db" +EXPECTED_VERSION="ver0" + +# Создаём директорию кеша, если её нет +mkdir -p "$CACHE_DIR" + +# Функция логирования в реестр +log_to_registry() { + local type="$1" + local details="$2" + if [ -f "$REGISTRY_FILE" ]; then + sqlite3 "$REGISTRY_FILE" "INSERT INTO calista_log (type, user, details) + VALUES ('$type', '$USER', '$details');" 2>/dev/null + fi +} + +# Функция скачивания и обновления файла driver.list +update_driver_list() { + echo "Обновление списка драйверов..." + + # Скачиваем файл во временный + TEMP_FILE="$CACHE_DIR/driver.list.tmp" + + if fetch -o "$TEMP_FILE" "$DRIVER_LIST_URL" 2>/dev/null; then + # Проверяем версию файла (первая строка) + VERSION=$(head -1 "$TEMP_FILE" 2>/dev/null) + + if [ "$VERSION" != "$EXPECTED_VERSION" ]; then + echo "Ошибка: Неподдерживаемая версия файла драйверов: $VERSION (ожидается $EXPECTED_VERSION)" + log_to_registry "error" "Неподдерживаемая версия driver.list: $VERSION" + rm -f "$TEMP_FILE" + return 1 + fi + + # Перемещаем временный файл в основной + mv "$TEMP_FILE" "$DRIVER_LIST_FILE" + echo "Список драйверов обновлён (версия: $VERSION)" + log_to_registry "info" "Список драйверов обновлён (версия: $VERSION)" + return 0 + else + echo "Ошибка: Не удалось скачать список драйверов" + log_to_registry "error" "Не удалось скачать $DRIVER_LIST_URL" + rm -f "$TEMP_FILE" + return 1 + fi +} + +# Функция поиска устройства в driver.list +# Возвращает полную строку из файла +find_device_in_list() { + local vendor="$1" + local device="$2" + + if [ ! -f "$DRIVER_LIST_FILE" ]; then + return 1 + fi + + # Пропускаем первую строку (версия) и ищем точное совпадение + grep -v "^ver" "$DRIVER_LIST_FILE" 2>/dev/null | grep "^${vendor}:${device}:" | head -1 +} + +# ------------------------------------------------------------------- +# Команда: get_name +# Получение названия устройства по vendor и device +# ------------------------------------------------------------------- +cmd_get_name() { + local vendor="$1" + local device="$2" + + if [ -z "$vendor" ] || [ -z "$device" ]; then + echo "Ошибка: Не указаны vendor и device" + exit 1 + fi + + # Проверяем наличие файла, если нет — скачиваем + if [ ! -f "$DRIVER_LIST_FILE" ]; then + echo "Файл driver.list не найден, скачиваем..." + if ! update_driver_list; then + echo "Неизвестное устройство" + exit 1 + fi + fi + + # Ищем устройство + DEVICE_LINE=$(find_device_in_list "$vendor" "$device") + + if [ -n "$DEVICE_LINE" ]; then + # Извлекаем название (третий столбец) + DEVICE_NAME=$(echo "$DEVICE_LINE" | cut -d':' -f3) + echo "$DEVICE_NAME" + else + echo "Неизвестное устройство" + fi +} + +# ------------------------------------------------------------------- +# Команда: install +# Установка драйвера для устройства +# ------------------------------------------------------------------- +cmd_install() { + local vendor="$1" + local device="$2" + + if [ -z "$vendor" ] || [ -z "$device" ]; then + echo "Ошибка: Не указаны vendor и device" + exit 1 + fi + + echo "Установка драйвера для $vendor:$device..." + log_to_registry "info" "Начало установки драйвера для $vendor:$device" + + # Проверяем наличие файла, если нет — скачиваем + if [ ! -f "$DRIVER_LIST_FILE" ]; then + echo "Файл driver.list не найден, скачиваем..." + if ! update_driver_list; then + log_to_registry "error" "Не удалось скачать driver.list" + exit 1 + fi + fi + + # Ищем устройство + DEVICE_LINE=$(find_device_in_list "$vendor" "$device") + + if [ -z "$DEVICE_LINE" ]; then + echo "Ошибка: Устройство $vendor:$device не найдено в driver.list" + log_to_registry "error" "Устройство $vendor:$device не найдено в driver.list" + exit 1 + fi + + # Разбираем строку: vendor:device:name:type:url + DEVICE_NAME=$(echo "$DEVICE_LINE" | cut -d':' -f3) + DEVICE_TYPE=$(echo "$DEVICE_LINE" | cut -d':' -f4) + DEVICE_URL=$(echo "$DEVICE_LINE" | cut -d':' -f5) + + echo " Устройство: $DEVICE_NAME" + echo " Тип драйвера: $DEVICE_TYPE" + + # Проверяем тип драйвера + if [ "$DEVICE_TYPE" = "builtin" ]; then + echo " Драйвер встроен в ядро FreeBSD, установка не требуется" + log_to_registry "info" "Драйвер для $vendor:$device встроен в ядро" + + # Обновляем статус в реестре + if [ -f "$REGISTRY_FILE" ]; then + sqlite3 "$REGISTRY_FILE" "UPDATE devices SET status='installed' + WHERE vendor='$vendor' AND device='$device';" 2>/dev/null + fi + exit 0 + fi + + # Проверяем тип https + if [ "$DEVICE_TYPE" != "https" ]; then + echo "Ошибка: Неподдерживаемый тип драйвера: $DEVICE_TYPE" + log_to_registry "error" "Неподдерживаемый тип драйвера: $DEVICE_TYPE" + exit 1 + fi + + if [ -z "$DEVICE_URL" ]; then + echo "Ошибка: Не указана ссылка для скачивания" + log_to_registry "error" "Не указана ссылка для скачивания драйвера" + exit 1 + fi + + # Создаём директорию для драйвера + DRIVER_CACHE_DIR="$CACHE_DIR/drivers/${vendor}_${device}" + mkdir -p "$DRIVER_CACHE_DIR" + + # Скачиваем архив + echo " Скачивание драйвера из $DEVICE_URL..." + ARCHIVE_FILE="$DRIVER_CACHE_DIR/driver.zip" + + if fetch -o "$ARCHIVE_FILE" "https://$DEVICE_URL" 2>/dev/null; then + echo " Архив скачан: $ARCHIVE_FILE" + else + echo "Ошибка: Не удалось скачать архив" + log_to_registry "error" "Не удалось скачать архив $DEVICE_URL" + exit 1 + fi + + # Распаковываем архив + echo " Распаковка архива..." + EXTRACT_DIR="$DRIVER_CACHE_DIR/extracted" + mkdir -p "$EXTRACT_DIR" + + # Определяем тип архива по расширению + case "$ARCHIVE_FILE" in + *.zip) + if ! unzip -q "$ARCHIVE_FILE" -d "$EXTRACT_DIR" 2>/dev/null; then + echo "Ошибка: Не удалось распаковать zip-архив" + log_to_registry "error" "Не удалось распаковать zip-архив" + exit 1 + fi + ;; + *.tar.gz|*.tgz) + if ! tar -xzf "$ARCHIVE_FILE" -C "$EXTRACT_DIR" 2>/dev/null; then + echo "Ошибка: Не удалось распаковать tar.gz-архив" + log_to_registry "error" "Не удалось распаковать tar.gz-архив" + exit 1 + fi + ;; + *.tar) + if ! tar -xf "$ARCHIVE_FILE" -C "$EXTRACT_DIR" 2>/dev/null; then + echo "Ошибка: Не удалось распаковать tar-архив" + log_to_registry "error" "Не удалось распаковать tar-архив" + exit 1 + fi + ;; + *) + echo "Ошибка: Неизвестный формат архива" + log_to_registry "error" "Неизвестный формат архива: $ARCHIVE_FILE" + exit 1 + ;; + esac + + echo " Архив распакован в $EXTRACT_DIR" + + # Ищем файл build в распакованной директории + BUILD_SCRIPT=$(find "$EXTRACT_DIR" -name "build" -type f -executable 2>/dev/null | head -1) + + if [ -z "$BUILD_SCRIPT" ]; then + echo "Ошибка: Файл build не найден в архиве" + log_to_registry "error" "Файл build не найден в архиве" + exit 1 + fi + + BUILD_DIR=$(dirname "$BUILD_SCRIPT") + + # Выполняем сборку + echo " Запуск сборки драйвера..." + echo " Рабочая директория: $BUILD_DIR" + + cd "$BUILD_DIR" || { + echo "Ошибка: Не удалось перейти в директорию $BUILD_DIR" + log_to_registry "error" "Не удалось перейти в директорию $BUILD_DIR" + exit 1 + } + + if ./build; then + echo " Сборка драйвера завершена успешно" + log_to_registry "info" "Драйвер для $vendor:$device установлен успешно" + + # Обновляем статус в реестре + if [ -f "$REGISTRY_FILE" ]; then + sqlite3 "$REGISTRY_FILE" "UPDATE devices SET status='installed_calista', name='$DEVICE_NAME' + WHERE vendor='$vendor' AND device='$device';" 2>/dev/null + fi + + exit 0 + else + if [ -f "$REGISTRY_FILE" ]; then + sqlite3 "$REGISTRY_FILE" "UPDATE devices SET status='installed_calista_error', name='$DEVICE_NAME' + WHERE vendor='$vendor' AND device='$device';" 2>/dev/null + fi + + echo "Ошибка: Сборка драйвера завершилась с ошибкой" + log_to_registry "error" "Сборка драйвера для $vendor:$device завершилась с ошибкой" + exit 1 + fi +} + +# ------------------------------------------------------------------- +# Команда: update_list +# Принудительное обновление списка драйверов +# ------------------------------------------------------------------- +cmd_update_list() { + echo "Принудительное обновление списка драйверов..." + if update_driver_list; then + echo "Список драйверов успешно обновлён" + exit 0 + else + echo "Ошибка обновления списка драйверов" + exit 1 + fi +} + +# ------------------------------------------------------------------- +# Точка входа +# ------------------------------------------------------------------- +main() { + local command="$1" + local vendor="$2" + local device="$3" + + case "$command" in + get_name) + cmd_get_name "$vendor" "$device" + ;; + install) + cmd_install "$vendor" "$device" + ;; + update_list) + cmd_update_list + ;; + *) + echo "Использование:" + echo " $0 get_name - получить название устройства" + echo " $0 install - установить драйвер" + echo " $0 update_list - обновить список драйверов" + echo "" + echo "Пример:" + echo " $0 get_name 0x10de 0x0398" + echo " $0 install 0x10de 0x0398" + exit 1 + ;; + esac +} + +main "$@" diff --git a/init_device_demon b/init_device_demon new file mode 100755 index 0000000..62b3f8b --- /dev/null +++ b/init_device_demon @@ -0,0 +1,62 @@ +#!/bin/sh + +DEVD_CONF="/etc/devd/calista-devices.conf" +DEVICE_CHECK_SCRIPT="/calista/devices" +DEVD_PATH="/bin:/sbin:/usr/bin:/usr/local/bin:/usr/sbin" + +# Проверяем, существует ли скрипт проверки устройств +if [ ! -x "$DEVICE_CHECK_SCRIPT" ]; then + echo "Ошибка: Скрипт $DEVICE_CHECK_SCRIPT не найден или не исполняемый" + exit 1 +fi + +# Создаём конфигурационный файл +cat > "$DEVD_CONF" <> /tmp/calista-devd.log 2>&1'"; +}; + +# USB-устройства: отключение +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "DETACH"; + action "/bin/sh -c 'PATH=$DEVD_PATH $DEVICE_CHECK_SCRIPT >> /tmp/calista-devd.log 2>&1'"; +}; +EOF + +# Проверяем, что файл создался +if [ -f "$DEVD_CONF" ]; then + echo "Конфигурационный файл создан: $DEVD_CONF" +else + echo "Ошибка: Не удалось создать $DEVD_CONF" + exit 1 +fi + +# Перезагружаем devd +echo "Перезагрузка devd..." +service devd restart + +# Проверяем статус +if service devd status > /dev/null 2>&1; then + echo "devd успешно перезагружен" +else + echo "Ошибка: Не удалось перезагрузить devd" + exit 1 +fi + +echo "Настройка devd для Calista завершена успешно." diff --git a/reginit b/reginit new file mode 100755 index 0000000..ba0e14e --- /dev/null +++ b/reginit @@ -0,0 +1,72 @@ +#/bin/sh + +SYSTEM_DIR="/calista" +REGISTRY_FILE="$SYSTEM_DIR/registry.db" +USER=$(whoami) + +# Проверяем, существует ли файл реестра +if [ -f "$REGISTRY_FILE" ]; then + echo "Ошибка: Файл реестра уже существует: $REGISTRY_FILE" + echo "Инициализация запрещена. Если вы хотите пересоздать реестр, удалите файл вручную." + exit 1 +fi + +# Файла нет — создаём директорию (если её нет) +if [ ! -d "$SYSTEM_DIR" ]; then + mkdir -p "$SYSTEM_DIR" + if [ ! -d "$SYSTEM_DIR" ]; then + echo "Критическая ошибка: Не удалось создать системную директорию" + exit 1 + fi +fi + +# Создаём базу данных и таблицы +echo "Создаём файл реестра: $REGISTRY_FILE" + +#Calista log +sqlite3 "$REGISTRY_FILE" <