Установка 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