Инициализация

This commit is contained in:
svsptech 2026-04-18 23:37:16 +05:00
commit 37c4c35308
12 changed files with 727 additions and 0 deletions

22
builtin_devices Normal file
View File

@ -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:

23
cache/driver.list vendored Normal file
View File

@ -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:

BIN
cache/drivers/0x10de_0x0398/driver.zip vendored Normal file

Binary file not shown.

View File

@ -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

221
devices Executable file
View File

@ -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" <<EOF
INSERT INTO devices (bus, vendor, device, subvendor, subdevice, name, status, driver, detected_at)
VALUES ('pci', '$VENDOR', '$DEVICE', '$SUBVENDOR', '$SUBDEVICE', '$DEVICE_NAME', '$STATUS', '$DRIVER', CURRENT_TIMESTAMP);
EOF
echo " PCI: $VENDOR:$DEVICE -> $DEVICE_NAME (статус: $STATUS) [НОВОЕ]"
else
# Обновляем только статус и driver, если они изменились и статус не calista
if [ "$CURRENT_STATUS" != "installed_calista" ] && [ "$CURRENT_STATUS" != "installed_calista_error" ]; then
sqlite3 "$REGISTRY_FILE" <<EOF
UPDATE devices SET status='$STATUS', driver='$DRIVER', detected_at=CURRENT_TIMESTAMP
WHERE bus='pci' AND vendor='$VENDOR' AND device='$DEVICE';
EOF
fi
echo " PCI: $VENDOR:$DEVICE -> $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" <<EOF
INSERT INTO devices (bus, vendor, device, name, status, driver, detected_at)
VALUES ('usb', '$VENDOR', '$PRODUCT', '$DEVICE_NAME', '$STATUS', '', CURRENT_TIMESTAMP);
EOF
echo " USB: $VENDOR:$PRODUCT -> $DEVICE_NAME (статус: $STATUS) [НОВОЕ]"
else
sqlite3 "$REGISTRY_FILE" <<EOF
UPDATE devices SET name='$DEVICE_NAME', status='$STATUS', detected_at=CURRENT_TIMESTAMP
WHERE bus='usb' AND vendor='$VENDOR' AND device='$PRODUCT';
EOF
echo " USB: $VENDOR:$PRODUCT -> $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 "Проверка устройств завершена."

314
driver_installer Executable file
View File

@ -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 <vendor> <device> - получить название устройства"
echo " $0 install <vendor> <device> - установить драйвер"
echo " $0 update_list - обновить список драйверов"
echo ""
echo "Пример:"
echo " $0 get_name 0x10de 0x0398"
echo " $0 install 0x10de 0x0398"
exit 1
;;
esac
}
main "$@"

62
init_device_demon Executable file
View File

@ -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" <<EOF
# Файл: /etc/devd/calista-devices.conf
# Отслеживание подключения и отключения устройств для Calista Driver Manager
# PCI-устройства: подключение
notify 100 {
match "system" "PCI";
match "subsystem" "!unknown";
action "$DEVICE_CHECK_SCRIPT";
};
# USB-устройства: подключение
notify 100 {
match "system" "USB";
match "subsystem" "DEVICE";
match "type" "ATTACH";
action "/bin/sh -c 'PATH=$DEVD_PATH $DEVICE_CHECK_SCRIPT >> /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 завершена успешно."

72
reginit Executable file
View File

@ -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" <<EOF
CREATE TABLE IF NOT EXISTS calista_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
type TEXT NOT NULL, -- 'error', 'info'
user TEXT NOT NULL,
details TEXT, -- дополнительная информация
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
EOF
sqlite3 "$REGISTRY_FILE" <<EOF
INSERT INTO calista_log (type, user, details) VALUES ('info', '$USER', 'Регистр Calista инициализирован успешно');
INSERT INTO calista_log (type, user, details) VALUES ('info', '$USER', 'Путь к реестру - $REGISTRY_FILE');
EOF
#Создание таблицы компонентов
sqlite3 "$REGISTRY_FILE" <<EOF
CREATE TABLE IF NOT EXISTS components (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE NOT NULL, -- уникальный идентификатор компонента (cpm, cgl)
version TEXT, -- версия
source TEXT, -- git / local
description TEXT, -- описание
installed_at TIMESTAMP -- время установки
);
EOF
#Создание таблицы устройств
sqlite3 "$REGISTRY_FILE" <<EOF
-- Таблица устройств (текущее состояние системы)
CREATE TABLE IF NOT EXISTS devices (
id INTEGER PRIMARY KEY AUTOINCREMENT,
bus TEXT NOT NULL, -- 'pci', 'usb'
vendor TEXT NOT NULL, -- '0x8086'
device TEXT NOT NULL, -- '0x4222'
subvendor TEXT, -- '0x1179' (опционально)
subdevice TEXT, -- '0xff10' (опционально)
name TEXT DEFAULT 'unknown', -- 'Intel 3945ABG Wi-Fi'
status TEXT DEFAULT 'unknown', -- 'installed', 'not_installed', 'builtin', 'unknown'
driver TEXT, -- 'wpi', 'nvidia', 'snd_hda'
module_path TEXT, -- путь к модулю (если известен)
detected_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(bus, vendor, device, subvendor, subdevice)
);
EOF