# Подключение Celestial Altium Library к Altium Designer Полная production-ready инструкция по подключению базы данных Celestial (`issus/altium-library`, ≈212 000 компонентов, 311 views) к Altium Designer под Windows. Все ссылки ведут на официальные источники (Microsoft Learn, Download Center, GitHub). Альтернативы через Microsoft Store и `winget msstore` не используются — они заблокированы для RU-региона. --- ## 0. Что ты получишь в итоге - Полная database-library на ≈212 000 реальных компонентов с MPN, supplier refs, 3D-моделями производителей, параметрической фильтрацией в Altium. - BOM заполняется автоматически при Place — никакого ручного ввода MPN. - 311 категорийных views прямо в `Components panel` (Resistors по размерам пакетов, Capacitors Ceramic/Electrolytic/Tantalum, MOSFETs N/P-Ch, MCUs, Motor Drivers, Voltage Regulators и т.д.). - Обновления прилетают автоматически по мере добавления Mark Harris'ом новых компонентов на облачный сервер. Объём локальных файлов после клонирования: ≈4–6 GB (в основном STEP-модели через Git LFS). --- ## 1. Регистрация на портале и получение DbLib ### 1.1. Зарегистрируйся на портале Открой → `REGISTER` → заполни форму. Email реальный — понадобится для активации и восстановления пароля. ### 1.2. Создай Server Login Портал разделяет **аккаунт на портале** (твой email и пароль) и **логин к SQL-серверу** (генерируется случайно, нужен для подключения Altium). 1. Войди на портал. 2. `Server Logins` → `New Login`. 3. В списке баз выбери `altium_library` → `Create`. 4. Портал сгенерирует случайные username/password — скачай или запиши их сразу, второй раз посмотреть пароль нельзя. **Важно, почему креды случайные:** DbLib хранит их plain-text на диске. Mark Harris принципиально генерирует их, чтобы ты не вписал свой обычный пароль. ### 1.3. Скачай DbLib `Server Logins` → `Manage` → напротив созданного логина кнопка **DbLib**. Скачается файл вида `Celestial_Altium_Library_-_altium_library.DbLib` — ini-файл с уже зашитой `ConnectionString` к твоему персональному логину. Открой его в текстовом редакторе и проверь первую строчку после `[DatabaseLinks]`: ```ini ConnectionString = Provider=SQLNCLI11.1; User ID=alib_xxxx; Password=...; Initial Catalog=altium_library; Data Source=db.altiumlibrary.com,1433; Initial File Name=""; Server SPN="" ``` Ключевые детали: - `Provider=SQLNCLI11.1` — SQL Server Native Client 11 (deprecated Microsoft'ом в 2021, но именно его запрашивает этот DbLib). Будем ставить. - `Data Source=db.altiumlibrary.com,1433` — сервер Mark Harris'а в OVH France (51.68.218.24), не Azure SQL. --- ## 2. Клонирование библиотеки Репозиторий `issus/altium-library` хранит SchLib/PcbLib/STEP локально, база с параметрами — на облачном SQL. Оба нужны одновременно. ### 2.1. Установи Git с поддержкой LFS ```powershell # Если Git ещё нет — ставим отсюда (официальный инсталлятор): # https://git-scm.com/download/win # В инсталляторе обязательно галочка "Git LFS support" — она по умолчанию включена. # Проверка: git --version git lfs version ``` Без Git LFS клонирование «прошуршит» по указателям, но **STEP-файлы не скачаются** — вместо них будут текстовые stub'ы размером ~130 байт. ### 2.2. Клонируй репозиторий ```powershell git lfs install # один раз на пользователя cd C:\Work # или куда тебе удобно git clone https://github.com/issus/altium-library.git ``` Клонирование займёт 5–15 минут (≈4–6 GB через LFS). ### 2.3. Положи DbLib в папку репозитория Скачанный в 1.3 файл `*.DbLib` скопируй в **корень** клонированного репозитория — рядом с `Altium Database Library V2.DbLib`, `symbols/`, `footprints/`. Это важно: в DbLib footprint/symbol refs прописаны **относительными путями**, и Altium ищет их относительно DbLib-файла. ``` C:\Work\altium-library\ ├─ Altium Database Library V2.DbLib ← шаблон из репо (не трогать) ├─ Celestial_Altium_Library_-_altium_library.DbLib ← твой, из портала ├─ symbols\ ├─ footprints\ ├─ STEP\ └─ ... ``` ### 2.4. Обновление базы в будущем Регулярно подтягивай свежие символы и футпринты: ```powershell cd C:\Work\altium-library git pull git lfs pull ``` --- ## 3. Установка Windows-зависимостей Это дно происходящего: тебе нужен **устаревший драйвер Microsoft** из инсталлятора **SQL Server 2012 SP4 Feature Pack**, потому что DbLib требует `SQLNCLI11.1`. Плюс Visual C++ Redistributable — без него драйвер не зарегистрируется в реестре. Ниже — всё через прямые MSI с `download.microsoft.com`, без Microsoft Store и `winget msstore` (заблокированы для RU). ### 3.1. Visual C++ Redistributable (x86 + x64) Если у тебя современный Windows 11 с Visual Studio / dotnet — уже стоит. На чистой машине ставь обе архитектуры; `x64` не включает `x86`-часть, а она нужна для 32-битных компонентов драйвера. Через `winget` (это community source, RU-блокировки не касается): ```powershell winget install --id Microsoft.VCRedist.2015+.x64 --exact --accept-package-agreements --accept-source-agreements winget install --id Microsoft.VCRedist.2015+.x86 --exact --accept-package-agreements --accept-source-agreements ``` Или прямые инсталляторы: - x64: - x86: ### 3.2. SQL Server Native Client 11 (sqlncli.msi) — ОБЯЗАТЕЛЬНО Это именно тот «старый» провайдер, который записан в DbLib. Он идёт в составе SQL Server 2012 SP4 Feature Pack и распространяется как standalone MSI. Elevated PowerShell (запуск от администратора): ```powershell $url = "https://download.microsoft.com/download/B/E/D/BED73AAC-3C8A-43F5-AF4F-EB4FEA6C8F3A/ENU/x64/sqlncli.msi" $msi = "$env:TEMP\sqlncli_x64.msi" Invoke-WebRequest -Uri $url -OutFile $msi -UseBasicParsing msiexec /i $msi /qn IACCEPTSQLNCLILICENSETERMS=YES ``` Флаг `IACCEPTSQLNCLILICENSETERMS=YES` обязателен для silent install. Без него `/qn` падает без ошибки, драйвер не ставится. **Проверка установки:** ```powershell Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\SQLNCLI11" -ErrorAction SilentlyContinue | Select-Object InstalledVersion # Должно показать InstalledVersion 11.4.x (или выше) ``` ### 3.3. Microsoft OLE DB Driver 19 for SQL Server — ОПЦИОНАЛЬНО Современный актуальный провайдер. Для Celestial как такового не нужен, но пригодится для будущих проектов с SQL Server / Azure SQL, и ставится side-by-side с SQLNCLI11 без конфликтов. ```powershell # Актуальная GA: MSOLEDBSQL 19.4.1 (2025-05-09) $url = "https://go.microsoft.com/fwlink/?linkid=2318101" # x64 + Arm64 $msi = "$env:TEMP\msoledbsql.msi" Invoke-WebRequest -Uri $url -OutFile $msi -UseBasicParsing msiexec /i $msi /qn IACCEPTMSOLEDBSQLLICENSETERMS=YES ``` ### 3.4. НЕ ставь Microsoft Access Altium при проблемах с OLE DB fallback'ается на ошибку «requires 64-bit Microsoft Access Database Engine». Это ложное сообщение. `SQLNCLI11` — это OLE DB Provider, а не ODBC и **вообще не связан с Access**. Установка Access/ACE ничего не починит и не требуется. --- ## 4. Сетевой доступ до сервера Сервер `db.altiumlibrary.com` (51.68.218.24, OVH France) принимает соединения только по TCP 1433. Это порт MSSQL, и он часто фильтруется: - Windows Firewall исходящий — обычно пропускает, но проверить стоит. - Российские ISP — могут резать 1433 на uplink (anti-spam / anti-bruteforce). - Корпоративные сети — почти всегда режут. - Azure/OVH со стороны сервера — может whitelist'ить. ### 4.1. Проверка доступности ```powershell Test-NetConnection -ComputerName db.altiumlibrary.com -Port 1433 ``` Ждёшь: ``` TcpTestSucceeded : True ``` Если `False` — либо таймаут, либо RST. Смотри `RemoteAddress` — там должно быть `51.68.218.24`. ### 4.2. Если 1433 закрыт — заворачиваем через VPN Для твоей инфраструктуры (MikroTik + xray/AmneziaWG контейнеры на 192.168.9.147): 1. На MikroTik в адрес-лист для VPN-маршрутизации добавь: - `db.altiumlibrary.com` (MikroTik умеет DNS-name в address-list с автообновлением) - или статически `51.68.218.24/32` 2. Убедись, что правило `/ip firewall mangle` для mark-routing захватывает этот адрес (по `dst-address-list`). 3. Проверь с машины: ```powershell # Должен идти через VPN-интерфейс Test-NetConnection -ComputerName db.altiumlibrary.com -Port 1433 tracert -h 5 51.68.218.24 ``` Важно: SQLNCLI11 по умолчанию **не шифрует** трафик. Пароль из DbLib летит по сети в TDS-фрейме. Если между машиной и сервером есть untrusted сегмент — VPN не только для обхода блока, но и для минимальной защиты транспорта. --- ## 5. Подключение в Altium Designer На этом этапе у тебя должно быть: - ✅ `SQLNCLI11` стоит (проверено через реестр) - ✅ `db.altiumlibrary.com:1433` доступен (TcpTestSucceeded : True) - ✅ DbLib лежит в папке с клонированным репо ### 5.1. Открой Altium Designer Любой проект, можно пустой. Открой панель `Components` (`View → Panels → Components`, или снизу справа `Panels → Components`). ### 5.2. Окно File-based Libraries Preferences В панели `Components` нажми иконку меню (≡ или три точки — зависит от версии AD) → в разных версиях Altium этот пункт называется по-разному: - AD 20+ (включая 26.x): **`File-based Libraries Preferences...`** - Старые AD: **`Libraries Preferences...`** Откроется окно `Available File-based Libraries`. ### 5.3. Установка DbLib 1. Вкладка **`Installed`**. 2. Кнопка **`Install`** внизу → выбери `C:\Work\altium-library\Celestial_Altium_Library_-_altium_library.DbLib`. 3. Проверь, что в списке появилась строка с типом `Database`. 4. Галочка `Activate` должна быть включена. 5. **НЕ закрывай окно сразу** — Altium начнёт подключение и может вывести ошибку. ### 5.4. Первая загрузка На этом шаге Altium: 1. Коннектится к `db.altiumlibrary.com:1433`. 2. Выполняет ~600 SELECT-запросов (один на каждый view) для получения схемы колонок и параметров фильтрации. 3. Строит локальный индекс. На хорошем интернете через прямой канал — 30–60 секунд. Через VPN с RTT 150 мс — до 2–3 минут. Splash Altium будет показывать `Loading Document Celestial Altium Library - altium_library.DbLib`. Не перебивай, не закрывай Altium. Если висит >5 минут — смотри Troubleshooting. ### 5.5. Проверка результата В `Components panel` сверху появится дропдаун с views. Должно быть примерно так: ``` Components ▾ ├─ Capacitors - Ceramic - 0402 ├─ Capacitors - Ceramic - 0603 ├─ ... (18 views под конденсаторы) ├─ Connectors - ... (18 views) ├─ Diodes - ... (5 views) ├─ Inductors - Power ├─ MOSFET - Single - N-Ch ├─ MOSFET - Single - P-Ch ├─ Motor Drivers Controllers ├─ Resistors - Surface Mount - 0402 ├─ ... (12 views под резисторы) └─ Voltage Regulators - DC DC Switching Regulators ``` Выбери, например, `Resistors - Surface Mount - 0603` → справа от списка компонентов появится панель параметрической фильтрации (Resistance, Tolerance, Power Rating, Temperature Coefficient, Manufacturer). Всё — база работает. --- ## 6. Использование ### 6.1. Размещение компонента 1. В схеме → панель `Components` → выбери нужный view. 2. Отфильтруй по параметрам (например, Resistance = 10k, Tolerance = 1%). 3. Двойной клик на компоненте → компонент появится в курсоре. 4. Разместишь на схеме — Altium автоматически: - Скачает symbol из локального `symbols/` (по Library Ref из БД). - Скачает footprint из локального `footprints/`. - Пропишет все параметры в атрибутах компонента (MPN, Manufacturer, Supplier, Price, Datasheet URL). ### 6.2. Генерация BOM `Project → Project Options → OutputJob Files → Report Outputs → Bill of Materials`. В BOM автоматически попадут `Manufacturer Part Number`, `Manufacturer`, `Supplier 1 Part Number`, `Supplier 1 Unit Price` и т.д. — заполнять руками ничего не нужно. ### 6.3. Если нужного компонента нет в Celestial 1. Создай свой SchLib/PcbLib рядом с клоном (например, `C:\Work\altium-library-custom\`). 2. В `File-based Libraries Preferences → Installed` добавь рядом со страницей Celestial DbLib. 3. Свои компоненты работают параллельно, без конфликтов. Либо отправь PR в `issus/altium-library` — Mark принимает, если параметры и 3D-модели от производителя. --- ## 7. Troubleshooting ### 7.1. «64-bit Microsoft Access Database Engine required» **Причина:** Altium не смог загрузить OLE DB провайдер, указанный в DbLib (`SQLNCLI11.1`), и fallback'нулся на общее misleading сообщение про Access. **Решение:** 1. Убедись, что SQLNCLI11 стоит: `Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\SQLNCLI11"` 2. Если стоит, а ошибка сохраняется — закрой Altium полностью (проверь через Task Manager, что `X2.EXE` не висит), запусти заново. 3. Если не помогло — переустанови SQLNCLI11 с `/l*v log.txt` для диагностики: `msiexec /i sqlncli.msi /l*v "$env:TEMP\sqlncli.log" IACCEPTSQLNCLILICENSETERMS=YES` ### 7.2. «Connection Failed. Check your connection settings» **Причина:** драйвер OK, но не доходит до сервера. **Решение:** 1. `Test-NetConnection -ComputerName db.altiumlibrary.com -Port 1433` 2. Если False — настрой VPN (см. раздел 4.2). 3. Если True, но Altium всё равно ругается — проверь пароль в DbLib (не скопировался ли лишний пробел), либо создай новый Server Login на портале и скачай свежий DbLib. ### 7.3. Views с префиксом `z_` в списке **Причина:** DbLib устарел, в нём есть ссылки на underlying tables, которые не имеют Altium-совместимых колонок. **Решение:** скачай свежий DbLib с портала (Server Logins → Manage → DbLib), замени свой. **Не удаляй старый до проверки нового** — если что-то пойдёт не так, вернёшь. ### 7.4. Components panel показывает views, но внутри пусто **Причина:** сетевое подключение «оборвалось» посередине загрузки (timeout на отдельных views). **Решение:** 1. Закрой Altium полностью. 2. Если через VPN — проверь стабильность канала. 3. Запусти Altium, подожди полной загрузки (иногда нужен F5 в панели `Refresh`). ### 7.5. «Footprint not found» при Place **Причина:** компонент только что добавили в облачную БД, а локальные SchLib/PcbLib ещё не обновлены. **Решение:** ```powershell cd C:\Work\altium-library git pull git lfs pull ``` В Altium: `Components panel` → `Refresh (F5)`. ### 7.6. STEP-модели не отображаются в 3D **Причина:** клон сделан без Git LFS, или `git lfs pull` не выполнен. **Решение:** ```powershell cd C:\Work\altium-library git lfs install git lfs pull ``` Проверь размер файла `STEP\*.STEP` — рабочие модели весят 50–500 KB, LFS-указатели — ровно 133 байта. ### 7.7. Altium падает при открытии DbLib **Причина:** conflict с Altium Vault / Altium 365 workspace (попытка загружать один и тот же компонент из двух источников). **Решение:** временно disconnect workspace (`File → Altium 365 → Sign Out`), перезапусти Altium, подключи DbLib, потом заново подключись к workspace. --- ## 8. Автоматизация: production-ready установщик одной командой Чтобы поднять всё на новой машине одним вызовом — скрипт ниже. Запускать **от администратора**, только после того, как уже есть скачанный с портала DbLib. ```powershell #Requires -RunAsAdministrator param( [Parameter(Mandatory=$true)] [string]$RepoDir = "C:\Work\altium-library", [Parameter(Mandatory=$true)] [string]$DbLibPath, # путь к скачанному из портала .DbLib [switch]$InstallMSOLEDBSQL # опционально поставить ещё и современный провайдер ) $ErrorActionPreference = "Stop" # 1. Git + LFS if (-not (Get-Command git -ErrorAction SilentlyContinue)) { winget install --id Git.Git --exact --accept-package-agreements --accept-source-agreements } git lfs install # 2. VC++ Redist winget install --id Microsoft.VCRedist.2015+.x64 --exact --accept-package-agreements --accept-source-agreements winget install --id Microsoft.VCRedist.2015+.x86 --exact --accept-package-agreements --accept-source-agreements # 3. SQLNCLI11 — ОБЯЗАТЕЛЬНО $sqlncli = "$env:TEMP\sqlncli_x64.msi" Invoke-WebRequest -UseBasicParsing ` -Uri "https://download.microsoft.com/download/B/E/D/BED73AAC-3C8A-43F5-AF4F-EB4FEA6C8F3A/ENU/x64/sqlncli.msi" ` -OutFile $sqlncli Start-Process msiexec -ArgumentList "/i", $sqlncli, "/qn", "IACCEPTSQLNCLILICENSETERMS=YES" -Wait # 4. MSOLEDBSQL 19 (опционально) if ($InstallMSOLEDBSQL) { $msoledb = "$env:TEMP\msoledbsql.msi" Invoke-WebRequest -UseBasicParsing ` -Uri "https://go.microsoft.com/fwlink/?linkid=2318101" ` -OutFile $msoledb Start-Process msiexec -ArgumentList "/i", $msoledb, "/qn", "IACCEPTMSOLEDBSQLLICENSETERMS=YES" -Wait } # 5. Клон репозитория if (-not (Test-Path $RepoDir)) { New-Item -ItemType Directory -Path (Split-Path $RepoDir -Parent) -Force | Out-Null git clone https://github.com/issus/altium-library.git $RepoDir } else { Push-Location $RepoDir git pull git lfs pull Pop-Location } # 6. Копируем DbLib в папку репо Copy-Item $DbLibPath -Destination $RepoDir -Force # 7. Проверки Write-Host "`n=== Проверки ===" -ForegroundColor Cyan $sqlncli_ver = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\SQLNCLI11" -ErrorAction SilentlyContinue).InstalledVersion Write-Host "SQLNCLI11 version: $sqlncli_ver" $tcp = Test-NetConnection -ComputerName db.altiumlibrary.com -Port 1433 -WarningAction SilentlyContinue Write-Host "db.altiumlibrary.com:1433 reachable: $($tcp.TcpTestSucceeded)" if (-not $tcp.TcpTestSucceeded) { Write-Warning "Порт 1433 недоступен — настрой VPN (см. раздел 4.2 инструкции)" } Write-Host "`nГотово. Открывай Altium → Components panel → File-based Libraries Preferences → Install → $DbLibPath" -ForegroundColor Green ``` Запуск: ```powershell .\install-celestial.ps1 -DbLibPath "$env:USERPROFILE\Downloads\Celestial_Altium_Library_-_altium_library.DbLib" ``` --- ## 9. Ссылки - Celestial Library портал: - GitHub репозиторий: - Get Started: - Troubleshooting: - Discord сообщества: - Mark Harris (автор): ### Microsoft — прямые ссылки на MSI - SQL Server Native Client 11 x64: - MSOLEDBSQL 19 x64 + Arm64: - MSOLEDBSQL 19 x86: - VC++ Redist 2015-2022 x64: - VC++ Redist 2015-2022 x86: --- ## 11. Self-hosted mirror (опционально, ускорение startup ×100) Разделы 1–9 подключают Altium напрямую к портальному SQL-серверу Mark Harris'а. Это работает, но: - Каждый запуск Altium — 30–90 секунд на ~600 метадата-запросов через WAN (OVH France). VPN добавляет ещё RTT. - Требуется VPN при каждой работе с библиотекой (если RKN режет 1433 к OVH, а он обычно режет). - Зависимость от доступности `db.altiumlibrary.com` — если Mark выключит сервер, всё встанет. - Нельзя добавлять свои компоненты в общую БД — только в отдельный custom DbLib. Альтернатива — **self-hosted mirror**: зеркалим и git-репо (SchLib/PcbLib/STEP через LFS), и SQL-БД (параметры компонентов). Клиенты ходят только в LAN, VPN нужен раз в неделю для sync-job'а. ### Результат - Startup Altium: **<1 сек** (проверено на Altium 26.4.1, январь 2026) - Нет зависимости от WAN и от upstream'а в ежедневной работе - Полный контроль — можно доливать свои views/компоненты - Обновления — раз в неделю автоматически по cron ### Архитектура ``` ┌──────────────────────────┐ pull mirror (Gitea, 24h) ┌─────────────────────────┐ │ github.com/issus/ │◀─────── HTTPS + LFS ─────────│ homework/altium-library │ │ altium-library │ │ (Gitea mirror, ~6 GB) │ └──────────────────────────┘ └──────────┬──────────────┘ │ git clone ▼ ┌─────────────────────────┐ │ Altium (client) │ │ SchLib/PcbLib/STEP │ │ from local clone │ └──────────┬──────────────┘ │ SQL queries ▼ ┌──────────────────────────┐ weekly sync (Gitea Actions) ┌─────────────────────────┐ │ db.altiumlibrary.com │◀───── pymssql, VPN ──────────│ homework/ │ │ :1433 (upstream SQL) │ │ celestial-mirror-db │ └──────────────────────────┘ │ + MSSQL 2022 Express │ │ on 192.168.9.147:1433 │ └─────────────────────────┘ ``` ### Два независимых компонента **Git-mirror** (`homework/altium-library`): - Gitea pull-mirror, интервал 24h, LFS включён - Содержит SchLib, PcbLib, STEP, sample projects — всё из upstream - Клиенты клонируют с `ssh://git@192.168.7.179:2222/homework/altium-library.git` или HTTPS по LAN **SQL-mirror** (`homework/celestial-mirror-db`): - Docker-стек: MSSQL 2022 Express на 192.168.9.147:1433 (LAN only) - Sync-скрипт `sync/celestial_sync.py`: best-effort, atomic swap через staging+`sp_rename`, row-count+schema fingerprint skip-логика - Gitea Actions workflow: `workflow_dispatch` + weekly cron понедельник 03:00 UTC - Два SQL-user'а: `sync_writer` (DDL+DML для CI) и `altium_reader` (SELECT для Altium) ### Как развернуть с нуля Последовательность в новой инсталляции (полный setup ~2 часа на первый раз, включая начальный sync ~40 мин): **1. Gitea pull-mirror git-репо** В Gitea UI: `+ → New Migration → GitHub` (или через API): ``` Clone URL: https://github.com/issus/altium-library.git Owner: homework Name: altium-library Type: Mirror (pull) Interval: 24h LFS: ✓ enabled ``` Либо через API: ```bash curl -X POST -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ "$GITEA_URL/api/v1/repos/migrate" -d '{ "clone_addr": "https://github.com/issus/altium-library.git", "repo_owner": "homework", "repo_name": "altium-library", "service": "git", "mirror": true, "mirror_interval": "24h0m0s", "lfs": true }' ``` Первичная миграция тянет 5–6 ГБ с GitHub, занимает 30–90 минут. **2. Docker-стек celestial-mirror-db** Клонировать `homework/celestial-mirror-db`, заполнить `.env` сильными паролями (см. `.env.example`), `docker compose up -d`. Init-контейнер создаст БД, логины, роли. Compose-файл биндит порт на 192.168.9.147:1433 (только LAN, не 0.0.0.0). Подробная инструкция — в README репо. **3. Первый sync** В Gitea UI: `Actions → Sync Celestial DB → Run workflow`, mode=full-sync. Занимает 30–60 минут через VPN. На VPN должен быть маршрут до `51.68.218.24` (OVH France) — на MikroTik это address-list с policy-based routing через xray/AmneziaWG. **4. Подключение клиента (Altium)** ```bash # Клиентская машина cd C:\Work git clone ssh://git@192.168.7.179:2222/homework/altium-library.git cd altium-library git lfs pull ``` Копируем портальный DbLib рядом как `-local.DbLib`, правим `ConnectionString`: ```ini # Было: ConnectionString = Provider=SQLNCLI11.1; User ID=alib_xxx; Password=xxx; \ Initial Catalog=altium_library; Data Source=db.altiumlibrary.com,1433; \ Initial File Name=""; Server SPN="" # Стало: ConnectionString = Provider=SQLNCLI11.1; User ID=altium_reader; Password=<из .env>; \ Initial Catalog=altium_library; Data Source=192.168.9.147,1433; \ Encrypt=Optional; TrustServerCertificate=Yes; \ Initial File Name=""; Server SPN="" ``` Изменилось: `User ID`, `Password`, `Data Source`, и добавлены `Encrypt=Optional; TrustServerCertificate=Yes` — потому что MSSQL в Docker с self-signed сертификатом. В Altium: `Components panel → File-based Libraries Preferences → Installed → Uninstall старого (портального) → Install нового (local)`. Startup <1 секунды. ### Поиск компонента по MPN без знания категории В DBLib-архитектуре Altium показывает компоненты в рамках одной view (категории). Если MPN известен, а категория нет: **Способ 1 — через Altium:** Hotkey `Shift+C` (File-based Libraries Search) → Search for: `*STSPIN32G4*`, Scope: `Libraries on path`, Search in: `Components`. Выдаст список попаданий с колонкой "Library Ref". **Способ 2 — SQL прямо в mirror:** Единичный запрос с dynamic SQL просматривает все tables и находит категорию: ```sql SET NOCOUNT ON; DECLARE @needle NVARCHAR(100) = N'%STSPIN32G4%'; DECLARE @sql NVARCHAR(MAX) = N''; SELECT @sql = @sql + 'IF EXISTS (SELECT 1 FROM [' + TABLE_NAME + '] WHERE [Part Number] LIKE @n) ' + 'SELECT ''' + TABLE_NAME + ''' AS [View], [Part Number], [Manufacturer], [Description] ' + 'FROM [' + TABLE_NAME + '] WHERE [Part Number] LIKE @n; ' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME NOT LIKE '%__staging' AND TABLE_NAME <> 'sync_status'; EXEC sp_executesql @sql, N'@n NVARCHAR(100)', @n=@needle; ``` Можно обернуть в shell-функцию `cfind`. ### Troubleshooting self-hosted mirror **Sync job висит на первой view ~10 минут и фейлится с "DBPROCESS is dead":** RKN режет TCP к `51.68.218.24:1433`. Проверяй что на VPN routing для этого IP действительно активен с 192.168.9.147. **`String or binary data would be truncated`:** Upstream view объявляет NVARCHAR(N) в INFORMATION_SCHEMA, но возвращает строки длиннее. Фикс в sync-скрипте — все строковые колонки мапятся в NVARCHAR(MAX). Если видишь такую ошибку — `celestial_sync.py` ещё не имеет фикса, обнови до коммита `b868b68` или новее. **Weekly sync не стартует:** Gitea Actions требует чтобы в репо был активный runner и на репо были включены Actions. Проверь `Settings → Actions → General → Enabled`. **Altium Components panel пустая:** SSH'нись в MSSQL и проверь: ```sql SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME NOT LIKE '%__staging'; -- Должно быть ~168. SELECT TOP 1 * FROM dbo.sync_status ORDER BY id DESC; -- status = 'ok', views_synced около 168, rows_synced ~250k. ``` ### Ссылки на репозитории - `homework/altium-library` — git mirror: - `homework/celestial-mirror-db` — Docker + sync: --- ## 12. Changelog этой инструкции | Дата | Изменения | |---|---| | 2026-04-18 | Первая версия. Проверено на Altium Designer 26.4.1, Windows 11, MSOLEDBSQL 19.4.1.0, SQLNCLI 11.4.x. | | 2026-04-18 | Добавлен раздел 11 — self-hosted mirror с git + SQL зеркалами. Проверено end-to-end: startup <1 сек, 256 677 строк в локальной БД, weekly sync active. |