Add troubleshooting docs: Caddy+Headscale proxy, NAT hairpinning, ODBC conflict
- caddy-headscale-proxy.md: HTTP redirect + HTTP/2 Upgrade header conflict fix - nat-hairpinning.md: Same-LAN public IP access issue and auto-detection - odbc-freetds-conflict.md: FreeTDS vs ODBC Driver 18 for MSSQL named instances - README.md: Install script commands (individual + unified) and doc index Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
69
odbc-freetds-conflict.md
Normal file
69
odbc-freetds-conflict.md
Normal file
@@ -0,0 +1,69 @@
|
||||
# MSSQL Named Instance — FreeTDS vs ODBC Driver 18 충돌
|
||||
|
||||
> 날짜: 2026-04-06
|
||||
> 환경: Ubuntu 24.04 LXC, pyodbc, MSSQL Server named instance
|
||||
|
||||
## 증상
|
||||
|
||||
Ubuntu CT에서 Flask API 서버가 MSSQL에 연결 실패:
|
||||
```
|
||||
[FreeTDS][SQL Server]Unable to connect to data source
|
||||
PM_BASE 연결 실패
|
||||
```
|
||||
|
||||
## 원인
|
||||
|
||||
### Named Instance 접속 구조
|
||||
|
||||
팜IT3000 MSSQL 서버: `192.168.0.201\PM2014`
|
||||
|
||||
Named instance는 SQL Server Browser 서비스를 통해 **동적 포트**를 할당받음:
|
||||
1. 클라이언트 → SQL Server Browser (UDP 1434) → "PM2014는 포트 49172"
|
||||
2. 클라이언트 → SQL Server (TCP 49172) → 연결
|
||||
|
||||
**FreeTDS는 이 프로토콜을 지원하지 않음** — 고정 포트만 가능.
|
||||
|
||||
### 드라이버 선택 우선순위 문제
|
||||
|
||||
`dbsetup.py`에서 Linux 드라이버 우선순위:
|
||||
```python
|
||||
linux_drivers = [
|
||||
"ODBC Driver 18 for SQL Server",
|
||||
"ODBC Driver 17 for SQL Server",
|
||||
"FreeTDS", # ← preferred_drivers 맨 앞에 삽입됨
|
||||
]
|
||||
```
|
||||
|
||||
`tdsodbc` 패키지가 설치되면 `pyodbc.drivers()`에서 FreeTDS가 감지되어 ODBC Driver 18보다 **먼저 선택됨**.
|
||||
|
||||
```
|
||||
Before: pyodbc.drivers() → ['FreeTDS', 'ODBC Driver 18 for SQL Server']
|
||||
→ FreeTDS 선택 → named instance 접속 실패
|
||||
```
|
||||
|
||||
## 해결
|
||||
|
||||
```bash
|
||||
# 1. Microsoft ODBC Driver 18 설치
|
||||
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | \
|
||||
gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
|
||||
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft-prod.gpg] \
|
||||
https://packages.microsoft.com/ubuntu/24.04/prod noble main" \
|
||||
> /etc/apt/sources.list.d/mssql-release.list
|
||||
apt-get update && ACCEPT_EULA=Y apt-get install -y msodbcsql18
|
||||
|
||||
# 2. FreeTDS ODBC 드라이버 제거 (충돌 방지)
|
||||
apt-get remove -y tdsodbc
|
||||
odbcinst -u -d -n FreeTDS
|
||||
```
|
||||
|
||||
```
|
||||
After: pyodbc.drivers() → ['ODBC Driver 18 for SQL Server']
|
||||
→ ODBC Driver 18 선택 → named instance 정상 접속
|
||||
```
|
||||
|
||||
## 주의사항
|
||||
|
||||
- `tdsodbc` 패키지만 제거. `unixodbc`, `freetds-dev` 등 라이브러리는 유지 가능
|
||||
- 새 약국 CT 셋업 시 **절대 `tdsodbc` 설치하지 않을 것**
|
||||
- 통합 설치 스크립트(`pharmq-setup.sh`) Phase 6에서 자동 처리됨
|
||||
Reference in New Issue
Block a user