9f3e7f82e7
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
764 lines
35 KiB
Markdown
764 lines
35 KiB
Markdown
# Подключение 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 мс — до 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 портал: <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. |
|