Установка MS SQL 2016 на Debian 8.6 x64
MS SQL 2016 презентован 1 июня 2016. Одним из самых значимых нововведением данного выпуска является то, что MS SQL 2016 можно установить на Linux, пусть пока и не RTM-версию. Официальное название MS SQL - SQL Server vNext CTP1. На момент написания статьи официально MS SQL можно установить на Red Hat и Ubuntu (а так же в контейнер Docker). Но так как я в своей работе в основном использую Debian, то эта статья и будет посвящена установке на Debian, на котором основана Ubuntu. Главное различие (для MS SQL) в том, что стабильный Denian 8.6 использует ядро 3.16, в то время как стабильная Ubuntu 16.04 использует ядро 4.4. Debian 9 будет использовать ядро 4.8 и я ожидаю, что именно Debian 9 будет заявлен для поддержки установки MS SQL. И так установка на Debain 8.6 c ядром 3.16 (в конце статьи будет для обновлённого ядра 4.7):
Исходные данные:
- виртуальная машина на Proxmox 4.2-15:
Intel(R) Xeon(R) CPU E5-2470 v2 @ 2.40GHz
MemTotal: 5095 MB
Disk /dev/vda: 128 GiB,
Description: Debian GNU/Linux 8.6 (jessie)
Linux 3.16.0-4-amd64 x86_64
Для начала необходимо подготовить систему для установки пакетов и зависимостей. Т.к. официально пакета MS SQL для Debian нет, то будем использовать репозиторий от Ubuntu. Все действия производятся от пользователя root, в противном случае команды запускаются через sudo (как описано в официальной документации по установке MS SQL на Linux Ubuntu)
echo "deb http://de.archive.ubuntu.com/ubuntu xenial main" >> /etc/apt/sources.list
echo "deb http://ftp.de.debian.org/debian jessie-backports main" >> /etc/apt/sources.list
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32 40976EAF437D05B5
Установим минимальные инструменты и зависимости для успешной установки MS SQL:
aptitude install curl apt-transport-https sudo
Установка именно нужных версий является главной сложностью в установке MS SQL. Так, например, после обновления до самой последней (нестабильной) версии openSSL из репозитория Debian SID, установщик MS SQL заругается, что openSSL слишком новый:
mssql-server : Depends: openssl (<= 1.1.0) but 1.1.0c-2 is installed.
Добавляем репозиторий Microsoft:
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server.list | tee /etc/apt/sources.list.d/mssql-server.list
Можно также добавить репозиторий и для инструментов MS SQL, но у меня пока не получилось их установить из-за большого количества зависимостей...
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | tee /etc/apt/sources.list.d/msprod.list
Обновляем список пактов:
aptitude update
Обновляем первый пакет OpenSSL: нужно три раза ответить N, и один раз Y. Ибо первые три предложенных решения не предлагают обновить OpenSSL:
aptitude install libssl-dev=1.0.2j-1~bpo8+1
Keep the following packages at their current version:
1) libssl-dev [Not Installed]
Accept this solution? [Y/n/q/?] n
Install the following packages:
1) libssl-dev [1.0.1t-1+deb8u5 (stable)]
Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:
Install the following packages:
1) libssl-dev [1.0.1t-1+deb8u3 (stable)]
Downgrade the following packages:
2) libssl1.0.0 [1.0.1t-1+deb8u5 (now, stable) -> 1.0.1t-1+deb8u3 (stable)]
Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:
Upgrade the following packages:
1) libssl1.0.0 [1.0.1t-1+deb8u5 (now, stable) -> 1.0.2j-1~bpo8+1 (jessie-backports)]
Accept this solution? [Y/n/q/?] Y
Но на самом деле это ещё не всё, даже если версия кажется обновлённой:
openssl version
OpenSSL 1.0.1t 3 May 2016 (Library: OpenSSL 1.0.2j 26 Sep 2016)
Устанавливаем MS SQL, где так же на первое решение отвечаем N, и только потом Y. Таким способом и закончится обновление OpenSSL:
aptitude install mssql-server
The following packages have unmet dependencies:
mssql-server : Depends: openssl (>= 1.0.2) but 1.0.1t-1+deb8u5 is installed.
The following actions will resolve these dependencies:
Keep the following packages at their current version:
1) mssql-server [Not Installed]
Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:
Upgrade the following packages:
1) openssl [1.0.1t-1+deb8u5 (now, stable) -> 1.0.2j-1~bpo8+1 (jessie-backports)]
Accept this solution? [Y/n/q/?] Y
Get: 9 http://ftp.de.debian.org/debian/ jessie/main libc6-dbg amd64 2.19-18+deb8u6 [3,431 kB]
28% [3 mssql-server 34.3 MB/144 MB 24%] 1,850 kB/s 59s
Setting up mssql-server (14.0.1.246-6) ...
+-------------------------------------------------------------------+
| Please run /opt/mssql/bin/sqlservr-setup to complete the setup of |
| Microsoft(R) SQL Server(R). |
+-------------------------------------------------------------------+
Processing triggers for libc-bin (2.19-18+deb8u6) ...
Current status: 0 updates [-1].
Запускаем конфигуратор начальной установки (утилита SUDO должна быть установлена, даже если установка происходит как у меня от root), который предложит принять лицензионное соглашение и ввести пароль для SA (минимум 8 знаков), запустить демон, настроить демон на автостарт при старте системы:
/opt/mssql/bin/sqlservr-setup
Microsoft(R) SQL Server(R) Setup
You can abort setup at anytime by pressing Ctrl-C. Start this program
with the --help option for information about running it in unattended mode.
The license terms for this product can be downloaded from
http://go.microsoft.com/fwlink/?LinkId=746388 and found
in /usr/share/doc/mssql-server/LICENSE.TXT.
Do you accept the license terms? If so, please type "YES": YES
Please enter a password for the system administrator (SA) account:
Please confirm the password for the system administrator (SA) account:
Setting system administrator (SA) account password...
Do you wish to start the SQL Server service now? [y/n]: y
Do you wish to enable SQL Server to start on boot? [y/n]: y
Created symlink from /etc/systemd/system/multi-user.target.wants/mssql-server.service to /lib/systemd/system/mssql-server.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/mssql-server-telemetry.service to /lib/systemd/system/mssql-server-telemetry.service.
Setup completed successfully.
Перезагружаем сервер и проверяем работу MS SQL:
ps aux | grep sql
mssql 453 0.0 0.3 58048 16016 ? Ssl 15:40 0:00 /opt/mssql/bin/sqlservr
mssql 455 0.0 0.4 114696 21388 ? Ssl 15:40 0:00 /opt/mssql/bin/sqlservr-telemetry /var/opt/mssql/.system
mssql 734 1.4 12.1 2885848 619072 ? Sl 15:40 1:34 /opt/mssql/bin/sqlservr
root 2060 0.0 0.0 12932 972 pts/0 S+ 17:28 0:00 grep sql
Подключаемся к MS SQL из SQL Server Management Studio 16:
Installation of MS SQL 2016 on Linux Debian 8.6 x64 kernel 3.16
Installation von MS SQL 2016 auf dem Linux Debian 8.6 x64 kernel 3.16
15.12.2016
Для Debian 8.6 x64 с ядром 4.7.
Исходные данные:
- виртуальная машина на Proxmox 4.2-15:
Intel(R) Xeon(R) CPU E5-2470 v2 @ 2.40GHz
MemTotal: 5095 MB
Disk /dev/vda: 128 GiB,
Description: Debian GNU/Linux 8.6 (jessie)
Linux 4.7.0-0.bpo.1-amd64 x86_64
После обновления ядра версия OpenSSL станет удовлетворять требованиям MS SQL 2016:
openssl version
OpenSSL 1.0.2g-fips 1 Mar 2016
Установка MS SQL 2016:
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server.list | tee /etc/apt/sources.list.d/mssql-server.list
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | tee /etc/apt/sources.list.d/msprod.list
aptitude update
aptitude install curl apt-transport-https sudo
aptitude install mssql-server
The following NEW packages will be installed:
gcc-5-base{a} gdb{a} gdbserver{a} libbabeltrace-ctf1{a} libbabeltrace1{a} libc++1{a} libc6-dbg{a} libcc1-0{a} libjemalloc1{a} libmpdec2{a}
libpython3.5{a} libpython3.5-minimal{a} libpython3.5-stdlib{a} libunwind8{a} mssql-server
The following packages will be upgraded:
libc-bin libc6 libncurses5 libncursesw5 libssl1.0.0 libstdc++6 libtinfo5 locales openssl
9 packages upgraded, 15 newly installed, 0 to remove and 299 not upgraded.
Need to get 164 MB of archives. After unpacking 736 MB will be used.
Do you want to continue? [Y/n/?] Y
33% [4 mssql-server 35.0 MB/145 MB 24%] 1,175 kB/s 1min 33s
Selecting previously unselected package mssql-server.
Preparing to unpack .../mssql-server_14.0.100.187-1_amd64.deb ...
Unpacking mssql-server (14.0.100.187-1) ...
Setting up mssql-server (14.0.100.187-1) ...
+-------------------------------------------------------------------+
| Please run /opt/mssql/bin/sqlservr-setup to complete the setup of |
| Microsoft(R) SQL Server(R). |
+-------------------------------------------------------------------+
Processing triggers for libc-bin (2.23-0ubuntu3) ...
Current status: 299 updates [-9].
/opt/mssql/bin/sqlservr-setup
Microsoft(R) SQL Server(R) Setup
You can abort setup at anytime by pressing Ctrl-C. Start this program
with the --help option for information about running it in unattendedmode.
The license terms for this product can be downloaded from
http://go.microsoft.com/fwlink/?LinkId=746388 and found
in /usr/share/doc/mssql-server/LICENSE.TXT.
Do you accept the license terms? If so, please type "YES": YES
Please enter a password for the system administrator (SA) account:
Please confirm the password for the system administrator (SA) account:
Setting system administrator (SA) account password...
Do you wish to start the SQL Server service now? [y/n]: y
Do you wish to enable SQL Server to start on boot? [y/n]: y
Created symlink from /etc/systemd/system/multi-user.target.wants/mssql-server.service to /lib/systemd/system/mssql-server.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/mssql-server-telemetry.service to /lib/systemd/system/mssql-server-telemetry.service.
Setup completed successfully.
При этом, стоит отметить, что установилась более новая версия MS SQL 2016:
aptitude versions mssql-server
Package mssql-server:
p 14.0.1.246-6 xenial 500
i 14.0.100.187-1 xenial 500
Так же можно проверить подключение из PowerShell двумя вариантами. Для выполнения Invoke-sqlcmd на компьютере должен быть установлен SSMS:
Invoke-Sqlcmd -Query "SELECT name, database_id, create_date FROM sys.databases;" -ServerInstance "192.168.0.1" -Username SA -Password ********
$SQLServer = "192.168.0.1"
$uid ="SA"
$pwd = "********"
$SqlQuery = "SELECT name, database_id, create_date FROM sys.databases;"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; User ID = $uid; Password = $pwd;"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$DataSet.Tables[0]
Вывод:
name database_id create_date
---- ----------- -----------
master 1 08.04.2003 09:13:36
tempdb 2 17.12.2016 12:25:44
model 3 08.04.2003 09:13:36
msdb 4 10.12.2016 04:10:15
Installation of MS SQL 2016 on Linux Debian 8.6 x64 kernel 4.7
Installation von MS SQL 2016 auf dem Linux Debian 8.6 x64 kernel 4.7
16.12.2016