Files
claude-skills/pcb-ai-engineer/references/altium_celestial_library_setup.md
T
creator 9f3e7f82e7 pcb-ai-engineer/refs: add self-hosted mirror section (Altium Celestial)
The original setup guide covered connecting Altium directly to the
portal SQL server. That works but has three drawbacks under RU
conditions: ~60-second Altium startup over VPN, daily VPN dependency,
single point of failure at Mark Harris's hosting.

New section 11 documents the self-hosted alternative we just built and
verified end-to-end:

- Two independent mirrors:
  - homework/altium-library: Gitea pull-mirror of issus/altium-library
    with LFS (SchLib + PcbLib + STEP, ~6 GB)
  - homework/celestial-mirror-db: MSSQL 2022 Express in Docker on
    192.168.9.147, populated weekly by a pymssql-based sync job with
    best-effort + row-count/schema fingerprint skip logic
- Results: Altium startup <1s (100x faster), VPN only needed once a
  week for the sync runner, full control over the dataset
- Full deployment sequence (Gitea migrate API → docker compose up →
  first manual full-sync → client DbLib rewrite)
- ConnectionString rewrite details (altium_reader user, LAN IP,
  Encrypt=Optional/TrustServerCertificate=Yes for self-signed cert)
- MPN-to-view lookup strategies (Shift+C in Altium; dynamic SQL that
  scans all 168 tables)
- Troubleshooting specific to the mirror stack
2026-04-18 22:32:25 +00:00

764 lines
35 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Подключение 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. Зарегистрируйся на портале
Открой <https://portal.altiumlibrary.com/> → `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: <https://aka.ms/vs/17/release/vc_redist.x64.exe>
- x86: <https://aka.ms/vs/17/release/vc_redist.x86.exe>
### 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 мс — до 23 минут. 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 портал: <https://altiumlibrary.com/>
- GitHub репозиторий: <https://github.com/issus/altium-library>
- Get Started: <https://altiumlibrary.com/GetStarted/ConfigureAltium>
- Troubleshooting: <https://altiumlibrary.com/GetStarted/Troubleshooting>
- Discord сообщества: <https://discord.gg/MEQ5Xe5>
- Mark Harris (автор): <https://resources.altium.com/experts/mark-harris>
### Microsoft — прямые ссылки на MSI
- SQL Server Native Client 11 x64:
<https://download.microsoft.com/download/B/E/D/BED73AAC-3C8A-43F5-AF4F-EB4FEA6C8F3A/ENU/x64/sqlncli.msi>
- MSOLEDBSQL 19 x64 + Arm64:
<https://go.microsoft.com/fwlink/?linkid=2318101>
- MSOLEDBSQL 19 x86:
<https://go.microsoft.com/fwlink/?linkid=2318001>
- VC++ Redist 2015-2022 x64:
<https://aka.ms/vs/17/release/vc_redist.x64.exe>
- VC++ Redist 2015-2022 x86:
<https://aka.ms/vs/17/release/vc_redist.x86.exe>
---
## 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: <https://git.h3fq32.golive.ru/homework/altium-library>
- `homework/celestial-mirror-db` — Docker + sync: <https://git.h3fq32.golive.ru/homework/celestial-mirror-db>
---
## 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. |