From b2af92724946b2eb396f65960806f6689a12f9cc Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Tue, 27 Jan 2026 11:28:39 +0000 Subject: [PATCH 01/18] Update mssql.yml --- .github/workflows/mssql.yml | 55 ++++++++++++++----------------------- 1 file changed, 20 insertions(+), 35 deletions(-) diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index 462abb1..82ca255 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -6,7 +6,6 @@ on: - '.github/workflows/mssql.yml' - 'composer.json' - 'phpunit.xml.dist' - push: branches: ['master'] paths: @@ -15,18 +14,16 @@ on: - '.github/workflows/mssql.yml' - 'composer.json' - 'phpunit.xml.dist' - name: mssql - jobs: tests: + permissions: + contents: read + pull-requests: write name: PHP ${{ matrix.php }}-mssql-${{ matrix.mssql.server }} - env: extensions: pdo, pdo_sqlsrv-5.12 - runs-on: ${{ matrix.mssql.os || 'ubuntu-latest' }} - strategy: matrix: php: @@ -35,23 +32,19 @@ jobs: - 8.3 - 8.4 - 8.5 - mssql: + - server: 2017-latest + odbc-version: 17 + flag: "" + tools-path: "/opt/mssql-tools" + - server: 2019-latest + odbc-version: 18 + flag: "-C" + tools-path: "/opt/mssql-tools18" - server: 2022-latest odbc-version: 18 flag: "-C" - - include: - - php: 8.3 - mssql: - server: 2017-latest - os: ubuntu-20.04 - - php: 8.3 - mssql: - server: 2019-latest - odbc-version: 18 - flag: "-C" - + tools-path: "/opt/mssql-tools18" services: mssql: image: mcr.microsoft.com/mssql/server:${{ matrix.mssql.server }} @@ -61,20 +54,18 @@ jobs: MSSQL_PID: Developer ports: - 1433:1433 - options: --name=mssql --health-cmd="/opt/mssql-tools${{ matrix.mssql.odbc-version }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'SELECT 1'" --health-interval=10s --health-timeout=5s --health-retries=3 - + options: --name=mssql --health-cmd="${{ matrix.mssql.tools-path }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'SELECT 1'" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - name: Install ODBC driver. run: | - sudo curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list - sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 - + curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /usr/share/keyrings/microsoft-prod.gpg > /dev/null + curl -fsSL https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list + sudo apt-get update + sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 || sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 - name: Checkout - uses: actions/checkout@v3 - + uses: actions/checkout@v6 - name: Create MS SQL Database - run: docker exec -i mssql /opt/mssql-tools${{ matrix.mssql.odbc-version }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'CREATE DATABASE yiitest' - + run: docker exec -i mssql ${{ matrix.mssql.tools-path }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'CREATE DATABASE yiitest' - name: Install PHP with extensions uses: shivammathur/setup-php@v2 with: @@ -83,10 +74,8 @@ jobs: ini-values: date.timezone='UTC' coverage: pcov tools: composer:v2, pecl - - name: Determine composer cache directory run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV - - name: Cache dependencies installed with composer uses: actions/cache@v4 with: @@ -94,13 +83,10 @@ jobs: key: php${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }} restore-keys: | php${{ matrix.php }}-composer- - - name: Update composer run: composer self-update - - name: Install dependencies with composer run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi - - name: Run tests with phpunit run: vendor/bin/phpunit --testsuite=Mssql --coverage-clover=coverage.xml --colors=always env: @@ -110,9 +96,8 @@ jobs: CYCLE_MSSQL_PORT: 1433 CYCLE_MSSQL_USER: SA CYCLE_MSSQL_PASSWORD: YourStrong!Passw0rd - - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }} - files: ./coverage.xml + files: ./coverage.xml \ No newline at end of file From 42b4c128b94144f40c36725ae9f9a9de1ba97c7c Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Wed, 28 Jan 2026 12:38:40 +0000 Subject: [PATCH 02/18] Update .github/workflows/mssql.yml Co-authored-by: Sergei Predvoditelev --- .github/workflows/mssql.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index 82ca255..28dbbc7 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -100,4 +100,4 @@ jobs: uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }} - files: ./coverage.xml \ No newline at end of file + files: ./coverage.xml From 1d14db8cd9ad41c6b8f1e8a01cf60bdc1a61c486 Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Wed, 28 Jan 2026 12:38:50 +0000 Subject: [PATCH 03/18] Update .github/workflows/mssql.yml Co-authored-by: Sergei Predvoditelev --- .github/workflows/mssql.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index 28dbbc7..c2d06a2 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -61,7 +61,7 @@ jobs: curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /usr/share/keyrings/microsoft-prod.gpg > /dev/null curl -fsSL https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list sudo apt-get update - sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 || sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 + sudo ACCEPT_EULA=Y apt-get install -y msodbcsql{{ matrix.mssql.odbc-version }} - name: Checkout uses: actions/checkout@v6 - name: Create MS SQL Database From b5d6f4fd9cdc4c1aed70600283cd9825e9a7393a Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Wed, 28 Jan 2026 15:51:52 +0300 Subject: [PATCH 04/18] Update .github/workflows/mssql.yml --- .github/workflows/mssql.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index c2d06a2..f040eb1 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -61,7 +61,7 @@ jobs: curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /usr/share/keyrings/microsoft-prod.gpg > /dev/null curl -fsSL https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list sudo apt-get update - sudo ACCEPT_EULA=Y apt-get install -y msodbcsql{{ matrix.mssql.odbc-version }} + sudo ACCEPT_EULA=Y apt-get install -y msodbcsql${{ matrix.mssql.odbc-version }} - name: Checkout uses: actions/checkout@v6 - name: Create MS SQL Database From 6d3141886053f527e1d126637b3be787324562b1 Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Wed, 28 Jan 2026 17:27:16 +0000 Subject: [PATCH 05/18] Update mssql.yml with Copilot suggestion First sed: Changes HTTP to HTTPS in the repository URL (more secure and sometimes required) Second sed: Adds the [signed-by=/usr/share/keyrings/microsoft-prod.gpg] directive to tell apt which keyring to use for verifying packages This ensures apt can properly verify the Microsoft repository packages using the keyring you stored in the first curl command. --- .github/workflows/mssql.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index f040eb1..9c865e2 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -60,6 +60,8 @@ jobs: run: | curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /usr/share/keyrings/microsoft-prod.gpg > /dev/null curl -fsSL https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list + sudo sed -i 's|http://|https://|g' /etc/apt/sources.list.d/mssql-release.list + sudo sed -i '$ s|$| [signed-by=/usr/share/keyrings/microsoft-prod.gpg]|' /etc/apt/sources.list.d/mssql-release.list sudo apt-get update sudo ACCEPT_EULA=Y apt-get install -y msodbcsql${{ matrix.mssql.odbc-version }} - name: Checkout From de89cad954599d0332b23f0f231dedc60fc65699 Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Wed, 28 Jan 2026 18:30:01 +0000 Subject: [PATCH 06/18] Revert --- .github/workflows/mssql.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index 9c865e2..82ca255 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -60,10 +60,8 @@ jobs: run: | curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /usr/share/keyrings/microsoft-prod.gpg > /dev/null curl -fsSL https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list - sudo sed -i 's|http://|https://|g' /etc/apt/sources.list.d/mssql-release.list - sudo sed -i '$ s|$| [signed-by=/usr/share/keyrings/microsoft-prod.gpg]|' /etc/apt/sources.list.d/mssql-release.list sudo apt-get update - sudo ACCEPT_EULA=Y apt-get install -y msodbcsql${{ matrix.mssql.odbc-version }} + sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 || sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 - name: Checkout uses: actions/checkout@v6 - name: Create MS SQL Database @@ -102,4 +100,4 @@ jobs: uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }} - files: ./coverage.xml + files: ./coverage.xml \ No newline at end of file From a8ee8b8493ec10c307ebee0dda35e11c4b6f9a2b Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Wed, 28 Jan 2026 19:01:50 +0000 Subject: [PATCH 07/18] Create microsoft-ubuntu-odbc-drivers.md --- docs/microsoft-ubuntu-odbc-drivers.md | 332 ++++++++++++++++++++++++++ 1 file changed, 332 insertions(+) create mode 100644 docs/microsoft-ubuntu-odbc-drivers.md diff --git a/docs/microsoft-ubuntu-odbc-drivers.md b/docs/microsoft-ubuntu-odbc-drivers.md new file mode 100644 index 0000000..d482868 --- /dev/null +++ b/docs/microsoft-ubuntu-odbc-drivers.md @@ -0,0 +1,332 @@ +# ODBC Drivers in Microsoft's Ubuntu 22.04 Repository + +## Repository Information + +**Repository URL:** `deb [arch=amd64,arm64,armhf] + https://packages.microsoft.com/ubuntu/22.04/prod jammy main` + +This repository contains various Microsoft packages for Ubuntu 22.04 + (Jammy Jellyfish), supporting multiple architectures: amd64 (x86_64), + arm64 (ARM 64-bit), and armhf (ARM 32-bit hard float). + +## ODBC Drivers + +The repository contains two main ODBC driver packages for SQL Server: + +### 1. Microsoft ODBC Driver 17 for SQL Server (`msodbcsql17`) + +**Package Name:** `msodbcsql17` +**Architecture Support:** amd64 only +**Latest Version:** 17.10.6.1-1 (as of April 2024) + +**Available Versions:** +- `msodbcsql17_17.10.1.1-1_amd64.deb` (743.4 KB) +- `msodbcsql17_17.10.2.1-1_amd64.deb` (744.5 KB) +- `msodbcsql17_17.10.4.1-1_amd64.deb` (744.6 KB) +- `msodbcsql17_17.10.5.1-1_amd64.deb` (749.1 KB) +- `msodbcsql17_17.10.6.1-1_amd64.deb` (746.3 KB) - Latest + +**Key Features:** +- Supports SQL Server 2008 and later +- Production-ready driver +- Widely used in enterprise environments +- Limited to x86_64 architecture + +**Installation:** +```bash +sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 +``` + +### 2. Microsoft ODBC Driver 18 for SQL Server (`msodbcsql18`) + +**Package Name:** `msodbcsql18` +**Architecture Support:** amd64, arm64 +**Latest Version:** 18.5.1.1-1 (as of 2024) + +**Available Versions (Sample):** +- `msodbcsql18_18.1.1.1-1_amd64.deb` (751.6 KB) / `_arm64.deb` (685.7 KB) +- `msodbcsql18_18.1.2.1-1_amd64.deb` (752.0 KB) / `_arm64.deb` (686.5 KB) +- `msodbcsql18_18.2.1.1-1_amd64.deb` (752.8 KB) / `_arm64.deb` (687.3 KB) +- `msodbcsql18_18.2.2.1-1_amd64.deb` (752.6 KB) / `_arm64.deb` (687.4 KB) +- `msodbcsql18_18.3.1.1-1_amd64.deb` (756.5 KB) / `_arm64.deb` (689.8 KB) +- `msodbcsql18_18.3.2.1-1_amd64.deb` (755.9 KB) / `_arm64.deb` (690.5 KB) +- `msodbcsql18_18.3.3.1-1_amd64.deb` (755.1 KB) / `_arm64.deb` (689.3 KB) +- `msodbcsql18_18.4.1.1-1_amd64.deb` (755.2 KB) / `_arm64.deb` (689.5 KB) +- `msodbcsql18_18.5.1.1-1_amd64.deb` / `_arm64.deb` - Latest + +**Key Features:** +- Latest driver with modern security features +- TLS 1.2 and TLS 1.3 support +- Azure Active Directory authentication support +- Always Encrypted with secure enclaves support +- ARM64 support (great for Apple Silicon, Raspberry Pi, AWS Graviton) +- Supports SQL Server 2012 and later + +**Installation:** +```bash +sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 +``` + +## SQL Server Command-Line Tools + +### mssql-tools (Legacy) + +**Package Name:** `mssql-tools` +**Size:** 210.7 KB +**Tools Included:** `sqlcmd`, `bcp` + +**Installation:** +```bash +sudo ACCEPT_EULA=Y apt-get install -y mssql-tools +echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc +source ~/.bashrc +``` + +### mssql-tools18 (Current) + +**Package Name:** `mssql-tools18` +**Latest Version:** 18.x +**Tools Included:** `sqlcmd`, `bcp` (version 18) + +**Installation:** +```bash +sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18 +echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc +source ~/.bashrc +``` + +**Key Features:** +- Compatible with ODBC Driver 18 +- Modern encryption support +- Updated utilities for SQL Server management + +## Architecture Comparison + +| Package | amd64 | arm64 | armhf | +|---------|-------|-------|-------| +| msodbcsql17 | ✅ | ❌ | ❌ | +| msodbcsql18 | ✅ | ✅ | ❌ | +| mssql-tools | ✅ | ✅ | ✅ | +| mssql-tools18 | ✅ | ✅ | ✅ | + +## Other Notable Packages in the Repository + +The Microsoft Ubuntu 22.04 repository contains many other packages beyond ODBC drivers: + +### Container/Docker Tools +- **moby-engine** - Docker engine (22.1 MB) +- **moby-cli** - Docker CLI (12.5 MB) +- **moby-containerd** - Container runtime (25.4 MB, supports amd64, arm64, armhf) +- **moby-runc** - Container runtime (5.1 MB) +- **moby-compose** - Docker Compose (9.5 MB) +- **moby-buildx** - Docker build extensions (25.0 MB) + +### Security & Identity +- **microsoft-identity-broker** - Identity broker (79.8 MB) +- **microsoft-identity-diagnostics** - Identity diagnostics (3.7 MB) +- **mdatp** - Microsoft Defender for Endpoint (120.3 MB) +- **mde-netfilter** - Network filtering (25.5 kB) + +### Development Tools +- **msft-golang** - Microsoft's Go distribution (48.5 MB) +- **msopenjdk-11** - OpenJDK 11 (194.0 MB) +- **msopenjdk-17** - OpenJDK 17 (182.4 MB) +- **msopenjdk-21** - OpenJDK 21 (176.4 MB) +- **msopenjdk-25** - OpenJDK 25 (190.1 MB) + +### .NET Tools +- **netstandard-targeting-pack-2.1** - .NET Standard targeting pack (1.5 MB) +- **aspnetcore-runtime** - ASP.NET Core runtime +- **dotnet-sdk** - .NET SDK + +### Other Tools +- **microsoft-azurevpnclient** - Azure VPN client (12.6 MB) +- **msalsdk-dbusclient** - MSAL DBus client (9.3 kB) + +## Complete Installation Guide + +### Step 1: Add Microsoft Repository + +```bash +# Download and install the Microsoft repository GPG key +curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc + +# Add the Microsoft repository +curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list + +# Update package lists +sudo apt-get update +``` + +### Step 2: Install ODBC Driver 18 (Recommended) + +```bash +# Install ODBC Driver 18 +sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 + +# Optional: Install command-line tools +sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18 + +# Optional: Install development headers +sudo apt-get install -y unixodbc-dev + +# Add tools to PATH +echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc +source ~/.bashrc +``` + +### Step 3: Verify Installation + +```bash +# Check ODBC driver installation +odbcinst -q -d -n "ODBC Driver 18 for SQL Server" + +# Test sqlcmd (if installed) +sqlcmd -? +``` + +## Version Selection Guide + +### When to use ODBC Driver 17: +- Legacy applications requiring Driver 17 +- Compatibility with older SQL Server versions +- Only need x86_64 support +- Existing deployments using Driver 17 + +### When to use ODBC Driver 18: +- New deployments (recommended) +- Need ARM64 support (Apple Silicon, AWS Graviton, etc.) +- Require latest security features (TLS 1.3) +- Azure Active Directory authentication +- Always Encrypted with secure enclaves +- Better performance and modern standards + +## Connection String Examples + +### Using ODBC Driver 17 +``` +Driver={ODBC Driver 17 for SQL Server};Server=myserver.database.windows.net; +Database=mydb;Uid=myuser;Pwd=mypassword; +``` + +### Using ODBC Driver 18 +``` +Driver={ODBC Driver 18 for SQL Server};Server=myserver.database.windows.net; +Database=mydb;Uid=myuser;Pwd=mypassword;Encrypt=yes;TrustServerCertificate=no; +``` + +**Important Note:** Driver 18 requires explicit encryption settings. + Always include `Encrypt=yes` for secure connections. + +## Dependencies + +Both ODBC drivers require: +- **unixODBC** (>= 2.3.1) - ODBC Driver Manager +- **libc6** (>= 2.21) +- **libstdc++6** (>= 4.9) +- **libkrb5-3** - Kerberos authentication +- **openssl** - SSL/TLS support + +These dependencies are usually automatically installed by `apt`. + +## EULA Acceptance + +All Microsoft ODBC packages require EULA acceptance. You can: + +**Option 1:** Accept during installation +```bash +sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 +``` + +**Option 2:** Pre-accept for automated deployments (Driver 18.4+) +```bash +sudo mkdir -p /opt/microsoft/msodbcsql18 +sudo touch /opt/microsoft/msodbcsql18/ACCEPT_EULA +``` + +## Troubleshooting + +### Common Issues + +**Issue 1: Repository Not Found** +```bash +# Ensure the repository is properly added +cat /etc/apt/sources.list.d/mssql-release.list + +# Should contain: +# deb [arch=amd64,arm64,armhf signed-by=/etc/apt/trusted.gpg.d/microsoft.asc] + https://packages.microsoft.com/ubuntu/22.04/prod jammy main +``` + +**Issue 2: EULA Not Accepted** +```bash +# Error: "Package msodbcsql18 has no installation candidate" +# Solution: Set ACCEPT_EULA=Y environment variable +sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 +``` + +**Issue 3: Missing Dependencies** +```bash +# Install unixODBC if missing +sudo apt-get install -y unixodbc unixodbc-dev +``` + +**Issue 4: Driver Not Found by Application** +```bash +# List installed drivers +odbcinst -q -d + +# If driver not listed, check installation +dpkg -l | grep msodbcsql +``` + +## ARM64 Support + +ODBC Driver 18 provides ARM64 support, making it suitable for: +- **Apple Silicon Macs** (M1, M2, M3, M4) +- **AWS Graviton** instances +- **Azure ARM-based VMs** +- **Raspberry Pi 4/5** (64-bit OS) +- **Oracle Cloud ARM instances** + +Example ARM64 installation: +```bash +# On ARM64 Ubuntu 22.04 +sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18:arm64 +``` + +## Security Considerations + +1. **Always use encrypted connections** - Set `Encrypt=yes` in connection strings +2. **Validate certificates** - Use `TrustServerCertificate=no` in production +3. **Keep drivers updated** - Regularly update to latest versions for security patches +4. **Use strong authentication** - Implement Azure AD or certificate-based auth where possible +5. **Restrict network access** - Use firewalls and VPNs for database connections + +## References + +- [Microsoft ODBC Driver Documentation](https://learn.microsoft.com/en-us/sql/connect/odbc/) +- [Download ODBC Driver for SQL Server](https://learn.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server) +- [Installing the Linux Driver](https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server) +- [Release Notes](https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/release-notes-odbc-sql-server-linux-mac) + +## Summary + +The Microsoft Ubuntu 22.04 repository (`packages.microsoft.com/ubuntu/22.04/prod`) contains: + +**Primary ODBC Drivers:** +- **msodbcsql17** - Version 17.x (amd64 only) +- **msodbcsql18** - Version 18.x (amd64, arm64) - **Recommended** + +**Command-Line Tools:** +- **mssql-tools** - Legacy tools +- **mssql-tools18** - Current tools (recommended) + +**Additional Packages:** +- Container tools (Docker/Moby) +- Security tools (Defender, Identity) +- Development tools (Go, OpenJDK, .NET) +- Azure tools (VPN client) + +For most use cases, **ODBC Driver 18 (`msodbcsql18`)** is the recommended choice + due to its modern features, ARM64 support, and enhanced security capabilities. From c39ea96a93820f063dbea2647a86e7b14a3d98dc Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Fri, 30 Jan 2026 15:12:14 +0000 Subject: [PATCH 08/18] Update mssql.yml --- .github/workflows/mssql.yml | 51 ++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index 82ca255..d723186 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -6,6 +6,7 @@ on: - '.github/workflows/mssql.yml' - 'composer.json' - 'phpunit.xml.dist' + push: branches: ['master'] paths: @@ -14,16 +15,18 @@ on: - '.github/workflows/mssql.yml' - 'composer.json' - 'phpunit.xml.dist' + name: mssql + jobs: tests: - permissions: - contents: read - pull-requests: write name: PHP ${{ matrix.php }}-mssql-${{ matrix.mssql.server }} + env: extensions: pdo, pdo_sqlsrv-5.12 + runs-on: ${{ matrix.mssql.os || 'ubuntu-latest' }} + strategy: matrix: php: @@ -32,19 +35,23 @@ jobs: - 8.3 - 8.4 - 8.5 + mssql: - - server: 2017-latest - odbc-version: 17 - flag: "" - tools-path: "/opt/mssql-tools" - - server: 2019-latest - odbc-version: 18 - flag: "-C" - tools-path: "/opt/mssql-tools18" - server: 2022-latest odbc-version: 18 flag: "-C" - tools-path: "/opt/mssql-tools18" + include: + - php: 8.3 + mssql: + server: 2017-latest + odbc-version: 18 + flag: "-C" + - php: 8.3 + mssql: + server: 2019-latest + odbc-version: 18 + flag: "-C" + services: mssql: image: mcr.microsoft.com/mssql/server:${{ matrix.mssql.server }} @@ -54,18 +61,20 @@ jobs: MSSQL_PID: Developer ports: - 1433:1433 - options: --name=mssql --health-cmd="${{ matrix.mssql.tools-path }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'SELECT 1'" --health-interval=10s --health-timeout=5s --health-retries=3 + options: --name=mssql --health-cmd="/opt/mssql-tools${{ matrix.mssql.odbc-version }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'SELECT 1'" --health-interval=10s --health-timeout=5s --health-retries=3 + steps: - name: Install ODBC driver. run: | - curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /usr/share/keyrings/microsoft-prod.gpg > /dev/null - curl -fsSL https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list - sudo apt-get update - sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 || sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 + sudo curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list + sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 + - name: Checkout uses: actions/checkout@v6 + - name: Create MS SQL Database - run: docker exec -i mssql ${{ matrix.mssql.tools-path }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'CREATE DATABASE yiitest' + run: docker exec -i mssql /opt/mssql-tools${{ matrix.mssql.odbc-version }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'CREATE DATABASE yiitest' + - name: Install PHP with extensions uses: shivammathur/setup-php@v2 with: @@ -74,8 +83,10 @@ jobs: ini-values: date.timezone='UTC' coverage: pcov tools: composer:v2, pecl + - name: Determine composer cache directory run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV + - name: Cache dependencies installed with composer uses: actions/cache@v4 with: @@ -83,10 +94,13 @@ jobs: key: php${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }} restore-keys: | php${{ matrix.php }}-composer- + - name: Update composer run: composer self-update + - name: Install dependencies with composer run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi + - name: Run tests with phpunit run: vendor/bin/phpunit --testsuite=Mssql --coverage-clover=coverage.xml --colors=always env: @@ -96,6 +110,7 @@ jobs: CYCLE_MSSQL_PORT: 1433 CYCLE_MSSQL_USER: SA CYCLE_MSSQL_PASSWORD: YourStrong!Passw0rd + - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 with: From 210fb04546ece4f4af8f179c64f721109bd59653 Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Fri, 30 Jan 2026 15:23:26 +0000 Subject: [PATCH 09/18] Update mssql.yml --- .github/workflows/mssql.yml | 49 +++++++++++++------------------------ 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index d723186..a8dfc64 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -6,7 +6,6 @@ on: - '.github/workflows/mssql.yml' - 'composer.json' - 'phpunit.xml.dist' - push: branches: ['master'] paths: @@ -15,18 +14,16 @@ on: - '.github/workflows/mssql.yml' - 'composer.json' - 'phpunit.xml.dist' - name: mssql - jobs: tests: + permissions: + contents: read + pull-requests: write name: PHP ${{ matrix.php }}-mssql-${{ matrix.mssql.server }} - env: extensions: pdo, pdo_sqlsrv-5.12 - runs-on: ${{ matrix.mssql.os || 'ubuntu-latest' }} - strategy: matrix: php: @@ -35,23 +32,19 @@ jobs: - 8.3 - 8.4 - 8.5 - mssql: + - server: 2017-latest + odbc-version: 18 + flag: "-C" + tools-path: "/opt/mssql-tools18" + - server: 2019-latest + odbc-version: 18 + flag: "-C" + tools-path: "/opt/mssql-tools18" - server: 2022-latest odbc-version: 18 flag: "-C" - include: - - php: 8.3 - mssql: - server: 2017-latest - odbc-version: 18 - flag: "-C" - - php: 8.3 - mssql: - server: 2019-latest - odbc-version: 18 - flag: "-C" - + tools-path: "/opt/mssql-tools18" services: mssql: image: mcr.microsoft.com/mssql/server:${{ matrix.mssql.server }} @@ -61,20 +54,18 @@ jobs: MSSQL_PID: Developer ports: - 1433:1433 - options: --name=mssql --health-cmd="/opt/mssql-tools${{ matrix.mssql.odbc-version }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'SELECT 1'" --health-interval=10s --health-timeout=5s --health-retries=3 - + options: --name=mssql --health-cmd="${{ matrix.mssql.tools-path }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'SELECT 1'" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - name: Install ODBC driver. run: | - sudo curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list + curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /usr/share/keyrings/microsoft-prod.gpg > /dev/null + curl -fsSL https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list + sudo apt-get update sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 - - name: Checkout uses: actions/checkout@v6 - - name: Create MS SQL Database - run: docker exec -i mssql /opt/mssql-tools${{ matrix.mssql.odbc-version }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'CREATE DATABASE yiitest' - + run: docker exec -i mssql ${{ matrix.mssql.tools-path }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'CREATE DATABASE yiitest' - name: Install PHP with extensions uses: shivammathur/setup-php@v2 with: @@ -83,10 +74,8 @@ jobs: ini-values: date.timezone='UTC' coverage: pcov tools: composer:v2, pecl - - name: Determine composer cache directory run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV - - name: Cache dependencies installed with composer uses: actions/cache@v4 with: @@ -94,13 +83,10 @@ jobs: key: php${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }} restore-keys: | php${{ matrix.php }}-composer- - - name: Update composer run: composer self-update - - name: Install dependencies with composer run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi - - name: Run tests with phpunit run: vendor/bin/phpunit --testsuite=Mssql --coverage-clover=coverage.xml --colors=always env: @@ -110,7 +96,6 @@ jobs: CYCLE_MSSQL_PORT: 1433 CYCLE_MSSQL_USER: SA CYCLE_MSSQL_PASSWORD: YourStrong!Passw0rd - - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 with: From eecd49fa66208d62a201be823498a14dbb944507 Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Fri, 30 Jan 2026 15:31:19 +0000 Subject: [PATCH 10/18] revert --- .github/workflows/mssql.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index a8dfc64..82ca255 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -34,9 +34,9 @@ jobs: - 8.5 mssql: - server: 2017-latest - odbc-version: 18 - flag: "-C" - tools-path: "/opt/mssql-tools18" + odbc-version: 17 + flag: "" + tools-path: "/opt/mssql-tools" - server: 2019-latest odbc-version: 18 flag: "-C" @@ -61,7 +61,7 @@ jobs: curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /usr/share/keyrings/microsoft-prod.gpg > /dev/null curl -fsSL https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list sudo apt-get update - sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 + sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 || sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 - name: Checkout uses: actions/checkout@v6 - name: Create MS SQL Database From de41f8c250aa1ba060d17a407629f85530369b3b Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Sun, 1 Feb 2026 10:41:03 +0000 Subject: [PATCH 11/18] Delete microsoft-ubuntu-odbc-drivers.md --- docs/microsoft-ubuntu-odbc-drivers.md | 332 -------------------------- 1 file changed, 332 deletions(-) delete mode 100644 docs/microsoft-ubuntu-odbc-drivers.md diff --git a/docs/microsoft-ubuntu-odbc-drivers.md b/docs/microsoft-ubuntu-odbc-drivers.md deleted file mode 100644 index d482868..0000000 --- a/docs/microsoft-ubuntu-odbc-drivers.md +++ /dev/null @@ -1,332 +0,0 @@ -# ODBC Drivers in Microsoft's Ubuntu 22.04 Repository - -## Repository Information - -**Repository URL:** `deb [arch=amd64,arm64,armhf] - https://packages.microsoft.com/ubuntu/22.04/prod jammy main` - -This repository contains various Microsoft packages for Ubuntu 22.04 - (Jammy Jellyfish), supporting multiple architectures: amd64 (x86_64), - arm64 (ARM 64-bit), and armhf (ARM 32-bit hard float). - -## ODBC Drivers - -The repository contains two main ODBC driver packages for SQL Server: - -### 1. Microsoft ODBC Driver 17 for SQL Server (`msodbcsql17`) - -**Package Name:** `msodbcsql17` -**Architecture Support:** amd64 only -**Latest Version:** 17.10.6.1-1 (as of April 2024) - -**Available Versions:** -- `msodbcsql17_17.10.1.1-1_amd64.deb` (743.4 KB) -- `msodbcsql17_17.10.2.1-1_amd64.deb` (744.5 KB) -- `msodbcsql17_17.10.4.1-1_amd64.deb` (744.6 KB) -- `msodbcsql17_17.10.5.1-1_amd64.deb` (749.1 KB) -- `msodbcsql17_17.10.6.1-1_amd64.deb` (746.3 KB) - Latest - -**Key Features:** -- Supports SQL Server 2008 and later -- Production-ready driver -- Widely used in enterprise environments -- Limited to x86_64 architecture - -**Installation:** -```bash -sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 -``` - -### 2. Microsoft ODBC Driver 18 for SQL Server (`msodbcsql18`) - -**Package Name:** `msodbcsql18` -**Architecture Support:** amd64, arm64 -**Latest Version:** 18.5.1.1-1 (as of 2024) - -**Available Versions (Sample):** -- `msodbcsql18_18.1.1.1-1_amd64.deb` (751.6 KB) / `_arm64.deb` (685.7 KB) -- `msodbcsql18_18.1.2.1-1_amd64.deb` (752.0 KB) / `_arm64.deb` (686.5 KB) -- `msodbcsql18_18.2.1.1-1_amd64.deb` (752.8 KB) / `_arm64.deb` (687.3 KB) -- `msodbcsql18_18.2.2.1-1_amd64.deb` (752.6 KB) / `_arm64.deb` (687.4 KB) -- `msodbcsql18_18.3.1.1-1_amd64.deb` (756.5 KB) / `_arm64.deb` (689.8 KB) -- `msodbcsql18_18.3.2.1-1_amd64.deb` (755.9 KB) / `_arm64.deb` (690.5 KB) -- `msodbcsql18_18.3.3.1-1_amd64.deb` (755.1 KB) / `_arm64.deb` (689.3 KB) -- `msodbcsql18_18.4.1.1-1_amd64.deb` (755.2 KB) / `_arm64.deb` (689.5 KB) -- `msodbcsql18_18.5.1.1-1_amd64.deb` / `_arm64.deb` - Latest - -**Key Features:** -- Latest driver with modern security features -- TLS 1.2 and TLS 1.3 support -- Azure Active Directory authentication support -- Always Encrypted with secure enclaves support -- ARM64 support (great for Apple Silicon, Raspberry Pi, AWS Graviton) -- Supports SQL Server 2012 and later - -**Installation:** -```bash -sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 -``` - -## SQL Server Command-Line Tools - -### mssql-tools (Legacy) - -**Package Name:** `mssql-tools` -**Size:** 210.7 KB -**Tools Included:** `sqlcmd`, `bcp` - -**Installation:** -```bash -sudo ACCEPT_EULA=Y apt-get install -y mssql-tools -echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc -source ~/.bashrc -``` - -### mssql-tools18 (Current) - -**Package Name:** `mssql-tools18` -**Latest Version:** 18.x -**Tools Included:** `sqlcmd`, `bcp` (version 18) - -**Installation:** -```bash -sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18 -echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc -source ~/.bashrc -``` - -**Key Features:** -- Compatible with ODBC Driver 18 -- Modern encryption support -- Updated utilities for SQL Server management - -## Architecture Comparison - -| Package | amd64 | arm64 | armhf | -|---------|-------|-------|-------| -| msodbcsql17 | ✅ | ❌ | ❌ | -| msodbcsql18 | ✅ | ✅ | ❌ | -| mssql-tools | ✅ | ✅ | ✅ | -| mssql-tools18 | ✅ | ✅ | ✅ | - -## Other Notable Packages in the Repository - -The Microsoft Ubuntu 22.04 repository contains many other packages beyond ODBC drivers: - -### Container/Docker Tools -- **moby-engine** - Docker engine (22.1 MB) -- **moby-cli** - Docker CLI (12.5 MB) -- **moby-containerd** - Container runtime (25.4 MB, supports amd64, arm64, armhf) -- **moby-runc** - Container runtime (5.1 MB) -- **moby-compose** - Docker Compose (9.5 MB) -- **moby-buildx** - Docker build extensions (25.0 MB) - -### Security & Identity -- **microsoft-identity-broker** - Identity broker (79.8 MB) -- **microsoft-identity-diagnostics** - Identity diagnostics (3.7 MB) -- **mdatp** - Microsoft Defender for Endpoint (120.3 MB) -- **mde-netfilter** - Network filtering (25.5 kB) - -### Development Tools -- **msft-golang** - Microsoft's Go distribution (48.5 MB) -- **msopenjdk-11** - OpenJDK 11 (194.0 MB) -- **msopenjdk-17** - OpenJDK 17 (182.4 MB) -- **msopenjdk-21** - OpenJDK 21 (176.4 MB) -- **msopenjdk-25** - OpenJDK 25 (190.1 MB) - -### .NET Tools -- **netstandard-targeting-pack-2.1** - .NET Standard targeting pack (1.5 MB) -- **aspnetcore-runtime** - ASP.NET Core runtime -- **dotnet-sdk** - .NET SDK - -### Other Tools -- **microsoft-azurevpnclient** - Azure VPN client (12.6 MB) -- **msalsdk-dbusclient** - MSAL DBus client (9.3 kB) - -## Complete Installation Guide - -### Step 1: Add Microsoft Repository - -```bash -# Download and install the Microsoft repository GPG key -curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc - -# Add the Microsoft repository -curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list - -# Update package lists -sudo apt-get update -``` - -### Step 2: Install ODBC Driver 18 (Recommended) - -```bash -# Install ODBC Driver 18 -sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 - -# Optional: Install command-line tools -sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18 - -# Optional: Install development headers -sudo apt-get install -y unixodbc-dev - -# Add tools to PATH -echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc -source ~/.bashrc -``` - -### Step 3: Verify Installation - -```bash -# Check ODBC driver installation -odbcinst -q -d -n "ODBC Driver 18 for SQL Server" - -# Test sqlcmd (if installed) -sqlcmd -? -``` - -## Version Selection Guide - -### When to use ODBC Driver 17: -- Legacy applications requiring Driver 17 -- Compatibility with older SQL Server versions -- Only need x86_64 support -- Existing deployments using Driver 17 - -### When to use ODBC Driver 18: -- New deployments (recommended) -- Need ARM64 support (Apple Silicon, AWS Graviton, etc.) -- Require latest security features (TLS 1.3) -- Azure Active Directory authentication -- Always Encrypted with secure enclaves -- Better performance and modern standards - -## Connection String Examples - -### Using ODBC Driver 17 -``` -Driver={ODBC Driver 17 for SQL Server};Server=myserver.database.windows.net; -Database=mydb;Uid=myuser;Pwd=mypassword; -``` - -### Using ODBC Driver 18 -``` -Driver={ODBC Driver 18 for SQL Server};Server=myserver.database.windows.net; -Database=mydb;Uid=myuser;Pwd=mypassword;Encrypt=yes;TrustServerCertificate=no; -``` - -**Important Note:** Driver 18 requires explicit encryption settings. - Always include `Encrypt=yes` for secure connections. - -## Dependencies - -Both ODBC drivers require: -- **unixODBC** (>= 2.3.1) - ODBC Driver Manager -- **libc6** (>= 2.21) -- **libstdc++6** (>= 4.9) -- **libkrb5-3** - Kerberos authentication -- **openssl** - SSL/TLS support - -These dependencies are usually automatically installed by `apt`. - -## EULA Acceptance - -All Microsoft ODBC packages require EULA acceptance. You can: - -**Option 1:** Accept during installation -```bash -sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 -``` - -**Option 2:** Pre-accept for automated deployments (Driver 18.4+) -```bash -sudo mkdir -p /opt/microsoft/msodbcsql18 -sudo touch /opt/microsoft/msodbcsql18/ACCEPT_EULA -``` - -## Troubleshooting - -### Common Issues - -**Issue 1: Repository Not Found** -```bash -# Ensure the repository is properly added -cat /etc/apt/sources.list.d/mssql-release.list - -# Should contain: -# deb [arch=amd64,arm64,armhf signed-by=/etc/apt/trusted.gpg.d/microsoft.asc] - https://packages.microsoft.com/ubuntu/22.04/prod jammy main -``` - -**Issue 2: EULA Not Accepted** -```bash -# Error: "Package msodbcsql18 has no installation candidate" -# Solution: Set ACCEPT_EULA=Y environment variable -sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 -``` - -**Issue 3: Missing Dependencies** -```bash -# Install unixODBC if missing -sudo apt-get install -y unixodbc unixodbc-dev -``` - -**Issue 4: Driver Not Found by Application** -```bash -# List installed drivers -odbcinst -q -d - -# If driver not listed, check installation -dpkg -l | grep msodbcsql -``` - -## ARM64 Support - -ODBC Driver 18 provides ARM64 support, making it suitable for: -- **Apple Silicon Macs** (M1, M2, M3, M4) -- **AWS Graviton** instances -- **Azure ARM-based VMs** -- **Raspberry Pi 4/5** (64-bit OS) -- **Oracle Cloud ARM instances** - -Example ARM64 installation: -```bash -# On ARM64 Ubuntu 22.04 -sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18:arm64 -``` - -## Security Considerations - -1. **Always use encrypted connections** - Set `Encrypt=yes` in connection strings -2. **Validate certificates** - Use `TrustServerCertificate=no` in production -3. **Keep drivers updated** - Regularly update to latest versions for security patches -4. **Use strong authentication** - Implement Azure AD or certificate-based auth where possible -5. **Restrict network access** - Use firewalls and VPNs for database connections - -## References - -- [Microsoft ODBC Driver Documentation](https://learn.microsoft.com/en-us/sql/connect/odbc/) -- [Download ODBC Driver for SQL Server](https://learn.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server) -- [Installing the Linux Driver](https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server) -- [Release Notes](https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/release-notes-odbc-sql-server-linux-mac) - -## Summary - -The Microsoft Ubuntu 22.04 repository (`packages.microsoft.com/ubuntu/22.04/prod`) contains: - -**Primary ODBC Drivers:** -- **msodbcsql17** - Version 17.x (amd64 only) -- **msodbcsql18** - Version 18.x (amd64, arm64) - **Recommended** - -**Command-Line Tools:** -- **mssql-tools** - Legacy tools -- **mssql-tools18** - Current tools (recommended) - -**Additional Packages:** -- Container tools (Docker/Moby) -- Security tools (Defender, Identity) -- Development tools (Go, OpenJDK, .NET) -- Azure tools (VPN client) - -For most use cases, **ODBC Driver 18 (`msodbcsql18`)** is the recommended choice - due to its modern features, ARM64 support, and enhanced security capabilities. From 70b5ab5a158e70a713cd44fdf024af0b7c1e16cd Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Sun, 1 Feb 2026 11:01:44 +0000 Subject: [PATCH 12/18] Force Run msodbcsql17 Copilot Recommendation Test Force the workflow to actually run the msodbcsql17 instead of the msodbcsql18. --- .github/workflows/mssql.yml | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index 82ca255..2221752 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -61,11 +61,27 @@ jobs: curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /usr/share/keyrings/microsoft-prod.gpg > /dev/null curl -fsSL https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list sudo apt-get update - sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 || sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 + sudo ACCEPT_EULA=Y apt-get install -y msodbcsql${{ matrix.mssql.odbc-version }} + + - name: Verify ODBC driver installation + run: | + echo "=== Installed ODBC Drivers ===" + odbcinst -q -d + echo "" + echo "=== Expected Driver: ODBC Driver ${{ matrix.mssql.odbc-version }} for SQL Server ===" + if odbcinst -q -d -n "ODBC Driver ${{ matrix.mssql.odbc-version }} for SQL Server"; then + echo "✓ Correct driver version installed!" + else + echo "✗ Expected driver not found!" + exit 1 + fi + - name: Checkout uses: actions/checkout@v6 + - name: Create MS SQL Database run: docker exec -i mssql ${{ matrix.mssql.tools-path }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'CREATE DATABASE yiitest' + - name: Install PHP with extensions uses: shivammathur/setup-php@v2 with: @@ -74,8 +90,10 @@ jobs: ini-values: date.timezone='UTC' coverage: pcov tools: composer:v2, pecl + - name: Determine composer cache directory run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV + - name: Cache dependencies installed with composer uses: actions/cache@v4 with: @@ -83,10 +101,13 @@ jobs: key: php${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }} restore-keys: | php${{ matrix.php }}-composer- + - name: Update composer run: composer self-update + - name: Install dependencies with composer run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi + - name: Run tests with phpunit run: vendor/bin/phpunit --testsuite=Mssql --coverage-clover=coverage.xml --colors=always env: @@ -96,6 +117,7 @@ jobs: CYCLE_MSSQL_PORT: 1433 CYCLE_MSSQL_USER: SA CYCLE_MSSQL_PASSWORD: YourStrong!Passw0rd + - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 with: From d3c507760b030ac6a09ddccf9c0b511cc36a10ef Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Sun, 1 Feb 2026 11:10:31 +0000 Subject: [PATCH 13/18] Use an older package ubuntu-20.04 which has msodbcsql17 The later Ubuntu packages do not have msodbcsql17 --- .github/workflows/mssql.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index 2221752..2ece941 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -37,6 +37,7 @@ jobs: odbc-version: 17 flag: "" tools-path: "/opt/mssql-tools" + os: ubuntu-20.04 - server: 2019-latest odbc-version: 18 flag: "-C" From ceb02124c2456debe2b1f0dbe91344039a21f53c Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Sun, 1 Feb 2026 11:26:11 +0000 Subject: [PATCH 14/18] Jammy Jellyfish Ubuntu 22.04 msodbcsql17 --- .github/workflows/mssql.yml | 11 +- docs/microsoft-ubuntu-odbc-drivers.md | 332 ++++++++++++++++++++++++++ 2 files changed, 342 insertions(+), 1 deletion(-) create mode 100644 docs/microsoft-ubuntu-odbc-drivers.md diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index 2ece941..a0caaa6 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -37,7 +37,7 @@ jobs: odbc-version: 17 flag: "" tools-path: "/opt/mssql-tools" - os: ubuntu-20.04 + os: ubuntu-22.04 - server: 2019-latest odbc-version: 18 flag: "-C" @@ -57,6 +57,12 @@ jobs: - 1433:1433 options: --name=mssql --health-cmd="${{ matrix.mssql.tools-path }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'SELECT 1'" --health-interval=10s --health-timeout=5s --health-retries=3 steps: + - name: Show Ubuntu version + run: | + echo "=== Ubuntu Version ===" + lsb_release -a + echo "" + - name: Install ODBC driver. run: | curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /usr/share/keyrings/microsoft-prod.gpg > /dev/null @@ -76,6 +82,9 @@ jobs: echo "✗ Expected driver not found!" exit 1 fi + echo "" + echo "=== ODBC Driver Package Info ===" + dpkg -l | grep msodbcsql - name: Checkout uses: actions/checkout@v6 diff --git a/docs/microsoft-ubuntu-odbc-drivers.md b/docs/microsoft-ubuntu-odbc-drivers.md new file mode 100644 index 0000000..d482868 --- /dev/null +++ b/docs/microsoft-ubuntu-odbc-drivers.md @@ -0,0 +1,332 @@ +# ODBC Drivers in Microsoft's Ubuntu 22.04 Repository + +## Repository Information + +**Repository URL:** `deb [arch=amd64,arm64,armhf] + https://packages.microsoft.com/ubuntu/22.04/prod jammy main` + +This repository contains various Microsoft packages for Ubuntu 22.04 + (Jammy Jellyfish), supporting multiple architectures: amd64 (x86_64), + arm64 (ARM 64-bit), and armhf (ARM 32-bit hard float). + +## ODBC Drivers + +The repository contains two main ODBC driver packages for SQL Server: + +### 1. Microsoft ODBC Driver 17 for SQL Server (`msodbcsql17`) + +**Package Name:** `msodbcsql17` +**Architecture Support:** amd64 only +**Latest Version:** 17.10.6.1-1 (as of April 2024) + +**Available Versions:** +- `msodbcsql17_17.10.1.1-1_amd64.deb` (743.4 KB) +- `msodbcsql17_17.10.2.1-1_amd64.deb` (744.5 KB) +- `msodbcsql17_17.10.4.1-1_amd64.deb` (744.6 KB) +- `msodbcsql17_17.10.5.1-1_amd64.deb` (749.1 KB) +- `msodbcsql17_17.10.6.1-1_amd64.deb` (746.3 KB) - Latest + +**Key Features:** +- Supports SQL Server 2008 and later +- Production-ready driver +- Widely used in enterprise environments +- Limited to x86_64 architecture + +**Installation:** +```bash +sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 +``` + +### 2. Microsoft ODBC Driver 18 for SQL Server (`msodbcsql18`) + +**Package Name:** `msodbcsql18` +**Architecture Support:** amd64, arm64 +**Latest Version:** 18.5.1.1-1 (as of 2024) + +**Available Versions (Sample):** +- `msodbcsql18_18.1.1.1-1_amd64.deb` (751.6 KB) / `_arm64.deb` (685.7 KB) +- `msodbcsql18_18.1.2.1-1_amd64.deb` (752.0 KB) / `_arm64.deb` (686.5 KB) +- `msodbcsql18_18.2.1.1-1_amd64.deb` (752.8 KB) / `_arm64.deb` (687.3 KB) +- `msodbcsql18_18.2.2.1-1_amd64.deb` (752.6 KB) / `_arm64.deb` (687.4 KB) +- `msodbcsql18_18.3.1.1-1_amd64.deb` (756.5 KB) / `_arm64.deb` (689.8 KB) +- `msodbcsql18_18.3.2.1-1_amd64.deb` (755.9 KB) / `_arm64.deb` (690.5 KB) +- `msodbcsql18_18.3.3.1-1_amd64.deb` (755.1 KB) / `_arm64.deb` (689.3 KB) +- `msodbcsql18_18.4.1.1-1_amd64.deb` (755.2 KB) / `_arm64.deb` (689.5 KB) +- `msodbcsql18_18.5.1.1-1_amd64.deb` / `_arm64.deb` - Latest + +**Key Features:** +- Latest driver with modern security features +- TLS 1.2 and TLS 1.3 support +- Azure Active Directory authentication support +- Always Encrypted with secure enclaves support +- ARM64 support (great for Apple Silicon, Raspberry Pi, AWS Graviton) +- Supports SQL Server 2012 and later + +**Installation:** +```bash +sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 +``` + +## SQL Server Command-Line Tools + +### mssql-tools (Legacy) + +**Package Name:** `mssql-tools` +**Size:** 210.7 KB +**Tools Included:** `sqlcmd`, `bcp` + +**Installation:** +```bash +sudo ACCEPT_EULA=Y apt-get install -y mssql-tools +echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc +source ~/.bashrc +``` + +### mssql-tools18 (Current) + +**Package Name:** `mssql-tools18` +**Latest Version:** 18.x +**Tools Included:** `sqlcmd`, `bcp` (version 18) + +**Installation:** +```bash +sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18 +echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc +source ~/.bashrc +``` + +**Key Features:** +- Compatible with ODBC Driver 18 +- Modern encryption support +- Updated utilities for SQL Server management + +## Architecture Comparison + +| Package | amd64 | arm64 | armhf | +|---------|-------|-------|-------| +| msodbcsql17 | ✅ | ❌ | ❌ | +| msodbcsql18 | ✅ | ✅ | ❌ | +| mssql-tools | ✅ | ✅ | ✅ | +| mssql-tools18 | ✅ | ✅ | ✅ | + +## Other Notable Packages in the Repository + +The Microsoft Ubuntu 22.04 repository contains many other packages beyond ODBC drivers: + +### Container/Docker Tools +- **moby-engine** - Docker engine (22.1 MB) +- **moby-cli** - Docker CLI (12.5 MB) +- **moby-containerd** - Container runtime (25.4 MB, supports amd64, arm64, armhf) +- **moby-runc** - Container runtime (5.1 MB) +- **moby-compose** - Docker Compose (9.5 MB) +- **moby-buildx** - Docker build extensions (25.0 MB) + +### Security & Identity +- **microsoft-identity-broker** - Identity broker (79.8 MB) +- **microsoft-identity-diagnostics** - Identity diagnostics (3.7 MB) +- **mdatp** - Microsoft Defender for Endpoint (120.3 MB) +- **mde-netfilter** - Network filtering (25.5 kB) + +### Development Tools +- **msft-golang** - Microsoft's Go distribution (48.5 MB) +- **msopenjdk-11** - OpenJDK 11 (194.0 MB) +- **msopenjdk-17** - OpenJDK 17 (182.4 MB) +- **msopenjdk-21** - OpenJDK 21 (176.4 MB) +- **msopenjdk-25** - OpenJDK 25 (190.1 MB) + +### .NET Tools +- **netstandard-targeting-pack-2.1** - .NET Standard targeting pack (1.5 MB) +- **aspnetcore-runtime** - ASP.NET Core runtime +- **dotnet-sdk** - .NET SDK + +### Other Tools +- **microsoft-azurevpnclient** - Azure VPN client (12.6 MB) +- **msalsdk-dbusclient** - MSAL DBus client (9.3 kB) + +## Complete Installation Guide + +### Step 1: Add Microsoft Repository + +```bash +# Download and install the Microsoft repository GPG key +curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc + +# Add the Microsoft repository +curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list + +# Update package lists +sudo apt-get update +``` + +### Step 2: Install ODBC Driver 18 (Recommended) + +```bash +# Install ODBC Driver 18 +sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 + +# Optional: Install command-line tools +sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18 + +# Optional: Install development headers +sudo apt-get install -y unixodbc-dev + +# Add tools to PATH +echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc +source ~/.bashrc +``` + +### Step 3: Verify Installation + +```bash +# Check ODBC driver installation +odbcinst -q -d -n "ODBC Driver 18 for SQL Server" + +# Test sqlcmd (if installed) +sqlcmd -? +``` + +## Version Selection Guide + +### When to use ODBC Driver 17: +- Legacy applications requiring Driver 17 +- Compatibility with older SQL Server versions +- Only need x86_64 support +- Existing deployments using Driver 17 + +### When to use ODBC Driver 18: +- New deployments (recommended) +- Need ARM64 support (Apple Silicon, AWS Graviton, etc.) +- Require latest security features (TLS 1.3) +- Azure Active Directory authentication +- Always Encrypted with secure enclaves +- Better performance and modern standards + +## Connection String Examples + +### Using ODBC Driver 17 +``` +Driver={ODBC Driver 17 for SQL Server};Server=myserver.database.windows.net; +Database=mydb;Uid=myuser;Pwd=mypassword; +``` + +### Using ODBC Driver 18 +``` +Driver={ODBC Driver 18 for SQL Server};Server=myserver.database.windows.net; +Database=mydb;Uid=myuser;Pwd=mypassword;Encrypt=yes;TrustServerCertificate=no; +``` + +**Important Note:** Driver 18 requires explicit encryption settings. + Always include `Encrypt=yes` for secure connections. + +## Dependencies + +Both ODBC drivers require: +- **unixODBC** (>= 2.3.1) - ODBC Driver Manager +- **libc6** (>= 2.21) +- **libstdc++6** (>= 4.9) +- **libkrb5-3** - Kerberos authentication +- **openssl** - SSL/TLS support + +These dependencies are usually automatically installed by `apt`. + +## EULA Acceptance + +All Microsoft ODBC packages require EULA acceptance. You can: + +**Option 1:** Accept during installation +```bash +sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 +``` + +**Option 2:** Pre-accept for automated deployments (Driver 18.4+) +```bash +sudo mkdir -p /opt/microsoft/msodbcsql18 +sudo touch /opt/microsoft/msodbcsql18/ACCEPT_EULA +``` + +## Troubleshooting + +### Common Issues + +**Issue 1: Repository Not Found** +```bash +# Ensure the repository is properly added +cat /etc/apt/sources.list.d/mssql-release.list + +# Should contain: +# deb [arch=amd64,arm64,armhf signed-by=/etc/apt/trusted.gpg.d/microsoft.asc] + https://packages.microsoft.com/ubuntu/22.04/prod jammy main +``` + +**Issue 2: EULA Not Accepted** +```bash +# Error: "Package msodbcsql18 has no installation candidate" +# Solution: Set ACCEPT_EULA=Y environment variable +sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 +``` + +**Issue 3: Missing Dependencies** +```bash +# Install unixODBC if missing +sudo apt-get install -y unixodbc unixodbc-dev +``` + +**Issue 4: Driver Not Found by Application** +```bash +# List installed drivers +odbcinst -q -d + +# If driver not listed, check installation +dpkg -l | grep msodbcsql +``` + +## ARM64 Support + +ODBC Driver 18 provides ARM64 support, making it suitable for: +- **Apple Silicon Macs** (M1, M2, M3, M4) +- **AWS Graviton** instances +- **Azure ARM-based VMs** +- **Raspberry Pi 4/5** (64-bit OS) +- **Oracle Cloud ARM instances** + +Example ARM64 installation: +```bash +# On ARM64 Ubuntu 22.04 +sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18:arm64 +``` + +## Security Considerations + +1. **Always use encrypted connections** - Set `Encrypt=yes` in connection strings +2. **Validate certificates** - Use `TrustServerCertificate=no` in production +3. **Keep drivers updated** - Regularly update to latest versions for security patches +4. **Use strong authentication** - Implement Azure AD or certificate-based auth where possible +5. **Restrict network access** - Use firewalls and VPNs for database connections + +## References + +- [Microsoft ODBC Driver Documentation](https://learn.microsoft.com/en-us/sql/connect/odbc/) +- [Download ODBC Driver for SQL Server](https://learn.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server) +- [Installing the Linux Driver](https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server) +- [Release Notes](https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/release-notes-odbc-sql-server-linux-mac) + +## Summary + +The Microsoft Ubuntu 22.04 repository (`packages.microsoft.com/ubuntu/22.04/prod`) contains: + +**Primary ODBC Drivers:** +- **msodbcsql17** - Version 17.x (amd64 only) +- **msodbcsql18** - Version 18.x (amd64, arm64) - **Recommended** + +**Command-Line Tools:** +- **mssql-tools** - Legacy tools +- **mssql-tools18** - Current tools (recommended) + +**Additional Packages:** +- Container tools (Docker/Moby) +- Security tools (Defender, Identity) +- Development tools (Go, OpenJDK, .NET) +- Azure tools (VPN client) + +For most use cases, **ODBC Driver 18 (`msodbcsql18`)** is the recommended choice + due to its modern features, ARM64 support, and enhanced security capabilities. From f5436eebf9d128ba6c81fc58d8d571c5aa163bed Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Sun, 1 Feb 2026 17:51:58 +0000 Subject: [PATCH 15/18] Update mssql.yml --- .github/workflows/mssql.yml | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index a0caaa6..1f1b8a1 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -32,20 +32,28 @@ jobs: - 8.3 - 8.4 - 8.5 + mssql: - - server: 2017-latest - odbc-version: 17 - flag: "" - tools-path: "/opt/mssql-tools" - os: ubuntu-22.04 - - server: 2019-latest - odbc-version: 18 - flag: "-C" - tools-path: "/opt/mssql-tools18" - server: 2022-latest odbc-version: 18 flag: "-C" tools-path: "/opt/mssql-tools18" + + include: + - php: 8.3 + mssql: + server: 2017-latest + odbc-version: 17 + flag: "" + tools-path: "/opt/mssql-tools" + os: ubuntu-22.04 + - php: 8.3 + mssql: + server: 2019-latest + odbc-version: 18 + flag: "-C" + tools-path: "/opt/mssql-tools18" + services: mssql: image: mcr.microsoft.com/mssql/server:${{ matrix.mssql.server }} @@ -127,7 +135,7 @@ jobs: CYCLE_MSSQL_PORT: 1433 CYCLE_MSSQL_USER: SA CYCLE_MSSQL_PASSWORD: YourStrong!Passw0rd - + - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 with: From 12f49cce5f439c874a9d45b78e5f5b9fc392ca42 Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Sun, 1 Feb 2026 18:13:02 +0000 Subject: [PATCH 16/18] Update mssql.yml --- .github/workflows/mssql.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index 1f1b8a1..cc0b0c4 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -65,19 +65,13 @@ jobs: - 1433:1433 options: --name=mssql --health-cmd="${{ matrix.mssql.tools-path }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'SELECT 1'" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - - name: Show Ubuntu version - run: | - echo "=== Ubuntu Version ===" - lsb_release -a - echo "" - - name: Install ODBC driver. run: | curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /usr/share/keyrings/microsoft-prod.gpg > /dev/null curl -fsSL https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list sudo apt-get update sudo ACCEPT_EULA=Y apt-get install -y msodbcsql${{ matrix.mssql.odbc-version }} - + - name: Verify ODBC driver installation run: | echo "=== Installed ODBC Drivers ===" From 75a7ea3e9010d991f7a7d1dfb41fdbc88d291163 Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Sun, 1 Feb 2026 19:04:20 +0000 Subject: [PATCH 17/18] Update mssql.yml --- .github/workflows/mssql.yml | 2 +- docs/microsoft-ubuntu-odbc-drivers.md | 332 -------------------------- 2 files changed, 1 insertion(+), 333 deletions(-) delete mode 100644 docs/microsoft-ubuntu-odbc-drivers.md diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index cc0b0c4..06a3429 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -134,4 +134,4 @@ jobs: uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }} - files: ./coverage.xml \ No newline at end of file + files: ./coverage.xml diff --git a/docs/microsoft-ubuntu-odbc-drivers.md b/docs/microsoft-ubuntu-odbc-drivers.md deleted file mode 100644 index d482868..0000000 --- a/docs/microsoft-ubuntu-odbc-drivers.md +++ /dev/null @@ -1,332 +0,0 @@ -# ODBC Drivers in Microsoft's Ubuntu 22.04 Repository - -## Repository Information - -**Repository URL:** `deb [arch=amd64,arm64,armhf] - https://packages.microsoft.com/ubuntu/22.04/prod jammy main` - -This repository contains various Microsoft packages for Ubuntu 22.04 - (Jammy Jellyfish), supporting multiple architectures: amd64 (x86_64), - arm64 (ARM 64-bit), and armhf (ARM 32-bit hard float). - -## ODBC Drivers - -The repository contains two main ODBC driver packages for SQL Server: - -### 1. Microsoft ODBC Driver 17 for SQL Server (`msodbcsql17`) - -**Package Name:** `msodbcsql17` -**Architecture Support:** amd64 only -**Latest Version:** 17.10.6.1-1 (as of April 2024) - -**Available Versions:** -- `msodbcsql17_17.10.1.1-1_amd64.deb` (743.4 KB) -- `msodbcsql17_17.10.2.1-1_amd64.deb` (744.5 KB) -- `msodbcsql17_17.10.4.1-1_amd64.deb` (744.6 KB) -- `msodbcsql17_17.10.5.1-1_amd64.deb` (749.1 KB) -- `msodbcsql17_17.10.6.1-1_amd64.deb` (746.3 KB) - Latest - -**Key Features:** -- Supports SQL Server 2008 and later -- Production-ready driver -- Widely used in enterprise environments -- Limited to x86_64 architecture - -**Installation:** -```bash -sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 -``` - -### 2. Microsoft ODBC Driver 18 for SQL Server (`msodbcsql18`) - -**Package Name:** `msodbcsql18` -**Architecture Support:** amd64, arm64 -**Latest Version:** 18.5.1.1-1 (as of 2024) - -**Available Versions (Sample):** -- `msodbcsql18_18.1.1.1-1_amd64.deb` (751.6 KB) / `_arm64.deb` (685.7 KB) -- `msodbcsql18_18.1.2.1-1_amd64.deb` (752.0 KB) / `_arm64.deb` (686.5 KB) -- `msodbcsql18_18.2.1.1-1_amd64.deb` (752.8 KB) / `_arm64.deb` (687.3 KB) -- `msodbcsql18_18.2.2.1-1_amd64.deb` (752.6 KB) / `_arm64.deb` (687.4 KB) -- `msodbcsql18_18.3.1.1-1_amd64.deb` (756.5 KB) / `_arm64.deb` (689.8 KB) -- `msodbcsql18_18.3.2.1-1_amd64.deb` (755.9 KB) / `_arm64.deb` (690.5 KB) -- `msodbcsql18_18.3.3.1-1_amd64.deb` (755.1 KB) / `_arm64.deb` (689.3 KB) -- `msodbcsql18_18.4.1.1-1_amd64.deb` (755.2 KB) / `_arm64.deb` (689.5 KB) -- `msodbcsql18_18.5.1.1-1_amd64.deb` / `_arm64.deb` - Latest - -**Key Features:** -- Latest driver with modern security features -- TLS 1.2 and TLS 1.3 support -- Azure Active Directory authentication support -- Always Encrypted with secure enclaves support -- ARM64 support (great for Apple Silicon, Raspberry Pi, AWS Graviton) -- Supports SQL Server 2012 and later - -**Installation:** -```bash -sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 -``` - -## SQL Server Command-Line Tools - -### mssql-tools (Legacy) - -**Package Name:** `mssql-tools` -**Size:** 210.7 KB -**Tools Included:** `sqlcmd`, `bcp` - -**Installation:** -```bash -sudo ACCEPT_EULA=Y apt-get install -y mssql-tools -echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc -source ~/.bashrc -``` - -### mssql-tools18 (Current) - -**Package Name:** `mssql-tools18` -**Latest Version:** 18.x -**Tools Included:** `sqlcmd`, `bcp` (version 18) - -**Installation:** -```bash -sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18 -echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc -source ~/.bashrc -``` - -**Key Features:** -- Compatible with ODBC Driver 18 -- Modern encryption support -- Updated utilities for SQL Server management - -## Architecture Comparison - -| Package | amd64 | arm64 | armhf | -|---------|-------|-------|-------| -| msodbcsql17 | ✅ | ❌ | ❌ | -| msodbcsql18 | ✅ | ✅ | ❌ | -| mssql-tools | ✅ | ✅ | ✅ | -| mssql-tools18 | ✅ | ✅ | ✅ | - -## Other Notable Packages in the Repository - -The Microsoft Ubuntu 22.04 repository contains many other packages beyond ODBC drivers: - -### Container/Docker Tools -- **moby-engine** - Docker engine (22.1 MB) -- **moby-cli** - Docker CLI (12.5 MB) -- **moby-containerd** - Container runtime (25.4 MB, supports amd64, arm64, armhf) -- **moby-runc** - Container runtime (5.1 MB) -- **moby-compose** - Docker Compose (9.5 MB) -- **moby-buildx** - Docker build extensions (25.0 MB) - -### Security & Identity -- **microsoft-identity-broker** - Identity broker (79.8 MB) -- **microsoft-identity-diagnostics** - Identity diagnostics (3.7 MB) -- **mdatp** - Microsoft Defender for Endpoint (120.3 MB) -- **mde-netfilter** - Network filtering (25.5 kB) - -### Development Tools -- **msft-golang** - Microsoft's Go distribution (48.5 MB) -- **msopenjdk-11** - OpenJDK 11 (194.0 MB) -- **msopenjdk-17** - OpenJDK 17 (182.4 MB) -- **msopenjdk-21** - OpenJDK 21 (176.4 MB) -- **msopenjdk-25** - OpenJDK 25 (190.1 MB) - -### .NET Tools -- **netstandard-targeting-pack-2.1** - .NET Standard targeting pack (1.5 MB) -- **aspnetcore-runtime** - ASP.NET Core runtime -- **dotnet-sdk** - .NET SDK - -### Other Tools -- **microsoft-azurevpnclient** - Azure VPN client (12.6 MB) -- **msalsdk-dbusclient** - MSAL DBus client (9.3 kB) - -## Complete Installation Guide - -### Step 1: Add Microsoft Repository - -```bash -# Download and install the Microsoft repository GPG key -curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc - -# Add the Microsoft repository -curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list - -# Update package lists -sudo apt-get update -``` - -### Step 2: Install ODBC Driver 18 (Recommended) - -```bash -# Install ODBC Driver 18 -sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 - -# Optional: Install command-line tools -sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18 - -# Optional: Install development headers -sudo apt-get install -y unixodbc-dev - -# Add tools to PATH -echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc -source ~/.bashrc -``` - -### Step 3: Verify Installation - -```bash -# Check ODBC driver installation -odbcinst -q -d -n "ODBC Driver 18 for SQL Server" - -# Test sqlcmd (if installed) -sqlcmd -? -``` - -## Version Selection Guide - -### When to use ODBC Driver 17: -- Legacy applications requiring Driver 17 -- Compatibility with older SQL Server versions -- Only need x86_64 support -- Existing deployments using Driver 17 - -### When to use ODBC Driver 18: -- New deployments (recommended) -- Need ARM64 support (Apple Silicon, AWS Graviton, etc.) -- Require latest security features (TLS 1.3) -- Azure Active Directory authentication -- Always Encrypted with secure enclaves -- Better performance and modern standards - -## Connection String Examples - -### Using ODBC Driver 17 -``` -Driver={ODBC Driver 17 for SQL Server};Server=myserver.database.windows.net; -Database=mydb;Uid=myuser;Pwd=mypassword; -``` - -### Using ODBC Driver 18 -``` -Driver={ODBC Driver 18 for SQL Server};Server=myserver.database.windows.net; -Database=mydb;Uid=myuser;Pwd=mypassword;Encrypt=yes;TrustServerCertificate=no; -``` - -**Important Note:** Driver 18 requires explicit encryption settings. - Always include `Encrypt=yes` for secure connections. - -## Dependencies - -Both ODBC drivers require: -- **unixODBC** (>= 2.3.1) - ODBC Driver Manager -- **libc6** (>= 2.21) -- **libstdc++6** (>= 4.9) -- **libkrb5-3** - Kerberos authentication -- **openssl** - SSL/TLS support - -These dependencies are usually automatically installed by `apt`. - -## EULA Acceptance - -All Microsoft ODBC packages require EULA acceptance. You can: - -**Option 1:** Accept during installation -```bash -sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 -``` - -**Option 2:** Pre-accept for automated deployments (Driver 18.4+) -```bash -sudo mkdir -p /opt/microsoft/msodbcsql18 -sudo touch /opt/microsoft/msodbcsql18/ACCEPT_EULA -``` - -## Troubleshooting - -### Common Issues - -**Issue 1: Repository Not Found** -```bash -# Ensure the repository is properly added -cat /etc/apt/sources.list.d/mssql-release.list - -# Should contain: -# deb [arch=amd64,arm64,armhf signed-by=/etc/apt/trusted.gpg.d/microsoft.asc] - https://packages.microsoft.com/ubuntu/22.04/prod jammy main -``` - -**Issue 2: EULA Not Accepted** -```bash -# Error: "Package msodbcsql18 has no installation candidate" -# Solution: Set ACCEPT_EULA=Y environment variable -sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 -``` - -**Issue 3: Missing Dependencies** -```bash -# Install unixODBC if missing -sudo apt-get install -y unixodbc unixodbc-dev -``` - -**Issue 4: Driver Not Found by Application** -```bash -# List installed drivers -odbcinst -q -d - -# If driver not listed, check installation -dpkg -l | grep msodbcsql -``` - -## ARM64 Support - -ODBC Driver 18 provides ARM64 support, making it suitable for: -- **Apple Silicon Macs** (M1, M2, M3, M4) -- **AWS Graviton** instances -- **Azure ARM-based VMs** -- **Raspberry Pi 4/5** (64-bit OS) -- **Oracle Cloud ARM instances** - -Example ARM64 installation: -```bash -# On ARM64 Ubuntu 22.04 -sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18:arm64 -``` - -## Security Considerations - -1. **Always use encrypted connections** - Set `Encrypt=yes` in connection strings -2. **Validate certificates** - Use `TrustServerCertificate=no` in production -3. **Keep drivers updated** - Regularly update to latest versions for security patches -4. **Use strong authentication** - Implement Azure AD or certificate-based auth where possible -5. **Restrict network access** - Use firewalls and VPNs for database connections - -## References - -- [Microsoft ODBC Driver Documentation](https://learn.microsoft.com/en-us/sql/connect/odbc/) -- [Download ODBC Driver for SQL Server](https://learn.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server) -- [Installing the Linux Driver](https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server) -- [Release Notes](https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/release-notes-odbc-sql-server-linux-mac) - -## Summary - -The Microsoft Ubuntu 22.04 repository (`packages.microsoft.com/ubuntu/22.04/prod`) contains: - -**Primary ODBC Drivers:** -- **msodbcsql17** - Version 17.x (amd64 only) -- **msodbcsql18** - Version 18.x (amd64, arm64) - **Recommended** - -**Command-Line Tools:** -- **mssql-tools** - Legacy tools -- **mssql-tools18** - Current tools (recommended) - -**Additional Packages:** -- Container tools (Docker/Moby) -- Security tools (Defender, Identity) -- Development tools (Go, OpenJDK, .NET) -- Azure tools (VPN client) - -For most use cases, **ODBC Driver 18 (`msodbcsql18`)** is the recommended choice - due to its modern features, ARM64 support, and enhanced security capabilities. From 38a9dcb4f92e16de50fe2ca29fd4dddfa3522bc4 Mon Sep 17 00:00:00 2001 From: Ross Addison Date: Mon, 2 Feb 2026 15:49:54 +0000 Subject: [PATCH 18/18] Remove unnecessary spaces --- .github/workflows/mssql.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index 06a3429..065ed44 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -87,13 +87,13 @@ jobs: echo "" echo "=== ODBC Driver Package Info ===" dpkg -l | grep msodbcsql - + - name: Checkout uses: actions/checkout@v6 - + - name: Create MS SQL Database run: docker exec -i mssql ${{ matrix.mssql.tools-path }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'CREATE DATABASE yiitest' - + - name: Install PHP with extensions uses: shivammathur/setup-php@v2 with: @@ -102,10 +102,10 @@ jobs: ini-values: date.timezone='UTC' coverage: pcov tools: composer:v2, pecl - + - name: Determine composer cache directory run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV - + - name: Cache dependencies installed with composer uses: actions/cache@v4 with: @@ -113,13 +113,13 @@ jobs: key: php${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }} restore-keys: | php${{ matrix.php }}-composer- - + - name: Update composer run: composer self-update - + - name: Install dependencies with composer run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi - + - name: Run tests with phpunit run: vendor/bin/phpunit --testsuite=Mssql --coverage-clover=coverage.xml --colors=always env: